Firewall iptables en 10 minuts

Per compartir Internet i protegir el nostre equip utilitzarem el firewall “iptables” del kernel de Linux.



Per començar ens assegurem que no hi ha cap regla definida al firewall fent neteja de les 3 taules principals que disposa: filter (per defecte), nat (consultada quan un paquet crea una nova connexió) i mangle (especifica per alteració de paquets).

iptables -t filter -F
iptables -t nat -F
iptables -t mangle -F

Establim una política per defecte, la qual pot ser REJECT, DROP (descarta paquet sense avisar l’altre extrem) o ACCEPT:

# Politica general
iptables -t filter -P INPUT DROP
iptables -t filter -P OUTPUT DROP
iptables -t filter -P FORWARD DROP

# Politica de las cadenas extendidas
iptables -t mangle -P INPUT ACCEPT
iptables -t mangle -P OUTPUT ACCEPT
iptables -t mangle -P PREROUTING ACCEPT
iptables -t mangle -P POSTROUTING ACCEPT

iptables -t nat -P OUTPUT ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT

En aquest cas descartem els paquets que arribin a la cadena INPUT, OUTPUT i FORWARD.

Per compartir la connexió, en primer lloc haurem d’activar el forward de trafic:

echo 1 > /proc/sys/net/ipv4/ip_forward

I a continuació activem NAT per l’interficie “eth0”:

# Habilito el NAT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Amb aquests 2 últims sentencies ja hem compartit l’accés a Internet (es poden obviar si no es desitja activar la compartició).

En general, és recomanable permetre el trafic ICMP:

# Dejo pasar los paquetes ICMP
iptables -t filter -A INPUT -i eth0 -p ICMP -j ACCEPT

Si volem, com que per defecte descartem tots els paquets, ara es el moment a on podem obrir ports d’entrada com per exemple 80 (Web) y 22 (SSH):

# Acepto conexiones al puerto 80 (HTTP)
iptables -t filter -A INPUT -i eth0 -p TCP --dport 80 -m state --state NEW  -j ACCEPT

# Acepto conexiones al puerto 22 (SSH)
iptables -t filter -A INPUT -i eth0 -p TCP --dport 22 -m state --state NEW  -j ACCEPT

Si volem permetre l’accés cap a servidors web:

iptables -t filter -A OUTPUT -o eth0 -p TCP --dport 80 -j ACCEPT

En general, lo més còmode es permetre tots els paquets de sortida, tot i que les recomanacions de seguretat sempre són tancar per defecte i obrir només lo que necessitem:

iptables -t filter -A OUTPUT -o eth0 -j ACCEPT

Finalment, acceptem tots els paquets de connexions ja establertes (e.g. relacionats amb el port 80) i descartem noves connexions (tan directes com forwarded):

# Acepto paquetes de conexiones ya establecidas
iptables -t filter -A INPUT -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT

# Rechazo paquetes de conexiones nuevas
iptables -t filter -A INPUT -i eth0 -m state --state NEW,INVALID -j DROP

# Rechazo paquetes de forwarding de conexiones no establecidas
iptables -t filter -A FORWARD -i eth0 -m state --state NEW,INVALID -j DROP

A més a més, es possible que ens interessi redirigir un port de la nostra màquina a una altra màquina de la xarxa local, per exemple redirigir el nostre port 80 a la IP 192.168.0.111

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 192.168.0.111:80
iptables -t filter -A FORWARD -i eth0 -p tcp -d 192.168.0.111 --dport 80 -j ACCEPT

4 thoughts on “Firewall iptables en 10 minuts”

Leave a Reply

Your email address will not be published. Required fields are marked *