Ir al contenido principal

Linux como Firewall y Gateway

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!!!

Comentarios

Entradas populares de este blog

Asterisk con WebRTC, TLS, libsrtp

  Cześć !! En esta ocasión vamos a explicar cómo configurar Asterisk para que desde un teléfono web podamos sacar y recibir llamadas. Se usará los siguientes componentes de Asterisk: libsrtp tls Asterisk module http Antes que nada debemos tener un teléfono web(obviamente), en el laboratorio vamos a usar Sipml5 en el siguiente link : https://www.doubango.org/sipml5/call.htm El siguiente paso es instalar libsrtp del enlace: https://github.com/cisco/libsrtp . #git clone https://github.com/cisco/libsrtp.git #cd libsrtp #./configure #make && make install Luego verificamos tener los siguientes módulos activos para compilar en menuconfig de Asterisk: res_crypto res_http_websocket res_srtp Comunmente si res_crypto no está selecionable, le falta la dependencia openssl-devel o su equivalente dependiendo del sistema que tengan. Cuando estemos seguros que están cargados en Asterisk continuamos con la instalación de los certificados locales(Si usa Lets'encrypt omitir la generación de c

GNUDIALER en Asterisk

Hola Como están? GNUDIALER es un software de marcacion predictiva que nos ofrece varios modos, prediccion, modo automatico, modo preview, ademas de incluir un CRM y es muy dinamico. A pesar de que en el mercado existen muchos software de este tipo sean GNU o pagos, GNUDIALER es muy efectivo y lo mejor es GNU. Eso quiere decir que puedes modificarlo con un poco de conocimiento en lenguaje C y asterisk, bueno uno poco no, mucho conocimiento. He usado VICIDIAL en otras ocasiones y es también verdaderamente interesante, sin embargo como todo en este planeta hay ventajas y desventajas. Una de las ventajas que tiene sobre VICIDIAL(hasta el momento he podido observar en VICIDIAL) es que es mucho mas sencillo de administrar via web, puedo tener un numero ilimitado de campos en mi campaña,  puedo editar mis scripts ami antojo via web html(teniendo un conocimiento html). Desventajas es q aveces se puede comportar algo inestable si no tengo en cuenta el ratio vs cantidad de lineas vs agentes di

Instalar Queuemetrics desde 0.

Cześć. Queuemetrics a pesar de estar casi personalizada su  instalación a Centos, también puede instalarse en otros sistemas operativos, de hecho en cualquier Linux podría hacerse. A continuación describo los pasos para hacerlo. En este demo se usó Suse. Descargar los siguientes paquetes: - Queuemetrics(obviamente XD)      link http://queuemetrics.loway.it/download.jsp      formato tar.gz - Mysql connector      link https://dev.mysql.com/downloads/connector/j/      formato  "platform independent" tar.gz      debe registrarse previamente. - Tomcat      link http://tomcat.apache.org/      formato tar.gz      en este manual se instaló la version 8.5.37 - JDK      link https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html      formato tar.gz      version linux x64 Instalar: - JDK Descomprimir #tar -zxvf jdk-8u201-linux-x64.tar.gz Mover jdk a /usr/local/ #mv jdk1.8.0_201 /usr/local/ - Tomcat Descomprimir #tar -zxvf a