IPtables

De castillowiki
Saltar a: navegación, buscar

Filter

NAT

La taula NAT té 3 chains: PREROUTING, OUTPUT i POSTROUTING. Quant un paquet arriba al router però no està dirigit a la seua IP, ha de fer forward, és a dir, passar a través de dos targetes per tal de se encaminat a un altre router. Això es fa en la taula d'enrutament. Dins, pot decidir tractar el paquet en algun procés local o enviar-lo. En qualsevol cas, passa finalment per POSTROUTING. Si volem tradiur les direccions per tal de fer el NAT, s'ha de fer una vegada s'ha decidit a quina xarxa s'ha de reenviar el paquet, és a dir, en el POSTROUTING.

Entrada   +------------+         +------------+        +-------------+
--------> | PREROUTING | ----->  | Enrutament | -----> | POSTROUTING | ------> Eixida
          +------------+         +------------+        +-------------+  
                                       |                      ^              
                                       |                      |
                                       v                      |
                                 +--------------+        +-----------+
                                 | procés local | -----> |  OUTPUT   |
                                 +--------------+        +-----------+

NAT implica dos coses:

  • Traduir les direccions internes de la xarxa en una direcció externa.
  • Permetre que els paquets que arriben de l'exterior fins a la xarxa interna en una connexió ja establida siguen redireccionats al client que toca.

Casos resolts

Router simple

Si tenim dos xarxes i sols volem una comunicació entre elles sense NAT:

# sed -i -r 's/#(net.ipv4.ip_forward)/\1/' /etc/sysctl.conf 
# echo 1 > /proc/sys/net/ipv4/ip_forward

Després cal modificar les taules d'enrutament de les dues xarxes. Exemples en route i, més modern, ip route:

  1. route add -net 192.168.3.0 netmask 255.255.255.0 gw 192.168.1.254
  2. ip route add 192.168.3.0/24 via 192.168.1.254 dev eth1

Router simple en NAT

Si volem connectar una xarxa interna a Internet, en IPv4 és normal que les direccions internes no siguen úniques en Internet. Per tant, cal emmascarar la nostra IP interna amb la IP externa que té el servidor que fa de router.

# sed -i -r 's/#(net.ipv4.ip_forward)/\1/' /etc/sysctl.conf 
# echo 1 > /proc/sys/net/ipv4/ip_forward
# iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o eth0 -j MASQUERADE
# apt install iptables-persistent
# iptables-save > /etc/iptables/rules.v4

Tot el que, després de decidir quin enrutament ha de tindre, va per la nic eth0, serà traduït per NAT.

Explicació de les Iptables: En aquest cas, estem modificant la taula de nat. Li afegim una regla al POSTROUTING de, tots els paquets que venen de la xarxa 192.168.2.0/24, passen per la taula d'enrutament i són encaminats a la nic eth0, fer un MASQUERADE, és a dir, traduir les direccions internes en la direcció externa del router.

Podem fer NAT en connexions entre xarxes internes. Però pot no ser necessari.

Router amb tallafocs i NAT

Si el router que estem configurant està connectat a Internet, és necessari fer primer un tallafocs i després anar obrint les mínimes coses possibles.

Primer de tot, eliminar totes les regles:

# iptables -F
# iptables -t nat -F 

A continuació establir les polítiques per defecte de les IPtables a les més restrictives possible:

# iptables -P INPUT DROP
# iptables -P OUTPUT DROP
# iptables -P FORWARD DROP

Explicació de les Iptables: L'opció -P permet modificar les regles per defecte, les que no estan en l'espai d'usuari. Les 3 chains queden totalment tallades.

I ara obrim a possibilitat de fer forward, amés del nat:

Permetre accedir a l'exterior des de la xarxa interna.

# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# iptables -A FORWARD -i eth0 -o eth2 -j ACCEPT
# iptables -A FORWARD -o eth0 -i eth2 -j ACCEPT

Zona desmilitaritzada

La configuració anterior pot no ser suficient, ja que deixa exposat el forward a qualsevol màquina externa, interna i qualsevol port. Una configuració més adequada seria fer el que es coneix com a zona desmilitaritzada.

Enllaços

Capa de xarxa#Routers Configuració de la xarxa en Linux