Algunos Tips sobre Iptables en Debian

3 03 2008

Según la Wikipedia, iptables es el nombre de la herramienta de espacio de usuario mediante la cual el administrador puede definir políticas de filtrado del tráfico que circula por la red. El nombre iptables se utiliza frecuentemente de forma errónea para referirse a toda la infraestructura ofrecida por el proyecto Netfilter. Sin embargo, el proyecto ofrece otros subsistemas independientes de iptables tales como el connection tracking system o sistema de seguimiento de conexiones, o queue, que permite encolar paquetes para que sean tratados desde espacio de usuario. iptables es un software disponible en prácticamente todas las distribuciones de Linux actuales.

Chequear si tenemos iptables instalado:

# dpkg -l iptables

Como obtener la ubicación del binario:

# which iptables

En caso de que la utilidad no este instalada

# apt-get update && apt-get install iptables

Los Archivos Principales en Debian

* /etc/init.d/iptables – INIT script para start|stop|restart el servicio (y salvar las reglas agregadas). Este archivo ya no esta por desde Sarge pero todavbia puede ser obtenido (les voy a enseñar como).
* /var/lib/iptables – Lugar en Debian para las reglas ‘activas’ e ‘inactivas’ iptables-save counter files (i.e. las reglas salvadas).
* /var/lib/iptables/active – Contadores Activos (Mas sobre esto Despues)
* /var/lib/iptables/inactive – Contadores Inactivos
* /sbin/iptables – El Binario de la Utilidad de Administracion.

Un poco sobre IPTables

Para ver cuales reglas tenemos actualmente, ejecutamos:

# iptables -nvL

Chain INPUT (policy ACCEPT)
target prot opt source destination

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

* INPUT – Lleva acabo las reglas para el trafico dirijido a este servidor.
* FORWARD – Lleva acabo las reglas para el trafico que sera dirijido a una mquina con un IP detras de este servidor (i.e. si esta maquina sirve como firewall para otros servidores).
* OUTPUT – Lleva acabo las reglas para el trafico que viene de este servidor hacia la internet .

Principalmente estaremos tratando con el trafico dirigido a este servidor, y estaremos tratando reglas para la Cadena INPUT. Cuando el trafico pase por el kernel, determinara un “OBJETIVO” basado en si el paquete cumple con una regla o no. Objetivos generales son

* ACCEPT – Trafico aceptado para la entrega.
* REJECT – Trafico rechasado, enviando up paquete de regreso a su origen.
* DROP – El trafico es denegado. Nada es enviado al lugar de origen.

Configurando Las Reglas

Es importante mencionar que el orden en el cual las reglas aparecen es importante. Por Ej. si la primera regla es denegar todo entonces no importa que permitas especificamente, sera denegado. Tambien es importante mencionar que nada que hagas es salvado en disco hasta que ejecutes “iptables-save”. Todos los contadores/reglas estan en memoria. Cada vez el servidor reinicie, o ejecutemos “iptalbes –flush” todo en lo que trabajaste esta perdido. Personalmente yo trabajo con un bash script llamado “iptables-rules.sh”, que me permite tener todo comentado y organizado.

Primero lo Importante

Es muy importante que si estan trabajando en este server remotamente por ssh, que hagan el esfuerso de no bloquearse el acceso. Por eso nuestra primera regla sera para asegurar que pase lo que pase puedan ingresar por medio de ssh desde mi direccion IP.

# iptables -A INPUT -s 192.168.0.10 -d 192.168.0.254 -p tcp --dport 22 -j ACCEPT

Decodifiquemos eso:

* -A => Le dice a iptables que abra esta regla para la cadena INPUT
* -s => Dirección de origen. Esta regla solo pertenece al trafico proviniente de esta IP. Sustituya con la direccion IP desde donde estamos generando el SSH.
* -d => Dirección de Destino. esta regla solo pertenece al trafico que va en dirección a esta IP. sustituya por la direccion IP de este Servicio.
* -p => Protocolo. Tráfico específico el cual es TCP.
* –dport => Puerto de Destino. Especificando tráfico que es TCP puerto 22 (SSH).
* -j => Salto. Si todo funciona en esta regla saltar para ACCEPT (aceptar)

A continuación, vamos a usar unas reglas estándar para trafico general de la red. Esto va un poco mas lejos de lo básico, de cualquier forma iptables puede determinar el ’state’(estado) en el cual esta el paquete. Esto tiene que ver con comunicacion TCP. por ejemplo, el saludo de 3 vías entre dos servidores cuando estan tranmitiendo datos.

* NEW => Server1 conecta con Server2 publicando un paquete SYN (Synchronize).
* RELATED => Server 2 recive un paquete SYN, y despues responde con un paquete SYN-ACK (Synchronize Acknowledgment).
* ESTABLISHED => Server 1 recive el paquete SYN-ACK y despues responde con el paquete final ACK (Acknowledgment).

Después de que este saludo de 3 vías esta completo, el tráfico esta ahora ESTABLECIDO. en orden para que este tipo de comunicacion TCP se realice, algo similar a estas 3 reglas es necesario:

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT

La última regla obviamente permite que cualquier tráfico salga del servidor.

Ahora que tenemos esto básico establecido, miremos lo que iptables tiene en lista para nuestras reglas:

# iptables -nvL

