La Guia per a principiants d’iptables, el tallafoc de Linux

Iptables és una utilitat de tallafocs extremadament flexible creada per als sistemes operatius Linux. Tant si sou un friki de Linux novell com si sou administrador del sistema, probablement hi hagi alguna manera que els iptables us puguin fer un bon ús. Seguiu llegint mentre us mostrem com configurar el tallafoc Linux més versàtil.

Foto de ezioman.

Quant a iptables

iptables és una utilitat de tallafoc de línia d'ordres que utilitza cadenes de polítiques per permetre o bloquejar el trànsit. Quan una connexió intenta establir-se al vostre sistema, iptables cerca una regla a la seva llista amb la qual coincidir. Si no en troba cap, recorre a l'acció predeterminada.

iptables gairebé sempre es preinstal·la en qualsevol distribució de Linux. Per actualitzar-lo / instal·lar-lo, només cal recuperar el paquet iptables:

sudo apt-get install iptables

Hi ha alternatives d’interfície gràfica d’usuari a iptables com Firestarter, però iptables no és tan difícil un cop tingueu algunes ordres avall. Voleu tenir molta precaució a l’hora de configurar les regles d’iptables, sobretot si utilitzeu SSH en un servidor, perquè una ordre incorrecta us pot bloquejar permanentment fins que es fixi manualment a la màquina física.

Tipus de cadenes

iptables utilitza tres cadenes diferents: entrada, reenviament i sortida.

Entrada - Aquesta cadena s’utilitza per controlar el comportament de les connexions entrants. Per exemple, si un usuari intenta SSH al vostre PC / servidor, iptables intentarà fer coincidir l'adreça IP i el port amb una regla de la cadena d'entrada.

Endavant - Aquesta cadena s’utilitza per a les connexions entrants que no s’estan lliurant localment. Penseu en un enrutador: sempre s’hi envien dades, però poques vegades es destinen al router mateix; les dades s’envien al seu objectiu. A menys que feu algun tipus d’encaminament, NATing o alguna cosa més al vostre sistema que requereixi reenviament, ni tan sols utilitzarà aquesta cadena.

Hi ha una manera segura de comprovar si el vostre sistema utilitza o no la cadena directa.

iptables -L -v

La captura de pantalla anterior és d’un servidor que s’executa des de fa unes setmanes i que no té restriccions a les connexions entrants o sortints. Com podeu veure, la cadena d’entrada ha processat 11 GB de paquets i la de sortida ha processat 17 GB. Per contra, la cadena directa no ha necessitat processar ni un sol paquet. Això es deu al fet que el servidor no fa cap tipus de reenviament ni s’utilitza com a dispositiu de transmissió.

Sortida - Aquesta cadena s'utilitza per a connexions sortints. Per exemple, si proveu de fer ping a howtogeek.com, iptables comprovarà la cadena de sortida per veure quines són les regles relatives a ping i howtogeek.com abans de prendre una decisió per permetre o denegar l'intent de connexió.

L’avís

Tot i que fer ping a un amfitrió extern sembla una cosa que només hauria de travessar la cadena de sortida, tingueu en compte que per retornar les dades, també s’utilitzarà la cadena d’entrada. Quan utilitzeu iptables per bloquejar el vostre sistema, recordeu que molts protocols requeriran una comunicació bidireccional, de manera que cal configurar correctament les cadenes d’entrada i sortida. SSH és un protocol comú que la gent oblida permetre en ambdues cadenes.

Comportament predeterminat de la cadena de polítiques

Abans d’entrar i configurar regles específiques, voldreu decidir quin voleu que sigui el comportament predeterminat de les tres cadenes. Dit d’una altra manera, què voleu que facin iptables si la connexió no coincideix amb cap norma existent?

Per veure què configuren actualment les vostres cadenes de polítiques per fer amb el trànsit sense igual, executeu el fitxer iptables -L comandament.

Com podeu veure, també hem utilitzat l'ordre grep per proporcionar-nos una sortida més neta. En aquesta captura de pantalla, actualment es calcula que les nostres cadenes accepten trànsit.

Més vegades, voldreu que el vostre sistema accepti connexions de manera predeterminada. Tret que hàgiu canviat les regles de la cadena de polítiques anteriorment, aquesta configuració ja s'hauria de configurar. En qualsevol cas, aquí teniu l'ordre per acceptar connexions per defecte:

iptables --policy INPUT ACCEPT


iptables --policy ACCEPTES DE SORTIDA


iptables --policy ACCEPTE DE FORWARD

Si defecteu la regla d’acceptació, podeu utilitzar iptables per denegar adreces IP o números de port específics, mentre continueu acceptant la resta de connexions. Arribarem a aquestes ordres en un minut.

Si preferiu negar totes les connexions i especificar manualment quines voleu permetre connectar, heu de canviar la política predeterminada de les vostres cadenes per deixar-la caure. Fer-ho probablement només seria útil per als servidors que contenen informació confidencial i que sempre tenen les mateixes adreces IP connectades.

