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 le 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" queremos decir:

  1. To allow or prevent certain packets to enter or leave our network.
  2. To forward other packets from one point of the network to another.

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 nativo del kernel utilizado 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 firewall como un aeropuerto internacional donde los aviones de pasajeros van y vienen casi 24/7. 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.

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

  1. Persons = Packets
  2. Firewall = Airport
  3. Country #1 = Network #1
  4. Country #2 = Network #2
  5. Airport regulations enforced by officers = firewall rules

Iptables - Conceptos básicos

En el nivel inferior, 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 que realizará iptables consistirá en decidir qué hacer con un paquete:

  1. Accept it (let it go through into our network)?
  2. Reject it (prevent it from accessing our network)?
  3. Forward it (to another chain)?

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 está 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. ACCEPT → lets the packet through. Any packet that does not match any rules in the chain is allowed into the network.
  2. DROP → drops the packet quietly. Any packet that does not match any rules in the chain is prevented from entering the network.
  3. REJECT → rejects the packet and returns an informative message. This one in particular does not work as a default policy. Instead, it is meant to complement packet filtering rules.

Cuando se trata de decidir qué política implementará, debe tener en cuenta 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 stands for Append (append the current rule to the end of the chain).
  2. chain_name is either INPUT, OUTPUT, or FORWARD.
  3. target is the action, or policy, to apply in this case (ACCEPT, REJECT, or DROP).
  4. criteria is the set of conditions against which the packets are to be examined. It is composed of at least one (most likely more) of the following flags. Options inside brackets, separated by a vertical bar, are equivalent to each other. The rest represents optional switches:
[--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 RECHAZAR , 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 manejamos 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 se encuentre en 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 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 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 todas las campanas y silbidos 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 tratar 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.