De Firehol a Iptables?

TCP/IP, enrutamiento, firewalls, NAT, monitoreo.

Moderadores: frank, dxfiles

JuancaDJ
Mensajes: 71
Registrado: Lun, 19 May 2014, 11:48

De Firehol a Iptables?

Mensaje por JuancaDJ » Mié, 21 Oct 2015, 10:20

Bien como dice el titulo de mi post soy usuario de firehol y debido a situaciones que estoy teniendo con el firehol he decidido pasar del camino facil al mas complicado, en donde con solo server http accept abria el puerto 80 y ahora con iptables no es tan sencillo pero bueno hay que superarse :) ejejej
Tengo un servidor con dos interfaces de red, eth0 que apunta a mi servidor padre, hacia el cual apunta mi proxy y del cual recibo y entrego el correo
Y eth1 interfas de red local

Mi script de Iptables quedaria asi: (Esto no esta en funsionamiento, quiero me ayuden a dejarlo listo) y asi poder hecharlo a andar sin dejar mi red sin conexion ejejeje

Código: Seleccionar todo

####
iptables -F 
iptables -X 
iptables -Z 
iptables -t nat -F

## CERRANDO TODO PARA LUEGO ABRIR
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
iptables -t nat -P PREROUTING ACCEPT 
iptables -t nat -P POSTROUTING ACCEPT

#ACEPTANDO lo
iptables -A INPUT -i lo -j ACCEPT

##ACEPTANDO CONEXIONES Y ABRIENDO PUERTOS
iptables -A INPUT -i eth1 -p tcp -m multiport--dport  80,443,53,3128  -j ACCEPT
iptables -A INPUT -i eth0 -p tcp -m multiport--dport  80,443,53,3128  -j ACCEPT
No se si hasta aqui voy bien, pero si no corregirme por favor, y necesito que como la eth0 es quien se comunica con mi servidor padre entonces esta solo permita conexiones desde x ip hacia x ip mediante el puerto 25 la cuestion es cerrarlo a todo el mundo y solo dejarlo para el envio entre mi servidor y el padre de correos, (asi me quito el tema de la suplantacion de indentidad)
Y se que si sucediera el caso, pues viene de una sola IP que seria a quien entrego los correos

Avatar de Usuario
hugo
Mensajes: 1430
Registrado: Sab, 07 Ago 2010, 14:09
Ubicación: La Habana
Contactar:

Re: De Firehol a Iptables?

Mensaje por hugo » Mié, 21 Oct 2015, 10:44

Tu script tiene algunos problemitas, pero sin saber que servicios corren realmente en el propio cortafuegos y que servicios corren en otros equipos, no hay mucho que aclarar.

De todas maneras yo dejaría lo que tienes asi:

Código: Seleccionar todo

iptables -t nat -X
iptables -t nat -F
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -X
iptables -F
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i lo -m state --state NEW -j ACCEPT
iptables -A INPUT -i eth1 -p udp -m udp --dport 53 -m state --state NEW  -j ACCEPT
iptables -A INPUT -i eth1 -p tcp -m multiport --dports 80,443,3128 -m state --state NEW  -j ACCEPT
Lo único que necesita el mal para triunfar es que los hombres buenos no hagan nada.
- Edmund Burke

JuancaDJ
Mensajes: 71
Registrado: Lun, 19 May 2014, 11:48

Re: De Firehol a Iptables?

Mensaje por JuancaDJ » Mié, 21 Oct 2015, 10:49

tengo servidor, proxy, web, dns y correo, esos son los servicios
y como estoy en un nodo provincial, los municipios utilizan esos servicios mediante la interfaces eth0 y los de la red local mediante eth1
por eso es que debo abrir los mismo puertos en las 2 interfaces cierto??

Avatar de Usuario
hugo
Mensajes: 1430
Registrado: Sab, 07 Ago 2010, 14:09
Ubicación: La Habana
Contactar:

Re: De Firehol a Iptables?

Mensaje por hugo » Mié, 21 Oct 2015, 11:00

