Página 1 de 5
De Firehol a Iptables?
Publicado: Mié, 21 Oct 2015, 10:20
por JuancaDJ
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
Re: De Firehol a Iptables?
Publicado: Mié, 21 Oct 2015, 10:44
por hugo
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
Re: De Firehol a Iptables?
Publicado: Mié, 21 Oct 2015, 10:49
por JuancaDJ
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??
Re: De Firehol a Iptables?
Publicado: Mié, 21 Oct 2015, 11:00
por hugo
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.
Re: De Firehol a Iptables?
Publicado: Mié, 21 Oct 2015, 11:38
por JuancaDJ
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
Re: De Firehol a Iptables?
Publicado: Mié, 21 Oct 2015, 12:56
por hugo
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
Re: De Firehol a Iptables?
Publicado: Mié, 21 Oct 2015, 13:41
por JuancaDJ
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
Re: De Firehol a Iptables?
Publicado: Mié, 21 Oct 2015, 19:11
por hugo
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:
De ahi en adelante puedes modificar directamente ese archivo cuando lo necesites y recargarlo de esta manera:
Re: De Firehol a Iptables?
Publicado: Jue, 22 Oct 2015, 08:03
por JuancaDJ
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
Re: De Firehol a Iptables?
Publicado: Jue, 22 Oct 2015, 10:47
por JuancaDJ
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