Como recordarán en el post Firewall para servidores expuestos se explico los conceptos de un firewall para servidores expuestos a internet y como montar una DMZ, ahora realizaremos unas modificaciones en el script de manera a controlar también el trafico que sale de nuestra red interna. Identificando el objetivo Como se puede apreciar en esta imagen, la regla ACCEPT en el input permite que entre todo lo que que viene del exterior, y luego de que aceptamos las conexiones cerramos los puertos más conocidos con un DROP casi al final del script. Con estas reglas estamos cerrando los puertos más conocidos, pero permitiendo que el propio usuario de nuestra red interna sea el que inicie una conexión no deseada y por ende sera aceptada por nuestro firewall. Entonces si alguien de la red interna abre transmission, o cualquier otro gestor de descargas, le permitimos salir sin restricciones, esto supone un punto débil en nuestra red, ya que la mayoría de las intrusiones son debido a este tipo de reglas permisivas. Modificando el script Para poder alcanzar el objetivo, vamos a cambiar las políticas por defecto a DROP y debemos aceptar el ingreso y la salida solo a los puertos que el administrador desea abrir. También haremos uso de variables para simplificar la administración del script. Veamos el nuevo scipt #!/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] ## modificado por alband de Taringa RLOCAL="192.168.10.0/24" ## Rango de red local RDMZ="192.168.3.0/24" ## Rango de DMZ IF_EXT="eth0" ## Interface conectada a internet IF_INT="eth1" ## Interface de red local IF_DMZ="eth2" ## Interface conectada a DMZ TCP_PORT="80,443,110,995,465,587,20,21,22,25,143,993,1043" UDP_PORT="53,123" 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 DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP # IF_EXT es el interfaz conectado al router y IF_INT a la Red local # Todo lo que venga por el exterior y vaya a los puerto 80 y 433 # lo redirigimos al servidor web (192.168.3.2) de la DMZ iptables -t nat -A PREROUTING -i $IF_EXT -p tcp --dport 80 -j DNAT --to 192.168.3.2:80 iptables -t nat -A PREROUTING -i $IF_EXT -p tcp --dport 443 -j DNAT --to 192.168.3.2:443 # El localhost se deja (por ejemplo conexiones locales a mysql) iptables -A INPUT -i lo -j ACCEPT # Al firewall tenemos acceso desde la red local iptables -A INPUT -s $RLOCAL -i $IF_INT -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 $RLOCAL -o $IF_EXT -j MASQUERADE iptables -t nat -A POSTROUTING -s $RDMZ -o $IF_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 #Aceptamos entrada y salida de puertos 80,443,110,995,465,587,20,21,22,25,143,993,1043 #la red local y el servidor iptables -A OUTPUT -p tcp -m multiport --dports $TCP_PORT -j ACCEPT iptables -A INPUT -i $IF_EXT -p tcp -m multiport --sports $TCP_PORT -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -t filter -A FORWARD -i $IF_INT -o $IF_EXT -s $RLOCAL -d 0/0 -p tcp -m multiport --dports $TCP_PORT -j ACCEPT iptables -t filter -A FORWARD -i $IF_EXT -o $IF_INT -d $RLOCAL -s 0/0 -p tcp -m multiport --sports $TCP_PORT -m state --state RELATED,ESTABLISHED -j ACCEPT # y la DMZ iptables -t filter -A FORWARD -i $IF_DMZ -o $IF_EXT -s 192.168.3.2 -d 0/0 -p tcp -m multiport --dports $TCP_PORT -j ACCEPT iptables -t filter -A FORWARD -i $IF_EXT -o $IF_DMZ -d 192.168.3.2 -s 0/0 -p tcp -m multiport --sports $TCP_PORT -m state --state RELATED,ESTABLISHED -j ACCEPT #Aceptamos que consulten los DNS y actulizar la hora con internet #la red local y el servidor iptables -A OUTPUT -p udp -m multiport --dports $UDP_PORT -j ACCEPT iptables -A INPUT -i $IF_EXT -p udp -m multiport --sports $UDP_PORT -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -t filter -A FORWARD -i $IF_INT -o $IF_EXT -s $RLOCAL -d 0/0 -p udp -m multiport --dports $UDP_PORT -j ACCEPT iptables -t filter -A FORWARD -i $IF_EXT -o $IF_INT -d $RLOCAL -s 0/0 -p udp -m multiport --sports $UDP_PORT -m state --state RELATED,ESTABLISHED -j ACCEPT # y la DMZ iptables -t filter -A FORWARD -i $IF_DMZ -o $IF_EXT -s 192.168.3.2 -d 0/0 -p udp -m multiport --dports $UDP_PORT -j ACCEPT iptables -t filter -A FORWARD -i $IF_EXT -o $IF_DMZ -d 192.168.3.2 -s 0/0 -p udp -m multiport --sports $UDP_PORT -m state --state RELATED,ESTABLISHED -j ACCEPT ## Permitimos el paso al servidor web la DMZ iptables -A FORWARD -s 192.168.3.2 -d 0/0 -p tcp --sport 80 -j ACCEPT iptables -A FORWARD -s 0/0 -d 192.168.3.2 -p tcp --dport 80 -j ACCEPT # Cerramos el acceso de la DMZ a la Red local iptables -A FORWARD -s $RDMZ -d $RLOCAL -j DROP ## Cerramos el acceso de la DMZ al propio firewall iptables -A INPUT -s $RDMZ -i $IF_DMZ -j DROP # Algunas medidas de protección # Deshabilitar broadcast echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts # Deshabilitar el ping... quizá discutible. echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all # Deshabilitar la redirección del ping echo "0" > /proc/sys/net/ipv4/conf/all/accept_redirects # Registrar los accesos extraños, paquetes falseados, etc.. echo "1" > /proc/sys/net/ipv4/conf/all/log_martians # Anti-flooding o inundación de tramas SYN. iptables -N syn-flood iptables -A INPUT -i etho -p tcp --syn -j syn-flood iptables -A syn-flood -m limit --limit 1/s --limit-burst 4 -j RETURN iptables -A syn-flood -j DROP echo " OK . Verifique que lo que se aplica con: iptables -nL" # Fin del script El código es mucho más amplio que el originalmente usado, esta con muchos comentarios para que se comprenda en su totalidad que hace. Para evitar errores al copiarlo pueden bajar el script de acá: wget http://files.myopera.com/alband/files/dmz-drop Revisando los resultados De esta forma, podemos observar que ya no funciona el transmission, si queremos que se pueda descargar se debe habrir un puerto y agregarlo a las reglas correpondientes. Primero averiguamos que puerto usa el progama Y lo agregamos al script Ahora si la descarga se inició sin problemas Desde la red interna puedo conectarme por SSH a un equipo del exterior Desde el exterior al firewall es imposible una conexión SSH Al servidor web que está en la DMZ se puede acceder sin problemas Y desde el servidor web (sin entorno gráfico) podemos actualizar la hora del sistema con un servidor NTP. ntpdate -u ntp.ubuntu.com Material publicado por alband, usuario de Taringa, bajo la licencia Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 Se recomienda visitar el siguiente enlace: Texto de la Licencia Creative Commons Atribución CompartirIgual 3.0 Para consultas puntuales sobre este tema, o temas relacionados con servidores pasen por esta comunidad, todos serán bienvenidos!! Comunidad Servidores GNU/Linux Visitala haciendo clic en la imagen!!! Fuentes de conocimiento: http://www.informatica-hoy.com.ar/aprender-informatica/Que-es-DMZ.php http://www.pello.info/filez/firewall/iptables.html _____________________________________________________________________ Si te gusto el post comenta! Estas sin tiempo para leerlo detenidamente? Agregalo a favoritos ya! No entendiste algo? mandame un MP que te ayudo. Te gustan mis aportes? Seguime! no te defraudaré. Visita mis aportes o bajalo en PDF GNU/Linux estructura de directorios ---- Bajalo en PDF Sevidor con problemas de espacio ---- Bajalo en PDF Distribuciones libres de GNU/Linux 2013 ---- Bajalo en PDF Introducción amigable a iptables parte 3 ---- Bajalo en PDF Servidor Debian cambio placa de red ---- Bajalo en PDF Servidor Debian con Zoneminder ---- Bajalo en PDF Plantillas de documentos para oficina ---- Bajalo en PDF GNU/Linux y la ecología ---- Bajalo en PDF Asegurando el sistema con hosts.deny/allow ---- Bajalo en PDF cp a fondo ---- Bajalo en PDF nano a fondo ---- Bajalo en PDF Conferencias de Richard Stallman que deberias ver Servidor Codeka (TPV) ---- Bajalo en PDF Resetear contraseña de mysql ---- Bajalo en PDF Cursos gratuitos online Micro core para equipos obsoletos ---- Bajalo en PDF SSH comandos imprescindibles ---- Bajalo en PDF SSH a fondo ---- Bajalo en PDF Servidor DNS a fondo ---- Bajalo en PDF Mínima protección necesaria - gufw ---- Bajalo en PDF Firewall para servidores expuestos ---- Bajalo en PDF Servidor gentoo ---- Bajalo en PDF sed a fondo ---- Bajalo en PDF Mover /home a otra partición/disco ---- Bajalo en PDF Introducción amigable a iptables parte 2 ---- Bajalo en PDF ntp a fondo ---- Bajalo en PDF clonezilla a fondo ---- Bajalo en PDF cron a fondo ---- Bajalo en PDF rsync a fondo ---- Bajalo en PDF Samba a fondo ---- Bajalo en PDF Introducción amigable a iptables ---- Bajalo en PDF Servidor OpenSSH ---- Bajalo en PDF Mínima protección necesaria - Firestarter ---- Bajalo en PDF Squid a fondo - editado ---- Bajalo en PDF Linux terminal server en debian parte 2 ---- Bajalo en PDF Linux terminal server en debian parte 1 ---- Bajalo en PDF 5 plantillas para glabels Iptables - control de tráfico entrante y saliente ---- Bajalo en PDF 25 reglas para iptables ---- Bajalo en PDF Video tutorial servidores Gnu-Linux Ayuda memoria de comandos Gnu-Linux con ejemplos ---- Bajalo en PDF Cambiar la tecla ç por la ñ ---- Bajalo en PDF Sk1, alternativa a Corel Draw para Linux
Firewall para servidores expuestos parte 2
Datos archivados del Taringa! original
277puntos
956visitas
0comentarios
Actividad nueva en Posteamelo
0puntos
11visitas
0comentarios
Dar puntos: