Necesito configurar iptables para el sigiente caso:
1) Ordenador A tiene Linux y hara de router. Recibe internet a traves de ADSL con ip dinamica. Etho es 192.168.2.10.254, eth1 es 192.168.20.254. Ademas en el se configuraria el firewall. Se que mejor seria que el firewall y router serian maquinas diferentes pero no hay tanto dinero.
2) Ordenandor B sirve web, correo y FTP. Ip 192.168.3.2 en la red 192.168.3.0/24
3) Una LAN con ip network 192.168.20.0/24
Politica por defecto DROP.
Lo que pretendo es que los servidores se vean tanto desde la LAN como desde el exterior. Que desde el servidor web se pueda acceder a una base de datos( por ejemplo mySql, Postgred …) que se aloja en la LAN.
Que la LAN pueda salir al exterior en web y correo. Tanto en el susdicho servidor como a otros.
Posibilidad que tanto desde LAN como desde el exterior se pueda administrar el servidor como el firewall con webmin.
Posibilidad que desde una ip fija externa (por ejemplo para trabajadores) se pueda acceder a la LAN.
Denegar resto de servicios.
Supongo que lo que digo es bastante usual. Asi que imagino que alguien ha realizado el trabajo laborioso de configurarlo. Si ademas no le importa publicarlo se lo agradeceria. O pude que ya este publicado en alguno lugar. He buscado un rato y no lo veo.
He visto el script que adjunto en http://www.pello.info/filez/firewall/iptables.html. Por cierot muy bueno. Pero no tiene el mismo caso con politica por defecto DROP para mi caso concreto. Asi que tome uno que tiene con politica por defecto ACCEPT y lo he modificado un poco para mi caso concreto.
La situacion actual es la siguiente.
Puedo acceder a los servicios WEB(53,80) y MAIL(53,25,110,143) desde la Red Local
Puedo acceder a los servicios MAIL(53,25,110,143) desde el exterior (Comprobado enviando y recibiendo e-mails entre una cuenta de hotmail y una del propio servidor.
PERO NO PUEDO a los servicios WEB(53,80) desde el exterior.
Tengo acceso a Internet con Telefonica. IP Dinamica y para resolver lo de la ip dinamica uso los servicios de www.no-ip.com. Con un programa en el servidor les envio mi @ip cada vez que cambia. Asi en el exterior simpre estoy localizado. Aunque mi objetivo una vez acabdas las pruebas es hacerlo con una ip fija.
A continuacion publico el script que utilizo por si alguien me puede decir donde esta el error. Gracias.
#!/bin/sh ## SCRIPT de IPTABLES - ejemplo del manual de iptables ## Ejemplo de script para firewall entre red-local e internet con DMZ
##
## Pello Xabier Altadill Izura
## www.pello.info - [email protected]
echo -n Aplicando Reglas de Firewall...
## FLUSH de reglas
iptables -F
iptables -X
iptables -Z
iptables -t nat -F
## Establecemos politica por defecto
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
## Empezamos a filtrar ## Nota: eth0 es el inerfaz conectado al router y eth1 a la LAN
# Para mi caso concreto: # eth0 conecta con WEB servers ---eth2 en el manual de Peio # eth1 concetca con LAN ---> Mantiene la misma que Peio # ppp0 conceta con internet --> eth0 en manual de Peio # 192.168.2. son lo que 192.168.10. en el manual de Peio
# 192.168.3. mantiene lo mismo que Peio #Ademas voy a realizar lo mismo pero con variables.
INT_ROUTER_EXT="ppp0"
INT_ROUTER_LAN="eth1"
INT_ROUTER_WEB="eth0"
BUCLE_LOCAL="lo"
IP_WEB="192.168.3.2"
IP_MAIL="192.168.3.2"
IP_FTP="192.168.3.2"
IP_DNS="192.168.3.2"
IP_NOIP="192.168.3.2"
IP_LAN_BBDD="192.168.2.20"
RED_LOCAL="192.168.2.0/24"
RED_WEB="192.168.3.0/24"
RED_TODAS="0.0.0.0/0"
PUERTO_WEB="80"
PUERTO_HTTPS="443"
PUERTO_SMTP="25"
PUERTO_POP="110"
PUERTO_IMAP="143"
PUERTO_DNS="53"
PUERTO_FTP="21"
PUERTO_NOIP="8245"
PUERTO_BBDD="5432"
PUERTO_TERMINAL_SERVER="3389"
PUERTO_WEBMIN="10000"
# Todo lo que venga por el exterior y vaya al puerto 80 lo redirigimos # a una maquina interna
iptables -t nat -A PREROUTING -i $INT_ROUTER_EXT -p tcp --dport $PUERTO_WEB -j DNAT --to $IP_WEB:$PUERTO_WEB
# Los accesos de un ip determinada HTTPS se redirigen e esa
# maquina iptables -t nat -A PREROUTING -i $INT_ROUTER_EXT -p tcp --dport $PUERTO_HTTPS -j DNAT --to $IP_WEB:$PUERTO_HTTPS
# Todo lo que venga por el exterior y vaya al puerto 25 lo redirigimos
# a una maquina interna iptables -t nat -A PREROUTING -i $INT_ROUTER_EXT -p tcp --dport $PUERTO_SMTP -j DNAT --to $IP_MAIL:$PUERTO_SMTP
# Todo lo que venga por el exterior y vaya al puerto 110 lo redirigimos
# a una maquina interna iptables -t nat -A PREROUTING -i $INT_ROUTER_EXT -p tcp --dport $PUERTO_POP -j DNAT --to $IP_MAIL:$PUERTO_POP
# Todo lo que venga por el exterior y vaya al puerto 143 lo redirigimos
# a una maquina interna iptables -t nat -A PREROUTING -i $INT_ROUTER_EXT -p tcp --dport $PUERTO_IMAP -j DNAT --to $IP_MAIL:$PUERTO_IMAP
# Todo lo que venga por el exterior y vaya al puerto 53 lo redirigimos
# a una maquina interna iptables -t nat -A PREROUTING -i $INT_ROUTER_EXT -p tcp --dport $PUERTO_DNS -j DNAT --to $IP_DNS:$PUERTO_DNS iptables -t nat -A PREROUTING -i $INT_ROUTER_EXT -p udp --dport $PUERTO_DNS -j DNAT --to $IP_DNS:$PUERTO_DNS
# Todo lo que venga por el exterior y vaya al puerto 8245 lo redirigimos
# a una maquina interna iptables -t nat -A PREROUTING -i $INT_ROUTER_EXT -p tcp --dport $PUERTO_NOIP -j DNAT --to $IP_NOIP:$PUERTO_NOIP
# Todo lo que venga por el exterior y vaya al puerto 21 lo redirigimos
# a una maquina interna #iptables -t nat -A PREROUTING -i $INT_ROUTER_EXT -p tcp --dport $PUERTO_FTP -j DNAT --to $IP_MAIL:$PUERTO_FTP
# Redirigir los accesos de la LAN a DMZ hacia la maquina interna
#iptables -t nat -A PREROUTING -i $INT_ROUTER_LAN -p tcp --dport $PUERTO_WEB -d $IP_WEB -j DNAT --to $IP_WEB:$PUERTO_WEB #iptables -t nat -A PREROUTING -i $INT_ROUTER_LAN -p tcp --dport $PUERTO_HTTPS -d $IP_WEB -j DNAT --to $IP_WEB:$PUERTO_HTTPS #iptables -t nat -A PREROUTING -i $INT_ROUTER_LAN -p tcp --dport $PUERTO_SMTP -d $IP_MAIL -j DNAT --to $IP_MAIL:$PUERTO_SMTP #iptables -t nat -A PREROUTING -i $INT_ROUTER_LAN -p tcp --dport $PUERTO_POP -d $IP_MAIL -j DNAT --to $IP_MAIL:$PUERTO_POP #iptables -t nat -A PREROUTING -i $INT_ROUTER_LAN -p tcp --dport $PUERTO_IMAP -d $IP_MAIL -j DNAT --to $IP_MAIL:$PUERTO_IMAP #iptables -t nat -A PREROUTING -i $INT_ROUTER_LAN -p tcp --dport $PUERTO_DNS -d $IP_DNS -j DNAT --to $IP_DNS:$PUERTO_DNS #iptables -t nat -A PREROUTING -i $INT_ROUTER_LAN -p udp --dport $PUERTO_DNS -d $IP_DNS -j DNAT --to $IP_DNS:$PUERTO_DNS #iptables -t nat -A PREROUTING -i $INT_ROUTER_LAN -p tcp --dport $PUERTO_FTP -d $RED_WEB -j DNAT --to $IP_MAIL:$PUERTO_FTP
# El localhost se deja (por ejemplo conexiones locales a mysql) /sbin/iptables -A INPUT -i $BUCLE_LOCAL -j ACCEPT
# Al firewall tenemos acceso desde la red local iptables -A INPUT -s $RED_LOCAL -i $INT_ROUTER_LAN -j ACCEPT
# Ahora hacemos enmascaramiento de la red local y de la DMZ
# para que puedan salir haca fuera # y activamos el BIT DE FORWARDING (imprescindible!!!!!) iptables -t nat -A POSTROUTING -s $RED_LOCAL -o $INT_ROUTER_EXT -j MASQUERADE iptables -t nat -A POSTROUTING -s $RED_WEB -o $INT_ROUTER_EXT -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
## Permitimos el paso de la DMZ a una BBDD de la LAN: iptables -A FORWARD -s $IP_WEB -d $IP_LAN_BBDD -p tcp --dport $PUERTO_BBDD -j ACCEPT iptables -A FORWARD -s $IP_LAN_BBDD -d $IP_WEB -p tcp --sport $PUERTO_BBDD -j ACCEPT
## Permitimos el paso de la WEB/ROUTER a la WEB del DMZ: iptables -A FORWARD -s $RED_WEB -d $IP_WEB -p tcp --dport $PUERTO_WEB -j ACCEPT iptables -A FORWARD -s $IP_WEB -d $RED_WEB -p tcp --sport $PUERTO_WEB -j ACCEPT
## Permitimos el paso de la WEB/ROUTER a la DNS del DMZ: iptables -A FORWARD -s $RED_WEB -d $IP_DNS -p tcp --dport $PUERTO_DNS -j ACCEPT iptables -A FORWARD -s $IP_DNS -d $RED_WEB -p tcp --sport $PUERTO_DNS -j ACCEPT
## Permitimos el paso de la WEB/ROUTER a la DNS del DMZ: iptables -A FORWARD -s $RED_WEB -d $IP_DNS -p udp --dport $PUERTO_DNS -j ACCEPT iptables -A FORWARD -s $IP_DNS -d $RED_WEB -p udp --sport $PUERTO_DNS -j ACCEPT
## Permitimos el paso de la WEB/ROUTER a la WEB del DMZ: iptables -A FORWARD -s $RED_WEB -d $IP_NOIP -p tcp --dport $PUERTO_NOIP -j ACCEPT iptables -A FORWARD -s $IP_NOIP -d $RED_WEB -p tcp --sport $PUERTO_NOIP -j ACCEPT
## Permitimos el paso de la LAN a la WEB del DMZ: iptables -A FORWARD -s $RED_LOCAL -d $IP_WEB -p tcp --dport $PUERTO_WEB -j ACCEPT iptables -A FORWARD -s $IP_WEB -d $RED_LOCAL -p tcp --sport $PUERTO_WEB -j ACCEPT
## permitimos abrir el Terminal server de la DMZ desde la LAN iptables -A FORWARD -s $RED_LOCAL -d $IP_WEB -p tcp --sport 1024:65535 --dport $PUERTO_TERMINAL_SERVER -j ACCEPT
# hay que hacerlo en uno y otro sentido iptables -A FORWARD -s $IP_WEB -d $RED_LOCAL -p tcp --sport $PUERTO_TERMINAL_SERVER --dport 1024:65535 -j ACCEPT
# por que luego:
# Cerramos el acceso de la DMZ a la LAN iptables -A FORWARD -s $RED_WEB -d $RED_LOCAL -j DROP
## Cerramos el acceso de la DMZ al propio firewall iptables -A INPUT -s $RED_WEB -i $INT_ROUTER_WEB -j DROP
## Y ahora cerramos los accesos indeseados del exterior: # Nota: 0.0.0.0/0 significa: cualquier red
# Cerramos el rango de puerto bien conocido iptables -A INPUT -s $RED_TODAS -p tcp --dport 1:1024 -j DROP iptables -A INPUT -s $RED_TODAS -p udp --dport 1:1024 -j DROP
# Cerramos un puerto de gestión: webmin iptables -A INPUT -s $RED_TODAS -p tcp --dport $PUERTO_WEBMIN -j DROP
echo " OK . Verifique que lo que se aplica con: iptables -L -n"
# Fin del script