elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Security Series.XSS. [Cross Site Scripting]


+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Seguridad (Moderador: r32)
| | |-+  Firewall con iptables politica DROP
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Firewall con iptables politica DROP  (Leído 10,583 veces)
scalverth

Desconectado Desconectado

Mensajes: 21


Ver Perfil
Firewall con iptables politica DROP
« en: 10 Octubre 2012, 00:36 am »

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:


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:

Código:
## 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

Desconectado Desconectado

Mensajes: 103



Ver Perfil WWW
Re: Firewall con iptables politica DROP
« Respuesta #1 en: 10 Octubre 2012, 03:06 am »

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 Desconectado

Mensajes: 21


Ver Perfil
Re: Firewall con iptables politica DROP
« Respuesta #2 en: 10 Octubre 2012, 03:22 am »

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 Desconectado

Mensajes: 21


Ver Perfil
Re: Firewall con iptables politica DROP
« Respuesta #3 en: 11 Octubre 2012, 01:33 am »

Investigando en la web recomendada por Epzylon lo primero que veo es el uso de "multiport".

Estaría bien así?


Código:
## 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

Desconectado Desconectado

Mensajes: 103



Ver Perfil WWW
Re: Firewall con iptables politica DROP
« Respuesta #4 en: 12 Octubre 2012, 05:34 am »

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 Desconectado

Mensajes: 21


Ver Perfil
Re: Firewall con iptables politica DROP
« Respuesta #5 en: 12 Octubre 2012, 15:05 pm »

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.

Código:
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 Desconectado

Mensajes: 2


Ver Perfil
Re: Firewall con iptables politica DROP
« Respuesta #6 en: 2 Noviembre 2012, 04:20 am »

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 Desconectado

Mensajes: 21


Ver Perfil
Re: Firewall con iptables politica DROP
« Respuesta #7 en: 4 Noviembre 2012, 13:05 pm »

Citar
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#33

Citar
si 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 Desconectado

Mensajes: 119



Ver Perfil
Re: Firewall con iptables politica DROP
« Respuesta #8 en: 4 Noviembre 2012, 23:34 pm »

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.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
ARP Spoofing y DROP de paquetes en IPTables.
Redes
SKalextric 5 3,393 Último mensaje 17 Abril 2015, 11:27 am
por Quitisomes
[AYUDA] Mi primer firewall iptables
Redes
danny920825 4 2,116 Último mensaje 11 Abril 2016, 15:44 pm
por danny920825
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines