Autor
|
Tema: Firewall con iptables politica DROP (Leído 10,583 veces)
|
scalverth
Desconectado
Mensajes: 21
|
Estoy con el trabajo de afinar el firewall de mi debian, esta todo bien después de las modificaciones que realice , pero quería que ustedes me den su punto de vista, por si hay algo que pueda mejorar. Resumiendo pase todo a DROP para obtener mejor protección.
Aquí el código:#!/bin/sh ## ## Recordar guardar en ## /etc/network/if-up.d/firewallver.sh ## chmod +x /etc/network/if-up.d/firewallver.sh
## Definimos las variables ## Interface conectada a internet RED_EXT="eth0" ## Interface de red local RED_INT="eth1" ## Ip de casa para conectar SSH IP_CASA="190.138.0.101" ## DNS primario DNS1="208.67.222.222" ## DNS secundario DNS2="208.67.220.220" WEBSERVER="192.168.10.20"
## FLUSH de reglas iptables -F iptables -X iptables -Z iptables -t nat -F
## Establecemos politica por defecto DROP iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP
## Por ahora esta todo denegado. ## Debemos decir de manera explicita qué es lo que queremos abrir
## Operar en localhost sin limitaciones /sbin/iptables -A INPUT -i lo -j ACCEPT /sbin/iptables -A OUTPUT -o lo -j ACCEPT
## Este es un servicio que da la maquina a internet, ## por tanto todo paquete entrante se acepta para ## este puerto y los salientes vinculados se aceptan también. #/sbin/iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT #/sbin/iptables -A OUTPUT -p tcp -m tcp --sport 80 -m state --state RELATED,ESTABLISHED -j ACCEPT
## Abrir puerto 80 del Web server dentro de la red local ## ( mejor seria una DMZ ;) /sbin/iptables -t nat -A PREROUTING -i $RED_EXT -p tcp --dport 80 -j DNAT --to-destination $WEBSERVER:80 /sbin/iptables -A FORWARD -i $RED_EXT -o $RED_INT -p tcp --dport 80 -j ACCEPT
## Abrir puerto 22 para administrar ssh desde casa /sbin/iptables -A INPUT -s $IP_CASA -p tcp --dport 22 -j ACCEPT /sbin/iptables -A OUTPUT -o $RED_EXT -p tcp --sport 22 -m state --state ESTABLISHED,RELATED -j ACCEPT
## Abrir puerto 22 para administrar ssh desde la red local /sbin/iptables -A INPUT -i $RED_INT -p tcp --dport 22 -j ACCEPT /sbin/iptables -A OUTPUT -o $RED_INT -p tcp --sport 22 -m state --state ESTABLISHED,RELATED -j ACCEPT
## El puerto 5900 debe estar abierto ya que esta instalado un servidor vnc #/sbin/iptables -A INPUT -s $IP_CASA -p tcp --dport 5900 -j ACCEPT #/sbin/iptables -A OUTPUT -o $RED_EXT -p tcp --sport 5900 -m state --state ESTABLISHED,RELATED -j ACCEPT
## Permitimos que el servidor y la red interna puedan salir a: ## Internet (navegación) /sbin/iptables -A INPUT -p tcp -m tcp --sport 80 -m state --state RELATED,ESTABLISHED -j ACCEPT /sbin/iptables -A OUTPUT -p tcp -m tcp --dport 80 -j ACCEPT /sbin/iptables -A FORWARD -p tcp -m tcp --sport 80 -m state --state RELATED,ESTABLISHED -j ACCEPT
## webs seguras /sbin/iptables -A INPUT -p tcp -m tcp --sport 443 -m state --state RELATED,ESTABLISHED -j ACCEPT /sbin/iptables -A OUTPUT -p tcp -m tcp --dport 443 -j ACCEPT /sbin/iptables -A FORWARD -p tcp -m tcp --sport 443 -m state --state RELATED,ESTABLISHED -j ACCEPT
## Correo POP3 SMTP /sbin/iptables -A INPUT -p tcp -m tcp --sport 110 -m state --state RELATED,ESTABLISHED -j ACCEPT /sbin/iptables -A OUTPUT -p tcp -m tcp --dport 110 -j ACCEPT /sbin/iptables -A FORWARD -p tcp -m tcp --sport 110 -m state --state RELATED,ESTABLISHED -j ACCEPT
/sbin/iptables -A INPUT -p tcp -m tcp --sport 465 -m state --state RELATED,ESTABLISHED -j ACCEPT /sbin/iptables -A OUTPUT -p tcp -m tcp --dport 465 -j ACCEPT /sbin/iptables -A FORWARD -p tcp -m tcp --sport 465 -m state --state RELATED,ESTABLISHED -j ACCEPT
/sbin/iptables -A INPUT -p tcp -m tcp --sport 995 -m state --state RELATED,ESTABLISHED -j ACCEPT /sbin/iptables -A OUTPUT -p tcp -m tcp --dport 995 -j ACCEPT /sbin/iptables -A FORWARD -p tcp -m tcp --sport 995 -m state --state RELATED,ESTABLISHED -j ACCEPT
/sbin/iptables -A INPUT -p tcp -m tcp --sport 587 -m state --state RELATED,ESTABLISHED -j ACCEPT /sbin/iptables -A OUTPUT -p tcp -m tcp --dport 587 -j ACCEPT /sbin/iptables -A FORWARD -p tcp -m tcp --sport 587 -m state --state RELATED,ESTABLISHED -j ACCEPT
## Reglas necesarias para FTP pasivo y activo. ## Se permiten conexiones entrantes establecidas previamente /sbin/iptables -A INPUT -p tcp -m tcp --sport 20:21 -m state --state RELATED,ESTABLISHED -j ACCEPT /sbin/iptables -A OUTPUT -p tcp -m tcp --dport 20:21 -j ACCEPT /sbin/iptables -A FORWARD -p tcp -m tcp --sport 20:21 -m state --state RELATED,ESTABLISHED -j ACCEPT
/sbin/iptables -A INPUT -p tcp -m tcp --sport 1024:65535 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT /sbin/iptables -A OUTPUT -p tcp -m tcp --dport 1024:65535 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT /sbin/iptables -A FORWARD -p tcp -m tcp --sport 1024:65535 -m state --state RELATED,ESTABLISHED -j ACCEPT
## Permitimos la consulta a un primer DNS /sbin/iptables -A INPUT -s $DNS1 -p udp -m udp --sport 53 -j ACCEPT /sbin/iptables -A OUTPUT -d $DNS1 -p udp -m udp --dport 53 -j ACCEPT /sbin/iptables -A FORWARD -s $DNS1 -p udp -m udp --sport 53 -j ACCEPT
## Permitimos la consulta a un segundo DNS /sbin/iptables -A INPUT -s $DNS2 -p udp -m udp --sport 53 -j ACCEPT /sbin/iptables -A OUTPUT -d $DNS2 -p udp -m udp --dport 53 -j ACCEPT /sbin/iptables -A FORWARD -s $DNS2 -p udp -m udp --sport 53 -j ACCEPT
## Permitimos que se actualize la hora con internet /sbin/iptables -A INPUT -p udp -m udp --sport 123 -m state --state RELATED,ESTABLISHED -j ACCEPT /sbin/iptables -A OUTPUT -p udp -m udp --dport 123 -j ACCEPT /sbin/iptables -A FORWARD -p udp -m udp --sport 123 -m state --state RELATED,ESTABLISHED -j ACCEPT
## FORWARD ## Aceptar los paquetes a hacer forward /sbin/iptables -A FORWARD -i $RED_INT -j ACCEPT /sbin/iptables -t nat -A POSTROUTING -o $RED_EXT -j MASQUERADE
## Habilita el forwarding para poder responder echo 1 > /proc/sys/net/ipv4/ip_forward
# Barrera de backup por si cambiamos a modo ACCEPT temporalmente # Con esto protegemos los puertos reservados y otros conocidos /sbin/iptables -A INPUT -p tcp -m tcp --dport 1:1024 -j DROP /sbin/iptables -A INPUT -p udp -m udp --dport 1:1024 -j DROP /sbin/iptables -A INPUT -p tcp -m tcp --dport 1723 -j DROP /sbin/iptables -A INPUT -p tcp -m tcp --dport 3306 -j DROP /sbin/iptables -A INPUT -p tcp -m tcp --dport 5432 -j DROP
#iptables -L -n para verificar las reglas # Fin del script La parte que me preocupa es esta:## Abrir puerto 80 del Web server dentro de la red local ## ( mejor seria una DMZ ;) /sbin/iptables -t nat -A PREROUTING -i $RED_EXT -p tcp --dport 80 -j DNAT --to-destination $WEBSERVER:80 /sbin/iptables -A FORWARD -i $RED_EXT -o $RED_INT -p tcp --dport 80 -j ACCEPT Comentarios y sugerencias espero. Gracias.
|
|
« Última modificación: 10 Octubre 2012, 21:20 pm por scalverth »
|
En línea
|
|
|
|
Epzylon
|
La redirección esta bien. Ahora bien, podes añadir seguridad en varios aspectos. Te recomiendo te des un vistazo sobre los posts que escribí en mi blog sobre el tema: http://www.netsecure.com.ar/2008/12/02/netfilter-iptables-i/En lo personal, haría un control anti flood, loguearia paquetes raros, e incluso haría un examen a nivel bajo (utilizando u32) de la carga de tcp, si la seguridad es lo que te preocupa. Si quisieras cualquiera de estas cosas, u otras, podríamos abrir un tema separado quizas. Saludos
|
|
|
En línea
|
|
|
|
scalverth
Desconectado
Mensajes: 21
|
Gracias por tu respuesta, eso mismo quería pedir, material para lectura que me ayude a entender mejor. Paso por tu blog a ver, si algo no entiendo te estaré solicitando tu ayuda. Saludos.
|
|
|
En línea
|
|
|
|
scalverth
Desconectado
Mensajes: 21
|
Investigando en la web recomendada por Epzylon lo primero que veo es el uso de "multiport".
Estaría bien así?## Permitimos que el servidor y el los clientes servicios de: ## Internet (navegación), webs seguras, POP3 y SMTP /sbin/iptables -A INPUT -p tcp -m multiport --sports 80,443,110,465,995,587 -m state --state RELATED,ESTABLISHED -j ACCEPT /sbin/iptables -A OUTPUT -p tcp -m multiport --dports 80,443,110,465,995,587 -j ACCEPT /sbin/iptables -A FORWARD -p tcp -m multiport --sports 80,443,110,465,995,587 -m state --state RELATED,ESTABLISHED -j ACCEPT Lo puse a prueba y funciona.
|
|
|
En línea
|
|
|
|
Epzylon
|
Creo que sería buena idea armar un tema nuevo con "trucos" para Iptables. Empiezo a trabajar en eso, y ahí podrás sacar ideas para utilizar en tu script.
A alguien le gustaria participar en la recopilación de dichos trucos?
Saludos
|
|
|
En línea
|
|
|
|
scalverth
Desconectado
Mensajes: 21
|
La verdad que lo veo muy interesante, adelante con ese tema por favor. Acá tengo unas 25 reglas de las cuales me estoy apoyando para mejorar este firewall. 1. Eliminar todas las reglas existentes iptables -F 2. Establecer políticas por defecto iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT DROP 3. Bloquear una dirección IP específica #BLOCK_THIS_IP="x.x.x.x"
iptables -A INPUT -s "$BLOCK_THIS_IP" -j DROP 4. Permitir conexiones entrantes SSH iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT 5. Permitir conexiones entrantes SSH sólo a una red específica iptables -A INPUT -i eth0 -p tcp -s 192.168.200.0/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT 6. Permitir HTTP entrante
iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT 7. Permitir HTTPS entrante iptables -A INPUT -i eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT 8. Multipuerto (Permitir entrantes SSH, HTTP y HTTPS) iptables -A INPUT -i eth0 -p tcp -m multiport --dports 22,80,443 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp -m multiport --sports 22,80,443 -m state --state ESTABLISHED -j ACCEPT 9. Permitir salir SSH
iptables -A OUTPUT -o eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT 10. Permitir salir SSH sólo a una red específica iptables -A OUTPUT -o eth0 -p tcp -d 192.168.101.0/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT 11. Permitir salir HTTPS iptables -A OUTPUT -o eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A INPUT -i eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT 12. Carguar tráfico HTTPS balanceado iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination 192.168.1.101:443 iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 1 -j DNAT --to-destination 192.168.1.102:443 iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 2 -j DNAT --to-destination 192.168.1.103:443 13. Permitir ping desde el interior al exterior
iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT 14. Permitir ping desde el exterior al interior iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT 15. Permitir el acceso loopback iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT 16. Permitir que los paquetes de red interna salgan a la red externa. # if eth1 is connected to external network (internet) # if eth0 is connected to internal network (192.168.1.x) iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT 16. Permitir consultas DNS
iptables -A OUTPUT -p udp -o eth0 --dport 53 -j ACCEPT iptables -A INPUT -p udp -i eth0 --sport 53 -j ACCEPT 17. Permitir conexiones NIS #rpcinfo -p | grep ypbind ; This port is 853 and 850 iptables -A INPUT -p tcp --dport 111 -j ACCEPT iptables -A INPUT -p udp --dport 111 -j ACCEPT iptables -A INPUT -p tcp --dport 853 -j ACCEPT iptables -A INPUT -p udp --dport 853 -j ACCEPT iptables -A INPUT -p tcp --dport 850 -j ACCEPT iptables -A INPUT -p udp --dport 850 -j ACCEPT 18. Permitir rsync de una red específica iptables -A INPUT -i eth0 -p tcp -s 192.168.101.0/24 --dport 873 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 873 -m state --state ESTABLISHED -j ACCEPT 19. Permitir conexión MySQL sólo desde una red específica iptables -A INPUT -i eth0 -p tcp -s 192.168.200.0/24 --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 3306 -m state --state ESTABLISHED -j ACCEPT 20. Permitir Sendmail o Postfix
iptables -A INPUT -i eth0 -p tcp --dport 25 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 25 -m state --state ESTABLISHED -j ACCEPT 21. Permitir IMAP y IMAPS iptables -A INPUT -i eth0 -p tcp --dport 143 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 143 -m state --state ESTABLISHED -j ACCEPT iptables -A INPUT -i eth0 -p tcp --dport 993 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 993 -m state --state ESTABLISHED -j ACCEPT 22. Permitir POP3 y POP3S iptables -A INPUT -i eth0 -p tcp --dport 110 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 110 -m state --state ESTABLISHED -j ACCEPT iptables -A INPUT -i eth0 -p tcp --dport 995 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 995 -m state --state ESTABLISHED -j ACCEPT 23. Prevenir ataques DoS
iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT 24. Reenvío de puertos 422 to 22 iptables -t nat -A PREROUTING -p tcp -d 192.168.102.37 --dport 422 -j DNAT --to 192.168.102.37:22 iptables -A INPUT -i eth0 -p tcp --dport 422 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth0 -p tcp --sport 422 -m state --state ESTABLISHED -j ACCEPT 25. Log de paquetes rechazados iptables -N LOGGING
iptables -A INPUT -j LOGGING iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables Packet Dropped: " --log-level 7 iptables -A LOGGING -j DROP Fuente: http://www.thegeekstuff.com/scripts/iptables-rules
|
|
« Última modificación: 12 Octubre 2012, 15:14 pm por scalverth »
|
En línea
|
|
|
|
soft6perso
Desconectado
Mensajes: 2
|
una duda . . si en ese esquema tuvieramos en otra subred (eth2) una DMZ ahi tendriamos que poner los servidores verdad?
y tendriamos que hacer DNAT a los servicios que tuvuieramos ahi? si tuvieramos un servidor DNS tendriamos que hacer lo mismo?
solo dudas, no soy experto en el tema, solo quiero profundizar. gracias
|
|
|
En línea
|
|
|
|
scalverth
Desconectado
Mensajes: 21
|
una duda . . si en ese esquema tuviéramos en otra subred (eth2) una DMZ ahí tendríamos que poner los servidores verdad? Esto se trata de forma detallada acá: http://www.pello.info/filez/firewall/iptables.html#33si tuviéramos un servidor DNS tendríamos que hacer lo mismo? Con respecto a esto según entiendo si tenes un server DNS al resto de la red debes ponerle la ip de ese servidor en el archivo resolv.conf
|
|
|
En línea
|
|
|
|
ameise_1987
Desconectado
Mensajes: 119
|
La redirección esta bien. Ahora bien, podes añadir seguridad en varios aspectos. Te recomiendo te des un vistazo sobre los posts que escribí en mi blog sobre el tema: http://www.netsecure.com.ar/2008/12/02/netfilter-iptables-i/En lo personal, haría un control anti flood, loguearia paquetes raros, e incluso haría un examen a nivel bajo (utilizando u32) de la carga de tcp, si la seguridad es lo que te preocupa. Si quisieras cualquiera de estas cosas, u otras, podríamos abrir un tema separado quizas. Saludos muy buenos post, thanx.
|
|
|
En línea
|
firma retirada por insultar/cachondearse de (anelkaos) del staff.
|
|
|
|
|