El teu blog de Linux en català

Iptables és un potent mètode tallafocs per a GNU/Linux. De fet, és més que per a Linux; simplement, és, ja que forma part intrínseca del nucli 2.6. Bàsicament, és una utilitat de l’espai de l’usuari que, per mitjà d’ordres que generalment s’executen seqüencialment en un o diversos scripts del bash, ens permet crear un mur IP infranquejable i usar eines d’enrutament. Era anomenat ipchains per a nuclis iguals o anteriors a la sèrie 2.4. Les ordres d’iptables són sovint creades per frontends com ara el Shorewall, que l’únic que fan és embellir la interfície per a crear l’script que s’executarà. Com sempre dic: si afrontem els problemes des de la base segur que en sortirem molt més satisfets.

Hi ha bastanta literatura sobre el tema encarada a configuracions complexes, com és el cas de passarel·les per a subxarxes DMZ o tallafocs per a topologies de xarxa complicades. Jo em limitaré a explicar com crear un tallafocs d’interfície única (inalàmbrica en aquest exemple concret) per a l’usuari mig i que està pensat per a permetre les connexions de client típiques i denegar tota la resta, aquelles que podrien esdevenir insegures si serveis que no controlem hi escolten.

Vet aquí l’script:

#!/bin/sh
# TALLAFOCS SENZILL EN IPTABLES
#
echo "Executant allafocs en iptables"
#
echo "Esborrant normativa"
#
iptables -F
iptables -X
iptables -Z
iptables -t nat -F
#
echo "Establint politica de denegacio per defecte"
#
iptables -P INPUT DROP
iptables -P OUTPUT DROP
#
echo "Establint normativa general"
#
UNIVERS="0.0.0.0/0"
#
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
#
iptables -A INPUT -i wlan0 -s $UNIVERS -m state --state ESTABLISHED,RELATED -j ACCEPT
#
# FTP (Passiu, comanda passive via prompt)
iptables -A OUTPUT -o wlan0 -d $UNIVERS -p tcp -m tcp --dport 20:21 -j ACCEPT
iptables -A OUTPUT -o wlan0 -d $UNIVERS -p tcp -m tcp --sport 1024:65535 --dport 1024:65535 -j ACCEPT
#
iptables -A OUTPUT -o wlan0 -d $UNIVERS -p tcp --dport 25 -j ACCEPT
iptables -A OUTPUT -o wlan0 -d $UNIVERS -p udp --dport 25 -j ACCEPT
iptables -A OUTPUT -o wlan0 -d $UNIVERS -p tcp --dport 53 -j ACCEPT
iptables -A OUTPUT -o wlan0 -d $UNIVERS -p udp --dport 53 -j ACCEPT
iptables -A OUTPUT -o wlan0 -d $UNIVERS -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -o wlan0 -d $UNIVERS -p tcp --dport 443 -j ACCEPT
#
iptables -A OUTPUT -o wlan0 -d $UNIVERS -p icmp --icmp-type echo-request -j ACCEPT

En primer lloc, diem a iptables que esborri qualsevol regla preexistent. La opció -P defineix la política per defecte del tallafocs: per a les cadenes INPUT i OUTPUT (connexions d’entrada i sortida respectivament) es denega tot. Es defineix una variable amb l’adreça IP comodí (0.0.0.0/0), que vol dir tothom.

Les comandes -A afegeixen (APPEND) regles seqüencialment al tallafocs. Les comandes -A van afegint les excepcions que permetem partint del fet que ho hem denegat TOT en un principi. També podriem haver-ho acceptat tot per defecte i, en acabat, anar restringint el necessari, però és menys segur.

Per començar, permetem a la interfície (-i) loopback entrar i sortir (permetem parlar amb nosaltres mateixos, vaja), i ho fem saltant (-j) a l’estat ACCEPT per les cadenes INPUT i OUTPUT.

Aleshores, per a la interfície inalàmbrica (aquí, wlan0) permetem totes les connexions entrants de qualsevol origen (-i wlan0, -s $UNIVERS) que derivin d’una connexió sortint preexistent. És a dir, que tota connexió que no haguem començat nosaltres no té entrada. Ho fem amb –state, i força aquí sockets establerts (ESTABLISHED) i/o relacionats (RELATED).

Finalment, diem a quins ports de destí pot connectar-se la nostra màquina. Cadena OUTPUT, qualsevol destinació (-d $UNIVERS), connexió nova (–state NEW, […]), ja que aquesta sí que la creem nosaltres, i, el més important, el protocol de transport (UDP o TCP) i el port del servei a destinació. Així, permetem connexions als ports de destí (–dport) associats als serveis FTP (passiu), SSH, SMTP, DNS, HTTP i HTTPS. També permetem l’ICMP, protocol de missatges de control, pel cas del ping sortint.

Per a acabar, salveu l’script i dieu a l’ordinador que l’executi en l’engegada, després de la configuració de la xarxa inalàmbrica, al final del segon runlevel, amb un enllaç simbòlic:

cd /etc/rc2.d
ln -s /cami/a/script.sh S95tallafocs.sh

Si no teniu gaires coneixements en el funcionament d’Internet, el que he explicat és infumable, ho sé. He tractat de simplificar-ho. Comenteu si us interessa.

Si voleu anar més enllà en els la definició de tallafocs podeu mirar aquest tutorial, que està molt bé.