Qué es un firewall
Un firewall es un dispositivo que filtra el tráfico entre
redes, como mínimo dos. El firewall puede ser un dispositivo profesional para
este propósito o un software como es el caso de Netfilter o Iptables del que
estaremos hablando a continuación. Debemos verlo como un dispositivo con DOS o
mas interfaces de red en la que se establecen una reglas de filtrado con las
que se decide si una conexión determinada puede establecerse o no.
NetFilter o Iptables
El Kernel de Linux trae
consigo un sistema de filtrado de paquetes llamando Netfilter o Iptables el se
encarga filtrar todo el trafico que llega a las interfaces de red de una PC o
servidor. Este sistema de filtrado hace uso de una serie de reglas con las
cuales podemos conformar un Firewall mas que potente para nuestros servidores o
maquinas de escritorio.
En este tutorial veremos
como trabajar con alguna de estas reglas a fin de tener un firewall que
realmente nos brinde un nivel de seguridad alto para nuestros servidores o
nuestras pc.
Tablas Iptables:
FILTER (filtrado)Es
la tabla que se encarga del filtrado de paquetes. Las cadenas serán: INPUT
OUTPUT y FORWARD.
NAT (Network Address Translation) Esta tabla se
encarga del enmascaramiento de IP, se usa para re direccionar puertos o cambiar
las :IPs de origen y destino a través de interface de red. Las cadenas
serán :PREROUTING y POSTROUTING
MANGLE (Modificado de paquetes)Permite la modificación
de paquetes como ToS (Type of Service), TTL (Time to live)o mark, marcar el
paquete.
RAW Esta tabla se usa para configurar principalmente
excepciones en el seguimiento de paquetes en combinación con la acción o target
NOTRACK. Trabaja sobre la cadena PREROUTING Y OUTPUT y su única acción es
Notrack. Puede evitar que iptables haga un seguimiento de los paquetes.
Parámetros:
Toda regla iptables esta
definida por una serie de parámetros aquí veremos los parámetros mas usados.
-i
Interfaz de entrada (eth0,eth1,eth2...)
-o Interfaz
de salida (eth0,eth1,eth2...)
--sport
Puerto de origen
--dport
Puerto destino -p El protocolo del paquete a comprobar, tcp, udp, icmp ó all.
Por defecto es all
Por defecto es all
-j Esto
especifica el objetivo de la cadena de reglas, o sea una acción
Acciones:
Cada regla que se defina en un scrip iptables debe de
llevar una serie de parámetros y además de esto se debe definir el tipo de acción
a realizar una vez un paquete llegue a dicho filtro, ahora veremos cuales son
las acciones que se pueden realizar.
ACCEPT---> Paquete aceptado.
REJECT---> Paquete rechazado con notificación
mediante ICMP
DROP---> Paquete rechazado.
MASQUERADE--->Enmascaramiento de la dirección
IP origen de forma dinámica. Esta acción es sólo válida en la tabla NAT en la
cadena postrouting.
DNAT---> Enmascaramiento de la dirección
destino, muy conveniente para re-enrutado de paquetes.
SNAT---> enmascaramiento de la IP origen
de forma similar a masquerade, pero con IP fija.
Ya tenemos los
conocimientos básicos ahora comenzaremos a instalar y configurar nuestro firewall.
Instalación de iptables en Ubuntu 11.10
1- Creamos un fichero “iptables” con
permisos de ejecución
sudo touch iptables
chmod 755 /etc/init.d/iptables
2- Agregamos las siguientes líneas en el
fichero creado anteriormente:
#!/bin/sh
case "$1" in
start)
echo -n
"Starting Firewalling: Iptables"
iptables-restore /etc/iptables/iptables.conf
echo
"."
echo -n
"Blocking hosts in Black List: Blocking"
/etc/iptables/blocking
echo
"."
;;
stop)
echo -n
"Shutting Firewalling: Iptables"
# Remove all
existing rules belonging to this filter
iptables -F
# Delete all
user-defined chain to this filter
iptables -X
# Reset the
default policy of the filter to drop.
iptables -P
INPUT DROP
iptables -P
OUTPUT DROP
iptables -P
FORWARD DROP
echo
"."
;;
restart|reload)
$0 stop
$0 start
;;
status)
echo
"Iptables Status"
iptables -n -L
;;
*)
echo
"Usage: iptables {start|stop|restart|reload}"
exit 1
esac
echo "done"
exit 0
3- Adicionamos el demonio iptables en los rc del sistema
operativo para que el proceso levante automáticamente cada vez que se encienda
la maquina.
cd
/etc/init.d
update-rc.d
iptables defaults
4-
Creamos
el directorio y el fichero donde vamos a guardar las reglas de nuestro iptables
mkdir /etc/iptables
touch /etc/iptables/iptables.conf
5- Editamos el fichero iptables que esta en /etc/init.d/ modificamos la línea iptables-restore por la línea iptables-restore
/etc/iptables/iptables.conf
Tenemos nuestro firewall
instalado ahora podemos comenzar a configurar nuestras reglas. El firewall lo
hemos instalado con políticas por defecto drop por lo que detendrá todo paquete
que pase por el, así que tendremos que configurar nuestras reglas para que
permita nada mas que el trafico deseado por nosotros. A continuación veremos
una serie de reglas que podemos utilizar en nuestra configuración espero que
les sean de mucha utilidad.
Solo vamos a
permitir acceso a los servicios necesarios, correo, web, ftp y otros:
Permitimos el
acceso al firewall o router solo desde nuestra ip:
-A INPUT -s 200.150.55.10
-j ACCEPT
-A OUTPUT -d 200.150.55.10 -j ACCEPT
-A OUTPUT -d 200.150.55.10 -j ACCEPT
Permitimos el
trafico DNS:
-A OUTPUT -p udp -s 200.150.55.0/20 --sport 1024:65535 -d 210.44.149.1 --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -p udp -s 210.44.149.1 --sport 53 -d 200.150.55.0/20 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp -s 200.150.55.0/20 --sport 1024:65535 -d 210.44.149.1 --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp -s 200.150.55.0/20 --sport 1024:65535 -d 210.44.149.1 --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -s 210.44.149.1 --sport 53 -d 200.150.55.0/20 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT
El resto del
trafico hacia el firewall o router se bloquea:
iptables -A INPUT -j DROP
Permitimos el
trafico hacia nuestro servidor de correo usando los puertos 25,110 ,143 ,465 ,993
,995. Los puertos 25, 110, 143 son los
puertos normales de los protocolos pop3 y imap 465, 993, 995 son los puertos
seguros de cada uno de esos protocolos vamos a usar el parámetro –mport para agregar todo en una sola regla.
-A FORWARD -d 210.44.149.3 -p tcp -m mport --dports 25,110,143,465,993,995
-j ACCEPT
-A FORWARD -s 210.44.149.3 -p tcp -m mport --sports 25,110,143,465,993,995
-j ACCEPT
De lo contrario la
reglas serian de la siguiente manera:
-A FORWARD -d 210.44.149.3 -p tcp
--dport 25 -j ACCEPT
-A FORWARD -s 210.44.149.3 -p tcp --sport 25 -j ACCEPT
-A FORWARD -s 210.44.149.3 -p tcp --sport 25 -j ACCEPT
-A FORWARD -d 210.44.149.3 -p tcp
--dport 110 -j ACCEPT
-A FORWARD -s 210.44.149.3 -p tcp --sport 110 -j ACCEPT
-A FORWARD -s 210.44.149.3 -p tcp --sport 110 -j ACCEPT
-A FORWARD -d 210.44.149.3 -p tcp
--dport 143 -j ACCEPT
-A FORWARD -s 210.44.149.3 -p tcp --sport 143 -j ACCEPT
-A FORWARD -s 210.44.149.3 -p tcp --sport 143 -j ACCEPT
-A FORWARD -d 210.44.149.3 -p tcp
--dport 465 -j ACCEPT
-A FORWARD -s 210.44.149.3 -p tcp --sport 465 -j ACCEPT
-A FORWARD -s 210.44.149.3 -p tcp --sport 465 -j ACCEPT
-A FORWARD -d 210.44.149.3 -p tcp --dport
993 -j ACCEPT
-A FORWARD -s 210.44.149.3 -p tcp --sport 993 -j ACCEPT
-A FORWARD -s 210.44.149.3 -p tcp --sport 993 -j ACCEPT
-A FORWARD -d 210.44.149.3 -p tcp --dport
995 -j ACCEPT
-A FORWARD -s 210.44.149.3 -p tcp --sport 995 -j ACCEPT
-A FORWARD -s 210.44.149.3 -p tcp --sport 995 -j ACCEPT
Permitimos
el tráfico para el servidor Web por los puertos 80 y 443 http y https:
-A FORWARD -d 210.44.149.4 -p tcp -m
mport –dports 80,443 -j ACCEPT
-A FORWARD -s 210.44.149.4 -p tcp -m mport –sports 80,443 -j ACCEPT
-A FORWARD -s 210.44.149.4 -p tcp -m mport –sports 80,443 -j ACCEPT
Permitimos
el tráfico para el servidor FTP:
-A FORWARD -d 210.44.149.5 -p tcp --dport 20:21 -j ACCEPT
-A FORWARD -s 210.44.149.5 -p tcp --sport 20:21 -j ACCEPT
-A FORWARD -s 210.44.149.5 -p tcp --sport 20:21 -j ACCEPT
Permitimos
el tráfico ssh de nuestra ip hacia la red de los servidores:
-A FORWARD -d 200.150.55.10 -p tcp --dport 22 –d 210.44.149.0/20 -j ACCEPT
-A FORWARD -s 200.150.55.10 -p tcp --sport 22 –s 210.44.149.0/20 -j ACCEPT
-A FORWARD -s 200.150.55.10 -p tcp --sport 22 –s 210.44.149.0/20 -j ACCEPT
También
podemos definir las reglas de la siguiente manera usando los nombres de los
protocolos en caso de que no conozcamos que puerto esta usando:
-A FORWARD -d 210.44.149.4 -p tcp -m
mport –dports http,https -j ACCEPT
-A FORWARD -s 210.44.149.4 -p tcp -m mport –sports http,https -j ACCEPT
-A FORWARD -s 210.44.149.4 -p tcp -m mport –sports http,https -j ACCEPT
Entre
otras cosas que podemos hacer con iptables es permitir un determinado tráfico
un día y una hora especifica ejemplo vamos a permitir el acceso a un ftp que se
encuentra en nuestra maquina:
iptables -A FORWARD –d 200.150.55.10 -p tcp -m time –timestart
04:00 –timestop 06:30 –days Fri \
--syn –dport 20:21 -j ACCEPT
iptables -A FORWARD –s 200.150.55.10 -p tcp -m time –timestart
04:00 –timestop 06:30 –days Fri \
--syn –sport 20:21 -j ACCEPT
Otra de las cosas
que podemos hacer con iptables es distribuir determinado tráfico entre 2
servidores que realizan la misma función:
-A PREROUTING -i eth0 -p tcp --dport 80 --syn -m random \--average
33 -j DNAT --to-destination 210.44.149.4:80
-A PREROUTING -i eth0 -p tcp --dport 80 --syn -m random \--average
50 -j DNAT --to-destination 210.44.149.5:80
Además con
iptables podemos cerrar o abrir rangos de puertos como muestra el ejemplo en
que ya por último estamos cerrando todos los puertos excepto los que ya
permitimos que permanecieran abiertos:
-A FORWARD -s 0.0.0.0/0 -p tcp --dport 1:1024 -j DROP
-A FORWARD -s 0.0.0.0/0 -p tcp --dport 1024:65535 -j DROP
-A FORWARD -s 0.0.0.0/0 -p udp --dport 1:1024 -j DROP
-A FORWARD -s 0.0.0.0/0 -p udp --dport 1024:65535 -j DROP
En próximos artículos sobre este tema abordaremos otros tipos reglas que
nos pueden ser muy útiles a la hora de configurar un firewall usando iptables.
Gracias y fue muy util
ResponderEliminar