Paravanul de protecție Linux

Există mai multe aplicații de firewall pentru Linux, dar ceea ce poate nu realizeaza este faptul că, în centrul tuturor acestor programe este o singură aplicație toate-puternic, care este construit chiar în Linux Kernel: iptables. Acesta este firewall-ul Linux. Indiferent de programul pe care îl folosiți pentru a vă configura firewall-ul sub Linux, în cele din urmă toate acestea se referă la iptables. Tot ceea ce fac acele alte programe este configurarea acestuia.

Deci, vine întrebarea: dacă aceste programe configurează pur și simplu iptables, de ce să nu-l configurați direct pe tine însuți? Acest lucru este mai ușor decât credeți!


Contextul rețelei

Dacă sunteți familiarizați cu termenii de rețea, cum ar fi conexiunile, IP, TCP și Port, atunci nu ezitați să treceți la pasul următor. În caz contrar, dacă sunteți nou în rețea, citiți mai departe pentru a vă familiariza cu termenii pe care trebuie să îi înțelegeți, pentru a urma împreună cu acest tutorial.

Rețineți că termenii și definițiile de mai jos au fost în mod intenționat simplificați în mod intenționat. Sunt destinate utilizatorilor de zi cu zi, nu sysadmins. Deci, dacă sunteți un sysadmin condimentat sau aveți un buzunar CCNA în buzunar, vă rog să mă scuzați că nu ați intrat în detalii.

TCP / IP

TCP / IP este un protocol care permite computerelor să comunice între ele prin rețelele Internet și Ethernet.

Eșecul este ultima soluție.

Imaginează-ți un Rețea Ethernet ca o rețea locală mică (LAN - rețea locală), cum ar fi PC-ul de acasă, laptopul și telefonul inteligent. Este o rețea eterogenă mică izolată de restul lumii. O rețea de astfel de rețele este ceea ce știm cu toții ca fiind Internet: un set de rețele interconectate.

TCP / IP este o combinație de două protocoale care lucrează la niveluri diferite în ierarhia lanțului de comunicații de rețea. Nu vom face detalii despre această ierarhie. TCP standuri pentru Protocol de control al transferului, iar responsabilitatea sa principală este de a asigura succesul comunicării. Controlează corectitudinea datelor trimise și asigură succesul acestora. Are algoritmi diferiți pentru a efectua sume de control sofisticate, pentru autocorrect și pentru a reîncerca. Eșecul este ultima soluție. Numele, IP vine de la Internet Protocol. Puteți cel mai bine să o asociați cu "numărul de telefon" al PC-ului dvs. Fiecare mașină capabilă să comunice pe Internet trebuie să aibă o adresă IP - un număr de telefon unic - astfel încât pachetele de comunicații să-și găsească destinațiile. A pachet este o mică bucată de date în interiorul unui flux de comunicare, care este autonom și poate fi verificat pentru corectitudine. În esență, putem spune că calculatoarele noastre trimit pachete TCP prin Internet folosind protocolul IP.

Fiecare comunicare în rețea este legată de un anumit domeniu port. Porturile de rețea variază de la 0 la 2 ^ 16 (65536). Fiecare conexiune de rețea are un port de ieșire pentru cel care o inițiază și un port de intrare pentru cel care asculta mesajele altor computere. Pot exista mai multe conexiuni între mai multe computere pe porturi identice. Totuși, un computer poate vorbi în mai multe porturi deodată. Deci, în principiu, porturile sunt bune pentru a identifica serviciile și a defini canalele de comunicații, dar nu limitează cantitatea de date sau conexiuni.

Unele computere pot avea adrese IP similare. S-ar putea să fi observat că atât computerul de acasă, cât și la locul de muncă are adrese IP care ia forma de ceva de-a lungul liniilor 192.168.something.something, sau 10.0.something.something, sau 172.16.something.something. Acestea sunt așa-numitele adrese IP private care pot fi utilizate numai în interiorul rețelei LAN. Nu puteți ieși pe Internet cu astfel de adrese IP. Acestea sunt asemănătoare numerelor de interior pentru rețeaua de telefon ale companiei dvs..

Gateway & Bridge

A Pod este ceea ce computerele cu adrese IP reale (publice) trec pe Internet.

În esență, aceste computere au drepturile și capacitățile de a vorbi unul pe celălalt pe internet direct. Dar, deoarece nu există conexiuni directe între toate calculatoarele din lume (ceea ce ar fi destul de greu de realizat), punțile sunt responsabile pentru conectarea segmentelor de pe Internet.

