Hola.
Será difícil (no digo que imposible) que consigas que alguien te haga el trabajo, pero te diré mi opinión, por lo menos, y postearé un script ya antiguo que hice para un enrutador con tres interfaces eth. Por la 0 iba internet, por la 1 una LAN (un switch) con salida a internet, y por la 2 otra LAN con salida a internet y con acceso a una impresora en la LAN 1, pero sin acceso a ningún otro equipo en esa LAN (la 1).
Revisa bien el forwarding con política por defecto DROP, tienes que abrir paso en los dos sentidos (creo recordar) y abrir interfaces y puertos. También te sería de ayuda utilizar variables en lugar de las ips directamente, por aquello de tener más claro qué cosa es cada cual (por lo menos yo me aclaro mejor así).
Bueno, te posteo lo que hice, que en su día funcionaba, y a ver lo que puedes sacar: (Quede claro que esto lo considero un script de novato, no te fíes tampoco demasiado).
Se me olvidaba: con la política por defecto drop (denegar todo) sólo tienes que preocuparte de lo que hay que permitir, el resto seguirá cerrado, por lo que hacer drop con política por defecto drop es como hacer accept con política por defecto accept: redundante cuando menos.
Código:
# firewall
#
# Script de iptables para una red local con salida a internet y una DMZ
#
# Variables
IPTABLES="/sbin/iptables"
RUTA_SCRIPTS="/root/firewalls"
LO_IFAZ="lo"
LO_IP="127.0.0.1"
INET_IFAZ="eth0"
INET_IP="192.168.0.2"
DMZ_IFAZ="eth1"
DMZ_RANGO_IP="192.168.2.0/24"
LAN_IFAZ="eth2"
LAN_IP="192.168.1.2"
GESTION_IP="192.168.1.10"
IMPRE_IP="192.168.1.200"
# Se permite a otras máquinas salir a través del firewall
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "Aplicando reglas de Firewall..."
# FLUSH de reglas.
$IPTABLES -F
$IPTABLES -X
$IPTABLES -Z
$IPTABLES -t nat -F
# Política por defecto (se rechaza todo)
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -P FORWARD DROP
# El Localhost
$IPTABLES -A INPUT -i $LO_IFAZ -j ACCEPT
$IPTABLES -A OUTPUT -o $LO_IFAZ -j ACCEPT
# Acceso al firewall desde la IP de gestión
$IPTABLES -A INPUT -s $GESTION_IP -j ACCEPT
$IPTABLES -A OUTPUT -d $GESTION_IP -j ACCEPT
# Paquetes desde internet a esta máquina
$IPTABLES -A INPUT -p icmp -i $INET_IFAZ -j ACCEPT
# Apertura de las interfaces para entrada
$IPTABLES -A INPUT -p ALL -i $LO_IFAZ -s $LO_IP -j ACCEPT
$IPTABLES -A INPUT -p ALL -i $LO_IFAZ -s $INET_IP -j ACCEPT
# Para DHCP en la DMZ
$IPTABLES -A INPUT -p udp -i $DMZ_IFAZ --dport 67 --sport 68 -j ACCEPT
# Paquetes desde internet al firewall con conexiones establecidas
$IPTABLES -A INPUT -p ALL -d $INET_IP -m state --state ESTABLISHED,RELATED -j ACCEPT
# Forward (reexpedir) en la LAN y la DMZ para acceso a internet
$IPTABLES -A FORWARD -i $LAN_IFAZ -j ACCEPT
$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -i $DMZ_IFAZ -o $INET_IFAZ -j ACCEPT
$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
# Acceso desde la DMZ a una impresora de la LAN
$IPTABLES -A FORWARD -s $DMZ_RANGO_IP -d $IMPRE_IP -j ACCEPT
$IPTABLES -A FORWARD -s $IMPRE_IP -d $DMZ_RANGO_IP -j ACCEPT
###########################################################################################
# Reenvío entre internet y la LAN. Provisional, aún hay que limitarlo a lo imprescindible.
#
$IPTABLES -A FORWARD -i $INET_IFAZ -o $LAN_IFAZ -j ACCEPT
$IPTABLES -A FORWARD -i $LAN_IFAZ -o $INET_IFAZ -j ACCEPT
###########################################################################################
# Apertura de las interfaces para salida
$IPTABLES -A OUTPUT -p ALL -s $LO_IP -j ACCEPT
$IPTABLES -A OUTPUT -p ALL -s $INET_IP -j ACCEPT
# Apertura de puertos
. $RUTA_SCRIPTS/puertos_abiertos
# Habilita simple IP Forwarding (reexpedición) y Network Address Translation
# Para internet y la impresora
$IPTABLES -t nat -A POSTROUTING -o $INET_IFAZ -j SNAT --to-source $INET_IP
$IPTABLES -t nat -A POSTROUTING -o $LAN_IFAZ -j SNAT --to-source $LAN_IP
echo $0 > /root/firewall_activo
Y el que abre los puertos (que se incluirá en el punto . $RUTA_SCRIPTS/puertos_abiertos)
Código:
# Puertos a abrir en el firewall
#
# Variables.
IPTABLES=/sbin/iptables
SERV_SSH="192.168.1.10:12233"
SERV_MYSQL="192.168.1.10:3306"
SERV_SVN="192.168.1.10:3690"
SERV_POSTGRE="192.168.1.10:5432"
# ssh
$IPTABLES -t nat -A PREROUTING -i $INET_IFAZ -p tcp --dport 12233 -j DNAT --to $SERV_SSH
# Subversion
$IPTABLES -t nat -A PREROUTING -i $INET_IFAZ -p tcp --dport 3690 -j DNAT --to $SERV_SVN
# MySQL
$IPTABLES -t nat -A PREROUTING -i $INET_IFAZ -p tcp --dport 3306 -j DNAT --to $SERV_MYSQL
$IPTABLES -t nat -A PREROUTING -i $INET_IFAZ -p udp --dport 3306 -j DNAT --to $SERV_MYSQL
$IPTABLES -t nat -A PREROUTING -i $INET_IFAZ -p tcp --sport 3306 -j DNAT --to $SERV_MYSQL
$IPTABLES -t nat -A PREROUTING -i $INET_IFAZ -p udp --sport 3306 -j DNAT --to $SERV_MYSQL
# PostgreSQL
$IPTABLES -t nat -A PREROUTING -i $INET_IFAZ -p tcp --dport 5432 -j DNAT --to $SERV_POSTGRE
$IPTABLES -t nat -A PREROUTING -i $INET_IFAZ -p udp --dport 5432 -j DNAT --to $SERV_POSTGRE
$IPTABLES -t nat -A PREROUTING -i $INET_IFAZ -p tcp --sport 5432 -j DNAT --to $SERV_POSTGRE
$IPTABLES -t nat -A PREROUTING -i $INET_IFAZ -p udp --sport 5432 -j DNAT --to $SERV_POSTGRE