Foro de elhacker.net

Seguridad Informática => Seguridad => Mensaje iniciado por: scalverth en 10 Octubre 2012, 00:36 am



Título: Firewall con iptables politica DROP
Publicado por: scalverth 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.


Título: Re: Firewall con iptables politica DROP
Publicado por: Epzylon 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/ (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


Título: Re: Firewall con iptables politica DROP
Publicado por: scalverth 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.


Título: Re: Firewall con iptables politica DROP
Publicado por: scalverth 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.


Título: Re: Firewall con iptables politica DROP
Publicado por: Epzylon 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


Título: Re: Firewall con iptables politica DROP
Publicado por: scalverth 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 (http://www.thegeekstuff.com/scripts/iptables-rules)


Título: Re: Firewall con iptables politica DROP
Publicado por: soft6perso 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


Título: Re: Firewall con iptables politica DROP
Publicado por: scalverth 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 (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


Título: Re: Firewall con iptables politica DROP
Publicado por: ameise_1987 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/ (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.