Breve introducción a Iptables

Enllaç a la versió en català

Hoy en dia la seguridad es imprescindible, sobretodo si tenemos una
conexión 24/7. Usar un cortafuegos es una de las primeras
medidas que deberíamos tomar con tal de hacer un poco más
segura nuestra maquina/red.

En este pequeño artículo veremos como se ponen en marcha
las Iptables a fin de cerrar i abrir los puertos según nuestras
necesidades.

Por suerte para nosotros, y a diferencia de algunos sistemas operativos
propietarios (o privativos como dirían algunos), casi todos (al
menos los principales) sistemas operativos libres
incorporan de serie algún mecanismo de cortafuegos. Nosotros nos
limitaremos a explicar las Iptables, que es el mecanismo “oficial”
desde la rama 2.4 del kernel de gnu/linux.

La instalación por la parte que respecta al kernel no la
comentaremos en detalle, puesto que todas las distribuciones actuales
las llevan activadas de serie en el nuclio (y si hay alguien que gusta
de compilar sus propios nuclios, seguramente ya sabrá las
opciones a activar. A modo de pista diré: Networking
Options–>IP:
Netfilter Configuration). Por la parte de usuario hay que instalar el
paquete “iptables” (apt-get, emerge, …). Nada más.

Hay gente a la que le gusta hacer servir scripts i aplicaciones
extrañas y esotéricas para configurar Iptables. Nosotros
lo haremos a mano, así de paso veremos como funciona y podremos
comprobar que no es para nada difícil.

Antes de meternos de lleno, daré un enlace sobre los
conocimientos mínimos que hay que tener de Iptables: que es,
lógica de funcionamiento y una base.

HOWTO
de filtrado de paquetes

Bien, como queremos que las Iptables se pongan en marcha ellas solas al
encender el sistema y que podamos parar y volver a poner en marcha
rapida y sencillamente, usaremos los scripts de init.d. Normalmente
estos se instalan solos al instalar el paquete “iptables” (el script
debería estar en /etc/init.d/iptables, o dondequiera que
tengáis el directorio init.d en vuestra distribución). En
caso de no existir dicho script, podéis encontrar uno de ejemplo
aquí.

Ahora hay que asegurarse de que el script se lanzará al encender
el sistema de la siguiente forma (si es que no lo había hecho
vuestro instalador de paquetes al instalar el paquete “iptables”):

En Debian sería un cosa así:
update-rc.d iptables defaults

Mientras que en Gentoo sería:
rc-update add iptables default

Si no tenéis ninguna de estas dos utilidades, simepre lo podéis hacer a mano de la forma tradicional:

1) mirar que runlevel es el que ejecutamos con el siguiente comando:
runlevel

2) ir al directorio del runlevel en cuestión:
cd /etc/rcX.d
o en algunas distribuciones:
cd /etc/init.d/rcX.d
substituyendo la "X" de "rcX.d" por el número de runlevel que nos ha dado el comando del punto 1

3) crear el enlace sombólico apropiado:
ln -s /etc/init.d/iptables S20iptables

Una vez instalado, configurado y listo para usar, nos aseguraremos que
no hay ninguna regla de Iptables cargada:

iptables -F

Y procederemos a añadir nuestras reglas (aquí pongo un
ejemplo básico):

iptables -A INPUT -i lo -s 127.0.0.0/8 -j ACCEPT
iptables -A INPUT -i eth0 -p TCP --dport 22 -m state --state NEW -j ACCEPT
iptables -A INPUT -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -j DROP

La primera línea sirve para que se permitan las conexiones de la máquina consigo misma mediante la interfaz de red de loopback.
La segunda línea, indica que queremos abrir el puerto 22. Esto es a modo de ejemplo. Deberíamos substituir el "22" por el número del puerto que queramos abrir. Repetir esta línea con todos los puertos que se desee abrir. Hay que tener en cuenta, que es posible indicar rangos de puertos en el siguiente formato: inicio-fin. Por ejemplo, si indicaramos 22-80 en el número de puerto, estaríamos diciendo que queremos abrir todos los puertos entre el 22 y el 80, ambos incluídos. Hay que cambiar eth0 por el dispositivo adecuado

La tercera línea permite que las conexiones que establezcamos hacia el exterior puedan entrar. Hay que cambiar eth0 por el
dispositivo adecuado. Sin esta línea no nos volvería ningún paquete (no lo dejaríamos entrar).

La cuarta línea permite que entren los paquetes ICMP (principalmente pings).

La última línea impide que entre cualquier otra cosa.

Si tenéis reglas propias (prerouting, postrouting, …) metedlas
donde convenga en el orden adecuado, teniendo presente que primero
permitimos y con la última línea impedimos el resto de
conexiones. Al hacerlo de esta manera nos aseguramos de no dejarnos
nada abierto; lo que no hayamos permitido explicitamente no
podrá entrar.

Finalmente, para conseguir que estas reglas se activen automaticamente
al encender el sistema, haremos lo siguiente:

Primero nos aseguraremos de tener el directorio de destino /var/lib/iptables, y si hiciera falta lo crearíamos:
mkdir /var/lib/iptables

Y a continuación hacemos un:
/etc/init.d/iptables save active

Y para cuando queramos pararlas hay dos opciones a saber:

a) Que al parar las Iptables via “/etc/init.d/iptables stop” dejemos el
cortafuegos sin ninguna regla (todo abierto):

iptables -F
/etc/init.d/iptables save inactive

b) O que dejemos solo la regla que impide todas las conexiones
entrantes (todo cerrado):

iptables -F
iptables -A INPUT -j DROP
/etc/init.d/iptables save inactive

Una vez hecho esto, encontraremos en /var/lib/iptables dos
ficheros: “active” y “inactive”, que podremos modificar posteriormente
para modificar/quitar/añadir reglas a cualquiera de los dos
estados (active
cuando hacemos el start e inactive cuando hacemos el stop).

Para finalizar haremos un:

iptables -F
/etc/init.d/iptables restart

Y ya las tendremos funcionando. Convendría asegurar-nos de su
funcionamiento con herramientas tales como el nmap (si no las sabeis hacer
funcionar siempre podéis preguntar a vuestro man o a google.
Autor: sergi

This entry was posted in Seguretat. Bookmark the permalink.

Leave a Reply