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
Molt bon resum, el que hauria donat jo per aquest resum fa uns anys 🙂
Llàstima que he arribat tard! Però gràcies 😀
Jo no arribo tard! calen deu minuts també per llegir el text, jejeje! Conyes a banda, molt molt interessant. Bona feina!
muy bien peo no tanto