Bueno para el correo necesitarias abrir otros puertos, dependiendo si utilizas smtp/smtps/transmission, y pop3/pop3s/imap/imaps.
Si ofreces servicios a los municipios por la interfaz externa obviamente también necesitas una linea para eso, si.
Si tienes DHCP en tu mismo cortafuegos también tienes que permitirlo.
Y si yo fuese tu también habilitaría un subset seguro de ICMP para diagnóstico.
Lo único que necesita el mal para triunfar es que los hombres buenos no hagan nada.
- Edmund Burke

JuancaDJ
Mensajes: 71
Registrado: Lun, 19 May 2014, 11:48

Re: De Firehol a Iptables?

Mensaje por JuancaDJ » Mié, 21 Oct 2015, 11:38

Entonces mi script de iptables final quedaria asi:

Código: Seleccionar todo

iptables -t nat -X
iptables -t nat -F
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -X
iptables -F
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i lo -m state --state NEW -j ACCEPT

#PERMITIENDO CONSULAS DNS TCP/UDP
iptables -A INPUT -i eth1 -p tcp -m tcp --dport 53 -m state --state NEW  -j ACCEPT
iptables -A INPUT -i eth0 -p udp -m udp --dport 53 -m state --state NEW  -j ACCEPT
iptables -A INPUT -i eth0 -p tcp -m tcp --dport 53 -m state --state NEW  -j ACCEPT

#ABRIENDO PUERTOS 
iptables -A INPUT -i eth1 -p tcp -m multiport --dports 80,443,3128 -m state --state NEW  -j ACCEPT
iptables -A INPUT -i eth0 -p tcp -m multiport --dports 80,443,3128 -m state --state NEW  -j ACCEPT

#ANCLANDO EL USO DEL PUERTO 25 A SOLO 2 IP (Para evitar suplantacion de indetidad) :)
iptables -A INPUT -s X.X.X.X -p tcp --dport 25 -j ACCEPT
iptables -A INPUT -s X.X.X.X -p tcp --dport 25 -j ACCEPT

## ENMASCARANDO LA RED LOCAL
iptables -t nat -A POSTROUTING -i eth1 -o eth1 -j MASQUERADE

## AQUI COMO PERMITO EL ICMP DE FORMA SEGURA?

## CON QUE REGLAS EVITO EL ESCANEO DE PUERTOS

## CON QUE REGLAS ME PROTEJO DE ATAQUES?
O sera mejor en vez de tener escuchando los mismos puertos en las 2 interfaces solo dejarlos abiertos en la interfaz eth0 que apunta hacia mi servidor padre y entonces a la red local aplicarte esta siguiente regla:

Código: Seleccionar todo

iptables -A FORWARD -s 192.168.0.0/24 -i eth0 -p tcp --dport 80 -j ACCEPT
iptables -A FORWARD -s 192.168.0.0/24 -i eth0 -p tcp --dport 443 -j ACCEPT
iptables -A FORWARD -s 192.168.0.0/24 -i eth0 -p tcp --dport 3128 -j ACCEPT
iptables -A FORWARD -s 192.168.0.0/24 -i eth0 -p tcp --dport 53 -j ACCEPT
iptables -A FORWARD -s 192.168.0.0/24 -i eth0 -p udp --dport 53 -j ACCEPT

Avatar de Usuario
hugo
Mensajes: 1430
Registrado: Sab, 07 Ago 2010, 14:09
Ubicación: La Habana
Contactar:

Re: De Firehol a Iptables?

Mensaje por hugo » Mié, 21 Oct 2015, 12:56

Todo depende de lo que quieres hacer.

El puerto tcp/53 normalmente solo es necesario abrirlo si tienes servidores esclavos que se sincronizan con el maestro, o si las consultas son superiores a 512 bytes, que rara vez suele ser el caso.

En el enmascaramiento no puedes poner la interfaz de entrada, solo la de salida, y solo te hace falta si necesitas reenvío de paquetes.

La cadena FORWARD es para reenviar paquetes provenientes de otros equipos con destino a otros equipos también, nunca con destino al propio servidor, para eso está INPUT.

A menos que solo permitas acceso al correo por webmail, necesitarias habilitar los puertos para uso de los clientes de correo, normalmente el 25 (smtp) o 587 (submission) y 110 (pop3), o 143 (imap).