Păstrați în viață analogia noastră de telefonie, vă puteți imagina aceste poduri ca fiind similare cu centrele telefonice din orașul sau cartierul dvs. Dacă efectuați un apel către un alt număr local (calculatoarele din stânga în schema noastră), comunicarea ar fi putut fi făcută direct de către centrul de telefon prin conectarea fizic linia cu tine vecin. Cu toate acestea, dacă doriți în schimb să vă apelați unchiul dvs. distant, Bob, apelul dvs. ar trebui să fie redirecționat pe mai multe centre de telefon până când telefonul unchiului dvs. poate fi conectat. Acestea formează a pod între orașul tău și orașul lui.

A portal este o modalitate prin care computerele dintr-o rețea privată (LAN cu adrese IP private) să comunice cu alte calculatoare de pe Internet.

O rețea privată este ca rețeaua de telefonie privată a companiei dvs. Puteți apela numere de interior, dar pentru a apela pe cineva care este în afara rețelei companiei dvs. - cum ar fi soția dvs. acasă - trebuie să formați mai întâi un număr sau un prefix special.

Computerele funcționează într-un mod similar. Când vă aflați într-o rețea privată, aveți un așa-numit computer gateway. Când computerul încearcă să vorbească cu un alt computer de pe Internet, se va întâmpla automagic contactați mai întâi porta și cereți "o linie" lumii exterioare. Poarta va vorbi cu computerul găsit pe Internet și va transmite mesajul înapoi la computer. Tu, ca utilizator obișnuit, nu vezi nici o diferență între o punte și o poartă. Calculatorul dvs. va ști cum să se ocupe de ele.


Definiția unui Firewall

Un firewall este un program care rulează pe o poartă, un pod sau un PC / laptop / smartphone capabil să filtreze pachetele de rețea de intrare, ieșire și redirecționate. Un paravan de protecție este în esență un instrument care vă permite să vă restricționați accesul la Internet sau accesul rețelei dvs. la Internet și accesul altcuiva de pe Internet în rețeaua dvs..

Și da, routerul dvs. prin cablu sau Wi-Fi acasă este, de fapt, un firewall pentru toate computerele și gadgeturile care se conectează la internet prin intermediul acestuia.


Problema pe care o vom rezolva

Pentru a seta contextul, să ne imaginăm o arhitectură de rețea foarte posibilă. Am văzut multe companii mici care rulează ceva similar cu acesta.

Ceea ce avem aici este de fapt ceva simplu:

  • Câteva calculatoare și alte dispozitive conectate la rețea - casetele verzi
  • Un server de poștă electronică - caseta roșie
  • Un server Microsoft Active Directory - caseta albastră
  • O poartă, care este și un firewall, pentru rețeaua noastră care rulează Linux - cutia neagră
  • Între toate acestea este un simplu switch de rețea

În următoarea secțiune, vom configura iptables pe acea poartă, astfel încât să permită tuturor dispozitivelor din rețea să se conecteze la Internet. Acesta ne va permite să ne conectăm la acesta, prin SSH, și vom permite serverelor externe de poștă electronică să ajungă la serverul de e-mail din interiorul rețelei noastre - un computer care nici măcar nu are o adresă IP publică; doar una privată.


Componentele Iptables

Numele Iptables are de fapt un sens în funcționalitatea sa. Este un set de tabele de adrese IP și porturi cu anumite acțiuni atașate acestora. În termenii iptable, aceste tabele sunt denumite lanţuri. Un iptables neconfigurat, gol ar putea arăta astfel:

csaba ~ # iptables -L lanțului de intrare (politica ACCEPT) țintă Prot opt ​​sursă de destinație Chain FORWARD (politica ACCEPT) viza Prot sursa opta destinație Chain IEȘIRE (politica ACCEPT) tinta Prot sursa opt destinație

Puteți observa că există trei lanțuri principale:

  • INTRARE - toate conexiunile de intrare
  • REDIRECŢIONA - conexiunile trecând prin
  • IEȘIRE - conexiuni care pleacă de pe acest server

