Iptables este un utilitar firewall extrem de flexibil construit pentru sistemele de operare Linux. Indiferent dacă sunteți un novice Linux geek sau un administrator de sistem, probabil că există o modalitate prin care iptables vă pot fi de mare folos. Citiți mai departe în timp ce vă arătăm cum să configurați cel mai versatil firewall Linux.
Despre iptables
iptables este un utilitar firewall din linia de comandă care folosește lanțuri de politici pentru a permite sau bloca traficul. Când o conexiune încearcă să se stabilească pe sistemul dvs., iptables caută o regulă în lista sa cu care să se potrivească. Dacă nu găsește una, recurge la acțiunea implicită.
iptables vine aproape întotdeauna preinstalat pe orice distribuție Linux. Pentru a-l actualiza / instala, preluați doar pachetul iptables:
sudo apt-get install iptables
Există alternative GUI la iptables cum ar fi Firestarter , dar iptables nu este chiar atât de greu odată ce aveți câteva comenzi în jos. Doriți să fiți extrem de atenți atunci când configurați regulile iptables, mai ales dacă sunteți SSH într-un server, deoarece o comandă greșită vă poate bloca permanent până când este fixată manual la mașina fizică.
Tipuri de lanțuri
iptables utilizează trei lanțuri diferite: intrare, redirecționare și ieșire.
Intrare - Acest lanț este utilizat pentru a controla comportamentul conexiunilor de intrare. De exemplu, dacă un utilizator încearcă să acceseze SSH în computerul / serverul dvs., iptables va încerca să potrivească adresa IP și portul cu o regulă din lanțul de intrare.
Redirecţiona - Acest lanț este utilizat pentru conexiunile de intrare care nu sunt de fapt livrate local. Gândiți-vă la un router - datele îi sunt trimise întotdeauna, dar rareori sunt destinate propriu-zis routerului; datele sunt redirecționate doar către ținta sa. Cu excepția cazului în care efectuați un fel de rutare, NAT sau altceva pe sistemul dvs. care necesită redirecționare, nici măcar nu veți folosi acest lanț.
Există o modalitate sigură de a verifica dacă sistemul dvs. folosește / are nevoie de lanțul direct.
iptables -L -v
Captura de ecran de mai sus este a unui server care rulează de câteva săptămâni și nu are restricții asupra conexiunilor de intrare sau de ieșire. După cum puteți vedea, lanțul de intrare a procesat 11 GB de pachete, iar lanțul de ieșire a procesat 17 GB. Lanțul direct, pe de altă parte, nu a fost necesar pentru a procesa un singur pachet. Acest lucru se datorează faptului că serverul nu efectuează niciun fel de redirecționare sau nu este utilizat ca dispozitiv de trecere.
Ieșire - Acest lanț este utilizat pentru conexiunile de ieșire. De exemplu, dacă încercați să faceți ping howtogeek.com, iptables îi va verifica lanțul de ieșire pentru a vedea care sunt regulile referitoare la ping și howtogeek.com înainte de a lua o decizie de a permite sau refuza încercarea de conectare.
Avertismentul
Chiar dacă ping-ul unei gazde externe pare ceva care ar trebui doar să traverseze lanțul de ieșire, rețineți că pentru a returna datele, va fi utilizat și lanțul de intrare. Când utilizați iptables pentru a vă bloca sistemul, amintiți-vă că o mulțime de protocoale vor necesita o comunicare bidirecțională, astfel încât atât lanțurile de intrare cât și cele de ieșire vor trebui configurate corect. SSH este un protocol comun pe care oamenii uită să-l permită pe ambele lanțuri.
Comportamentul implicit al lanțului de politici
Înainte de a intra și de a configura reguli specifice, va trebui să decideți care doriți să fie comportamentul implicit al celor trei lanțuri. Cu alte cuvinte, ce doriți să facă iptables dacă conexiunea nu corespunde niciunei reguli existente?
Pentru a vedea ce lanțuri de politici sunt configurate în prezent să facă cu trafic de neegalat, rulați
iptables -L
comanda.
După cum puteți vedea, am folosit și comanda grep pentru a ne oferi o ieșire mai curată. În această captură de ecran, lanțurile noastre se presupun că acceptă traficul.
De mai multe ori, veți dori ca sistemul dvs. să accepte conexiuni în mod prestabilit. Dacă nu ați modificat anterior regulile lanțului de politici, această setare ar trebui să fie deja configurată. Oricum ar fi, iată comanda de acceptare a conexiunilor în mod implicit:
iptables --policy INPUT ACCEPT
iptables --policy ACCEPT DE IEȘIRE
iptables --policy ACCEPTARE ÎNAINTE
Prin implicit la regula de acceptare, puteți utiliza apoi iptables pentru a refuza anumite adrese IP sau numere de port, în timp ce continuați să acceptați toate celelalte conexiuni. Vom ajunge la acele comenzi într-un minut.
Dacă preferați să refuzați toate conexiunile și să specificați manual care dintre ele doriți să vă permiteți conectarea, ar trebui să modificați politica implicită a lanțurilor dvs. pentru a renunța. A face acest lucru ar fi probabil util numai pentru serverele care conțin informații sensibile și care au întotdeauna aceleași adrese IP conectate la acestea.
iptables --policy INPUT DROP
iptables --policy OUTPUT DROP
iptables --policy FORDARD DROP
Răspunsuri specifice conexiunii
Cu politicile implicite de lanț configurate, puteți începe să adăugați reguli la iptables, astfel încât să știe ce să facă atunci când întâlnește o conexiune de la sau la o anumită adresă IP sau port. În acest ghid, vom trece în revistă cele trei „răspunsuri” cele mai de bază și cele mai utilizate.
Accept - Permiteți conexiunea.
cădere brusca - Renunță la conexiune, acționează ca și cum nu s-ar fi întâmplat niciodată. Acest lucru este cel mai bun dacă nu doriți ca sursa să realizeze că sistemul dvs. există.
Respinge - Nu permiteți conexiunea, dar trimiteți înapoi o eroare. Acest lucru este cel mai bun dacă nu doriți ca o anumită sursă să se conecteze la sistemul dvs., dar doriți să știe că firewall-ul le-a blocat.
Cel mai bun mod de a arăta diferența dintre aceste trei reguli este de a arăta cum arată atunci când un PC încearcă să facă ping pe o mașină Linux cu iptables configurate pentru fiecare dintre aceste setări.
Permiterea conexiunii:
Renunțarea la conexiune:
Respingerea conexiunii:
Permiterea sau blocarea conexiunilor specifice
Cu lanțurile de politici configurate, puteți configura acum iptables pentru a permite sau bloca anumite adrese, intervale de adrese și porturi. În aceste exemple, vom seta conexiunile la
CĂDERE BRUSCA
, dar le puteți comuta la
ACCEPT
sau
RESPINGE
, în funcție de nevoile dvs. și de modul în care v-ați configurat lanțurile de politici.
Notă: în aceste exemple, vom folosi
iptables -A
pentru a adăuga reguli lanțului existent. iptables începe în partea de sus a listei sale și trece prin fiecare regulă până când găsește una care se potrivește. Dacă trebuie să inserați o regulă deasupra alteia, puteți utiliza
iptables -I [chain] [number]
pentru a specifica numărul care ar trebui să fie în listă.
Conexiuni de la o singură adresă IP
Acest exemplu arată cum să blocați toate conexiunile de la adresa IP 10.10.10.10.
iptables -A INPUT -s 10.10.10.10 -j DROP
Conexiuni dintr-o serie de adrese IP
Acest exemplu arată cum să blocați toate adresele IP din gama de rețea 10.10.10.0/24. Puteți utiliza o notă mască de rețea sau o bară standard pentru a specifica intervalul de adrese IP.
iptables -A INPUT -s 10.10.10.0/24 -j DROP
sau
iptables -A INPUT -s 10.10.10.0/255.255.255.0 -j DROP
Conexiuni la un anumit port
Acest exemplu arată cum să blocați conexiunile SSH de la 10.10.10.10.
iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -j DROP
Puteți înlocui „ssh” cu orice protocol sau număr de port.
-p tcp
o parte din cod spune iptables ce tip de conexiune utilizează protocolul. Dacă blocați un protocol care utilizează UDP mai degrabă decât TCP, atunci
-p udp
ar fi necesar în schimb.
Acest exemplu arată cum să blocați conexiunile SSH de la orice adresă IP.
iptables -A INPUT -p tcp --dport ssh -j DROP
Statele de conexiune
După cum am menționat mai devreme, o mulțime de protocoale vor necesita o comunicare bidirecțională. De exemplu, dacă doriți să permiteți conexiuni SSH la sistemul dvs., lanțurile de intrare și ieșire vor avea nevoie de o regulă adăugată la acestea. Dar, dacă doriți ca SSH să intre în sistemul dvs. să fie permis? Adăugarea unei reguli în lanțul de ieșire nu va permite, de asemenea, încercări de ieșire SSH?
Aici intervin stările de conexiune, care vă oferă capacitatea de care ar trebui să permiteți comunicarea bidirecțională, dar care să permită stabilirea conexiunilor într-un singur sens. Aruncați o privire la acest exemplu, unde conexiunile SSH DE LA 10.10.10.10 sunt permise, dar conexiunile SSH LA 10.10.10.10 nu. Cu toate acestea, sistemului i se permite să trimită înapoi informații prin SSH atâta timp cât sesiunea a fost deja stabilită, ceea ce face posibilă comunicarea SSH între aceste două gazde.
iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -m state --state NEW, STABILIT -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -d 10.10.10.10 -m state --state ESTABLISHED -j ACCEPT
Salvarea modificărilor
Modificările pe care le faceți regulilor dvs. iptables vor fi anulate data viitoare la repornirea serviciului iptables, cu excepția cazului în care executați o comandă pentru a salva modificările. Această comandă poate diferi în funcție de distribuția dvs.:
Ubuntu:
sudo / sbin / iptables-save
Red Hat / CentOS:
/ sbin / service iptables save
Sau
/etc/init.d/iptables save
Alte comenzi
Enumerați regulile iptables configurate în prezent:
iptables -L
Adăugarea
-la
opțiunea vă va oferi informații despre pachete și octeți și adăugarea
-n
va enumera totul numeric. Cu alte cuvinte - numele de gazdă, protocoalele și rețelele sunt listate ca numere.
Pentru a șterge toate regulile configurate în prezent, puteți lansa comanda de spălare.
iptables -F