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
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
Si, diría que es redundante, pero nunca viene de más 🙂