Privacy Policy Cookie Policy Terms and Conditions Netfilter/iptables - Wikipedia

Netfilter/iptables

Da Wikipedia, l'enciclopedia libera.

netfilter è un componente del Sistema Operativo Linux che permette l'intercettazione e manipolazione dei paccheti che attraversano un calcolatore che esegue linux. Netfilter permette di realizzare alcune funzionalità di rete avanzate come la realizzazione di firewall basata sul filtraggio dei pacchetti e stateful, o configurazioni anche complesse di NAT, un sistema di traduzione automatica degli indirizzi IP, tra cui la condivisione di un unica connessione Internet tra diversi computer di una rete locale, o ancora la manipolazione dei pacchetti in transito.

iptables è il programma che permette agli amministratori di sistema di configurare netfilter, definendo le regole per i filtri di rete e il reindirizzamento NAT. Spesso con il termine iptables ci si riferisce all'intera infrastruttura, incluso netfilter, che implementa le funzionalità messe a disposizione dal programma.

iptables è un componente standard di tutte le moderne distribuzioni di Linux. Esso fu introdotto nella versione principale del sistema operativo nel marzo del 2000, durante lo sviluppo della versione 2.4. Nella versione 2.2 si usava un sistema alternativo denominato ipchains, che a sua volta sostituì il sistema ipfwadm, usato nella versione 2.0.

netfilter trova applicazione sia in calcolatori che vengono usati come host (hanno una sola interfaccia di rete, e non inoltrano pacchetti da un'interfaccia ad un'altra) che per realizzare dei veri e propri router basati su linux.

Indice

[modifica] Il sistema netfilter

I dati che transitano in una rete sono divisi in pacchetti di dimensioni prefissate, con netfilter si è in grado di controllare il contenuto di ogni singolo pacchetto e definire le azioni da compiere in base alle caratteristiche dei pacchetti ricevuti. Ad esempio, si può definire una regola che impedisce la ricezione di pacchetti provenienti da un particolare indirizzo o che utilizzano una determinata porta per effettuare la connessione.

Il sistema netfilter permette agli amministratori di sistema di definire le regole per la gestione di questi pacchetti di dati. Le regole sono raggruppate in catene (chain), le catene a loro volta sono raggruppate in tabelle (tables). Ogni tabella definisce un tipo diverso di operazioni che è possibile effettuare sui pacchetti; ogni catena definisce come vengono trattati i pacchetti nelle diverse fasi della loro elaborazione.

Le catene sono una forma di ACL: Ogni regola è costituita da due parti: la specifica delle caratteristiche che un pacchetto deve avere affinché la regola stessa venga applicata, o match; e un obiettivo o politica, che indica cosa fare quando il pacchetto rispetta le caratteristiche indicate (target). A ciascuna catena è anche associata una una politica di default. Le caratteristiche più di frequente utilizzate per costruire delle regole sono l'indirizzo di partenza o di destinazione del pacchetto, e il numero di porta della connessione. Ogni pacchetto di rete che arriva o parte dal computer attraversa almeno una catena, e ogni regola della catena controlla se il pacchetto ne rispetta la specifica. Se questo accade, il pacchetto seguirà il comportamento descritto nell'obiettivo della regola, e le regole successive della catena verranno ignorate. Se il pacchetto raggiunge la fine della catena senza essere processato da nessuna regola, la politica della catena determina cosa fare del pacchetto.

Uno dei possibili obiettivi è il collegamento a un'altra catena. In questo caso, il pacchetto ricomincia ad essere valutato dalle regole della nuova catena, senza limiti di concatenazione. Una regola può semplicemente essere un collegamento a una catena. Solo se il pacchetto attraversa l'intera catena collegata esso continuerà nella catena principale.

In ogni tabella esistono alcune catene predefinite, e l'utente può creare delle catene personalizzate.

[modifica] Le tabelle