Termenul, "politica ACCEPT. "În paranteza înseamnă că ACCEPT este setat ca politica implicită pentru acel lanț particular Deci, atunci când nu există nici un meci pentru o conexiune, care regula se va aplica Există trei concepte principale le puteți utiliza la configurarea firewall-ul.:

  • politica implicită ACCEPTAți și respingeți selectiv tot ce aveți nevoie - poate fi dificil să specificați tot ceea ce este refuzat. Nu recomand această abordare.
  • politica implicită DROP sau REJECT & permite selectiv tot ce aveți nevoie - acest lucru este mai bun, dar are o problemă. Dacă faceți o greșeală în configurația dvs. iptables, puteți rămâne cu ușurință în lanțurile goale, fără să aveți acces la tot și la oricine, inclusiv la dvs. Deci, dacă nu aveți întotdeauna acces fizic la serverul / computerul dvs. de firewall, vă recomandăm să utilizați următoarea abordare.
  • politica implicită ACCEPTA și o politică explicită pentru DROP all & apoi permite selectiv tot ce ai nevoie - aceasta este o soluție combinată între primele două posibilități. Se va folosi o politică implicită ACCEPT, deci dacă ceva nu merge bine, vă puteți conecta la SSH sau la orice conexiune la distanță pe care o utilizați pentru paravanul de protecție. În același timp, o regulă explicită DROP pentru orice conexiuni de neegalat vă asigură că sunteți în siguranță. Permiterea doar a ceea ce știi și de fapt necesitatea de a folosi oferă cea mai bună protecție posibilă.

Adăugarea de reguli la Iptables

Există două modalități de a adăuga o nouă regulă iptables. Una este să o introduceți la începutul unui lanț. Cealaltă opțiune este să o adăugați la sfârșitul unui lanț. De ce contează în ce ordine apar regulile?

Important: iptables verifică regulile dintr-un lanț de sus în jos. Se va opri căutarea la primul meci.

Trebuie să vă proiectați regulile astfel încât să luați în considerare comportamentul iptables menționat mai sus. După prima potrivire a unei reguli, iptables va lua acțiunile specificate de regula și apoi va înceta căutarea. Dacă nicio regulă nu se potrivește cu conexiunea care este bifată, se aplică politica implicită.

Introducerea unei noi reguli

Să spunem că vrem să adăugăm o regulă iptables-ului nostru, care va permite oricui să se conecteze la portul 22 pe firewall-ul nostru. Portul 22 este portul pentru protocolul SSH. Desigur, un administrator de server bun va schimba acest port în ceva neașteptat din motive evidente de securitate / obscuritate, dar aceasta este o altă poveste pentru un alt tutorial. Vom rămâne cu 22.

csaba ~ # iptables -I INPUT -p tcp eth0 -I --dport 22 -j ACCEPT csaba ~ # iptables -L lanțului de intrare (politica ACCEPT) tinta Prot sursa opta destinatie ACCEPT tcp - oriunde oriunde Dpt tcp: ssh

Am presupus că adresa IP cu care se confruntă Internetul cu IP-ul public este pe interfața de rețea, numită eth0. Să disecăm această comandă:

  • -eu - înseamnă introducerea regulii
  • INTRARE - specifică lanțul dorit
  • -eu - standuri pentru interfața de rețea - în cazul nostru, eth0
  • -p - este pentru protocol (tcp sau udp)
  • --dport 22 - este pentru portul de destinație 22 - are o valoare corespunzătoare --sportiv versiune pentru verificarea portului sursă
  • -j - vine de fapt din "salt", și este urmată de o acțiune - în cazul nostru, acțiunea de a accepta conexiunea

Cu toate acestea, probabil că ați ghicit deja că această regulă are un efect redus în acest moment. Politica noastră implicită este ACCEPT, acceptând astfel ceva în mod explicit, nu ne oferă noi funcționalități suplimentare. Acum, țineți minte a treia modalitate recomandată de a configura firewall-ul nostru: regula explicită de a nega tot ceea ce nu se potrivește. Să adăugăm această regulă.

Adăugarea de reguli

Vrem să adăugăm o regulă care blochează traficul primit. Dar aveți grijă: nu vrem decât să blocăm ceea ce ar putea fi dăunător. Dacă blocăm totul, nu vom putea face nimic, deoarece răspunsurile la cererile noastre vor fi respinse. De exemplu, atunci când răsfoiți o pagină Web, faceți o solicitare, atunci primiți un răspuns. Acest răspuns vine în calculatorul dvs., deci, în lanțul INPUT, trebuie să avem o regulă care să o permită.

În primul rând, vom adăuga o regulă pentru a accepta traficul de intrare pentru conexiuni deja stabilite, cum ar fi răspunsurile la solicitări.

csaba ~ # iptables -A INPUT -i eth0 -m conntrack -actstate ESTABLISHED, RELATED -j ACCEPT csaba ~ # iptables -L Lanț INPUT (politică ACCEPT) țintă destinație opt opt ​​sursă ACCEPT tcp - oriunde oriunde tcp dpt: ssh ACCEPT toate - oriunde oriunde ctstate legate, stabilit