Para ICMP puedes usar algo como esto:

Código: Seleccionar todo

iptables -A INPUT -i eth1 -p icmp -m icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -i eth1 -p icmp -m icmp --icmp-type echo-reply -j ACCEPT
iptables -A INPUT -i eth1 -p icmp -m icmp --icmp-type destination-unreachable -j ACCEPT
iptables -A INPUT -i eth1 -p icmp -m icmp --icmp-type time-exceeded -j ACCEPT
iptables -A INPUT -i eth1 -p icmp -m icmp --icmp-type parameter-problem -j ACCEPT
Lo único que necesita el mal para triunfar es que los hombres buenos no hagan nada.
- Edmund Burke

JuancaDJ
Mensajes: 71
Registrado: Lun, 19 May 2014, 11:48

Re: De Firehol a Iptables?

Mensaje por JuancaDJ » Mié, 21 Oct 2015, 13:41

Listo asi vendra quedando ahora:

Código: Seleccionar todo


#!/bin/sh
## FLUSH DE REGLAS
iptables -t nat -X
iptables -t nat -F
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -X
iptables -F

## ESTABLECIENDO POLICITAS POR DEFECTO
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i lo -m state --state NEW -j ACCEPT

#PERMITIENDO CONSULAS DNS TCP/UDP Solo deje udp siguiendo tus recomendaciones
iptables -A INPUT -i eth0 -p udp -m udp --dport 53 -m state --state NEW  -j ACCEPT
iptables -A INPUT -i eth1 -p udp -m udp --dport 53 -m state --state NEW  -j ACCEPT
#iptables -A INPUT -i eth1 -p tcp -m tcp --dport 53 -m state --state NEW  -j ACCEPT
#iptables -A INPUT -i eth0 -p tcp -m tcp --dport 53 -m state --state NEW  -j ACCEPT

#ABRIENDO PUERTOS 
iptables -A INPUT -i eth1 -p tcp -m multiport --dports 80,443,3128 -m state --state NEW  -j ACCEPT
iptables -A INPUT -i eth0 -p tcp -m multiport --dports 80,443,3128 -m state --state NEW  -j ACCEPT

#ANCLANDO EL USO DEL PUERTO 25 A SOLO 2 IP (Para evitar suplantacion de indetidad) :)
iptables -A INPUT -s x.x.x.x -p tcp --dport 25 -j ACCEPT
iptables -A INPUT -s x.x.x.x -p tcp --dport 25 -j ACCEPT

## PERMITO EL ICMP DE FORMA SEGURA INTERNET
iptables -A INPUT -i eth0 -p icmp -m icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -i eth0 -p icmp -m icmp --icmp-type echo-reply -j ACCEPT
iptables -A INPUT -i eth0 -p icmp -m icmp --icmp-type destination-unreachable -j ACCEPT
iptables -A INPUT -i eth0 -p icmp -m icmp --icmp-type time-exceeded -j ACCEPT
iptables -A INPUT -i eth0 -p icmp -m icmp --icmp-type parameter-problem -j ACCEPT

## PERMITO EL ICMP DE FORMA SEGURA LAN
iptables -A INPUT -i eth1 -p icmp -m icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -i eth1 -p icmp -m icmp --icmp-type echo-reply -j ACCEPT
iptables -A INPUT -i eth1 -p icmp -m icmp --icmp-type destination-unreachable -j ACCEPT
iptables -A INPUT -i eth1 -p icmp -m icmp --icmp-type time-exceeded -j ACCEPT
iptables -A INPUT -i eth1 -p icmp -m icmp --icmp-type parameter-problem -j ACCEPT

## HACIENDO DNAT
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 5222 -j DNAT --to x.x.x.x:5222
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 21 -j DNAT --to x.x.x.x:21
Listo, no dejo puertos del correo abierto porque se usa via webmail, pero abrire tambien el imap y smtps
Ahora el DNAT esta bien al final?? o eso se pone al inicio?
Necesito tener los puertos abiertos a los que les hare DNAT o no es necesario?
Y como guardo las reglas para que se inicie automaticamente en caso de reinicio del servidor?. Gracias

