
Presentación del Programa de Certificación de la Fundación Linux
Recordarán del Parte 1 – Acerca de Iptables de esta serie LFCE (Ingeniero Certificado de la Fundación Linux) que dimos una descripción básica de lo que es un cortafuegos: un mecanismo para gestionar los paquetes que entran y salen de la red. Con “gestionar” nos referimos realmente a:
- Permitir o prevenir que ciertos paquetes entren o salgan de nuestra red.
- Reenviar otros paquetes de un punto de la red a otro.
basado en criterios predeterminados.
En este artículo discutiremos cómo implementar el filtrado básico de paquetes y cómo configurar el cortafuegos con iptables, una interfaz para netfilter, que es un módulo nativo del kernel utilizado para el filtrado.
Tenga en cuenta que el filtrado es un tema vasto y este artículo no pretende ser una guía completa para comprender todo lo que hay que saber al respecto, sino más bien como un punto de partida para un estudio más profundo de este tema. Sin embargo, volveremos al tema en la Parte 10 de esta serie cuando exploremos algunos casos de uso específicos de un cortafuegos en Linux.
Puede pensar en un cortafuegos como un aeropuerto internacional donde los aviones de pasajeros entran y salen casi las 24 horas del día. Basándose en una serie de condiciones, como la validez del pasaporte de una persona, o su país de origen (por nombrar algunos ejemplos), se le puede permitir o no entrar o salir de cierto país.
Al mismo tiempo, los oficiales del aeropuerto pueden instruir a las personas a moverse de un lugar del aeropuerto a otro si es necesario, por ejemplo cuando necesitan pasar por los Servicios de Aduanas.
Podemos encontrar útil la analogía del aeropuerto durante el resto de este tutorial. Solo ten en cuenta las siguientes relaciones a medida que avanzamos:
- Personas = Paquetes
- Cortafuegos = Aeropuerto
- País #1 = Red #1
- País #2 = Red #2
- Regulaciones del aeropuerto aplicadas por los oficiales = reglas del cortafuegos
Iptables – Los conceptos básicos
En el nivel más bajo, es el propio kernel el que “decide” qué hacer con los paquetes basándose en reglas agrupadas en cadenas, o sentencias. Estas cadenas definen qué acciones deben tomarse cuando un paquete cumple con los criterios especificados por ellas.
La primera acción tomada por iptables consistirá en decidir qué hacer con un paquete:
- ¿Aceptarlo (permitir que pase a nuestra red)?
- ¿Rechazarlo (impedir que acceda a nuestra red)?
- ¿Reenviarlo (a otra cadena)?
Por si te preguntabas por qué esta herramienta se llama iptables, es porque estas cadenas están organizadas en tablas, siendo la tabla de filtro la más conocida y la que se utiliza para implementar el filtrado de paquetes con sus tres cadenas predeterminadas:
1. La cadena INPUT maneja los paquetes que entran en la red y que están destinados a programas locales.
2. La cadena OUTPUT se utiliza para analizar paquetes originados en la red local, que se enviarán al exterior.
3. La cadena FORWARD procesa los paquetes que deben ser reenviados a otro destino (como en el caso de un enrutador).
Para cada una de estas cadenas hay una política predeterminada, que dicta qué se debe hacer por defecto cuando los paquetes no coinciden con ninguna de las reglas de la cadena. Puede ver las reglas creadas para cada cadena y la política predeterminada ejecutando el siguiente comando:
# iptables -L
Las políticas disponibles son las siguientes:
- ACCEPT → permite el paso del paquete. Cualquier paquete que no coincida con ninguna regla en la cadena se permite en la red.
- DROP → descarta el paquete silenciosamente. Cualquier paquete que no coincida con ninguna regla en la cadena se impide de entrar en la red.
- REJECT → rechaza el paquete y devuelve un mensaje informativo. Esta en particular no funciona como política predeterminada. En su lugar, está destinada a complementar las reglas de filtrado de paquetes.

Cuando se trata de decidir qué política implementar, es necesario considerar los pros y contras de cada enfoque como se explicó anteriormente – tenga en cuenta que no hay una solución única para todos.
Agregar Reglas
Para agregar una regla al firewall, invoque el comando iptables de la siguiente manera:
# iptables -A chain_name criteria -j target
donde,
- -A significa Añadir (añadir la regla actual al final de la cadena).
- chain_name es ya sea INPUT, OUTPUT o FORWARD.
- target es la acción o política a aplicar en este caso (ACEPTAR, RECHAZAR o DESCARTAR).
- criteria es el conjunto de condiciones contra las cuales se examinarán los paquetes. Está compuesto por al menos una (probablemente más) de las siguientes banderas. Las opciones dentro de corchetes, separadas por una barra vertical, son equivalentes entre sí. El resto representa interruptores opcionales:
[--protocol | -p] protocol: specifies the protocol involved in a rule. [--source-port | -sport] port:[port]: defines the port (or range of ports) where the packet originated. [--destination-port | -dport] port:[port]: defines the port (or range of ports) to which the packet is destined. [--source | -s] address[/mask]: represents the source address or network/mask. [--destination | -d] address[/mask]: represents the destination address or network/mask. [--state] state (preceded by -m state): manage packets depending on whether they are part of a state connection, where state can be NEW, ESTABLISHED, RELATED, or INVALID. [--in-interface | -i] interface: specifies the input interface of the packet. [--out-interface | -o] interface: the output interface. [--jump | -j] target: what to do when the packet matches the rule.
Nuestro Entorno de Pruebas
Vamos a unir todo eso en 3 ejemplos clásicos utilizando el siguiente entorno de prueba para los dos primeros:
Firewall: Debian Wheezy 7.5 Hostname: dev2.gabrielcanepa.com IP Address: 192.168.0.15
Source: CentOS 7 Hostname: dev1.gabrielcanepa.com IP Address: 192.168.0.17
Y esto para el último ejemplo
NFSv4 server and firewall: Debian Wheezy 7.5 Hostname: debian IP Address: 192.168.0.10
Source: Debian Wheezy 7.5 Hostname: dev2.gabrielcanepa.com IP Address: 192.168.0.15
EJEMPLO 1: Analizando la diferencia entre las políticas de DESCARTAR y RECHAZAR
Primero definiremos una política de DESCARTAR para los pings de entrada a nuestro firewall. Es decir, los paquetes icmp serán descartados silenciosamente.
# ping -c 3 192.168.0.15
# iptables -A INPUT --protocol icmp --in-interface eth0 -j DROP