Acum că am protejat conexiunile noastre existente și răspunsurile la conexiunile pe care le-am inițiat, putem nega orice altceva care nu a fost potrivit.

csaba ~ # iptables -A INPUT -i eth0 -p tcp -j DROP csaba ~ # iptables -L Lanț INPUT (politică ACCEPT) țintă destinație opt opt ​​sursă ACCEPT tcp - oriunde oriunde tcp dpt: ssh ACCEPT tot - oriunde oriunde ctstate RELATED, DROP ESTABLISHED tcp - oriunde oriunde

Am adăugat o altă linie, cu o regulă de DROP pentru toate conexiunile care se potrivesc. Rețineți: această regulă se va aplica numai dacă nici una dintre cele anterioare nu se potrivește.

Există două moduri de a refuza o conexiune.

  1. Puteți utiliza DROP, care este echivalent cu apelarea unui număr de telefon inexistent, cu diferența că, după un timp, conexiunea la rețea expiră. Cu un număr de telefon, un robot vă informează că numărul nu există. Dar rezultatul final din punctul de vedere al apelantului este același: se consideră că destinația nu există.
  2. Al doilea mod de a refuza conexiunea este cu regula, REJECT și un mesaj opțional. Acest lucru este similar cu numărul pe care încercați să-l numiți ocupat. S-ar putea să știți că există un număr, știți că se poate numi, dar pur și simplu refuză să vă primească apelurile. Opțional, puteți furniza un mesaj cu o regulă REJECT; în mod prestabilit, portul ICMP este inaccesibil sau ceva similar.

Permiteți calculatoarelor să acceseze Internetul

În acest moment, avem câteva reguli de bază pentru lanțul INPUT. Dar avem o rețea de calculatoare care au adrese private IP. Trebuie să furnizăm o poartă de acces la Internet. Acest lucru se face și prin iptables: firewall-ul.

Traducerea adreselor de rețea (NAT)

Probabil că ați auzit deja acest termen: NAT. Aceasta se referă la procedura de traducere a unei adrese de rețea în alta și transmiterea informațiilor între cele două. Este folosit cel mai frecvent în arhitecturi ca a noastră. Gateway-ul trebuie să facă NAT pentru a traduce IP-urile unui computer de pe LAN în propriul IP public și apoi înapoi.

Rutarea este procedura prin care un sistem își dă seama ce interfețe de rețea și spre ce gateway poate comunica pentru a ajunge la destinație. Fiecare computer are o tabelă de rutare proprie pentru a determina acest lucru. Iptables se pot conecta la această procedură de rutare în două puncte diferite: înainte și după ce a avut loc procedura.

Nating cu Iptables

csaba ~ # iptables -t nat -A POSTROUTING -o eth0 -j SNAT -to-sursă 89.72.31.243

Această comandă adaugă o regulă ca POSTROUTING la tabela NATing (-t nat). POSTROUTING înseamnă, în esență, că pachetele trec mai întâi mecanismul de rutare de pe poarta de acces, și numai după ce acestea sunt modificate. Regula -j SNAT înseamnă sursa NAT; adresa sursă a pachetelor va fi schimbată la adresa din interfața specificată de -o eth0 - în cazul nostru, la adresa IP specificată de opțiune, --la sursa. Deci, oricine va contacta un computer din rețeaua dvs. va presupune că vorbește direct la poarta dvs. de acces. Nu va avea absolut nici o idee despre faptul că pachetele sunt destinate unor calculatoare diferite. Gateway-ul, folosind iptables, va păstra o listă internă a tuturor adreselor IP traduse și, atunci când va veni un răspuns, va reveni la schimbare și va transmite răspunsul la computerul din interiorul rețelei.


Permiteți clientului de pe Internet la serverul de e-mail

O altă problemă cu care ne confruntăm este ce să facem atunci când avem un server care se află în spatele unui firewall. Trebuie să permitem clienților care vin de pe Internet să comunice într-un fel cu serverul nostru. Acesta este cazul serverului nostru de e-mail. Când soseste un e-mail care trebuie livrat într-un cont de mail pe serverul nostru, serverul de e-mail trimis va trebui să se conecteze la serviciul nostru de primire.