Esistono tre tabelle prestabilite, ognuna delle quali contiene delle catene predefinite. Esiste anche la possibilità di creare altre tabelle. L'amministratore può creare e cancellare le catene definite dall'utente in qualsiasi tabella. Inizialmente, tutte le catene sono vuote e hanno una politica che permette a tutti i pacchetti di passare senza essere bloccati o alterati in alcun modo, esse vanno poi modificate a seconda delle proprie esigenze. Le tabelle predefinite sono le seguenti:

  • tabella filtro (filter): questa tabella è responsabile del filtraggio dei pacchetti, permette cioè di bloccarli o di farli passare. Ogni pacchetto passa attraverso la tabella filtro. Essa contiene le seguenti catene predefinite, e tutti i pacchetti passano attraverso una di esse:
    • catena INPUT: tutti i pacchetti destinati al sistema passano attraverso questa catena.
    • catena OUTPUT: tutti i pacchetti creati dal sistema passano attraverso questa catena.
    • catena FORWARD: tutti i pacchetti che hanno come destinazione finale un altro sistema e che non sono stati generati dal sistema stesso, cioè tutti i pacchetti che vengono meramente instradati dal sistema, passano attraverso questa catena.
  • tabella nat: questa tabella è responsabile dell'impostazione delle regole per la modifica degli indirizzi dei pacchetti. Il primo pacchetto di una connessione passa attraverso questa tabella, e il risultato del passaggio del primo pacchetto determina come tutti gli altri pacchetti della stessa connessione verranno modificati. La tabella nat contiene le seguenti catene predefinite:
    • catena PREROUTING: passano attraverso questa catena i pacchetti in entrata, il passaggio avviene prima che la locale tabella di routing venga consultata per effettuare l'instradamento. Essa è usata per il NAT sulla destinazione o DNAT.
    • catena POSTROUTING: passano attraverso questa catena i pacchetti in uscita dopo che la locale tabella di routing sia stata consultata. Usata per il NAT sulla sorgente o SNAT.
    • catena OUTPUT: permette un DNAT limitato sui pacchetti generati localmente.
  • tabella mangle: questa tabella è responsabile delle modifiche alle opzioni dei pacchetti, come ad esempio l'opzione che determina la qualità del servizio. Tutti i pacchetti passano attraverso questa tabella. Essa contiene tutte le catene predefinite:
    • catena PREROUTING: esamina tutti i pacchetti che in qualche modo entrano nel sistema. Questo processo avviene prima che il routing decida se il pacchetto debba essere inoltrato (catena FORWARD) o se sia destinato al sistema (catena INPUT).
    • catena INPUT: tutti i pacchetti destinati al sistema passano per questa catena.
    • catena FORWARD: tutti i pacchetti che vengono instradati dal sistema ma di cui il sistema non è ne sorgente iniziale ne destinazione finale, passano per questa catena.
    • catena OUTPUT: tutti i pacchetti generati dal sistema passano per questa catena.
    • catena POSTROUTING: Tutti i pacchetti che lasciano il sistema, sia quelli in OUTPUT sia quelli in FORWARD, passano poi per questa catena.

[modifica] Obiettivi delle regole

L'obiettivo di una regola è l'azione da compiere se un pacchetto rispetta la regola. Esso può essere sia il nome di una catena definita dall'utente sia uno degli obiettivi predefiniti. Gli obiettivi predefiniti sono quattro: ACCEPT, DROP, QUEUE e RETURN. Quando l'obiettivo è il nome di una catena definita dall'utente, il pacchetto viene fatto passare per quella catena, un po come avviene per una chiamata a funzione in un linguaggio di programmazione. Se il pacchetto non viene processato da nessuna regola della catena, in quanto non rispetta la specifica di nessuna delle sue regole, esso ritorna ad essere processato dalla catena di partenza.

Ogni obiettivo predefinito indica un'azione da compiere sul pacchetto:

