Trabajando con IPTables

Los servidores Linux vienen con un Firewall basado en host llamado Netfilter. Este firewall es controlado por un programa llamado IPTables. El filtrado Netfilter ocurre al nivel del kernel, antes que un programa consiga procesar los datos del paquete de red.

¿Dónde puedo encontrar el archivo de configuración iptable?

Aquí: /etc/sysconfig/iptables-config

Las reglas para iptables fueron agregadas al archivo /etc/sysconfig/iptables.

Recomendamos que guarde las reglas de firewall antes de hacer cualquier alteración a las reglas. Basta ejecutar el comando y pude continuar.

iptables-save > /root/rule_1.fw

Si desea restaurar el archivo de reglas firewall, ejecute el siguiente comando:
iptables-restore < /root/rule_1.fw
—-

¿Cómo Parar (Stop), Iniciar (Start) o reiniciar (Restart) el firewall?
Es fácil. Basta ejecutar para cada acción el comando dado a seguir:
—-
service iptables stop
service iptables start
service iptables restart
—-
Nota: Para guardar automáticamente las reglas al parar o reiniciar el servicio, abra el archivo /etc/sysconfig/iptables-config y altere los siguientes parámetros para YES (SÍ)
—-
IPTABLES_SAVE_ON_RESTART = “yes”
IPTABLES_SAVE_ON_STOP = “yes”
—-

¿Cómo guardar las reglas iptable para el archivo etc/sysconfig/iptables file?
Ejecute el comando:  /etc/init.d/iptables save

¿Cómo restaurar las reglas del archivo /etc/sysconfig/iptables?
Ejecute el comando:  /etc/init.d/iptables start

Conceptos básicos de IPTables:
1. Tablas : IPTables tiene 4 tablas incorporadas.
1.1. Filter: Esta es la tabla estándar. Esta contiene cadenas de INPUT, FORWARD y OUTPUT incorporadas.
1.2. NAT: Es utilizada para la traducción de direcciones de red (ej., el redireccionamiento de puerta). ES compuesta por tres cadenas incorporadas: PREROUTING, OUTPUT y POSTROUTING.
1.3. Mangle: Es usada para la alteración de paquetes especializados. Desde Kernel 2.4.18 que soporta INPUT, FORWARD y POSTROUTING.
1.4. Raw: Esta tabla es usada principalmente para la configuración de exclusiones de rastreo de conexiones junto con el destino NOTRACK. Esta suministra las siguientes cadenas incorporadas: PREROUTING Y OUTPUT.

2. Cadenas de IPTables:
2.1. INPUT: Cadena estándar es usada para paquetes direccionados al sistema.  Utilice esta para abrir o cerrar puertas de entrada o direcciones/sub redes IP.
2.2. OUTPUT: La cadena estándar es usada cuando los paquetes la están generando desde el sistema. Utilice esta para abrir o cerrar puertas de entrada y direccione / sub redes IP
2.3. FORWARD: Cadena estándar es usada cuando los paquetes envían a través de otra interfaz. Normalmente usada cuando se configura Linux como router.
2.4. PREROUTING: Manipula los paquetes antes que ellos sean direccionados.
2.5. POSTROUTING: Manipula los paquetes después que ellos sean direccionados.

3. Valores Destino:
3.1. ACCEPT: Acepta el paquete
3.2. DROP: Larga el paquete y no envía un mensaje de error al host remoto.
3.3. REJECT: Larga el paquete y envía un mensaje de error al host remoto.

4. Reglas de correspondencia de paquetes:
4.1. Cada paquete comienza en la primera regla de la cadena.
4.2 Un paquete prosigue hasta que encuentra una regla correspondiente.
4.3 Si es encontrada una correspondencia, entonces el control pasa al destino especificado (como REJECT, ACCEPT, DROP)

Comandos de Uso Básico:
–append -A chain // Adjuntar a la cadena
–delete  -D chain  // Eliminar regla de correspondencia de la cadena
–delete  -D chain  rulenum // Eliminar regla rulenum (1 = primera) de la cadena
–insert  -I chain [rulenum] // Insertar en la cadena como rulenum (estándar 1=primera)
–replace -R chain rulenum // Substituir regla rulenum (1 = primera) en la cadena
–list  -L [chain]  // Listar las reglas de una cadena o de todas las cadenas
–flush   -F [chain] // Eliminar todas las reglas de una cadena o de todas las cadenas
–zero-Z [chain] // Cero conteo en una cadena o en todas las cadenas
–new-N chain  // Crear una nueva cadena definida por el usuario
–delete-chain -X [chain] //   Eliminar una cadena definida por el usuario
–policy  -P chain target // Alterar la política en la cadena de destino
–rename-chain -E old-chain new-chain // Cambiar el nombre de la cadena de usuario especificado para el nombre suministrado por el usuario.
–numeric-n  // Las direcciones IP y números de puerta serán impresos en formato numérico. Por estándar, el programa irá intentar exhibirlos como nombres host, nombres de red o servicios.
–verbose -v // Mensajes de salida .

