inicio

jul 19, 2010
|

Protegiéndonos con iptables

Para los que no hayáis oído hablar de iptables, se trata de una utilidad que viene por defecto en Ubuntu (y en cualquier otra distribución), y sirve para filtrar tanto los paquetes que entran como los que salen a través de nuestros dispositivos de red (cableada o wifi, es lo mismo).



Lo que hace iptables es filtrar (es decir, aceptar o rechazar) paquetes de datos, en función de unas reglas que nosotros le tenemos que especificar a través de la línea de comandos.


La regla por defecto para iptables es aceptar todos los paquetes entrantes y salientes. Fijaos en la siguiente captura (para el manejo de iptables es necesario ser root):



El parámetro -L que le pasamos a iptables sirve para mostrar un listado de las reglas de filtrado actuales. Como podéis ver, para los paquetes entrantes (INPUT) la política es ACCEPT, y para los salientes (OUTPUT) lo mismo. La opción FORWARD no la vamos a utilizar aquí, pues se usa para el enrutado de paquetes.

¿Qué podemos hacer con iptables para proteger nuestro equipo ante conexiones y paquetes no deseados?

Para empezar, no necesitamos filtrar los paquetes que enviamos desde nuestro ordenador, así que la sección OUTPUT ni la tocamos.

Lo interesante está en la sección INPUT (como ya sabéis, paquetes entrantes). Vamos a configurar de un modo sencillo los filtros para dicha sección:



Primera línea:

- F : (F de flush) Eliminamos las reglas de filtrado existentes con anterioridad. Aunque en nuestro caso no sería necesario hacer esto, pues ya vimos que sólo estaban presentes las reglas por defecto, está bien saber para qué sirve la opción -F.

Segunda línea:

- A INPUT : paquetes entrantes
- i lo : interfaz loopback
- j ACCEPT : aceptar los paquetes

Resumen: Aceptamos los paquetes que entran por el interfaz loopback; este interfaz es un dispositivo de red virtual que representa a nuestro propio ordenador. Os sonará más si os digo que se corresponde con la IP 127.0.0.1.

Tercera linea:

- A INPUT : paquetes entrantes
- p tcp – -syn : protocolo TCP, bandera syn activada
- j REJECT : rechazar los paquetes

Resumen: Rechazamos los paquetes entrantes que pertenezcan al protocolo TCP y que tengan la bandera syn activada. Un paquete TCP con esta característica representa un intento de conexión desde el exterior.

Cuarta línea:

- A INPUT : paquetes entrantes
- p udp – -source-port 53 : protocolo TCP, puerto de origen número 53
- j ACCEPT : aceptar los paquetes

Resumen: Aceptamos los paquetes entrantes que pertenezcan al protocolo UDP y que provengan del puerto 53 del ordenador que los envía. El puerto 53 se asocia a servidores DNS. Si rechazamos estos paquetes, no recibiremos las respuestas de los servidores DNS que nos asigna nuestro proveedor de Internet. Dicho de otro modo, no podríamos navegar.

Quinta línea:

- A INPUT : paquetes entrantes
- p udp : protocolo UDP
- j REJECT : rechazar los paquetes

Resumen: Rechazamos el resto de paquetes pertenecientes al protocolo UDP.


Si volvemos a hacer un listado de los filtros activos, observaremos los cambios realizados:


¡Ya tenemos un pequeño firewall configurado!

Ahora hay que conseguir que la configuración de iptables se mantenga después de cada reinicio. Para ello vamos a crear un script que se ejecute con cada encendido del sistema:

# vi etc/init.d/local


Dentro del archivo /etc/init.d/local vamos a incluir las 5 líneas anteriores:

iptables -F
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp – -syn -j REJECT
iptables -A INPUT -p udp – -source-port 53 -j ACCEPT
iptables -A INPUT -p udp -j REJECT


Le damos permiso de ejecución:

# chmod +x /etc/init.d/local


Y lo incluimos como script de inicio:

# update-rc.d local defaults 80


Así nuestro firewall estará activo en todo momento. Un saludo.

0
Las dos fichas siguientes cambian el contenido a continuación.
Fundador y administrador del blog. Gran fan de todo lo relacionado con la tecnología y de GNU/Linux en particular.
  • http://usuarioraiz.wordpress.com/ usuarioraiz

    Muchas gracias por la entrada tan útil que hiciste. Sin embargo me queda una duda que tengo hace un tiempo y San Google no me supo contestar. ¿Qué tan necesario es modificar la configuración de iptables?
    Mi pregunta se basa en que por defecto, iptables viene siempre configurado para aceptar todo (en ubuntu, arch y fedora lo probe). Entonces, si es necesario modificarlo, no entiendo porque viene así configurado.

  • Anonymous

    utiliza firestarter, es para un manejo sin consola

  • hckorootx

    Afortunadamente, un firewall es bastante más prescindible en Linux que en otros sistemas operativos; por ello, lo habitual es que no venga configurado por defecto (en openSUSE sí). Además, haciendo un “netstat -putan” en consola, vemos que sólo están abiertos los puertos 631 (CUPS), 68 (cliente DHCP) y 5353/45902 (Avahi). Por lo tanto, mi intención no es presentar iptables como algo necesario, si no como algo que está disponible para quien quiera profundizar en el aspecto de la seguridad. Firestarter es buena opción para controlar iptables de manera gráfica, como bien dice Anónimo. Un saludo y gracias por comentar mi entrada.

  • Anonymous

    Recordad que ubuntu trae de serie el firewal UFW, que por defecto está inactivo, para activarlo sólo hay que hacer:

    # sudo ufw enable

    para comprobar que está activo:

    # sudo ufw status

    Y para abrir puertos y demás, de manera gráfica, teneís el paquete gufw.

    Saludos.

  • http://usuarioraiz.wordpress.com/ usuarioraiz

    Gracias por responder, ahora me quedo un poco más claro el tema.

    Saludos!

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información. ACEPTAR