[CentOS-es] Cómo abrir la resolución de DNS con iptables

Miguel A. Velasco miguel.suscripcion en gmail.com
Sab Ago 23 16:17:42 UTC 2008


Hola a tod en s, he de agradeceros en primer lugar vuestro interés y
vuestras respuestas. Lo cierto es que finalmente he optado por realizar
lo mismo pero con Shorewall siguiendo las recomendaciones de otros foros
y he conseguido navegar por internet. La verdad es que esta herramienta
que usa Iptables está muy bien documentada.
En cualquier caso os adjunto mi script de iptables en el que
comprobaréis que mi política por defecto es ACCEPT ya que estoy
comenzando con esto de los firewall y quería ir probando poco a poco.
Los DNS siguen sin funcionar con este script y aunque con Shorewall lo
haya conseguido si alguien sabe indicarme que está mal sería de agradecer:

fw_start() {

cho "--> Inicializando el Firewall"
echo "------------------------------------------------------"

miip="191.101.30.80"
ip_eth0="191.101.30.12"
ip_eth1="191.101.60.12"
ip_net="la que sea"
ip_lan="191.101.30.0/24"

## Limpieza de la configuracion existente echo "Limpieza de todas las
reglas previas del Sistema"
# Flush de Reglas
iptables -F
# Borrado de cadenas de usuario
iptables -X
# Puesta a Cero de contadores de paquetes y contadores iptables -Z

## Establecimiento de politicas por defecto
#Denegamos todo el trafico entrante y saliente echo "Estableciendo
politica por defecto a DENEGACION de paquetes"
iptables -P INPUT ACCEPT && echo "regla: 1 - OK!"
iptables -P OUTPUT ACCEPT && echo "regla: 2 - OK!"
iptables -P FORWARD ACCEPT && echo "regla: 3 - OK!"
iptables -t nat -P PREROUTING ACCEPT && echo "regla: 4 - OK!"
iptables -t nat -P POSTROUTING ACCEPT && echo "regla: 5 - OK!"

## Activamos el Bit de Forwarding en el Fw echo "--> Activando el
enmascaramiento de la LAN para salir por una unica IP Publica"
iptables -t nat -A POSTROUTING -s 10.10.80.0/24 -o eth1 -j MASQUERADE &&
echo "regla: 6 - Enmascaramiento en IP Publica  OK!"
echo "--> Activando Reenvio de paquetes dentro del propio Router"
echo 1 > /proc/sys/net/ipv4/ip_forward && echo "regla: 6,5 - Habilitado
el forwarding en el kernel"

echo "--> Aceptando conexiones locales del sistema"
# Aceptando permiso local dentro de S-Proxy iptables -A INPUT -i lo -j
ACCEPT && echo "regla: 7 - OK!"

echo "--> Aceptando conexiones remotas del Administrador de Red"
# Aceptando conexiones desde ip del Administrador de la red iptables -A
INPUT -i eth0 -s $miip -j ACCEPT && echo "regla: 8 - OK!"
iptables -A OUTPUT -o eth0 -s $miip -j ACCEPT && echo "regla: 9 - OK!"

echo "--> Habilitando ping de E/S en las tarjetas del servidor"
#Permitir ping
iptables -A INPUT -i eth0 -p ICMP -j ACCEPT && echo "regla: 10 - OK!"
iptables -A OUTPUT -o eth0 -p ICMP -j ACCEPT && echo "regla: 11 - OK!"
iptables -A INPUT -i eth1 -p ICMP -j ACCEPT && echo "regla: 12 - OK!"
iptables -A OUTPUT -o eth1 -p ICMP -j ACCEPT && echo "regla: 13 - OK!"

echo "--> Habilitando el forwarding de ping en las 2 tarjetas del servidor"
iptables -A FORWARD -s $ip_lan -i eth0 -p ICMP -j ACCEPT && echo "regla:
13,5 - OK!"
iptables -A FORWARD -s $ip_lan -i eth1 -p ICMP -j ACCEPT && echo "regla:
13,5 - OK!"

echo "--> Aceptando conexiones ssh en la eth0 desde cualquier IP de la LAN"
# Aceptando conexiones ssh desde cualquier IP iptables -A INPUT -i eth0
-p tcp --dport 22 -j ACCEPT && echo "regla: 14 - OK!"
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -j ACCEPT && echo "regla:
15 - OK!"

echo "--> Aceptando acceso http y https"
iptables -A FORWARD -s $ip_lan -i eth0 -p tcp --dport 80 -j ACCEPT &&
echo "regla: 16 - OK!"
iptables -A FORWARD -s $ip_lan -i eth0 -p tcp --dport 443 -j ACCEPT &&
echo "regla: 17 - OK!"
iptables -A OUTPUT -d 0.0.0.0/0 -i eth1 -p tcp --dport 80 -j ACCEPT &&
echo "regla: 17,5 - OK!"
iptables -A OUTPUT -d 0.0.0.0/0 -i eth1 -p tcp --dport 443 -j  ACCEPT &&
echo "regla: 17,6 - OK!"

echo "--> Activando en Proxy transparente de Squid para toda la LAN"
iptables -t nat -A PREROUTING -s $ip_lan -p tcp --dport 80 -j REDIRECT
--to-port 3128  && echo "regla: 17,5 (PROXY TRANSPARENTE) - OK!"

echo "--> Aceptando las querys de DNS localmente y Forwarding"
# Aceptando las consultas del Servicio Cache DNS

iptables -A INPUT -s 0.0.0.0/0 -p udp -m udp --sport 53 -j ACCEPT
iptables -A OUTPUT -d 0.0.0.0/0 -p udp -m udp --dport 53 -j ACCEPT
iptables -A FORWARD -s 0.0.0.0/0  -o eth1 -p udp -m udp --dport 53 -j ACCEPT
iptables -A FORWARD -d 0.0.0.0/0 -i eth1 -p udp -m udp --dport 53 -j ACCEPT

echo "--> Aceptando el Forwarding de correo pop3 / smtp"
iptables -A FORWARD -s $ip_lan -i eth0 -p tcp --dport 110 -j ACCEPT &&
echo "regla: 22 (smtp forwardind)- OK!"
iptables -A FORWARD -s $ip_lan -i eth0 -p tcp --dport 25 -j ACCEPT &&
echo "regla: 23 (pop3 forwardind)- OK!"
iptables -A FORWARD -s $miip -i eth0 -p tcp --dport 465 -j ACCEPT &&
echo "regla: 24 (smtp TLS gmail forwardind para mi PC)- OK!"
iptables -A FORWARD -s $miip -i eth0 -p tcp --dport 995 -j ACCEPT &&
echo "regla: 25 (pop3 SSL gmail forwardind para mi PC)- OK!"

echo "--> Denegamos el resto de Servicios ....."
iptables -A FORWARD -s $ip_lan -i eth0 -j DROP && echo "regla: Cerrando
Forwarding - OK!"
iptables -A INPUT -s 0.0.0.0/0 -p tcp -j DROP && echo "regla: Cerrando
Entrada TCP - OK!"
iptables -A INPUT -s 0.0.0.0/0 -p udp -j DROP && echo "regla: Cerrando
Entrada UDP - OK!"
iptables -A OUTPUT -s 0.0.0.0/0 -p tcp -j DROP  && echo "regla: Cerrando
Salida TCP - OK!"
iptables -A OUTPUT -s 0.0.0.0/0 -p udp -j DROP  && echo "regla: Cerrando
Salida UDP - OK!"
}