ACCEPT — accetta
Questo obiettivo comporta che netfilter accetterà il pacchetto. Il risultato pratico di questa accettazione dipende da quale catena sta processando il pacchetto. Per esempio, un pacchetto che è accettato dalla catena INPUT può essere ricevuto dal sistema, un pacchetto accettato dalla catena OUTPUT può essere inoltrato dal sistema, e un pacchetto accettato dalla catena FORWARD potrà essere smistato dal sistema a un'altra destinazione.
DROP — scarta
Questo obiettivo determina che il pacchetto venga scartato senza effettuare ulteriori operazioni su di esso. Il pacchetto scomparirà senza che alcuna indicazione del fatto che sia stato scartato venga fornita all'applicazione o al sistema che ha inviato il pacchetto. Il mittente del pacchetto vedrà semplicemente scadere il tempo a disposizione per la comunicazione, e non potrà distinguere tra il caso in cui il pacchetto è stato ricevuto e poi scartato e il caso in cui il pacchetto non è mai stato ricevuto. Questo comportamento aumenta la sicurezza di un sistema in quanto un potenziale nemico non potrà neppure determinare se il sistema esiste effettivamente.
QUEUE — metti in coda
Questo obiettivo fa in modo che il pacchetto sia inserito in una coda, in modo che possa essere processato da una applicazione. La libreria libipq, facente parte del progetto netfilter/iptables, permette ad una applicazione di modificare i pacchetti inseriti in una coda. Se non vi è nessuna applicazione che processa i messaggi in coda, questo obiettivo sarà equivalente all'obiettivo DROP.
RETURN — ritorna
Questo obiettivo ha lo stesso effetto di raggiungere la fine della catena: per una regola nella catena predefinita, viene eseguita la politica della catena; per una regola definita dall'utente, l'attraversamento delle regole continua nella catena chiamante, subito dopo il punto in cui è presente la catena che ha causato il RETURN, analogamente a come accade nella chiamate a funzione.

Esistono molti obiettivi aggiuntivi disponibili. Alcuni dei più comuni sono:

REJECT — rifiuta
Questo obiettivo ha lo stesso effetto di DROP con l'eccezione che viene spedito un pacchetto di errore icmp al mittente del pacchetto. Esso è principalmente utilizzato nelle catene INPUT o FORWARD della tabella filtro. Un pacchetto di errore può indicare esplicitamente che il pacchetto è stato filtrato.
LOG — annota
Con questo obiettivo il pacchetto viene annotato, cioè la ricezione del pacchetto viene annotata inviando un messaggio sul syslog. Questo obiettivo può essere utile per permettere all'amministratore di sapere quali pacchetti vengono filtrati o allo sviluppatore per controllare il corretto funzionamento del sistema.
DNAT
Questo obiettivo comporta la riscrittura dell'indirizzo di destinazione del pacchetto, per permettere il NAT sulla destinazione. Questo obiettivo è valido esclusivamente nelle catene OUTPUT e PREROUTING della tabella nat. La decisione effettuata sul primo pacchetto verrà ripetuta per tutti i pacchetti della connessione, e i pacchetti di risposta avranno l'indirizzo sorgente originario.
SNAT
Questo obiettivo comporta la riscrittura dell'indirizzo del mittente del pacchetto, per permettere il NAT sulla sorgente. Questo obiettivo è valido solo nella catena POSTROUTING della tabella nat, e come DNAT il suo risultato è ripetuto per tutti i pacchetti della stessa connessione.
MASQUERADE — maschera
Questa è una forma speciale di SNAT per indirizzi IP dinamici, come quelli forniti da molti Internet Service Provider per i loro utenti.

[modifica] Monitoraggio delle connessioni

Una delle funzionalità più importanti offerte da netfilter è la possibilità di identificare i pacchetti facenti parte di una stessa connessione. Questo permette di creare delle regole basate sulla relazione che un pacchetto ha nei confronti della connessione a cui appartiene. Il NAT si basa su queste informazioni per tradurre allo stesso modo gli indirizzi dei pacchetti di una stessa connessione, e iptables usa queste informazioni per realizzare firewall avanzati.

netfilter assegna ad ogni pacchetto uno dei seguenti stati:

  • NEW (NUOVO), il pacchetto inizia una nuova connessione;
  • ESTABLISHED (STABILITO), il pacchetto fa parte di una connessione già stabilita;
  • RELATED (IN RELAZIONE), il pacchetto ha qualche relazione con la connessione ma non ne fa realmente parte;
  • INVALID (INVALIDO), il pacchetto non fa parte di alcuna connessione e non è possiblie creare una nuova connessione.

Un caso comune è che il primo pacchetto visto dal firewall viene classificato come NEW, la risposta viene classificata come ESTABLISHED e un messaggio di errore, ad esempio un errore ICMP, come RELATED. Un errore ICMP che non appartiene a nessuna connessione può essere classificato come INVALID.

