Ayuda con IPTABLES

Pues resulta que he montado un servidor con debian sarge que hace de router/firewall (entre otras cosas) entre una LAN con clientes Windows ME [buuuaaaa]

Es decir, el servidor tiene dos tarjetas de red, una (eth1) está conectada al router ADSL, y la otra (eth0) está conectada a los clientes windows mediante un switch.

La sub-red entre el router y el servidor es 192.168.0.0/24 (el router es 192.168.1.1 y el servidor es 192.168.1.2). La sub-red LAN es 10.0.0.0/8 (el servidor es 10.0.0.2).

Lo que quiero hacer:
- Permitir que todos los cliente puedan acceder al servidor (tengo dhcp,samba, cups ...).
- Permitir a un único cliente (10.0.0.11) conectarse a internet por los puertos HTTP y HTTPS.
- Permitir conexiones al servidor desde el exterior por SSH.

Pero llevo toda la tarde probando, y cuando consigo una cosa, deja de funcionar otra [tomaaa]

Este es el último script (lo acabo de retocar, pero no lo he probado, porque ahora estoy en mi casa):

#!/bin/bash

## FLUSH de reglas
/sbin/iptables -F
/sbin/iptables -X
/sbin/iptables -Z
/sbin/iptables -t nat -F

## Establecemos politica por defecto
/sbin/iptables -P INPUT ACCEPT
/sbin/iptables -P OUTPUT ACCEPT
/sbin/iptables -P FORWARD ACCEPT
/sbin/iptables -t nat -P PREROUTING ACCEPT
/sbin/iptables -t nat -P POSTROUTING ACCEPT

## Empezamos a filtrar
## Nota: eth1 es el interfaz conectado al router y eth0 a la LAN
# El localhost se deja
/sbin/iptables -A INPUT -i lo -j ACCEPT

# Al firewall tenemos acceso desde la red local
/sbin/iptables -A INPUT -s 10.0.0.0/8 -i eth0 -j ACCEPT

# Abrimos el puerto SSH
/sbin/iptables -A INPUT -s 0.0.0.0/0 -p tcp --dport 2022 -j ACCEPT

## Ahora con regla FORWARD filtramos el acceso de la red local
## al exterior. Como se explica antes, a los paquetes que no van dirigidos al
## propio firewall se les aplican reglas de FORWARD

# Aceptamos que vayan a puertos 80
/sbin/iptables -A FORWARD -s 10.0.0.11/8 -i eth0 -p tcp --dport 80 -j ACCEPT

# Aceptamos que vayan a puertos https
/sbin/iptables -A FORWARD -s 10.0.0.11/8 -i eth0 -p tcp --dport 443 -j ACCEPT

# Aceptamos que consulten los DNS
/sbin/iptables -A FORWARD -s 10.0.0.11/8 -i eth0 -p tcp --dport 53 -j ACCEPT
/sbin/iptables -A FORWARD -s 10.0.0.11/8 -i eth0 -p udp --dport 53 -j ACCEPT

# Y denegamos el resto. Si se necesita alguno, ya avisaran
/sbin/iptables -A FORWARD -s 10.0.0.0/8 -i eth0 -j DROP

# Ahora hacemos enmascaramiento de la red local
# y activamos el BIT DE FORWARDING (imprescindible!!!!!)
/sbin/iptables -t nat -A POSTROUTING -s 10.0.0.0/8 -o eth1 -j MASQUERADE

# Con esto permitimos hacer forward de paquetes en el firewall, o sea
# que otras máquinas puedan salir a traves del firewall.
echo 1 > /proc/sys/net/ipv4/ip_forward

## Y ahora cerramos los accesos indeseados del exterior:
# Nota: 0.0.0.0/0 significa: cualquier red

# Cerramos el rango de puerto bien conocido
/sbin/iptables -A INPUT -s 0.0.0.0/0 -p tcp -dport 1:1024 -j DROP
/sbin/iptables -A INPUT -s 0.0.0.0/0 -p udp -dport 1:1024 -j DROP



¿Está bien? ¿Me estoy liando mucho?
/sbin/iptables -P INPUT ACCEPT
/sbin/iptables -P OUTPUT ACCEPT
/sbin/iptables -P FORWARD ACCEPT
/sbin/iptables -t nat -P PREROUTING ACCEPT
/sbin/iptables -t nat -P POSTROUTING ACCEPT


Eso es una BadThing(TM) desde el punto de vista de la seguridad. La idea es cerrar todo y permitir SOLO lo necesario.

Una vez corras el script sería interesante que pegaras la salida de iptables -L

Saludos.Ferdy
1 respuesta