Linux posee una herramienta poderosa que se conoce como Iptables, esta por fortuna es nativa en linux, es decir viene con el nucleo desde hace algunos aaañoss, Iptables nos permite usar nuestra maquina como gateway simple o pasarela o podemos convertirlo en todo un militante al servicio de tu red de datos impidiendo que entren o salgan ciertos paquetes.
Cuando me refiero a simple, es que simplemente queremos que linux actue como router sin filtrar nada, solo paquete que tome lo paso y visceversa. A continuacion unas reglas para este.
## FLUSH de reglas
iptables -F
iptables -X
iptables -Z
iptables -t nat -F
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
Explicare un poquito, al inicio hice un limpiado de reglas por si existian antes algunas. En el segundo bloque defino mis politicas por defecto, le digo que acepte cualquier paquete de entrada(INPUT), de salida(OUTPUT), redreccion(FORWARD), preenrutamiento(PREROUTING) y posenrutamiento(POSTROUTING). Si quieres mas info sobre esto visita el sitio de la lartc.
la ultima linea, le digo a mi maquina que todo lo que salga por la interfaz eth1 en posenrutamiento, le haga un enmascaramiento(MASQUERADE).
A continuacion explicare las reglas mas comunes iendo lejos con enmascarando, denegando, aceptando y logueando paquetes.
#!/bin/sh
iptables -F
iptables -X
iptables -Z
iptables -t nat -F
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
#esto me ayuda a evitar que me hagan un ataque para agotar mis recursos
iptables -N syn-flood
iptables -A INPUT -i eth1 -p tcp --syn -j syn-flood
iptables -A syn-flood -m limit --limit 1/s --limit-burst 4 -j RETURN
iptables -A syn-flood -j DROP
#importante si quieremos q la maquina actue como gateway
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
#logueare cualquier paquete que ingrese por la eth0 por el protocolo tcp que el puerto de destino sea el 80!!
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j LOG --log-prefix 'REDIRECCION DEL 80 al 3128' --log-level 4
# Logueo todo lo que entre por la interfaz eth1 el protoclo tcp
iptables -A INPUT -i eth1 -p tcp -m multiport --dport 1:65535 -j LOG --log-prefix 'DENEGANDO Puertos tcp !!! ' --log-level 4
#Logueando todo lo que entre por la interfaz eth1, protocolo udp
iptables -A INPUT -i eth1 -p udp -m multiport --dport 1:65535 -j LOG --log prefix 'DENEGANDO Puertos udp !!! ' --log-level 4
#nateando algunos puertos
#preenruto Preenruto con destination nat lo que entre por la eth1 protocolo tcp con puerto destino 2022 a la direccion 192.168.0.2 puerto 22
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 51122 -j DNAT --to 192.168.0.2:22
# Preenruto con destination nat lo que entre por la eth1 protoclo tcp con puerto destion 9090 a la direccion 192.168.0.248 puerto 80
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 9090 -j DNAT --to 192.168.0.248:80
#redirecciona puerto
# preenruto con redireccion lo que entre por la eth0 protocolo tcp con puerto destino 80 hacia el puerto 3128.
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
# preenruto con redireccion lo que entre por la eth0 con destino a la 192.168.0.1 protocolo tcp puerto destino 5900 hacia el puerto 5901.
iptables -t nat -A PREROUTING -i eth0 -d 192.168.0.1 -p tcp --dport 5900 -j REDIRECT --to-port 5901
#aceptando puertos
#acepto lo que entre por la eth1 protocolo tcp con puerto destinos tales.
iptables -A INPUT -i eth1 -p tcp -m multiport --dport 443,1194,2022,5901 -j ACCEPT
#Acepto lo que salga por la eth1 protocolo udp puerto destino 53 puerto origen 1024:65535
iptables -A OUTPUT -o eth1 -p udp --dport 53 --sport 1024:65535 -j ACCEPT
#Acepto lo que entre por la eth1 protocolo udp puerto origen 53 puerto destino 1024:65535
iptables -A INPUT -i eth1 -p udp --sport 53 --dport 1024:65535 -j ACCEPT
#Acepto lo que salga con flag NEW ESTABLISHED RELATED por la interfaz eth1 puerto tcp puerto destino 80 puerto origen 1024 hasta 65535
iptables -A OUTPUT -j ACCEPT -m state --state NEW,ESTABLISHED,RELATED -o eth1 -p tcp --dport 80 --sport 1024:65535
#acepto lo que entre con estado NEW ESTABLISHED RELATED por la interfaz eth1 protocolo tcp
iptables -A INPUT -j ACCEPT -m state --state ESTABLISHED,RELATED -i eth1 -p tcp
#Denegando
#rechazar lo que entre por la interfaz eth1 protocolo tcp puertos destino 1:65535 rechazar con --reset-with tcp-reset
iptables -A INPUT -i eth1 -p tcp -m multiport --dport 1:65535 -j REJECT --reject-with tcp-reset
#rechazar lo que entre por la interfaz eth1 protocolo udp puertos destino 1:65535
iptables -A INPUT -i eth1 -p udp -m multiport --dport 1:65535 -j REJECT
#Descartar lo que entre por la eth0
iptables -A INPUT -i eth0 -j DROP
#Bloquear sitios como facebook o algun sitio de esos de ocio. Hasta el momento me ha funcionado. Como uso mi proxy en modo trasnparente y como sabemos squid no es capaz de tratar https bloqueo asi.
iptables -A FORWARD -p tcp -m string --string "facebook" --algo kmp -j DROP
iptables -A FORWARD -p tcp -m string --string "youtube" --algo kmp -j DROP
Hay cosas que aclarar respecto al rechazo, cuando hago un REJECT del paquete puedo enviar un motivo,"tcp-reset" que quiere decir que no existe un puerto abierto. Si uso DROP simplemente no reenvio nada, esto se nota al hacer un nmap solo si aparece filtered en el estado ha sido DROP, si aparece closed es porque posiblemente se uso REJECT o no habia un servicio escuchando por el puerto de verdad.
Cuando usemos REJECT es importante destacar que se puede estar diciendo de manera cordial que no hay nadie escuchando o se notifica algo al cliente, sin embargo esto le exige a la maquina recursos y esto puede ser usado para agotar recursos, de hecho es un ataque muy commun a servidores. DROP no usa tana energia simplemente bota o descarta el paquete. Para mas informacion de REJECT ejecuta:
#iptables -j REJECT --help
Si deseamos ver algo de estadisticas, ejecutamos
#iptables -nvx -L INPUT o OUTPUT o FORWARD
SALUDOS!!!
Cuando me refiero a simple, es que simplemente queremos que linux actue como router sin filtrar nada, solo paquete que tome lo paso y visceversa. A continuacion unas reglas para este.
## FLUSH de reglas
iptables -F
iptables -X
iptables -Z
iptables -t nat -F
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
Explicare un poquito, al inicio hice un limpiado de reglas por si existian antes algunas. En el segundo bloque defino mis politicas por defecto, le digo que acepte cualquier paquete de entrada(INPUT), de salida(OUTPUT), redreccion(FORWARD), preenrutamiento(PREROUTING) y posenrutamiento(POSTROUTING). Si quieres mas info sobre esto visita el sitio de la lartc.
la ultima linea, le digo a mi maquina que todo lo que salga por la interfaz eth1 en posenrutamiento, le haga un enmascaramiento(MASQUERADE).
A continuacion explicare las reglas mas comunes iendo lejos con enmascarando, denegando, aceptando y logueando paquetes.
#!/bin/sh
iptables -F
iptables -X
iptables -Z
iptables -t nat -F
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
#esto me ayuda a evitar que me hagan un ataque para agotar mis recursos
iptables -N syn-flood
iptables -A INPUT -i eth1 -p tcp --syn -j syn-flood
iptables -A syn-flood -m limit --limit 1/s --limit-burst 4 -j RETURN
iptables -A syn-flood -j DROP
#importante si quieremos q la maquina actue como gateway
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
#logueare cualquier paquete que ingrese por la eth0 por el protocolo tcp que el puerto de destino sea el 80!!
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j LOG --log-prefix 'REDIRECCION DEL 80 al 3128' --log-level 4
# Logueo todo lo que entre por la interfaz eth1 el protoclo tcp
iptables -A INPUT -i eth1 -p tcp -m multiport --dport 1:65535 -j LOG --log-prefix 'DENEGANDO Puertos tcp !!! ' --log-level 4
#Logueando todo lo que entre por la interfaz eth1, protocolo udp
iptables -A INPUT -i eth1 -p udp -m multiport --dport 1:65535 -j LOG --log prefix 'DENEGANDO Puertos udp !!! ' --log-level 4
#nateando algunos puertos
#preenruto Preenruto con destination nat lo que entre por la eth1 protocolo tcp con puerto destino 2022 a la direccion 192.168.0.2 puerto 22
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 51122 -j DNAT --to 192.168.0.2:22
# Preenruto con destination nat lo que entre por la eth1 protoclo tcp con puerto destion 9090 a la direccion 192.168.0.248 puerto 80
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 9090 -j DNAT --to 192.168.0.248:80
#redirecciona puerto
# preenruto con redireccion lo que entre por la eth0 protocolo tcp con puerto destino 80 hacia el puerto 3128.
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
# preenruto con redireccion lo que entre por la eth0 con destino a la 192.168.0.1 protocolo tcp puerto destino 5900 hacia el puerto 5901.
iptables -t nat -A PREROUTING -i eth0 -d 192.168.0.1 -p tcp --dport 5900 -j REDIRECT --to-port 5901
#aceptando puertos
#acepto lo que entre por la eth1 protocolo tcp con puerto destinos tales.
iptables -A INPUT -i eth1 -p tcp -m multiport --dport 443,1194,2022,5901 -j ACCEPT
#Acepto lo que salga por la eth1 protocolo udp puerto destino 53 puerto origen 1024:65535
iptables -A OUTPUT -o eth1 -p udp --dport 53 --sport 1024:65535 -j ACCEPT
#Acepto lo que entre por la eth1 protocolo udp puerto origen 53 puerto destino 1024:65535
iptables -A INPUT -i eth1 -p udp --sport 53 --dport 1024:65535 -j ACCEPT
#Acepto lo que salga con flag NEW ESTABLISHED RELATED por la interfaz eth1 puerto tcp puerto destino 80 puerto origen 1024 hasta 65535
iptables -A OUTPUT -j ACCEPT -m state --state NEW,ESTABLISHED,RELATED -o eth1 -p tcp --dport 80 --sport 1024:65535
#acepto lo que entre con estado NEW ESTABLISHED RELATED por la interfaz eth1 protocolo tcp
iptables -A INPUT -j ACCEPT -m state --state ESTABLISHED,RELATED -i eth1 -p tcp
#Denegando
#rechazar lo que entre por la interfaz eth1 protocolo tcp puertos destino 1:65535 rechazar con --reset-with tcp-reset
iptables -A INPUT -i eth1 -p tcp -m multiport --dport 1:65535 -j REJECT --reject-with tcp-reset
#rechazar lo que entre por la interfaz eth1 protocolo udp puertos destino 1:65535
iptables -A INPUT -i eth1 -p udp -m multiport --dport 1:65535 -j REJECT
#Descartar lo que entre por la eth0
iptables -A INPUT -i eth0 -j DROP
#Bloquear sitios como facebook o algun sitio de esos de ocio. Hasta el momento me ha funcionado. Como uso mi proxy en modo trasnparente y como sabemos squid no es capaz de tratar https bloqueo asi.
iptables -A FORWARD -p tcp -m string --string "facebook" --algo kmp -j DROP
iptables -A FORWARD -p tcp -m string --string "youtube" --algo kmp -j DROP
Hay cosas que aclarar respecto al rechazo, cuando hago un REJECT del paquete puedo enviar un motivo,"tcp-reset" que quiere decir que no existe un puerto abierto. Si uso DROP simplemente no reenvio nada, esto se nota al hacer un nmap solo si aparece filtered en el estado ha sido DROP, si aparece closed es porque posiblemente se uso REJECT o no habia un servicio escuchando por el puerto de verdad.
Cuando usemos REJECT es importante destacar que se puede estar diciendo de manera cordial que no hay nadie escuchando o se notifica algo al cliente, sin embargo esto le exige a la maquina recursos y esto puede ser usado para agotar recursos, de hecho es un ataque muy commun a servidores. DROP no usa tana energia simplemente bota o descarta el paquete. Para mas informacion de REJECT ejecuta:
#iptables -j REJECT --help
Si deseamos ver algo de estadisticas, ejecutamos
#iptables -nvx -L INPUT o OUTPUT o FORWARD
SALUDOS!!!
Comentarios
Publicar un comentario