# Iptables es una herramienta para filtrar paquetes del kernel (2.4.XX o 2.6.XX)

Para poder usarlo es necesario tener instalado en el kernel el netfilter y cargados una serie de módulos, depende para que usemos iptables necesitaremos más o menos

Módulos del kernel necesarios. Esto dependerá del uso que le queramos dar

CONFIG_NETFILTER
CONFIG_PACKET
CONFIG_IP_NF_CONNTRACK
CONFIG_IP_NF_FTP

— Tabla de filtrado
CONFIG_IP_NF_IPTABLES
CONFIG_IP_NF_FILTER
CONFIG_IP_NF_MATCH_LIMIT
CONFIG_IP_NF_MATCH_MAC
CONFIG_IP_NF_MATCH_MARK
CONFIG_IP_NF_MATCH_MULTIPORT
CONFIG_IP_NF_MATCH_TOS
CONFIG_IP_NF_MATCH_TCTPMSS
CONFIG_IP_NF_MATCH_STATE
CONFIG_IP_NF_TARGET_REJECT

— Tabla de Nat
CONFIG_IP_NF_NAT
CONFIG_IP_NF_NAT_NEEDED
CONFIG_IP_NF_NAT_FTP
CONFIG_IP_NF_TARGET_MASQUERADE
CONFIG_IP_NF_TARGET_REDIRECT

— Tabla de mangle
CONFIG_IP_NF_MANGLE
CONFIG_IP_NF_TARGET_TOS
CONFIG_IP_NF_TARGET_MARK
CONFIG_IP_NF_TARGET_LOG
CONFIG_IP_NF_TARGET_TCPMSS

— Compatibilidad hacia atrás
CONFIG_IP_COMPAT_IPCHAINS
CONFIG_IP_COMPAT_IPFWADM

Iptables es la evolución de ipchains y ipfwadm y básicamente permite o rechaza los paquetes que llegan al host desde una red

# Cadenas (chains) predefinidas

INPUT     Los paquetes que llegan a nuestra máquina
OUTPUT    Los paquetes que salen de nuestra máquina
FORWARD   Los paquetes que atraviesan nuestra máquina

# Las opciones básicas

-s    Especifica una dirección de origen
-d    Especifica una dirección de destino
-p    Especifica un prototocolo
-i    Especifica un interface de entrada
-o    Especifica un interface de salida
-j    Especifica la acción a ejecutar sobre el paquete
–sport    Puerto de origen
–dport    Puerto de destino

Con man iptables tenemos todas las opciones

# Acciones

DROP    Elimina el paquete
DENY    Deniega el paso al paquete
REJECT    Rechaza el paquete
ACCEPT    Acepta el paquete

# Comandos fundamentales

Ver las reglas introducidas
iptables -L
Borrar todas las reglas
iptables -F

# Ejemplos básicos

# Eliminamos todas los paquetes de entrada

iptables -A INPUT -j DROP
Eliminamos todas los paquetes de salida
iptables -A OUPUT -j DROP

# Aceptamos que se conecten a nuesto servidor web(80) y ftp(21)

iptables -A INPUT -p TCP –dport 80 -j ACCEPT
iptables -A INPUT -p TCP –dport 21 -j ACCEPT

# Permitimos la comunicación con el servidor dns

iptables -A INPUT -p udp –dport 53 -j ACCEPT

# Un posible script muy básico de iptables para dar acceso al 80 y al 22

—————————
#!/bin/bash

# Permitimos que se conecten a nuetrs servidor web y al ssh
iptables -A INPUT -p TCP –dport 80 -j ACCEPT
iptables -A INPUT -p TCP –dport 22 -j ACCEPT

# Permitimos la comunicación con el servidor dns
iptables -A INPUT -p udp –dport 53 -j ACCEPT

# Reglas básicas. Denegamos todas las entradas permitimos todas las salidas
iptables -A INPUT -j DROP
iptables -A OUTPUT -j ACCEPT
—————————

# Si queremos poner la máquina como firewall con dos interfaces de red eth0 y eth1

# Activamos el ip_forward

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

# Hacemos el nat de las direcciones de fuera y permitimos la salida

iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
iptables -A FORWARD -o eth1 -i eth0 -j ACCEPT

# Sólo permitimos que la red interna acceda a los puertos 25 y 80 de la red externa

iptables -A FORWARD -s 192.168.0.0/24 -p TCP -j DENY
iptables -A FORWARD -s 192.168.0.0/24 -p TCP –dport 25 -j ACCEPT
iptables -A FORWARD -s 192.168.0.0/24 -p TCP –dport 80 -j ACCEPT

# El posible script quedaría

—————————
#!/bin/bash

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

iptables -A FORWARD -s 192.168.0.0/24 -p TCP –dport 25 -j ACCEPT
iptables -A FORWARD -s 192.168.0.0/24 -p TCP –dport 80 -j ACCEPT
iptables -A FORWARD -s 192.168.0.0/24 -p TCP -j DENY

iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
iptables -A FORWARD -o eth1 -i eth0 -j ACCEPT
—————————

# Si queremos hacer un proxy transparente para la salida de la red interna

Proxy transparente

# Si queremos que el xMule (eMule) no nos de un id bajo (Lowid)
Redireccionamos un puerto del iptables a la máquina que tiene el xMule (eMule)

iptables -t nat -A PREROUTING -i eth0 -p tcp –dport [puerto xMule] -j DNAT –to [ip del xMule]:[puerto xMule]

# No permitir el acceso a ciertas ips
Si queremos que algunas ip no puedan acceder a nuestra máquina
Por ejemplo, no queremos que la Sociedad General de Autores (SGAE) sepa que tenemos abiertos los puetos del xMule o eMule, les podemos denegar el acceso de sus maquinas a nuestro host de la siguiente manera:

iptables -A INPUT -s 195.76.238.0/24 -j DROP
iptables -A INPUT -s 217.116.8.112/29 -j DROP
iptables -A INPUT -s 217.116.0.144 -j DROP
iptables -A INPUT -s 195.76.172.0/24 -j DROP
iptables -A INPUT -s 155.201.0.0/16 -j DROP