Inoltre, attraverso l'uso di moduli aggiuntivi, il monitoraggio della connessione può ottenere la capacita di relazionare tra loro le connessioni che fanno parte di una stessa sessione a livello applicativo. Per esempio, il protocollo FTP stabilisce due tipi di connessione, una per le informazioni di controllo e un'altra per i dati veri e propri. Quando il modulo ip_conntrack_ftp viene caricato nel sistema, il primo pacchetto di una connessione dati sarà classificato come RELATED invice di NEW, in quanto la connessione di controllo è stata già stabilita e la connessione dati ne è una prosecuzione logicamente. Per fare questo, il modulo ip_conntrack_ftp deve analizzare il contenuto della connessione di controllo, per identificare le caratteristiche delle connessioni dati.

netfilter può utilizzare l'informazione sullo stato dei pacchetti per creare filtri più potenti e più semplici da definire. Per esempio, una regola può lasciar passare i pacchetti NEW solo dall'interno del firewall verso la rete esterna, e i pacchetti RELATED e ESTABLISHED in entrambe le direzioni. Questo permette di inviare delle repliche a connessioni create dall'interno, ma non permette di creare nuove connessioni dall'esterno, il che aumenta la sicurezza di un sistema perché gli attacchi che vengono dall'esterno non sono in grado di stabilire connessioni. Inoltre, se una sessione FTP crea una connessione dati dall'esterno verso l'interno, la connessione sarà accettata in quanto la connessione dati è in relazione con la connessione di controllo che è stata creata dall'interno verso l'esterno, e quindi i paccheti della connessione dati saranno classificati come RELATED e non come NEW.

[modifica] Il programma iptables

iptables è un'applicazione che permette agli amministratori di configurare le tabelle, le catene e le regole di netfilter. Dato che iptables modifica il funzionamento del sistema operativo, per essere eseguito è necessario entrare nel sistema come utente amministratore, che nei sistemi di tipo Unix è l'utente root, il quale ha i permessi per compiere qualsiasi tipo di operazione. Sulla maggior parte dei sistemi Linux, iptables è installato come /sbin/iptables. La lista completa delle funzionalità del comando è consultabile nella relativa documentazione, che può essere visualizzata con il comando "man iptables".

[modifica] Opzioni generali

Tutte le forme di invocazione di iptables supportano le seguenti opzioni:

-t tabella
Applica il comando alla tabella specificata. Quando questa opzione è omessa, il comando si applica alla tabella filtro.
-v
Fornisce una quantità maggiore di informazioni.
-n
Usa sempre i numeri per specificare gli indirizzi IP e le porte, invece di usare i nomi del DNS e i nomi dei protocolli.
--line-numbers
Nell'elenco delle regole, aggiunge i numeri di riga all'inizio di ogni regola.

[modifica] Specifica delle regole

Molti dei comandi di iptables richiedono la specifica della regola su cui si vuole operare. Una specifica è costituita da un insieme di caratteristiche dei pacchetti che devono essere gestite dalla regola stessa. Una regola è identificata dalla sua specifica dall'obiettivo, cioè l'azione da eseguire quando un pacchetto rispetta la regola. Alcune delle opzioni più importanti per specificare una regola sono le seguenti:

-j obiettivo
--jump obiettivo
Specifica l'obiettivo di una regola. L'obiettivo può essere sia una catena definita dall'utente, uno degli obiettivi predefiniti (ACCEPT, DROP, QUEUE, o RETURN) o uno degli obiettivi aggiuntivi, come ad esempio REJECT o LOG.

Se questa opzione è omessa in una regola, quest'ultima non modifica il destino del pacchetto, tuttavia il contatore della regola verrà ugualmente incrementato.

-p [!] protocollo
--protocol [!] protocollo
Specifica il nome del protocollo dei pacchetti. Se avanti al nome del protocollo è presente il carattere '!' si specificano tutti i pacchetti che non usano quel protocollo. I possibili nomi di protocollo sono ip, icmp, udp e tcp.
-s [!] sorgente[/prefisso]
--source [!] sorgente[/prefisso]
Specifica i pacchetti provenienti da una determinata sorgente. La sorgente può essere specificata con un indirizzo IP, un indirizzo IP con associato un prefisso di rete, o un nome del DNS. Se '!' precede l'indirizzo, si specificano tutti i pacchetti che non provengono da quell'indirizzo
-d [!] destinazione[/prefisso]
--destination [!] destinazione[/prefisso]
Specifica i pacchetti che hanno una determinata destinazione. La specifica dell'indirizzo di destinazione segue regole analoghe alla specifica dell'indirizzo sorgente.