Operaciones básicas usando IPTables:
1. Alterar el destino estándar de una cadena:
Por estándar, la regla IPTables tendrá de ACCEPT o DROP como la política estándar. Si el valor de destino es ACCEPT, por estándar el firewall permitirá todo el tráfico. Si ES DROP, todo el tráfico para el servidor será bloqueado.
Por ejemplo:
—-
*filter
:INPUT ACCEPT [531:91893]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [617:118476]
—-
Las reglas anteriores implican que la política estándar es ACCEPT. Para alterar la política estándar, abra el archivo “/etc/sysconfig/iptables”  y alterar la política estándar de ACCEP para DROP para las cadenas INPUT y FORWARD incorporadas.
—-
*filter
:INPUT DROP [531:91893]
:FORWARD DROP [0:0]
—-

2. Lista de la reglas de IPTables:
iptables -nL -v
—–
INPUT de Cadena (política ACCEPT 964 paquetes, 158K bytes)
pkts bytes target prot opt in out source           destination
1574  232K cP-Firewall-1-INPUT  all  —  *  *   0.0.0.0/0        0.0.0.0/0
1293  214K acctboth   all  —  *  *   0.0.0.0/0        0.0.0.0/0
—–
´
3. Listar las reglas estándar con el número de la línea:
iptables -nL –número-de-línea
—-
Chain INPUT (policy ACCEPT)
num target prot opt source           destination
1cP-Firewall-1-INPUT  all  —  0.0.0.0/0        0.0.0.0/0
2acctboth   all  —  0.0.0.0/0        0.0.0.0/0
—-

4. Para listar las reglas estándar de una cadena especial:
iptables -nL [nombre de la cadena]
—-
iptables -nL INPUT
Chain INPUT (policy ACCEPT)
target prot opt source           destination
cP-Firewall-1-INPUT  all  —  0.0.0.0/0        0.0.0.0/0
acctboth   all  —  0.0.0.0/0        0.0.0.0/0
—-

5. Eliminar una regla de firewall:
Listar las reglas con el número de la línea:
iptables -L INPUT -n –números-de-línea
5.2 Usted va a obtener la lista de IP. Mire al número a la izquierda, en seguida, use el número para eliminarlo. Por ejemplo, elimine el número de la línea 4, digite:
iptables -D INPUT 4
5.3. Encuentre el IP de origen 1.1.1.1, y elimine de la regla:
iptables -D INPUT -s 1.1.1.1 -j DROP

6. Colocar una dirección IP en la lista de permisos:
iptables -A [CADENA] -s [DIRECCIÓN IP]  -j ACCEPT
—–
iptables -A INPUT -s 1.1.1.1  -j ACCEPT
—–

7. Bloquear una dirección IP:
iptables -A [CADENA] -s [DIRECCIÓN IP]  -j DROP

iptables -A INPUT -s 1.1.1.1 -j DROP

8. Abrir una puerta en el servidor:
iptables -A INPUT -m state –state NEW -m tcp -p tcp –dport [NÚMERO DE PUERTA] -j ACCEPT
—-
iptables -A INPUT -p tcp -m state –state NEW -m tcp –dport 993 -j ACCEPT
—-
NOTA: Sustituya ACCEPT por DROP para bloquear las conexiones.

9. Bloqueo de conexiones de entrada/salida
9.1. Bloquear todos los pedidos en una puerta:
iptables -A INPUT -p tcp –dport  [NÚMERO DE PUERTA] -j DROP
Por ejemplo:  Bloquear todos los pedidos para la puerta 80.
—–
iptables -A INPUT -p tcp –dport 80 -j DROP
—–

9.2 Bloquear un pedido de una dirección única IP:
Por ejemplo:  Pedido de bloqueo de la puerta 80 de una dirección IP determinada.
—-
iptables -A INPUT -p tcp -s 1.1.1.1 –dport 80 -j DROP
—-

9.3 Bloquear conexión de salida de una dirección única IP:
iptables -A OUTPUT -d  [DIRECCIÓN IP DE DESTINO] -j DROP
—–
iptables -A OUTPUT -d 1.1.1.1 -j DROP
—–

10. Abrir un rango de direcciones IP:
iptables -A INPUT -p tcp  -m iprange –src-range [RANGO DE DIRECCIONES IP] -j ACCEPT
—-
iptables -A INPUT -p tcp  -m iprange –src-range 192.168.11.100-192.168.11.200 -j ACCEPT
—-

10.1 Abrir una puerta para un rango de direcciones IP:
iptables -A INPUT -p tcp –destination-port [NÚMERO DE PUERTA] -m iprange –src-range [RANGO DE DIRECCIONES IP] -j ACCEPT
—-
iptables -A INPUT -p tcp –destination-port 80 -m iprange –src-range 192.168.11.100-192.168.11.200 -j ACCEPT
—-
NOTA: Sustituya ACCEPT por DROP para bloquear las conexiones.