Un firewall e o sculă ce stă între un sistem cu nişte resurse ce trebuie protejate şi restu' lumii cu potenţiali haxorei.
În forma cea mai simplă, e un echipament electronic cu două interfeţe de reţea, una în „trusted zone” unde bagi serverele printr-un switch whatever, şi una în „untrusted zone” care poate fi Internetul sau intranetul. Firewall-ul înţelege protocolul TCP/IP, poate interpreta headerele pachetelor TCP/IP şi le pasează sau nu între cele două interfeţe, pe baza unor reguli stabilite de administrator. Regulile pot face referire la adresa IP sursă şi destinaţie, portul sursă şi destinaţie, protocolul folosit (TCP, UDP, ICMP) şi direcţia comunicaţiei (untrusted -> trusted sau invers).
Sunt două moduri de a pune reguli: „trust all” cu excepţia unor interdicţii definite în mod explicit, sau „block all” cu excepţia unor permisiuni definite în mod explicit. Evident, a doua variantă e mai sigură şi preferată, fiindcă permite implementarea principiului celui mai redus privilegiu.
Un exemplu pentru a doua metodă, pentru un server ce rulează un serviciu public HTTP şi un serviciu privat FTP:
- cereri HTTP: ALLOW pe direcţia inbound de la orice IP : orice port spre IP-ul a.b.c.d : portul 80 protocolul TCP;
- conectări FTP: ALLOW pe direcţia inbound de la IP-ul x.y.z.t : orice port spre IP-ul a.b.c.d : portul 21 protocolul TCP;
- răspunsurile serverului: ALLOW pe direcţia outbound de la IP-ul a.b.c.d : orice port spre orice IP : orice port protocolul TCP;
- default: DROP ALL.
Când un pachet ajunge la firewall din orice direcţie, firewall-ul îl descoase să afle direcţia, IP-urile, porturile şi protocolul, şi apoi ia pe rând regulile. Dacă nu corespunde nici la prima, nici la a doua, nici la a treia, aplică ultima regulă şi ignoră pachetul.
Un firewall ce permite tot şi nu e configurat cu reguli de filtrare este un firewall inutil.
Buuuun. Acum, un firewall ceva mai deştept o să aibă şi capabilitatea de a monitoriza traficul care vine spre el din ambele părţi, folosind nişte contoare şi algoritmi de detectare a unor pattern-uri pe baza cărora să ia anumite decizii. De exemplu, dacă detectează faptul că un anumit IP iniţiază foarte multe conexiuni spre un IP de partea cealaltă, pe porturi aleatorii, după un anumit număr de asemenea conexiuni iniţiate într-un anumit interval de timp poate decide că e un port scan şi va pune IP-ul sursă pe un blacklist ale cărui cereri sunt ignorate. Această regulă temporară are şi un termen de expirare automată.
Un firewall şi mai inteligent va combina atât analiza la nivel de IP-uri, porturi şi protocol (nivel 3 OSI: TCP, UDP, ICMP) cât şi capacitatea unui proxy transparent care să analizeze şi conţinutul comunicaţiei în funcţie de protocol (nivel 7 OSI: HTTP, FTP, SMTP etc.). Prin asta, de exemplu, proxy-ul poate detecta când un hexorel încearcă să injecteze în serverul web o cerere ce conţine cod periculos, ce ar putea exploata o vulnerabilitate a aplicaţiei web. Pentru reţeaua unei şcoli, un firewall conectat la un filtru proxy poate limita accesul la anumite site-uri, poate filtra bannerele sau poate chiar şi să analizeze imaginile din paginile web pentru a detecta pozele porno.
Eh, ăsta-i un firewall separat. Unul software face cam acelaşi lucru, doar că nu are două interfeţe de reţea ci se pune călare pe driverul TCP/IP şi de-acolo monitorizează traficul, folosind reguli similare. Ce-are-n plus un firewall software?
- Intrusion Detection - monitorizare continuă a traficului şi raportare a traficului suspicios;
- validarea aplicaţiilor - nu numai că poate monitoriza IP-urile şi porturile sursă şi destinaţie, dar poate şti şi care aplicaţie iniţiază respectiva comunicaţie, încât poţi pune reguli la nivel de aplicaţie dacă să aibă sau nu acces la reţea şi cum; cu asta, de exemplu, poţi controla o aplicaţie ce nu ştii ce face, sau să protejezi o componentă cheie Windows de a putea fi accesată din reţea (Microsoft Networks);
- ca o extensie la avantajul anterior, firewall-ul din Windows XP foloseşte protocolul Universal Plug and Play (UPnP) pentru a putea identifica ce aplicaţii au nevoie să comunice în reţea (şi la care le-ai dat permisiune în firewall) şi pentru a comunica aceste nevoi către routerul compatibil UPnP ce asigură conectarea la Internet, astfel încât routerul să adauge dinamic orice fel de regulă de port forwarding dinspre Internet spre PC-ul local în funcţie de necesităţile aplicaţiilor şi fără ca tu să le setezi manual.
Încă nişte idei înainte să închei:
- firewall-ul din Windows e ok, chiar dacă-i mai prostovan, însă cu două condiţii: să-l configurezi (allow/deny la aplicaţii, eventual să mergi şi la nivel de port), şi să ai toate patch-urile critice la zi;
- firewall-ul din Windows NU te protejează dacă sistemul are nişte vulnerabilităţi în componentele de bază pentru care nu ai instalat patch-urile;
- un firewall third party e bun cât timp îl setezi o dată şi apoi îşi face treaba în linişte, fără să te frece la icre cu câte un pop-up enervant pentru fiecare portscan; ZoneAlarm, de exemplu, te bagă în paranoia;
- de regulă, un firewall software în spatele unui router e redundant, routerul se comportă implicit ca un firewall hardware.