Búsqueda de sitios web

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


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

Recordarás que en la Parte 1: Acerca de Iptables de esta serie LFCE (Ingeniero certificado de la Fundación Linux) dimos 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 queremos decir:

  1. Para permitir o impedir que ciertos paquetes entren o salgan de nuestra red.
  2. Reenviar otros paquetes desde un punto de la red a otro.

basándose en criterios predeterminados.

En este artículo discutiremos cómo implementar el filtrado básico de paquetes y cómo configurar el firewall con iptables, una interfaz para netfilter, que es un módulo nativo del kernel utilizado para el firewall.

Tenga en cuenta que el firewall 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, volveremos a abordar el tema en la Parte 10 de esta serie cuando exploremos algunos casos de uso específicos de un firewall en Linux.

Se 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 indicar a las personas que se trasladen de un lugar del aeropuerto a otro si es necesario, por ejemplo cuando necesitan pasar por los servicios de aduanas.

Es posible que la analogía del aeropuerto nos resulte útil durante el resto de este tutorial. Sólo tenga en cuenta las siguientes relaciones a medida que avanzamos:

  1. Personas=Paquetes
  2. Cortafuegos=Aeropuerto
  3. País #1=Red #1
  4. País #2=Red #2
  5. Regulaciones aeroportuarias aplicadas por oficiales=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 o frases. Estas cadenas definen qué acciones se deben tomar cuando un paquete coincide con los criterios especificados por ellas.

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

  1. ¿Aceptarlo (dejarlo 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 Se utiliza para implementar el filtrado de paquetes con sus tres cadenas predeterminadas:

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

2. La cadena OUTPUT se utiliza para analizar los paquetes originados en la red local, que van a ser enviados al exterior.

3. La cadena FORWARD procesa los paquetes que deben reenviarse a otro destino (como en el caso de un enrutador).

Para cada una de estas cadenas existe una política predeterminada, que dicta lo que se debe hacer de forma 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 pólizas disponibles son las siguientes:

  1. ACEPTAR → deja pasar el paquete. Cualquier paquete que no coincida con ninguna regla de la cadena puede ingresar a la red.
  2. DROP → suelta el paquete silenciosamente. Cualquier paquete que no coincida con ninguna regla de la cadena no podrá ingresar a la red.
  3. REJECT → rechaza el paquete y devuelve un mensaje informativo. Éste en particular no funciona como política predeterminada. Más bien, está destinado a complementar las reglas de filtrado de paquetes.

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

Agregar reglas

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 Agregar (agregar la regla actual al final de la cadena).
  2. chain_name es ENTRADA, SALIDA o ADELANTE.
  3. objetivo es la acción o política que se aplicará en este caso (ACEPTAR, RECHAZAR o DEJAR).
  4. criterio es el conjunto de condiciones contra las cuales se examinarán los paquetes. Se compone de al menos una (probablemente más) de las siguientes banderas. Las opciones entre paréntesis, 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

Pegamos todo eso en 3 ejemplos clásicos usando 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: Análisis de la diferencia entre las políticas DROP y REJECT

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 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/volver a habilitar los inicios de sesión ssh desde dev2 a dev1

Nos ocuparemos de la cadena SALIDA mientras manejamos el tráfico saliente:

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

EJEMPLO 3: Permitir/evitar que los clientes NFS (desde 192.168.0.0/24) monten recursos compartidos NFS4

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.

Insertar, agregar y eliminar reglas

En los ejemplos anteriores mostramos cómo agregar reglas a las cadenas ENTRADA y SALIDA. Si queremos insertarlos en una posición predefinida, deberíamos usar el interruptor -I (i mayúscula).

Debe recordar que las reglas se evaluarán una tras otra y que la evaluación se detiene (o salta) cuando coincide una política DROP o ACCEPT. Por ese motivo, es posible que necesite mover 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 de ENTRADA (moviendo así el anterior #2 como #3)

Usando 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 REJECT (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 firewall sean persistentes, deberá guardarlas en un archivo y luego restaurarlas automáticamente al iniciar (usando 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]

Restauración de 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 reglas de firewall manualmente) 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 todos los arranques:

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: enumera 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 abordar este tema con aplicaciones más específicas en la Parte 10 de esta serie LFCE.

No dude en hacérmelo saber si tiene alguna pregunta o comentario.