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

Autor: Marble

This entry was posted in GPL Tarragona. Bookmark the permalink.

2 Responses to Firewall iptables en 10 minuts

  1. Paco says:

    Aunque sea una pregunta tonta, pero no entiendo porque deniegas las conexiones nuevas en INPUT si ya tienes puesto DROP por defecto.
    No estoy muy puesto en iptables, pero no estoy seguro de esa regla.
    Gracias

  2. Administrator says:

    Si, diría que es redundante, pero nunca viene de más 🙂

Leave a Reply