Chain INPUT (policy ACCEPT)
target prot opt source destination

ACCEPT tcp — 192.168.0.10 192.168.0.254 tcp dpt:ssh
ACCEPT all — anywhere anywhere state RELATED,ESTABLISHED

Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT all — anywhere anywhere state RELATED,ESTABLISHED

Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all — anywhere anywhere state NEW,RELATED,ESTABLISHED

Algunos ejemplos

MYSQL (Allow Remote Access To Particular IP):
iptables -A INPUT -s 192.168.0.0/24 -d 192.168.0.254 -p tcp –dport 3306 -j ACCEPT

SSH:
iptables -A INPUT -d 192.168.0.254 -p tcp –dport 22 -j ACCEPT

Sendmail/Postfix:
iptables -A INPUT -d 192.168.0.254 -p tcp –dport 25 -j ACCEPT

FTP: (Notice how you can specify a range of ports 20-21)
iptables -A INPUT -d 192.168.0.254 -p tcp –dport 20:21 -j ACCEPT

Passive FTP Ports Maybe: (Again, specifying ports 50000 through 50050 in one rule)
iptables -A INPUT -d 192.168.0.254 -p tcp –dport 50000:50050 -j ACCEPT

HTTP/Apache
iptables -A INPUT -d 192.168.0.254 -p tcp –dport 80 -j ACCEPT

SSL/Apache
iptables -A INPUT -d 192.168.0.254 -p tcp –dport 443 -j ACCEPT

IMAP
iptables -A INPUT -d 192.168.0.254 -p tcp –dport 143 -j ACCEPT

IMAPS
iptables -A INPUT -d 192.168.0.254 -p tcp –dport 993 -j ACCEPT

POP3
iptables -A INPUT -d 192.168.0.254 -p tcp –dport 110 -j ACCEPT

POP3S
iptables -A INPUT -d 192.168.0.254 -p tcp –dport 995 -j ACCEPT

Any Traffic From Localhost:
iptables -A INPUT -d 192.168.0.254 -s 127.0.0.1 -j ACCEPT

ICMP/Ping:
iptables -A INPUT -d 192.168.0.254 -p icmp -j ACCEPT

Salvando las Reglas

Con el script init, salvar las reglas es relamente fçacil. una vez estes contento con tu configuración , solo hacer lo siguiente:

El antiguo script init ya no esta en Sarge por defecto, pero todavia esta por ahi para su uso por legado. La nueva forma de uso es ‘/etc/network/if-up.d‘ y ‘/etc/network/if-down.d‘ para el script iptables.

En caso de que quieran utilizar init

gunzip /usr/share/doc/iptables/examples/oldinitdscript.gz -c > /etc/init.d/iptables
chmod +x /etc/init.d/iptables
mkdir /var/lib/iptables
chmod 700 /var/lib/iptables

Reglas Activas

Las reglas Activas son aquellas que se cargan cuando iptables esta iniciando:

/etc/init.d/iptables save active

Esto salva tus reglas en /var/lib/iptables/active.

Reglas Inactivas

Tambien pueden configurar una segundo grupo de reglas cuando paran iptables llamado ‘inactivo’. iptables realmento no para, solamente limpia las reglas que estan activas y carga las inactivas.

/etc/init.d/iptables stop

Por eso, pueden poner reglas ‘inactivas’, y salvarlas con:

/etc/init.d/iptables save inactive

Salvado Manual y Restauracion

Tambien pueden usar manualmente las utilidades iptables-save y iptables-restore de esta forma:

Salvar las reglas a un archivo

iptables-save > /root/iptables-save.out

Restaurar las reglas

iptables-restore -c /root/iptables-save.out

la -c dice iptables-restore que este es el archivo creado usando iptables-save, que manda las reglas como “contadores”.

Tips And Tricks

Redireccionamiento de puertos

Supongamos que quisieran acomodar a clientes que no pueden connectarse en el puerto 25 por medio de su ISP. esto redireccionara cualquier trafico dirigido al IP 10.1.1.1 (puerto 26) y enviarlo hacia el IP 10.1.1.1 (puerto 25): iptables -A PREROUTING -p tcp -m tcp -d 10.1.1.1 –dport 26 -j DNAT –to 10.1.1.1:25

O talvez necesiten hacer esto: iptables -t nat -A PREROUTING -d 10.1.1.1 -p tcp –dport 26 -j REDIRECT –to-ports 25

Mascara NAT

iptables -t nat -A POSTROUTING -s 10.10.10.0/24 -d ! 10.10.10.0/24 -j MASQUERADE

sysctl -w net.ipv4.ip_forward=1 Donde 10.10.10.0 es la red a la cual estan sirviendo de máscara.

:wq!

Mas info aquí, aquí o aquí.


Acciones

Informacion



2 respuestas a “Algunos Tips sobre Iptables en Debian”

28 03 2008
Enlaces interesantes para los usuarios de Debian « Bloguear por bloguear… (06:43:50) :

[…] En Linux-os.com.ar he encontrado este listado de Tips sobre Iptables en Debian. […]

12 03 2009
al3jo (18:06:15) :

Por fin me ha quedado claro un concepto que por mucho que lo leia no lo entendía. El concepto es el saludo de tres vías.

Gracias, gran aporte.

Deje un comentario

usted puede usar estos tags : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>