Iptables este un utilitar extrem de flexibil de firewall construit pentru sistemele de operare Linux. Fie că sunteți un novice Linux geek sau un administrator de sistem, există, probabil, o modalitate care iptables poate fi o mare utilizare pentru tine. Citiți mai departe pe măsură ce vă vom arăta cum să configurați cel mai versatil paravan de protecție Linux.
Fotografie de ezioman.
iptables este un utilitar firewall de linie de comandă care utilizează lanțuri de politici pentru a permite sau a bloca traficul. Atunci când o conexiune încearcă să se stabilească pe sistem, iptables caută o regulă din listă pentru a se potrivi cu ea. Dacă nu găsește una, recurge la acțiunea implicită.
iptables aproape întotdeauna vine pre-instalat pe orice distribuție Linux. Pentru a le actualiza / instala, recuperați pachetul iptables:
sudo apt-get instala iptables
Există alternative de GUI pentru iptables, cum ar fi Firestarter, dar iptables nu este cu adevărat atât de greu când ai câteva comenzi în jos. Doriți să fiți foarte atent atunci când configurați regulile iptables, mai ales dacă sunteți SSH'd într-un server, deoarece o comandă greșită vă poate bloca permanent până când este fixată manual la mașina fizică.
iptables utilizează trei lanțuri diferite: intrare, transmitere și ieșire.
Intrare - Acest lanț este utilizat pentru a controla comportamentul conexiunilor primite. De exemplu, dacă un utilizator încearcă să acceseze SSH în PC / server, iptables va încerca să potrivească adresa IP și portul cu o regulă din lanțul de intrări.
Redirecţiona - Acest lanț este utilizat pentru conexiunile de intrare care nu sunt livrate la nivel local. Gândiți-vă la un router - datele sunt întotdeauna trimise către el, dar rareori sunt destinate chiar pentru routerul însuși; datele sunt doar transmise către țintă. Dacă nu faci un fel de rutare, NATing sau altceva în sistemul tău care necesită redirecționare, nu vei folosi nici măcar acest lanț.
Există o metodă sigură pentru a verifica dacă sistemul dvs. utilizează / nu are nevoie de lanțul înainte.
iptables -L -v
Imaginea de mai sus este de un server care rulează câteva săptămâni și nu are restricții la conexiunile 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 înainte, pe de altă parte, nu are nevoie să proceseze un singur pachet. Acest lucru se datorează faptului că serverul nu efectuează niciun fel de redirecționare sau nu este folosit ca un dispozitiv pass-through.
producție - Acest lanț este utilizat pentru conexiuni de ieșire. De exemplu, dacă încercați să ping howtogeek.com, iptables va verifica lanțul de ieșire pentru a vedea ce reguli se referă la ping și howtogeek.com înainte de a lua o decizie de a permite sau de a refuza încercarea de conectare.
Precauția
Chiar dacă ping-ul unei gazde externe pare a fi ceva care ar trebui să treacă doar la lanțul de ieșire, rețineți că pentru a returna datele, lanțul de intrare va fi folosit, de asemenea. Când utilizați iptables pentru a vă bloca sistemul, amintiți-vă că o mulțime de protocoale vor necesita o comunicație bidirecțională, astfel încât lanțurile de intrare și ieșire vor trebui configurate corespunzător. SSH este un protocol comun pe care oamenii uită să le permită pe ambele lanțuri.
Înainte de a intra și a configura reguli specifice, veți dori să decideți ce doriți să fie comportamentul implicit al celor trei lanțuri. Cu alte cuvinte, ce doriți să faceți iptables dacă conexiunea nu se potrivește cu nici o regulă existentă?
Pentru a vedea ce lanțuri de politici sunt în prezent configurate să facă cu trafic de neegalat, executați iptables -L
comanda.
După cum puteți vedea, am folosit și comanda grep pentru a ne oferi o ieșire mai curată. În acea captură de ecran, lanțurile noastre se gândesc în prezent să accepte traficul.
De mai multe ori, veți dori ca sistemul dvs. să accepte conexiunile în mod prestabilit. Dacă nu ați modificat anterior regulile lanțului de politici, această setare ar trebui deja configurată. În orice caz, iată comanda de acceptare a conexiunilor în mod implicit:
iptables - politica INPUT ACCEPT
iptables - policy ACCEPTUL DE EXECUȚIE
iptables - politica FORWARD ACCEPT
Prin nerespectarea regulii de acceptare, puteți utiliza iptables pentru a refuza anumite adrese IP sau numere de port, continuând să acceptați toate celelalte conexiuni. O să ajungem la aceste comenzi într-un minut.
Dacă preferi să refuzați toate conexiunile și să specificați manual pe care doriți să le permiteți să vă conectați, ar trebui să schimbați politica implicită a lanțurilor dvs. Acest lucru ar fi probabil util doar pentru serverele care conțin informații sensibile și care au numai aceleași adrese IP conectate la acestea.
iptables - politica INPUT DROP
iptables - politica OUTPUT DROP
iptables - politica FORWARD DROP
Cu setările prestabilite ale lanțului, 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 peste cele trei "răspunsuri" cele mai de bază și cele mai utilizate.
Accept - Permiteți conexiunea.
cădere brusca - Drop conexiunea, să se comporte ca niciodată nu sa întâmplat. Acest lucru este mai bine dacă nu doriți ca sursa să realizeze existența sistemului dvs.
Respinge - Nu permiteți conexiunea, ci trimiteți o eroare. Acest lucru este mai bine dacă nu doriți ca o anumită sursă să se conecteze la sistemul dvs., dar doriți ca aceștia să știe că firewall-ul dvs. le-a blocat.
Cea mai bună modalitate de a arăta diferența dintre aceste trei reguli este de a arăta cum arată când un PC încearcă să ping o mașină Linux cu iptables configurat pentru fiecare dintre aceste setări.
Permiterea conexiunii:
Descărcarea conexiunii:
Respingerea conexiunii:
Cu lanturile dvs. de politici configurate, puteți configura acum iptables pentru a permite sau bloca adrese specifice, intervale de adrese și porturi. În aceste exemple vom stabili conexiunile CĂDERE BRUSCA
, dar le puteți schimba ACCEPT
sau RESPINGE
, în funcție de nevoile dvs. și de modul în care ați configurat lanțurile de politici.
Notă: în aceste exemple vom folosi iptables -A
pentru a adăuga reguli la lanțul 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ă introduceți o regulă deasupra celeilalte, puteți utiliza iptables -I [lanț] [număr]
pentru a specifica numărul care ar trebui să fie în listă.
Conexiuni de la o singură adresă IP
Acest exemplu arată modul de blocare a tuturor conexiunilor de la adresa IP 10.10.10.10.
iptables -A INPUT -s 10.10.10.10 -j DROP
Conexiuni de la o serie de adrese IP
Acest exemplu arată modul de blocare a tuturor adreselor IP din gama de rețele 10.10.10.0/24. Puteți utiliza o mască netă sau o notație standard pentru slash 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ă modul de blocare a conexiunilor 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 a codului spune iptables ce fel de conexiune utilizează protocolul. Dacă ați blocat un protocol care folosește mai degrabă UDP decât TCP, atunci -p udp
ar fi nevoie în schimb.
Acest exemplu arată modul de blocare a conexiunilor SSH de la orice adresă IP.
iptables -U INPUT -p tcp -dport ssh -j DROP
După cum am menționat mai devreme, multe 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 de ieșire vor avea nevoie de o regulă adăugată la acestea. Dar, dacă vrei doar ca SSH-ul să intre în sistemul tău să fie permis? Nu va adăuga o regulă lanțului de ieșire, de asemenea, permite încercări de ieșire SSH?
Aici intră stările de conectare, care vă oferă capacitatea de care aveți nevoie pentru a permite comunicații în două direcții, dar permite doar stabilirea unor conexiuni într-o singură direcție. Uitați-vă la acest exemplu, în care conexiunile SSH DE 10.10.10.10 sunt permise, dar conexiunile SSH la 10.10.10.10 nu sunt. Cu toate acestea, sistemul are permisiunea de a trimite informații înapoi 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 stat -state NEW, ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -d 10.10.10.10 -m state -state ESTABLISHED -j ACCEPT
Modificările aduse regulilor dvs. iptables vor fi șterse data viitoare când serviciul iptables va fi repornit dacă nu 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 salvați
Sau
/etc/init.d/iptables salvați
Listează regulile iptables configurate în prezent:
iptables -L
Adăugarea -v
opțiune vă va oferi informații despre pachete și octeți și adăugați -N
va lista totul numeric. Cu alte cuvinte - nume de gazde, protocoale și rețele sunt listate ca numere.
Pentru a șterge toate regulile configurate în prezent, puteți emite comanda de tip flush.
iptables -F