Avatar de Usuario
hugo
Mensajes: 1430
Registrado: Sab, 07 Ago 2010, 14:09
Ubicación: La Habana
Contactar:

Re: De Firehol a Iptables?

Mensaje por hugo » Mié, 21 Oct 2015, 19:11

Hmmm... si lo que quieres es permitirle a tus clientes de la LAN acceder a un jabber en la WAN, (que es lo que parece ya que estas usando como entrada eth1) lo que necesitas es un SNAT o un MASQUERADE (que van en la cadena POSTROUTING), no un DNAT. Igual para el FTP. Además hay que crear las reglas FORWARD necesarias, por ejemplo:

Código: Seleccionar todo

iptables -A FORWARD -i eth1 -o eth0 -p tcp -m tcp --dport 20:21 -m state --state NEW -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -p tcp -m tcp --dport 5222 -m state --state NEW -j ACCEPT
iptables -A FORWARD -i eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
La suplantación de identidad normalmente se asegura en el MTA, pero si usas webmail mejor, un servicio menos a configurar.

Lo demás parece estar bien. Siempre puedes asegurar un poco mas las cosas por ejemplo estableciendo límites de conexiones simultaneas por cliente o límites de paquetes icmp por minuto, etc. Pero esto son ya exquisiteces que para empezar no suelen ser necesarias.

Configurar un anti-portscan es un poco mas complejo porque el modulo psd no suele venir por defecto en la distribucion de netfilter y hay que compilarlo. No hace mucho mencioné como en la lista, no lo recuerdo de memoria pero si mal no recuerdo involucra module-assisstant.

Para hacer las reglas persistentes puedes instalar en Debian y derivadas el paquete iptables-persistent (en otras distribuciones hay otras vías). Luego es solo cargar tus reglas y ejecutar esto una vez:

Código: Seleccionar todo

iptables-save > /etc/iptables/rules.v4
De ahi en adelante puedes modificar directamente ese archivo cuando lo necesites y recargarlo de esta manera:

Código: Seleccionar todo

iptables-restore < /etc/iptables/rules.v4
Lo único que necesita el mal para triunfar es que los hombres buenos no hagan nada.
- Edmund Burke

JuancaDJ
Mensajes: 71
Registrado: Lun, 19 May 2014, 11:48

Re: De Firehol a Iptables?

Mensaje por JuancaDJ » Jue, 22 Oct 2015, 08:03

Bueno el tema de la suplantacion de identidad una vez estuve intentando solucionarlo pero sin solucion aficaz solo algo temporal y con respecto a estas lineas:

Código: Seleccionar todo

iptables -A FORWARD -i eth1 -o x.x.x.x -p tcp -m tcp --dport 20:21 -m state --state NEW -j ACCEPT
iptables -A FORWARD -i eth1 -o x.x.x.x -p tcp -m tcp --dport 5222 -m state --state NEW -j ACCEPT
iptables -A FORWARD -i eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
Como puedes ver sustitui la interfaz eth0 por una direccion IP, ya que lo mio es permitir que los cliente se la LAN lleguen a esos servicios en mi servidor padre, ya que no los tengo en el servidor donde esta el firewall el jabber como el ftp estan en mi servidor padre y lo mio es hacerles un reenvio, que me hagan la peticion a mi por esos puertos pero yo reenviarlos hasta el servidor padre
pero ni con esos cambios funciona :(
Ayer en la internet encontre una forma de evitar escaneo de puertos con iptables, pero aun no la aplico primero la posteare aca a ver si es efectiva, pero si antes necesito solucionar el tema del reenvio de puertos :(

JuancaDJ
Mensajes: 71
Registrado: Lun, 19 May 2014, 11:48

Re: De Firehol a Iptables?

Mensaje por JuancaDJ » Jue, 22 Oct 2015, 10:47

Una pregunta que me falto, acaso para yo hacer el reenvio tengo que tener esos puertos abiertos?, o sea los habro para la red local:

Código: Seleccionar todo

iptables -A INPUT -i eth1 -p tcp -m multiport --dports 20,21,5222,5223 - m state --state NEW -j ACCEPT
Y luego entonces hago el reenvio desde los usuarios de la LAN hacia el servidor padre donde estan hospedados los servicios

Responder