[modifica] Invocazione di iptables

Le operazioni messe a disposizione dal programma iptables sono invocabili specificando una serie di parametri sulla riga di comando. I termini tra parentesi graffe, {...|...|...}, sono necessari, ma solo uno di essi può essere inserito in una singola invocazione del comando. I termini tra parentesi quandre, [...], sono opzionali.

iptables { -A | --append | -D | --delete } nome_catena nome_regola [ opzioni ]

Con queste opzioni si può aggiungere o cancellare una regola dalla catena specificata. Le opzioni -A e --append permettono di aggiungere, -D e --delete di cancellare. Ad esempio, per aggiungere una regola alla catena INPUT nella tabella filtro per scartare tutti i pacchetti UDP, si può usare il seguente comando:

iptables -A INPUT -p udp -j DROP

La tabella filtro è la tabella di default, non è quindi necessario specificarla con l'opzione -t. Per cancellare la regola aggiunta dal comando precedente, si può usare il seguente comando:

iptables -D INPUT -p udp -j DROP

Questo comando in realtà cancella la prima regola della catena INPUT che ha la specifica "-p udp -j DROP". Se vi sono altre regole con la stessa specifica, solo la prima verrà cancellata.

iptables { -R | --replace | -I | --insert } nome_catena numero_regola nuova_regola [ opzioni ]

Con questo comando è possibile sostituire, con -R o --replace, una regola esistente o inserire, con -I o --insert, una nuova regola nella catena specificata. Ad esempio, per sostiture la quarta regola della catena INPUT con una regola che scarta tutti i pacchetti ICMP, si può usare il seguente comando:

iptables -R INPUT 4 -p icmp -j DROP

Per inserire una nuova regola nella seconda posizione della catena OUTPUT per scartare tutto il traffico TCP sulla porta 80, si può usare il comando:

iptables -I OUTPUT 2 -p tcp --dport 80 -j DROP
iptables { -D | --delete } nome_catena numero_regola [ opzioni ]

Questa opzione permette di cancellare una regola della catena specificata, indicandone la posizione all'interno della catena. Le regole sono numerate a partire da 1. Per esempio, per cancellare la terza regola dalla catena FORWARD, si usa il comando:

iptables -D FORWARD 3
iptables { -L | --list | -F | --flush | -Z | --zero } [ nome_catena ] [ opzioni ]

Queste opzioni permettono di ottenere la lista delle regole di una catena, con -L o --list, cancellare tutte le regole di una catena, con -F o --flush, e azzerare il contatore di byte e pacchetti di una catena, con l'opzione -Z o --zero. Se nessuna catena è specificata, l'operazione è eseguita su tutte le catene. Ad esempio, per elencare tutte le regole della catena OUPUT, si usa il comando:

iptables -L OUTPUT

Per cancellare tutte le catene:

iptables -F

Per azzerare i contatori dei byte e dei pacchetti della catena PREROUTING nella tabella nat, si usa il comando:

iptables -t nat -Z PREROUTING
iptables { -N | --new-chain } nome_catena
iptables { -X | --delete-chain } [ nome_catena ]

Queste opzioni permettono di creare, con -N o --new-chain, e cancellare, con -X o --delete-chain, catene definite dall'utente. Nel caso della cancellazione, se nessuna catena è specificata, tutte le catene definite dall'utente verranno cancellate. Non è possibile cancellare le catene predefinite, come le catene INPUT o OUTPUT della tabelle filtro.

iptables { -P | --policy } nome_catena nome_politica

Questo comando è usato per assegnare una politica alla catena. Ad esempio, per impostre la politica DROP per la catena INPUT, si usa il comando:

iptables -P INPUT DROP
iptables { -E | --rename-chain } vecchio_nome_catena nuovo_nome_catena

Questo comando permette di rinominare una catena definita dall'utente.

[modifica] Voci correlate

  • Firestarter: un personal firewall basato su iptables.
  • Firehol: strumento testuale che permette di realizzare firewall di livello professionale, usa una sintassi semplice ma espressiva.

[modifica] Collegamenti esterni

THIS WEB:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia 2008 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2007:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia 2006:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu