Ghidul începătorului pentru iptables, Firewall-ul Linux
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.
Despre iptables
iptables este un utilitar firewall de linie de comandă care utilizează lanțuri de politici pentru a permite sau bloca traficul. Atunci când o conexiune încearcă să se stabilească pe sistemul dvs., iptables caută o regulă în lista sa 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 GUI pentru iptables, cum ar fi Firestarter, dar iptables nu este cu adevărat atât de greu după ce 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ă.
Tipuri de lanțuri
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 intrare.
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 modalitate sigură de 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 sunt legate de ping și howtogeek.com înainte de a lua o decizie de a permite sau de a refuza încercarea de conectare.
Atenția
Chiar dacă ping-ul unei gazde externe pare a fi ceva ce 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 de ieșire vor trebui configurate corespunzător. SSH este un protocol comun pe care oamenii uită să le permită pe ambele lanțuri.
Comportamentul implicit al lanțului de politici
Înainte de a intra și de 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 normele existente?
Pentru a vedea ce lanțuri de politici sunt în prezent configurate să facă cu traficul 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 gândesc în prezent să accepte traficul.
De mai multe ori, veți dori ca sistemul dvs. să accepte conexiunile în mod prestabilit. Cu excepția cazului în care ați modificat anterior regulile lanțului de politici, această setare ar trebui deja configurată. În orice caz, iată comanda de a accepta implicit conexiunile:
iptables - politica INPUT ACCEPT
iptables - policy ACCEPTUL DE PRODUCERE
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ă preferați 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. Acest lucru ar fi probabil util doar pentru serverele care conțin informații sensibile și doar au aceleași adrese IP conectate la ele.
iptables - politica INPUT DROP
iptables - politica OUTPUT DROP
iptables - politica FORWARD DROP
Răspunsuri specifice conexiunii
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 către o anumită adresă IP sau port. În acest ghid, vom trece peste cele trei "răspunsuri" cele mai de bază și utilizate cel mai frecvent,.
Accept - Permiteți conexiunea.
cădere brusca - Aruncați conexiunea, acționați ca și cum nu sa întâmplat niciodată. 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 să arătați 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:
Permiterea sau blocarea conexiunilor specifice
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 ș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 folosi 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țea 10.10.10.0/24. Puteți utiliza o mască de rețea sau o notație 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ă 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 din cod spune iptables ce fel de conexiune folosește 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 -A INPUT -p tcp -dport ssh -j DROP
Starea conexiunii
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 de ieșire vor avea nevoie de o regulă adăugată la acestea. Dar, dacă vrei doar ca SSH 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 pe două căi, dar permite doar stabilirea unor conexiuni într-o singură direcție. Uitați-vă la acest exemplu, în cazul în care conexiunile SSH DIN 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 acești doi 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
Salvarea modificărilor
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
Alte comenzi
Listează regulile iptables configurate în prezent:
iptables -L
Adăugarea -v
opțiunea 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