Título: [AYUDA] Mi primer firewall iptables
Publicado por: danny920825 en 6 Abril 2016, 21:07 pm
Hola a todos los que me leen. Llevo el dia entero leyendo un muy buen tutorial sobre iptables, que es cada cosa y como configurar cada elemento dentro del mismo. Al final me decidi a crear el mio propio apoyandome claro está en ese tutorial ya que no me lo aprendi todo de memoria. Cuando finalicé, lo sustitui por el que tengo (otro script en iptables que hizo un amigo y esta genial) y no funciona bien. Lo hice por funciones para poder darle las opciones start, stop, restart y open. El supuestamente trabaja bien, pero si le doy start, todas las conexiones dan time out. Si lo pongo en open si trabaja pero a nadie la gusta tener un firewall "ABIERTO". A continuacion les adjunto el codigo a ver si alguien me ayuda por favor. #! /bin/bash
# /etc/init.d/firewall # ### BEGIN INIT INFO # Provides: firewall # Required-Start: $network # Required-Stop: # Should-Stop: # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Firewall configuration ### END INIT INFO #LOCAL SERVERS CORREO=192.168.21.3 # CORREO DNS=192.168.21.2 # DNS ADMIN=192.168.21.5 # Informatico FIREWALL=192.168.21.1 # Firewall (esta pc) WIFI=192.168.21.7 # PC Virtual de Pruebas
LAN=192.168.21.0/24 # INTERFACES LANIF=eth1 WANIF=eth0 # DIRECCIONES IP WANIP2=xxx.xxx.xxx.xxx WANIP3=xxx.xxx.xxx.xxx ANY=0.0.0.0/0
#Variable para los comentarios com="-m comment --comment"
refrescar_reglas() { iptables -F INPUT iptables -F OUTPUT iptables -F FORWARD iptables -F -t nat }
#ESTABLECE POLITICA POR DEFECTO COMO PERMISIVA, LO QUE NO SE DENIEGUE
EXPLICITAMENTE SE DEJA PASAR politica_accept() { iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT }
#ESTABLECE POLITICA POR DEFECTO COMO CERRADA, LO QUE NO SE PERMITA EXPLICITAMENTE
SE DENIEGA politica_descartar() { iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD DROP }
conexion_establecida() { iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
}
localhost() { iptables -A INPUT -i lo -j ACCEPT -m comment --comment "Trafico Localhost IN" iptables -A INPUT -i $LANIF -p tcp --dport 3128 -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT -m comment --comment "Trafico Localhost OUT" }
ssh() { iptables -A INPUT -p tcp --dport 22 -m state --state NEW,RELATED,ESTABLISHED -j
ACCEPT $com "SSH DESDE LAN" }
ping_icmp() { iptables -A INPUT -i eth1 -p icmp -j ACCEPT }
#NATEOS ##################################################################################
######################################################################## route() { echo 1 > /proc/sys/net/ipv4/ip_forward iptables -t nat -A POSTROUTING -s $CORREO -o $WANIF -j SNAT --to-source $WANIP2 iptables -t nat -A POSTROUTING -s $DNS -o $WANIF -j SNAT --to-source $WANIP2 iptables -t nat -A POSTROUTING -s $WIFI -o $WANIF -j SNAT --to-source $WANIP2 iptables -t nat -A POSTROUTING -s $ADMIN -o $WANIF -j SNAT --to-source $WANIP2 } #PORT FORWARDING port_forwarding() { iptables -t nat -A PREROUTING -d $WANIP2 -p tcp -m multiport --dports 25,587 -m
state --state NEW,RELATED,ESTABLISHED -j DNAT --to-destination $CORREO } #FORWARDING forwarding() { #Admin iptables -A FORWARD -s $ADMIN -j ACCEPT iptables -A FORWARD -d $ADMIN -j ACCEPT
#DNS iptables -A FORWARD -s $DNS -p tcp -m multiport --dports 53,953 -j ACCEPT iptables -A FORWARD -d $DNS -p tcp -m multiport --dports 53,953 -j ACCEPT iptables -A FORWARD -s $DNS -p udp -m multiport --dports 53,953 -j ACCEPT iptables -A FORWARD -d $DNS -p udp -m multiport --dports 53,953 -j ACCEPT iptables -A FORWARD -s $DNS -p icmp -j ACCEPT iptables -A FORWARD -d $DNS -p icmp -j ACCEPT
#SMTP,DNS,WEBMAIL IN AND OUT iptables -A FORWARD -d $CORREO -j ACCEPT iptables -A FORWARD -s $CORREO -j ACCEPT
#WIFI iptables -A FORWARD -s $WIFI -j ACCEPT }
##################################################################################
########################################################################
ancho_banda() { # HACEMOS LIMPIEZA # BORRAMOS TODAS LAS REGLAS ANTERIORES tc qdisc del dev eth0 root tc qdisc del dev eth1 root
#CLASE QUE REPRESENTA LA SALIDA DE PAQUETES, A 64Kbit (ESTO ES PARA EL CORREO) tc qdisc add dev eth0 root handle 1:0 htb default 99 tc class add dev eth0 parent 1:0 classid 1:1 htb rate 128Kbit ceil 128Kbit tc class add dev eth0 parent 1:1 classid 1:11 htb rate 64Kbit ceil 70Kbit prio 2 tc qdisc add dev eth0 parent 1:11 handle 10: sfq perturb 10
#CLASE QUE REPRESENTA LA ENTRADA DE PAQUETES, A 64Kbit (ESTO ES PARA EL CORREO) tc qdisc add dev eth1 root handle 2:0 htb default 99 tc class add dev eth1 parent 2:0 classid 2:1 htb rate 128Kbit ceil 128Kbit tc class add dev eth1 parent 2:1 classid 2:11 htb rate 64Kbit ceil 70Kbit prio 2 tc qdisc add dev eth1 parent 2:11 handle 20: sfq perturb 10
#EL TRAFICO ENTRANTE SERA DE LA CLASE 2 Y LA SALIDA DE LA CLASE 1 iptables -t mangle -I POSTROUTING -o eth0 -p tcp -s $CORREO -j CLASSIFY --set-
class 1:11 iptables -t mangle -I POSTROUTING -o eth0 -p tcp -d 10.0.0.2 -j CLASSIFY --set-
class 2:11 }
flags() { #NO SE ACEPTAN PAQUETES CON flags DE URGENTE, FINALIZADO NI EMPUJE iptables -A INPUT -p tcp --tcp-flags ALL FIN,PSH,URG -j DROP
#LOS QUE NO TIENEN flags QUE NO ENTREN iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
#LOS PAQUETES DE UNA NUEVA CONEXION DEBEN SER SYN iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
#PAQUETES INCOMPLETOS TAMPOCO QUEREMOS iptables -A INPUT -f -j DROP
# LAS CONEXIONES QUE NO PERTENEZCAN AL SISTEMA SE BOTAN iptables -A INPUT -m conntrack --ctstate INVALID -j DROP }
dns() { iptables -A OUTPUT -o $WANIF -s $WANIP2 -p udp --dport 53 -m state --state
NEW,RELATED,ESTABLISHED -j ACCEPT -m comment --comment "CONSULTAS DNS DESDE
GATEWAY" }
ftp() { iptables -A OUTPUT -o $WANIF -m multiport -p tcp --dports 20:21,1024:65535 -m
state --state NEW,RELATED,ESTABLISHED -j ACCEPT }
case "$1" in start) refrescar_reglas flags politica_descartar conexion_establecida ancho_banda dns ssh ping_icmp ftp route forwarding port_forwarding echo "FIREWALL ACTIVO" ;; open) refrescar_reglas politica_accept route forwarding echo "MODO ENRUTADOR Y TRADUCCION IP ¡ABIERTO!" ;; stop) refrescar_reglas politica_accept route forwarding port_forwarding echo "FIREWALL DETENIDO!!! CUIDADO" ;; restart) echo "REINICIANDO" $0 stop $0 start ;; *) echo "Usar Start|Stop|Open|restart" esac
exit 0
Trate de tenerlo lo mas comentado posible para que se entienda (mas por mi que por otra cosa, para no perderme).
Título: Re: [AYUDA] Mi primer firewall iptables
Publicado por: andavid en 6 Abril 2016, 23:53 pm
Me parece que esto tiene mas pinta de ir en el subforo de LINUX que aca.
Título: Re: [AYUDA] Mi primer firewall iptables
Publicado por: Stakewinner00 en 7 Abril 2016, 00:13 am
si no recuerdo mal con "iptables -F" ya borras todo, no hace falta hacerlo con el INPUT OUTPUT etc, "#LOS PAQUETES DE UNA NUEVA CONEXION DEBEN SER SYN iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP" Según vi hace tiempo no es recomendable, "You require NEW packets to have SYN. This will break if a TCP connection is continued after the respective state in iptables already timed out. Not sure what the default timeouts are, but some netfilter guy warned about it." fuente: http://security.stackexchange.com/questions/4603/tips-for-a-secure-iptables-config-to-defend-from-attacks-client-side echo 1 > /proc/sys/net/ipv4/ip_forward Eso lo puedes meter en /etc/sysctl.conf, net.ipv4.ip_forward = 1Para no tener que esperar el timeout igual podrías cambiar de DROP a REJECT para mandar un paquete avisando que no se puede conectar, luego puedes comentar todas las funciones menos una luego comentas todas menos 2 hasta que descubras que regla en concreto es la que causa el problema. Como recomendación, intenta mantenerlo lo más simple y sencillo posible,
Título: Re: [AYUDA] Mi primer firewall iptables
Publicado por: danny920825 en 7 Abril 2016, 18:04 pm
Gracias, eso es lo que haré. Ir probando una por una. Lo que pensaba que tenia algun error de sintaxis o algo asi. Y gracias por la ayuda con la flags, no habia leido sobre esa recomendacion. Gracias por todo. Ya comentaré sobre la solucion y cual era el problema.
Título: Re: [AYUDA] Mi primer firewall iptables
Publicado por: danny920825 en 11 Abril 2016, 15:44 pm
Stakewinner00 Al parecer el problema estaba en la flags: "#LOS PAQUETES DE UNA NUEVA CONEXION DEBEN SER SYN iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP" porque la comenté y al momento funcionó todo lo demas. Gracias por el aporte sobre las flags y sobre "iptables -F" para borrar todas las reglas. Has sido de mucha ayuda. No habia respondido antes porque necesitaba el internet de forma permanente y no podia probar. Asi que propongo a los moderadores cerrar el tema
|