iptables --policy INPUT DROP


iptables --policy OUTPUT DROP


iptables --policy FORWARD DROP

Respostes específiques de connexió

Amb les vostres polítiques de cadena predeterminades configurades, podeu començar a afegir regles a iptables perquè sàpiga què fer quan troba una connexió des de o cap a una adreça o port IP específics. En aquesta guia, repassarem les tres "respostes" més bàsiques i d'ús més habitual.

Accepta - Permetre la connexió.

Tirar - Suprimiu la connexió, feu com si mai no hagués passat. Això és millor si no voleu que la font s’adoni que el vostre sistema existeix.

Rebutjar - No permeteu la connexió, però envieu un error. Això és millor si no voleu que una font concreta es connecti al vostre sistema, però voleu que sàpiguen que el tallafoc els ha bloquejat.

La millor manera de mostrar la diferència entre aquestes tres regles és mostrar com és quan un PC intenta fer ping a una màquina Linux amb iptables configurats per a cadascun d’aquests paràmetres.

Permetent la connexió:

Eliminació de la connexió:

Rebutjant la connexió:

Permetre o bloquejar connexions específiques

Amb les vostres cadenes de polítiques configurades, ara podeu configurar iptables per permetre o bloquejar adreces, intervals d’adreces i ports específics. En aquests exemples, establirem les connexions a TIRAR, però podeu canviar-los a ACCEPTAR o bé REBUTJAR, en funció de les vostres necessitats i de la configuració de les vostres cadenes de polítiques.

Nota: en aquests exemples farem servir iptables -A per afegir regles a la cadena existent. iptables comença a la part superior de la llista i recorre cada regla fins que en troba una que coincideix. Si heu d'inserir una regla per sobre d'una altra, podeu utilitzar-la iptables -I [cadena] [número] per especificar el número que hauria de figurar a la llista.

Connexions des d’una única adreça IP

Aquest exemple mostra com bloquejar totes les connexions des de l'adreça IP 10.10.10.10.

iptables -A INPUT -s 10.10.10.10 -j DROP

Connexions des d'un ventall d'adreces IP

Aquest exemple mostra com bloquejar totes les adreces IP de l’interval de xarxa 10.10.10.0/24. Podeu utilitzar una màscara de xarxa o una notació de barra estàndard per especificar l'interval d'adreces IP.

iptables -A INPUT -s 10.10.10.0/24 -j DROP

o bé

iptables -A INPUT -s 10.10.10.0/255.255.255.0 -j DROP

Connexions a un port específic

Aquest exemple mostra com bloquejar les connexions SSH des del 10.10.10.10.

iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -j DROP

Podeu substituir "ssh" per qualsevol protocol o número de port. El -p tcp una part del codi indica a iptables quin tipus de connexió utilitza el protocol. Si esteu bloquejant un protocol que utilitza UDP en lloc de TCP, llavors -p udp seria necessari en el seu lloc.

Aquest exemple mostra com bloquejar les connexions SSH des de qualsevol adreça IP.

iptables -A INPUT -p tcp --dport ssh -j DROP

Estats de connexió

Com hem esmentat anteriorment, molts protocols requeriran una comunicació bidireccional. Per exemple, si voleu permetre les connexions SSH al vostre sistema, les cadenes d’entrada i sortida necessitaran que s’afegeixi una regla. Però, i si només voleu que es permeti l'entrada SSH al vostre sistema? L’addició d’una regla a la cadena de sortida no permetrà els intents SSH sortints?

És aquí on entren els estats de connexió, que us proporcionen la capacitat que necessiteu per permetre la comunicació bidireccional, però només permeten establir connexions d’un sol sentit. Mireu aquest exemple, on es permeten les connexions SSH DE 10.10.10.10, però no les connexions SSH A 10.10.10.10. Tanmateix, es permet al sistema enviar informació a través de SSH sempre que la sessió ja estigui establerta, cosa que fa possible la comunicació SSH entre aquests dos hosts.

iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -m state --state NEW, ESTABLISHED -j ACCEPT

iptables -A OUTPUT -p tcp --sport 22 -d 10.10.10.10 -m state --state ESTABLISHED -j ACCEPT

S'estan desant els canvis

Els canvis que feu a les regles d’iptables s’anul·laran la propera vegada que es reiniciï el servei iptables tret que executeu una ordre per desar els canvis. Aquesta ordre pot variar en funció de la vostra distribució:

Ubuntu:

sudo / sbin / iptables-save

Red Hat / CentOS:

/ sbin / service iptables save

O bé

/etc/init.d/iptables guardar

Altres ordres

Enumereu les regles d’iptables configurades actualment:

iptables -L

Afegint el fitxer -v L'opció us proporcionarà informació sobre paquets i bytes, i afegint -n llistarà tot numèricament. Dit d’una altra manera: els noms d’amfitrió, els protocols i les xarxes s’enumeren com a números.

Per esborrar totes les regles configurades actualment, podeu emetre l'ordre de flush.

iptables -F