Dar serverul nostru de mail are doar o adresă IP privată. Nu există nicio modalitate prin care un computer extern să se poată conecta direct la el. Pe de altă parte, gateway-ul are o IP externă la care se poate conecta oricine. Soluția? Deschideți un port de pe gateway-ul nostru, astfel încât o solicitare de la Internet la acel port va merge de fapt la serverul nostru de e-mail. Răspunsul, desigur, va călători prin poarta de acces la client. Trucul este de a folosi un alt tip de NAT aici, numit Destination NAT. Aceasta schimbă destinația pachetelor și apoi le readuce înapoi atunci când apare răspunsul. Gândiți-vă la DNAT ca inversă a SNAT.

Bacsis: S-ar putea să știți această caracteristică ca "Virtual Server", dacă ați jucat vreodată în jur cu routere mici de acasă.

csaba ~ # iptables -t nat -A PREROUTING -i eth0 -p tcp -dport 25 -j DNAT --to-destinație 192.168.1.2:25

Deci, ce se întâmplă aici? Un pachet vine la gateway-ul nostru la portul 25 (portul folosit pentru SMTP, protocolul de e-mail pe care îl folosește întregul Internet). Regula de mai sus captează acest pachet din cauza --dport 25 opțiune, care în principiu spune, "Pot potrivi tot ce merge în acest port pe interfața specificată de -i eth0. Acum, când pachetul se potrivește, schimbați destinația acestuia de la mașina curentă (gateway-ul) la cea specificată de --la destinație."Vă rugăm să rețineți că puteți specifica portul în mod explicit după adresa IP separând-o cu un colon.

În cele din urmă, rețineți că acesta este în cârligul PREROUTING. Destinația trebuie modificată înainte ca rutarea să aibă loc. În caz contrar, pachetele se vor termina pe poarta de acces și nu vor găsi calea către serverul de e-mail.


Configurarea persistentă a iptables

Regulile introduse sau adăugate la iptables sunt în memorie. După repornire, spoof: totul este plecat! Pentru a salva configurația, ar trebui să o aruncați într-un fișier, așa cum este cazul:

csaba ~ # iptables-save> /some/directory/my_rules.fw

Numele fișierului nu contează, nici extinderea acestuia. Pentru a restabili regulile, executați această comandă când pornește computerul.

iptables-RESTOR < /some/directory/my_rules.fw

Dacă vă uitați la conținutul salvat, veți vedea că aceștia sunt aceiași parametri pe care i-am folosit cu comenzile iptables. Există unele diferențe minore, dar puteți înțelege cu ușurință fișierul salvat și puteți chiar să vă scrieți manual astfel de fișiere și să le încărcați.


Gândurile finale

În încheiere, iată câteva idei despre când și când să nu folosiți un firewall cu un computer Linux.

Utilizați un paravan de protecție pe Linux atunci când configurați un server (ca un gateway în exemplul nostru) sau când aveți un calculator cu informații importante despre el care este expus direct la Internet. Înainte de a vă sari pentru configurarea iptables-urilor, luați în considerare pericolul potențial. Întrebați-vă: calculatorul meu este cunoscut pe Internet? Există câteva miliarde de calculatoare acolo. Dacă a ta este doar una, șansa de a fi vizată este incredibil de scăzută. Există persoane direct interesate de informațiile dvs.? Hackerii nu pierd timpul când fură date aleatorii în speranța că ar putea găsi ceva. De obicei, ei știu ce caută și apoi vizează computerele care conțin informațiile dorite. Desigur, există nenumărate atacuri împotriva computerelor aleatoare care încearcă să instaleze un fel de vierme sau virus, dar pe Linux, sunteți imun prin design.

Nu pierdeți timpul cu configurarea unui firewall pe Linux atunci când acesta este un computer care se află întotdeauna în spatele unui paravan de protecție, cum ar fi PC-ul de acasă în spatele routerului dvs. de acasă sau când nu aveți informații deosebit de importante despre laptop. Dacă păstrați la minimum serviciile care ascultau în rețea și aveți o parolă sigură, puteți uita paravanul de protecție. Eu personal nu am nici un calculator personal, laptop sau smartphone cu un firewall care rulează. Cu toate acestea, am un router acasă cu un firewall bine configurat.

Cred că puteți aplica în siguranță aceste idei și pentru Mac OSX. Dacă sunteți utilizator de Windows, îmi pare rău: un firewall este prima dvs. linie de apărare. Pentru Linux sau MacOSX, însă, un firewall este ultima linie de apărare. O parolă selectată cu atenție și care nu rulează servicii inutile ar trebui să se ocupe de cea mai mare parte a protecției calculatorului dumneavoastră.

Vă mulțumim pentru lectură. Întrebări?

Cod