fw_stop() {
echo "Finalizando FIREWALL, [DEFAULT ACCEPT Policy]"
iptables -F && echo "Flush de Reglas - OK!"
iptables -X && echo "Borrado de Cadenas de Usuario - OK!"
iptables -Z && echo "Puesta a Cero de Paquetes y Contadores - OK!"
iptables -P INPUT ACCEPT && echo "Input Accept por defecto - OK!"
iptables -P OUTPUT ACCEPT && echo "Output Accept por defecto - OK!"
iptables -P FORWARD ACCEPT && echo "Forward Accept por defecto - OK!"
iptables -t nat -P PREROUTING ACCEPT && echo "Prerouting nat Accept por
defecto - OK!"
iptables -t nat -P POSTROUTING ACCEPT && echo "Postrouting nat Accept
por defecto - OK!"
}

fw_status() {
iptables -nL
}

fw_restart() {
iprules.sh stop
iprules.sh start
}

case "$1" in
'start')
fw_start
;;
'stop')
fw_stop
;;
'status')
fw_status
;;
*)
'restart'
fw_restart
;;
*)


Gracias a todos,
Un saludo.

Miguel Velasco


Aldo Cobos escribió:
> Si tienes proxy y este no esta transparente y no haces el 
> enmascaramiento, redireccionamiento de puertos (NAT) y portforwarding en 
> ti script de iptables, no vas a navegar y solo podras hacer ping a 
> google desde tu lan de dos formas o pones transparente el proxy o en su 
> defecto eliminas este y haces forward a todo lo necesario desde tu firewall.
> 
> Otra cosa si el DNS lo resulves localmente en tu server estan bien als 
> reglas de INPUT, si lo resulves a travez de los DNS de tu proveedor solo 
> debes poner las de FORWARD al pureto 53.
> 
> 
> El 20 de agosto de 2008 13:28, GarZa <garpon en gmail.com 
> <mailto:garpon en gmail.com>> escribió:
> 
>     Hola, DNS funciona con UDP, así que las reglas TCP sobran, no
>     obstante debería funcionar, que tipo de firewall has montado,
>     ¿denegación por defecto? Quizás el atasco lo tengas en otro sitio.
>     ¿has probado a hacer un ping a una dirección IP en lugar de al
>     nombre? Asegúrate antes que has dado acceso a ICMP.
> 
>     También puedes probar a hacer log para depurar, por ejemplo:
> 
>     $IPTABLES -A INPUT -j LOG --log-prefix 'DROP '
>     $IPTABLES -A OUTPUT -j LOG --log-prefix 'DROP '
> 
>     Un Saludo.
> 
>     Miguel A. Velasco escribió:
> 
>         Hola a tod en s, estoy intentando configurar un firewall en mi
>         empresa con iptables pero no consigo que se me resuelvan las
>         querys dns.
>         El servidor-firewall tiene montado además un proxy squid que
>         funciona bien con todos los puertos abiertos.
> 
>         La parte de las iptables que concierne a los dns en el script es:
>         echo "--> Aceptando las querys de DNS localmente y Forwarding"
>         # Aceptando las consultas del Servicio Cache DNS
>         iptables -A INPUT -i eth0 -s $ip_lan -p udp -m udp --sport 53 -j
>         ACCEPT && echo "regla: 18 - OK!"
>         iptables -A INPUT -i eth0 -s $ip_lan -p tcp -m tcp --sport 53 -j
>         ACCEPT && echo "regla: 18,5 - OK!"
>         iptables -A OUTPUT -o eth0 -s $ip_lan -p tcp -m tcp --dport 53
>         -j ACCEPT && echo "regla: 19 - OK!"
>         iptables -A OUTPUT -o eth0 -s $ip_lan -p udp -m udp --dport 53
>         -j ACCEPT && echo "regla: 19,5 - OK!"
>         iptables -A FORWARD -s $ip_lan -i eth0 -p tcp --dport 53 -j
>         ACCEPT && echo "regla: 20 - OK!"
>         iptables -A FORWARD -s $ip_lan -i eth0 -p udp --dport 53 -j
>         ACCEPT && echo "regla: 21 - OK!"
> 
>         Donde: eth0 es la tarjeta que conecta con la LAN y eth1 con el
>         router adsl. Además $ip_lan es el rango de IP´s de mi empresa
>         (10.10.80.0/24 <http://10.10.80.0/24>)
> 
>         Este servidor contiene lo siguiente en /etc/resolv.conf:
> 
>         search midominio_empresa.local
>         nameserver 195.235.113.3 <http://195.235.113.3>
>         nameserver 195.235.96.90 <http://195.235.96.90>
> 
>         En el momento que ejecuto las iptables ya no puedo ni hacer un
>         ping google.es <http://google.es> desde el propio servidor, ni
>         que decir tiene que el proxy se queda "seco" y ningún PC sale a
>         internet por él.
> 
>         También he probado a montar un caché dns con mamed en este
>         servidor que ha funcionado correctamente con el firewall
>         "abierto" pero al activar las itables también a dejado de
>         funcionar ....
> 
>         Lo cierto es que me he estancado en este punto y ando desorientado.
>         Muchas gracias a tod en s por vuestro tiempo.
> 
>         Un saludo,
>         Miguel Velasco
> 
> 
> 
> 
>         _______________________________________________
>         CentOS-es mailing list
>         CentOS-es en centos.org <mailto:CentOS-es en centos.org>
>         http://lists.centos.org/mailman/listinfo/centos-es
> 
> 
>     _______________________________________________
>     CentOS-es mailing list
>     CentOS-es en centos.org <mailto:CentOS-es en centos.org>
>     http://lists.centos.org/mailman/listinfo/centos-es
> 
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> CentOS-es mailing list
> CentOS-es en centos.org
> http://lists.centos.org/mailman/listinfo/centos-es




Más información sobre la lista de distribución CentOS-es