Sintaxis e implementación básica de IPTABLES

Un firewall es un sistema que previene el acceso malicioso a equipos o alguna red privada, físicamente podemos verlo como una caja con 2 o más interfaces de red, que se encuentra entre nuestras redes internas e internet.

Dicho sistema es capaz de bloquear el trafico de paquetes o redirigirlo desde un origen hacia un destino determinado.

IPTABLES

IPTABLES es una herramienta avanzada de filtrado de paquetes en Linux (basada en el módulo Netfilter), funciona como un conjunto de reglas, que se especifican con una determinada sintaxis, estas reglas se almacenan en 3 posibles tablas (nat, filter, mangle, esta última menos usada). Dichas reglas se especifican directamente a través de linea de comandos.

Manual de Sintaxis de IPTABLES

IPTABLES [tabla] [cadena] [interfaz/ip origen] [interfaz/ip de destino] [módulos] [operación]
 
 [TABLA]  
 NAT / FILTER / MANGLE
 
 [CADENA]
 INPUT / FORWARD / OUTPUT / PREROUTING / POSTROUTING
 
 [ORIGEN]
 -i [interfaz origen] / -s [ip de red o host de origen]
 
 [DESTINO]
 -o [interfaz de destino] / -d [ip de red o host destino]
 
 [MÓDULOS]
 1) Protocolos (-p tcp/udp)
 2) Multipuertos (-m multiport –dport 80, 443)
 3) Puerto de destino (--dport 3306)
 4) Puerto de origen (--sport 3306) >>> se usa muy poco dado que los equipos clientes             usan puertos aleatorios
 5) Estado(-m state -state [estados separados por coma s/espacio])
       NEW / ESTABLISHED / RELATED
 
 
 
 [OPERACIÓN]
 Con FILTER >> -j [ACCEPT, DROP, REJECT]
 Con NAT>> -j [REDIRECT, DNAT, MASQUERADE] 

Políticas

En IPTABLES se definen políticas por defecto en caso de que los paquetes no cumplan con ninguna de las reglas ya establecidas.

 iptables -P INPUT DROP
 iptables -P OUTPUT ACCEPT
 iptables -P FORWARD DROP 

Reglas a nivel local

Es importante que IPTABLES no este involucrado a nivel local en la comunicación de nuestras aplicaciones para que todo funcione bien.

 iptables -A INPUT -i lo -j ACCEPT
 iptables -A OUTPUT -o lo -j ACCEPT 

Reglas para firewall de host

Un firewall de host es aquel que además de tener esta condición brinda otros servicios

Para habilitar los puertos que prestarán servicios en nuestro servidor ejecutamos las siguientes dos reglas:

 iptables -A INPUT -p tcp -m multiport --dport 80,443,53,22,3306 -j ACCEPT
 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT  

La primer regla abre los puertos del firewall para conexiones entrantes por servicios de HTTP, HTTPS, DNS, SSH y MySQL (respectivamente).

La segunda regla permite entrada de paquetes en conexiones establecidas o relacionadas.

La cadena INPUT es usada cuando los paquetes están destinados a procesos internos del firewall (que en este caso también prestará otros servicios).

IMPORTANTE: En caso de manejar un firewall con mas de una interfaz de red es necesario habilitar el bit de forwarding, para que puedan pasarse paquetes entre las interfaces de red del servidor, esto lo hacemos así:

 echo 1 > /proc/sys/net/ipv4/ip_forward

Borrado de reglas IPTABLES

Para borrar todas las reglas establecidas en nuestro firewall usaremos:

iptables -F 

Y también debemos aceptar paquetes en nuestras políticas por defecto:

 iptables -P INPUT ACCEPT
 iptables -P OUTPUT ACCEPT
 iptables -P FORWARD ACCEPT 

Como implementar IPTABLES

Lo más recomendable es estructurar todas estas reglas en un script (que se mantenga almacenado), para tenerlas disponibles cuando sea necesario en caso de modificación o de tener que volver a ejecutarlas, y a su vez tener otro script a mano que se encargue de borrar todas las reglas (esto para cuando hacemos cambios o estamos desarrollando una implementación inicial).

Cada script debe iniciar en: #!/bin/bash , para asegurarnos que ejecute las siguientes lineas como comandos.

Para que el firewall quede configurado y funcionando al reiniciar el servidor es necesario ejecutar el script en el arranque, para eso utilizaremos el fichero /etc/rc.local .

En el pondremos las siguientes lineas:

 echo 1 > /proc/sys/net/ipv4/ip_forward
 sh ruta/al/firewall.script 

Para finalizar es fundamental darle permisos de ejecución al rc.local y al firewall.script.

One comment

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *