Configurarea unui firewall: iptables
Un firewall este un sistem folosit pentru prevenirea accesului din exterior în reteaua interna. Acest sistem separa o retea protejata de o retea neprotejata, Internetul. Firewall-urile implementeaza reguli care filtreaza atât pachetele de date receptionate, cât si cele trimise de catre masin 19519l113t 9;. Astfel, sistemul sau reteaua locala vor fi supuse unor riscuri mai mici, deoarece numai tipurile de pachete (utilizate de anumite protocoale sau servicii) dorite pot trece prin firewall.
Nucleul Linux ofera posibilitatea de a filtra sau redirectiona pachetele de date, printr-un sistem denumit iptables. De asemenea, exista posibilitatea de a modifica informatiile despre sursa sau destinatia pachetelor, procedura denumita NAT (Network Address Translation). Una dintre aplicatiile sistemului NAT este posibilitatea deghizarii pachetelor (masquerading). Deghizarea înseamna ca pachetele trimise de catre sistemele aflate în retea, care au ca gateway o anumita masina, sa para trimise de masina respectiva. Cu alte cuvinte, masina pe post de firewall retrimite pachetele venite din retea catre exterior, facând sa para ca provin tot de la ea. Acest sistem este foarte util atunci când exista o masina care realizeaza legatura la Internet, o singura adresa IP alocata, si mai multe calculatoare în retea care au definite masina respectiva ca gateway.
Nucleul defineste trei tabele implicite de lanturi prin care trec informatiile, si anume INPUT, OUTPUT si FORWARD. Atunci când un pachet intra în sistem printr-o interfata de retea, nucleul decide daca pachetul este destinat masinii locale (lantul INPUT) sau catre alta masina (lantul FORWARD). într-un mod similar, pachetele care pleaca dinspre masina locala trec prin lantul OUTPUT. Fiecare lant contine mai multe reguli, care vor fi aplicate pachetelor de date care le tranziteaza, în general, regulile identifica adresa de provenienta si adresa-destinatie a pachetelor, precum si protocolul si serviciul asociate.
Atunci când un pachet corespunde unei reguli, asupra acestuia se va aplica o anumita actiune - cu alte cuvinte, el are o anumita tinta (target). Daca o regula specifica tinta ACCEPT, pachetul nu mai este verificat cu celelalte reguli, ci este directional catre destinatie. Daca regula specifica tinta DROP, pachetul este "aruncat" - cu alte cuvinte, nu i se permite sa ajunga la destinatie -, netrimitând nimic masinii care 1-a expediat. Daca regula specifica tinta REJECT, pachetului nu i se permite sa ajunga la destinatie, însa este trimis un pachet de eroare expeditorului.
Administrarea si configurarea sistemelor Linux
Nucleul Linux versiunea 2.4 implementeaza sistemul numit iptables, dar ofera suport si pentru sistemul ipchains, utilizat în versiunea 2.2, precum si pentru ipfwadm, utilizat în versiunea 2.0.
Pentru a include sistemul iptables în nucleu, acesta trebuie compilat cu optiunile:
Networking options
Network
packet fiitering (replaces ipchains)
IP: Netfilter Configuration
Connection tracking (required for masq/NAT)
IP tables
support
Packet fiitering
Full NAT
Packet mangling
LOG target support
De asemenea, trebuie instalat pachetul iptables. Programul iptables serveste la manipularea lanturilor si regulilor.
Regulile pot fi gestionate prin intermediul liniei de comanda, dar varianta recomandata este salvarea acestor reguli într-un fisier script, de regula
/etc/sysconfig/iptables.
Programul are urmatoarea sintaxa:
iptables -[ ADC ] lant regula [ optiuni }
iptables - [ RI ] lant numar__regula regula [ optiuni ]
iptables -D lant numar_regula [ optiuni ]
iptables -[ LFZ ] [ canal } [ optiuni ]
iptables -[ NX ] lant
iptables -P lant tinta [ optiuni ]
iptables -E nume_vechi_lant nume_nou_lant
Sunt suportate urmatoarele optiuni:
Comenzi
-A adauga regula specificata la sfârsitul tabelei pentru lantul specificat;
-D sterge o anumita regula (specificata prin numarul sau) din lantul
specificat;
-E redenumeste lantul specificat;
-F sterge toate regulile din lantul specificat;
insereaza o regula în lant într-o anumita pozitie;
-L afiseaza toate regulile din lantul specificat;
-N creeaza un nou lant, având numele specificat;
-P stabileste politica implicita pentru un anumit lant;
-X sterge un anumit lant.
Securizarea sistemului Linux
Parametri
-t specifica tabela la care se va referi regula. Exista trei tabele:
filter.
este tabela implicita
si contine lantelurile INPUT, OUTPUT
si FORWARD;
-. nat: aceasta tabela este consultata atunci când se întâlneste un pachet care creeaza o noua conexiune. Contine urmatoarele lanturi: PREROUTING (verifica pachetele atunci când sunt receptionate), OUTPUT (verifica pachetele generate de masina locala înainte de rutare) si POSTROUTING (verifica pachetele la momentul iesirii din masina);
mangle:
este utilizata pentru
verificarea specializata a pachetelor.
Contine doua lanturi predefinite: PREROUTING (verifica
pachetele receptionate înainte
de rutare) si OUTPUT (verifica
pachetele generate de masina
locala înainte de rutare);
-d stabileste adresa-destinatie a pachetului. Poate fi un nume de masina, adresa IP, adresa/masca de retea sau adresa unei retele;
-/' stabileste interfata de retea de intrare (se aplica doar lanturilor INPUT sau FORWARD). In fata numelui interfetei poate fi folosit caracterul "i", însemnând ca regula nu se va aplica la interfata specificata. Poate fi utilizat si caracterul wildcard "+";
-j specifica tinta pachetului daca regula se potriveste;
-o specifica interfata de retea de iesire (se aplica doar lantului OUTPUT sau FORWARD);
-p seteaza protocolul pentru regula. Poate fi icmp, tcp, udp sau all (orice protocol);
-s stabileste adresa-sursa a pachetului. Are aceeasi sintaxa ca la -d;
-aport seteaza portul-destinatie pentru pachet. Poate fi utilizat fie un nume de serviciu (e.g. http, smtp), conform /etc/services, fie un numar de port, fie un interval de porturi (e.g. 2000:2300). De asemenea, poate fi utilizat caracterul "i" în fata portului, pentru a specifica faptul ca regula nu se va aplica la portul respectiv;
-sport seteaza portul-sursa pentru pachet. Foloseste aceeasi sintaxa ca la -dport;
-syn determina ca regula sa faca referire doar la pachetele TCP pentru initierea conexiunii, nu si la pachetele de date. Este valabila doar pentru protocolul TCP. Daca este mentionat si caracterul "i", regula va face referire la pachetele de date care nu folosesc la initierea conexiunii.
Ţinte
Ţinta poate fi numele unui lant continând reguli ce vor fi aplicate suplimentar pachetelor sau una dintre valorile:
Administrarea si configurarea sistemelor Linux
ACCEPT DROP QUEUE RETURN
LOG
REJECT
SNAT
pachetul nu mai este verificat cu celelalte reguli, ci este directional
catre destinatie;
pachetul este "aruncat" - cu alte cuvinte, nu i se permite sa ajunga
la destinatie -, netrimitând vreun raspuns masinii care 1-a expediat;
pachetul este introdus într-o coada, de unde va fi preluat de alte
programe pentru prelucrare;
opreste verificarea regulilor din lantul curent. Daca regula a fost
apelata dintr-un alt lant, pachetul este returnat la regula de unde a
fost efectuata trimiterea, în caz contrar, va fi utilizata tinta
implicita pentru lant curent;
jurnalizeaza pachetele care se potrivesc cu aceasta regula, prin
intermediul sistemului syslog;
pachetului nu i se permite sa ajunga la destinatie, însa este trimis
un pachet de eroare expeditorului;
este valabila doar în tabela nat, în lantul POSTROUTING.
Specifica faptul ca adresa expeditorului pachetului trebuie
modificata. Accepta o singura optiune:
- to-source adresa_IP[ -adresa_IP
:port-port]
DNAT
care specifica adresa IP modificata sau un interval de adrese, respectiv un interval de porturi;
este valabila doar în tabela nat, în lanturile PREROUTING si OUTPUT, precum si în cele apelate din aceste doua lanturi. Specifica faptul ca adresa-destinatie a pachetului trebuie modificata. Accepta o singura optiune:
- to-destination adresa_IP[ -adresa_IP ] [ :port-port]
care specifica adresa IP modificata sau un interval de adrese, respectiv un interval de porturi;
MASQUERADE este valabila doar în tabela nat, în lanturile POSTROUTING. Se utilizeaza doar pentru adrese IP atribuite dinamic; daca adresa este statica, se utilizeaza lantul SNAT. Accepta o singura optiune:
--to-ports port [-port]
care specifica un port-destinatie sau un interval de porturi;
REDIRECT este valabila doar în tabela nat, în lanturile PREROUTING si OUTPUT, precum si în cele apelate din aceste doua lanturi. Modifica adresa IP destinatie pentru a trimite pachetul catre propria masina (implicit 127.0.0.1). Accepta o singura optiune:
Securizarea sistemului Linux 249
--to-ports port[-port]
care specifica un port-destinatie sau un interval de porturi.
Vom exemplifica în continuare configurarea unui firewall uzual, pentru o masina care realizeaza legatura Internet dintr-o companie privata:
admite
sesiunile SSH efectuate de pe alte masini
iptables -A INPUT -p tcp
-dport ssh --syn -j ACCEPT
admite
receptionarea de mesaje de pe alte masini
iptables -A INPUT -p
tcp -dport smtp --syn -j ACCEPT
admite
cereri HTTP efectuate de pe alte masini
iptables -A INPUT -p
tcp -dport http -syn -j ACCEPT
accepta
cererile DNS (masina este si server DNS)
iptables -A INPUT -p
tcp --sport domain -j ACCEPT
iptables -A INPUT -p udp
-sport domain -j ACCEPT
accepta
orice fel de pachet provenit de pe interfata Io
iptables -A INPUT -i Io
-j ACCEPT
de
asemenea, accepta pachetele provenite de pe interfata ethO
iptables -A INPUT -i
ethO -j ACCEPT
respinge
toate celelalte tipuri de pachete
iptables -A INPUT -p
tcp -syn -j REJECT
iptables -A INPUT -p udp
-j REJECT
în cele ce urmeaza vom prezenta configurarea unei masini care serveste ca gateway pentru o retea de calculatoare care nu au adrese IP valide, prin sistemul de deghizare. Adresa 192.78.124.135 reprezinta adresa IP a interfetei pppO (legatura dial-up la Internet), iar 10.0.0.0 reprezinta adresa retelei locale de calculatoare (adrese IP invalide):
I |
iptables -A POSTROUTING -t nat -s 200.0.0.0/255.255.255.0 -j SNAT -to-source 192.78.124.135
|