Antes de proceder con la parte de RECHAZAR, eliminaremos todas las reglas de la cadena de ENTRADA para asegurarnos de que nuestros paquetes serán probados por esta nueva regla:
# iptables -F INPUT # iptables -A INPUT --protocol icmp --in-interface eth0 -j REJECT
# ping -c 3 192.168.0.15

EJEMPLO 2: Deshabilitar / habilitar de nuevo los inicios de sesión ssh de dev2 a dev1
Estaremos tratando con la cadena de SALIDA ya que estamos manejando tráfico saliente:
# iptables -A OUTPUT --protocol tcp --destination-port 22 --out-interface eth0 --jump REJECT

EJEMPLO 3: Permitir / prevenir clientes NFS (desde 192.168.0.0/24) para montar comparticiones NFS4
Ejecuta los siguientes comandos en el servidor / firewall NFSv4 para cerrar los puertos 2049 y 111 para todo tipo de tráfico:
# iptables -F # iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 2049 -j REJECT # iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 111 -j REJECT

Ahora abramos esos puertos y veamos qué sucede.
# iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 111 -j ACCEPT # iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 2049 -j ACCEPT

Como puedes ver, pudimos montar la compartición NFSv4 después de abrir el tráfico.
Insertar, Adjuntar y Borrar Reglas
En los ejemplos anteriores mostramos cómo añadir reglas a las cadenas INPUT y OUTPUT. Si queremos insertarlas en una posición predefinida en su lugar, debemos usar el interruptor -I (mayúscula i) en su lugar.
Debes recordar que las reglas se evaluarán una tras otra, y la evaluación se detiene (o salta) cuando se cumple una política de DROP o ACCEPT. Por esa razón, es posible que necesites mover las reglas hacia arriba o hacia abajo en la lista de cadenas según sea necesario.
Utilizaremos un ejemplo trivial para demostrar esto:

Coloquemos la siguiente regla,
# iptables -I INPUT 2 -p tcp --dport 80 -j ACCEPT
en la posición 2) en la cadena INPUT (moviendo así la anterior #2 como #3)

Usando la configuración anterior, el tráfico se verificará para ver si está dirigido al puerto 80 antes de verificar el puerto 2049.
Alternativamente, puedes eliminar una regla y cambiar el objetivo de las reglas restantes a REJECT (usando el interruptor -R</diy16):
# iptables -D INPUT 1 # iptables -nL -v --line-numbers # iptables -R INPUT 2 -i eth0 -s 0/0 -p tcp --dport 2049 -j REJECT # iptables -R INPUT 1 -p tcp --dport 80 -j REJECT

Por último, pero no menos importante, debes recordar que para que las reglas del firewall sean persistentes, debes guardarlas en un archivo y luego restaurarlas automáticamente al arrancar (usando el método preferido de tu elección o el que esté disponible para tu distribución).
Guardando reglas del firewall:
# iptables-save > /etc/iptables/rules.v4 [On Ubuntu] # iptables-save > /etc/sysconfig/iptables [On CentOS / OpenSUSE]
Restaurando reglas:
# iptables-restore < /etc/iptables/rules.v4 [On Ubuntu] # iptables-restore < /etc/sysconfig/iptables [On CentOS / OpenSUSE]
Aquí podemos ver un procedimiento similar (guardando y restaurando reglas del firewall manualmente) usando un archivo ficticio llamado iptables.dump en lugar del predeterminado como se muestra arriba.
# iptables-save > iptables.dump

Para hacer que estos cambios sean persistentes en los reinicios:
Ubuntu: Instale el paquete iptables-persistent, que cargará las reglas guardadas en el archivo /etc/iptables/rules.v4.
# apt-get install iptables-persistent
CentOS: Agregue las siguientes 2 líneas al archivo /etc/sysconfig/iptables-config.
IPTABLES_SAVE_ON_STOP="yes" IPTABLES_SAVE_ON_RESTART="yes"
OpenSUSE: Liste los puertos permitidos, protocolos, direcciones, etc. (separados por comas) en /etc/sysconfig/SuSEfirewall2.
Para más información, consulte el archivo en sí, que está muy comentado.
Conclusión
Los ejemplos proporcionados en este artículo, si bien no cubren todas las funciones de iptables, sirven para ilustrar cómo habilitar y deshabilitar el tráfico entrante o saliente.
Para aquellos de ustedes que son fanáticos de los firewalls, tengan en cuenta que volveremos a este tema con aplicaciones más específicas en la Parte 10 de esta serie LFCE.
No duden en hacerme saber si tienen alguna pregunta o comentario.
Source:
https://www.tecmint.com/configure-iptables-firewall/