Breu introducció a Iptables

Enlace a la versión en castellano

Avui en dia la seguretat és gairebé imprescindible, sobretot si tenim una connexió 24/7. Fer servir un tallafocs és una de les primeres passes que hauríem de fer per tal de començar a fer una mica més segura la nostra màquina/xarxa.

En aquest breu article veurem com es posen en marxa les Iptables per tal de tancar i obrir els ports segons les nostres necessitats.

Per sort per a nosaltres, i a diferència d’alguns sistemes operatius propietaris, gairebé tots (al menys els principals) els sistemes operatius lliures porten de sèrie algun mecanisme de tallafocs. Nosaltres ens limitarem a explicar les Iptables, que és el mecanisme “oficial” des de la branca 2.4 del nucli.

La instal·lació per la banda del kernel no la comentarem massa, donat que gairebé totes les distribucions actuals ho porten de sèrie al nucli (i si algú es compila els nuclis ell mateix segurament ja sabrà quines opcions activar. Pista: Networking Options–>IP: Netfilter Configuration).
Per la banda d’usuari cal baixar el paquet “iptables” (apt-get, emerge, …). Res més.

Aquí hi ha gent que li agrada fer servir scripts i aplicacions estranyes i mig esotèriques per a configurar les Iptables. Nosaltres, per començar ho farem a mà. Així de passada veurem una mica com funciona.

Abans de ficar-nos de cap, donaré un enllaç sobre els coneixements mínims que cal tindre d’Iptables: que és, lògica de funcionament i base.

HOWTO de filtrat de paquets

Bé, com que volem que les Iptables s’engeguin soletes a l’encendre el sistema i les puguem aturar i engegar ràpidament, farem servir els scripts d’init.d. Normalment aquests s’instal·len sols al instal·lar el paquet d’iptables (l’script hauria d’estar a /etc/init.d/iptables o, si la vostra distribució té el directori init.d a un altre lloc, a aquest altre lloc). En cas de no ser així, en podeu trobar un exemple aquí.

Ara cal assegurar-nos que l’script s’engegarà al iniciar el sistema amb la següent ordre (si no ho teníeu fet automàticament per la vostra distribució a l’instal·lar el paquet):

A Debian seria un cosa així:
update-rc.d iptables defaults

Mentre que a Gentoo seria:
rc-update add iptables default

Si no teniu cap d'aquestes dos utilitats, sempre ho podeu fer a mà a la manera tradicional:
  1) mirar quin runlevel és el que executem amb la següent comanda:
    runlevel

  2) anar al directori del runlevel:
    cd /etc/rcX.d
    o a algunes altres distribucions:
    cd /etc/init.d/rcX.d
    substituint la  "X" de "rcX.d" el número de runlevel que ens ha dit la comanda del punt 1

  3) crear l'enllaç simbòlic adequat:
    ln -s /etc/init.d/iptables S20iptables

Un cop instalat, configurat i a punt, ens assegurarem que no hi ha cap regla d’iptables molestant:

iptables -F

I procedirem a afegir les nostres regles (aquí dono un exemple bàsic):

iptables -A INPUT -i lo -s 127.0.0.0/8 -j ACCEPT
iptables -A INPUT -i eth0 -p TCP --dport 22 -m state --state NEW -j ACCEPT
iptables -A INPUT -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -j DROP

La primera línia ens indica que volem que es puguin establir connexions amb un mateix, via l'interfície de loopback.

La línia de --dport 22, indica que el port 22 en aquest cas volem que estigui obert. Justament desprès de la primera línia haurem d'afegir tantes com vulguem amb la mateixa forma i canviant el 22 pel port que vulguem deixar obert. També es poden enumerar rangs amb el format inici-fi (exemple: el rang "22-80" serien tots els ports entre el 22 i el 80, ambdós inclosos).Cal canviar eth0 pel dispositiu adequat.

La tercera línia permet que les connexions que nosaltres establim cap a l'exterior tinguin permís per entrar. Cal canviar eth0 pel dispositiu adequat. Sense aquesta línia no ens retornaria cap paquet (no el deixaríem entrar).

La quarta línia permet que entrin els paquets ICMP (principalment pings).

La darrera línia impedeix que entri qualsevol altra cosa.

Si teniu regles pròpies (prerouting, postrouting, …), fiqueu-les on convingui en l’ordre adequat, tenint en compte que primer permetem unes quantes coses i amb la darrera línia impedim tota la resta. Així permetent explícitament ens estalviem maldecaps per haver-nos deixat quelcom obert.

Finalment, per tal d’aconseguir que aquestes regles s’activin automàticament a l’engegar el sistema, farem el següent:

Primer ens assegurarem que tenim el directori destí /var/lib/iptables, i si fes falta el crearíem:
mkdir /var/lib/iptables

I a continuació fem un:
/etc/init.d/iptables save active

I per a quan vulguem parar-les hi ha dues possibilitats a saver:
a) Que al parar les iptables via “/etc/init.d/iptables stop” deixem el tallafocs sense cap regla:

iptables -F
/etc/init.d/iptables save inactive

b) O que deixem només la regla que impedeix totes les connexions entrants:

iptables -F
iptables -A INPUT -j DROP
/etc/init.d/iptables save inactive

Un cop fet això, trobarem a /var/lib/iptables dos fitxers: “active” i “inactive”, que podrem modificar posteriorment per a modificar/treure/afegir regles a qualsevol dels dos estats (active quan fem un start i inactive al fer l’stop).

Per finalitzar fem un:

iptables -F
/etc/init.d/iptables start

I ja les tindrem funcionant.
Convindria assegurar-nos del seu funcionament amb eines tals com l’nmap (si no les sabeu fer anar, sempre us podeu passar pel servidor irc.freenode.org, canal #gplurv i demanar que us facin un escaneig).
Autor: sergi

This entry was posted in Seguretat. Bookmark the permalink.

2 Responses to Breu introducció a Iptables

  1. Anonymous says:

    > iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT

    Es aconsellable indicar el tipus de conexió entrar per evitar que ens “juguin” amb el port:

    iptables -A INPUT -i eth0 -p TCP --dport 22 -m state --state NEW -j ACCEPT

    > iptables -A INPUT -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT

    Amb related crec que ja es suficient aquí.

    Bon artícle, gràcies.

  2. sergi says:

    Si, per algun motiu m’havia oblidat del “-i eth0”, i sempre és bona idea mirar l’state.

    Per altra banda, la part de “RELATED,ESTABLISHED”, si bé no entraría dins del camp de l’article, si que l’explicarè una mica aquí al comentari.

    Breument, per introduir, dirè que hi ha 4 estats:
    INVALID – un paquet d’una connexió desconeguda
    NEW – connexió començada, o que està associat a una connexió que no ha vist paquets en ambes direccions
    ESTABILISHED – el paquet està associat amb una connexió que ha vist paquets en ambes direccions
    RELATED – el paquet està començant una nova connexió però està associat amb una connexió existent, tal com la trasferència de dades FTP o un error ICMP

    Per tant, seguint aquesta definició (copiada del man iptables), tots dos estats s’han d’indicar. No nomès volem deixar entrar paquets que inicien una connexió associada a una altra, sinò també a les connexions ja establertes.


    bow before me, for I’m root
    si el programari lliure no és la resposta, la pregunta és errònia

Leave a Reply