Cómo configurar un firewall Iptables para habilitar el acceso remoto a los servicios en Linux - Parte 8


Presentamos el programa de certificación de la Fundación Linux

Recordará de la Parte 1 - Acerca de Iptables de esta serie de LFCE ( Linux Foundation Certified Engineer ) que proporcionamos una descripción básica de lo que es un firewall: un mecanismo para administrar paquetes que entran y salen de la red. Por "administrar", en realidad, nos referimos a:

  1. Para permitir o evitar que ciertos paquetes entren o salgan de nuestra red.
  2. Para 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 de paquetes básico y cómo configurar el firewall con iptables, una interfaz para netfilter, que es un módulo del kernel nativo que se usa para el firewall.

Tenga en cuenta que el cortafuegos es un tema muy amplio 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 un punto de partida para un estudio más profundo de este tema. Sin embargo, revisaremos el tema en la Parte 10 de esta serie cuando exploremos algunos casos de uso específicos de un firewall en Linux.

Puede pensar en un cortafuegos como un aeropuerto internacional donde los aviones de pasajeros van y vienen casi las 24 horas del día, los 7 días de la semana. En función de 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 un determinado país.

Al mismo tiempo, los funcionarios del aeropuerto pueden dar instrucciones a las personas para que se trasladen de un lugar del aeropuerto a otro si es necesario, por ejemplo, cuando deben pasar por los Servicios de Aduanas.

Es posible que encontremos útil la analogía del aeropuerto durante el resto de este tutorial. Solo tenga en cuenta las siguientes relaciones a medida que avanzamos:

  1. Personas u003d Paquetes
  2. Cortafuegos u003d Aeropuerto
  3. País n. ° 1 u003d Red n. ° 1
  4. País n. ° 2 u003d Red n. ° 2
  5. Regulaciones del aeropuerto impuestas por oficiales u003d reglas de firewall

Iptables - Conceptos básicos

En el nivel bajo, es el propio núcleo el que “ decide ” qué hacer con los paquetes basándose en reglas agrupadas en cadenas u frases . Estas cadenas definen qué acciones deben tomarse cuando un paquete coincide con los criterios especificados por ellos.

La primera acción de iptables consistirá en decidir qué hacer con un paquete:

  1. ¿Lo acepta (lo deja pasar a nuestra red)?
  2. ¿Rechazarlo (evitar que acceda a nuestra red)?
  3. ¿Reenviarlo (a otra cadena)?

En caso de que te preguntes por qué esta herramienta se llama iptables , es porque estas cadenas están organizadas en tablas, siendo la tabla de filtros la más conocida y la que es utilizado para implementar el filtrado de paquetes con sus tres cadenas predeterminadas:

1. La cadena INPUT maneja los paquetes que ingresan a la red y que están destinados a programas locales.

2. La cadena SALIDA se utiliza para analizar los paquetes que se originan en la red local y que se envían 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 lo que se debe hacer de manera predeterminada 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:

  1. ACEPTAR → deja pasar el paquete. Se permite la entrada a la red de cualquier paquete que no coincida con ninguna regla de la cadena.
  2. DROP → suelta el paquete silenciosamente. Cualquier paquete que no coincida con las reglas de la cadena no puede ingresar a la red.
  3. REJECT → rechaza el paquete y devuelve un mensaje informativo. Esta en particular no funciona como política predeterminada. En cambio, está destinado a complementar las reglas de filtrado de paquetes.

Cuando se trata de decidir qué política implementará, debe considerar los pros y contras de cada enfoque, como se explicó anteriormente; tenga en cuenta que no existe una talla única -toda solución.

Para agregar una regla al firewall, invoque el comando iptables de la siguiente manera:

# iptables -A chain_name criteria -j target

dónde,

  1. -A significa Append (agregar la regla actual al final de la cadena).
  2. nombre_cadena es INPUT, OUTPUT o FORWARD.
  3. objetivo es la acción o política que se aplicará en este caso (ACEPTAR, RECHAZAR o SOLTAR).
  4. criterios es el conjunto de condiciones contra las cuales se examinarán los paquetes. Está compuesto por al menos uno (probablemente más) de los siguientes indicadores. Las opciones entre 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.

Peguemos 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

Primero definiremos una política DROP para los pings de entrada a nuestro firewall. Es decir, los paquetes icmp se eliminarán silenciosamente.

# ping -c 3 192.168.0.15
# iptables -A INPUT --protocol icmp --in-interface eth0 -j DROP

Antes de continuar con la parte REJECT , eliminaremos todas las reglas de la cadena INPUT para asegurarnos de que nuestros paquetes sean 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

Nos ocuparemos de la cadena SALIDA ya que gestionamos el tráfico saliente:

# iptables -A OUTPUT --protocol tcp --destination-port 22 --out-interface eth0 --jump REJECT

Ejecute 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é pasa.

# 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 puede ver, pudimos montar el recurso compartido NFSv4 después de abrir el tráfico.

En los ejemplos anteriores, mostramos cómo agregar reglas a las cadenas INPUT y OUTPUT . Si quisiéramos insertarlos en una posición predefinida, deberíamos usar el interruptor -I (i mayúscula) en su lugar.

Debe recordar que las reglas se evaluarán una tras otra y que la evaluación se detiene (o salta) cuando una política DROP o ACCEPT coincide. Por esa razón, es posible que tenga la necesidad de mover las reglas hacia arriba o hacia abajo en la lista de la cadena según sea necesario.

Usaremos 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í el anterior # 2 como el # 3)

Con la configuración anterior, se verificará el tráfico para ver si se dirige al puerto 80 antes de verificar el puerto 2049 .

Alternativamente, puede eliminar una regla y cambiar el destino de las reglas restantes a RECHAZAR (usando el interruptor -R ):

# 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, deberá recordar que para que las reglas del cortafuegos sean persistentes, deberá guardarlas en un archivo y luego restaurarlas automáticamente al arrancar (utilizando el método preferido de su elección o el que está disponible para su distribución).

Guardar reglas de 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 (guardar y restaurar las reglas del firewall a mano) usando un archivo ficticio llamado iptables.dump en lugar del predeterminado como se muestra arriba.

# iptables-save > iptables.dump

Para que estos cambios sean persistentes en las botas:

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 : enumere los puertos, protocolos, direcciones, etc. permitidos (separados por comas) en /etc/sysconfig/SuSEfirewall2 .

Para obtener más información, consulte el archivo en sí, que está muy comentado.

Conclusión

Los ejemplos proporcionados en este artículo, aunque no cubren todos los detalles 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 examinar este tema con aplicaciones más específicas en la Parte 10 de esta serie LFCE .

No dude en hacerme saber si tiene alguna pregunta o comentario.