Se spune ca nu esti administrator de Unix pana nu configurezi singur un server de mail, un server de DNS si un firewall. Din toata munca la primul meu server mai tin minte doar ca era un Debian 2.0 cu kernel 2.0.34 , am facut masquerading cu ipfw, proxy cu squid si mail server cu smail.
Acum o sa descriu principiile pe care ma bazez cand configurez un firewall. Informatia prezentata nu este nici completa, nici general valabila si nici nu garantez ca este exacta; dupa cum am zis, doar indicatii generale.
Ca sa configuram un firewall, trebuie sa stim ce poate si ce vrem de la el. Un firewall este un program care proceseaza pachetele IP primite de la placile de retea si hotaraste ce face cu ele. Poate fi folosit pentru a proteja reteaua interna de intruziuni, pentru a da prioritate unor anumiti clienti sau unor anumite servicii, pentru a impiedica conexiunile din reteaua interna catre anumite servicii (de ex. torrent, dc++) sau pentru redirecta toate conexiunile catre un serviciu spre serverul dedicat.
Mai intai se defineste NAT (Network Address Translation): care este interfata interna, care este clasa de adrese a retelei interne, care este interfata externa, care este adresa interfetei externe, cum se translateaza adresele interne.
Trecem la filtrarea pachetelor IP. Actiunea implicita este ca se resping toate pachetele, pe toate interfetele.
Apoi se definesc adresele din reteaua interna care au voie sa initieze conexiuni catre reteaua externa. Se pot alege sursa (adrese individuale, subretele), destinatia (adrese, subretele), portul, intervalul de timp, sistemul de operare al computerului sursa.
In continuare se definesc adresele de Internet de la care acceptam conexiuni, de la ce adrese, catre ce porturi, intre ce ore etc.
Apoi stabilim care dintre pachetele acceptate vor fi transmise catre destinatie si care va fi destinatia. Pachetele sosite pe interfata interna catre reteaua externa (Internet sau orice altceva), vor fi lasate sa treaca, deoarece au fost deja filtrate. Pachetele sosite pe interfata externa vor fi trimise catre serverele dedicate, dupa portul (serviciul) pe care il acceseaza: 80 – serverul de web, 21 – FTP, 22 – SSH etc. Trimiterea conexiunilor externe catre un server in interior se numeste “port forwarding”.
In conditii ideale, serverele se vor afla pe o retea diferita, care se conecteaza la firewall pe alta interfata. Aceasta retea se numeste DMZ (DeMilitarized Zone), pentru ca este o retea interna, dar in care nu avem incredere. De ce? Daca un server este spart de hackeri, el poate deveni baza unui atac catre reteaua interna. Firewall-ul trebuie sa permita numai conexiuni din reteaua interna catre DMZ si nici o conexiune din DMZ spre reteaua interna. De asemenea, din Internet nu acceptam conexiuni catre adrese din DMZ, ci numai catre interfata externa a firewall-ului, pe care le redirectam noi catre serverul potrivit. De la serverele din DMZ e bine sa acceptam conexiuni spre Internet numai catre serviciile pe care se ofera serverele; adica un server de mail nu are de ce sa se conecteze la un alt server pe portul 22, mail se livreaza pe porturile 25 (SMTP) si 465 (secure SMTP). Punem aceasta limitare pentru a ingreuna (pe cat posibil) viata unui hacker care ia controlul asupra unui server din DMZ si incearca sa il foloseasca pentru alte activitati; in felul acesta ne asiguram ca serverul de mail nu va deveni – subit – server de FTP sau de torrent.
Acum putem sa ne ocupam de traffic shaping (adica prioritati). Definim cozi pentru computerele/serverele/serviciile importante si ne asiguram ca rezervam latime de banda pentru activitatile importante.
Acestia sunt, pe scurt, pasii necesari pentru a configura un firewall.
O foarte necesara precizare: faptul ca avem instalat un firewall nu ne protejeaza serverele de vulnerabilitatile pe care le contin software-ul lor. Ce vreau sa spun? Daca avem un server de web care ruleaza IIS (de exemplu) si nu am pus toate patch-urile, este posibil ca o cerere HTTP sa declanseze vulnerabilitatea si autorul sa preia controlul serverului. Deoarece cererea a fost o cerere HTTP obisnuita, sosita pe portul 80 si trimisa catre serverul de web, firewall-ul nu are cum sa o opreasca; el stie ca tot ce vine pt el pe portul 80, trebuie sa ajunga la serverul de web. Asa ca, verificati zilnic daca a aparut un patch nou si instalati-l imediat ce apare.
Urmatoarea intrebare este: ce firewall folosim? Pentru Windows exista cateva firewall-uri comerciale, printre care cele mai cunoscute sunt Check Point Firewall si Microsoft ISA server. Eu, ca de obicei, nu recomand Microsoft. De ce? Pentru ca nu am reusit sa stapanesc Microsoft ISA, dar am configurat rapid Check Point. Ca de obicei, pentru a putea folosi un produs Microsoft complex, trebuie sa platesti cateva (multe) sute de dolari pe cursuri.
Utilizatorii de Linux sunt limitati la a folosi IP Tables – un mecanism de filtrare de pachete. Pentru port forwarding nu stiu ce se foloseste, iar pentru prioritati/cozi se compileaza in kernel QoS si se configureaza separat. Exista si scripturi care usureaza configurarea firewall-ului, dar nu m-au interesat prea mult. De ce?
Pentru ca eu am folosit OpenBSD pentru firewall. OpenBSD are un firewall numit pf (Packet Filter). PF face totul: filtrare de pachete, port forwarding, NAT, traffic shaping. Si toata configurarea se face editand fisierul /etc/pf.conf.
FreeBSD are 3 firewall-uri incorporate: IPFILTER (cunoscut si ca IPF), IPFIREWALL (sau IPFW) si PacketFilter de la OpenBSD (numit si PF). Pentru traffic shaping se pot folosi altq sau dummynet.
NetBSD foloseste ipfilter pentru firewall. Nu am configurat firewall pe alte sisteme de operare, asa ca nu pot sa dau alte exemple de software pentru firewall.
