Javier Barber
Senior Sysadmin Freelancer
USO DE IPTABLES
# 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