GNU/Linux >> Tutoriales Linux >  >> Linux

Cortafuegos de Linux:lo que necesita saber sobre iptables y firewalld

Este artículo es un extracto de mi libro, Linux in Action, y de un segundo proyecto de Manning que aún no se ha publicado.

El cortafuegos

Un firewall es un conjunto de reglas. Cuando un paquete de datos entra o sale de un espacio de red protegido, su contenido (en particular, la información sobre su origen, destino y el protocolo que planea usar) se prueba con las reglas del firewall para ver si debe permitirse el paso. He aquí un ejemplo simple:

Por un lado, iptables es una herramienta para administrar reglas de firewall en una máquina Linux.

Por otro lado, firewalld también es una herramienta para administrar reglas de firewall en una máquina Linux.

¿Tienes algún problema con eso? ¿Y te arruinaría el día si te dijera que existe otra herramienta, llamada nftables?

Bien, admito que todo huele un poco raro, así que déjame explicarte. Todo comienza con Netfilter, que controla el acceso hacia y desde la pila de red en el nivel del módulo del kernel de Linux. Durante décadas, la principal herramienta de línea de comandos para administrar enlaces de Netfilter fue el conjunto de reglas de iptables.

La terminal de Linux

  • Los 7 mejores emuladores de terminal para Linux
  • 10 herramientas de línea de comandos para el análisis de datos en Linux
  • Descargar ahora:hoja de referencia de SSH
  • Hoja de trucos de comandos avanzados de Linux
  • Tutoriales de línea de comandos de Linux

Debido a que la sintaxis necesaria para invocar esas reglas podría parecer un poco arcana, se introdujeron varias implementaciones fáciles de usar como ufw y firewalld como intérpretes de Netfilter de nivel superior. Sin embargo, Ufw y firewalld están diseñados principalmente para resolver los tipos de problemas que enfrentan las computadoras independientes. La creación de soluciones de red de tamaño completo a menudo requerirá la fuerza adicional de iptables o, desde 2014, su reemplazo, nftables (a través de la herramienta de línea de comandos nft).

iptables no se ha ido a ninguna parte y todavía se usa ampliamente. De hecho, debe esperar encontrarse con redes protegidas por iptables en su trabajo como administrador durante muchos años. Pero nftables, al agregarse al conjunto de herramientas clásico de Netfilter, ha traído algunas funciones nuevas e importantes.

De aquí en adelante, mostraré con un ejemplo cómo firewalld e iptables resuelven problemas de conectividad simples.

Configurar el acceso HTTP usando firewalld

Como habrás adivinado por su nombre, firewalld es parte de la familia systemd. Firewalld se puede instalar en máquinas Debian/Ubuntu, pero está ahí de forma predeterminada en Red Hat y CentOS. Si tiene un servidor web como Apache ejecutándose en su máquina, puede confirmar que el firewall está funcionando navegando a la raíz web de su servidor. Si no se puede acceder al sitio, entonces firewalld está haciendo su trabajo.

Usarás el firewall-cmd herramienta para administrar la configuración de firewalld desde la línea de comandos. Agregando el –state argumento devuelve el estado actual del cortafuegos:

# firewall-cmd --state
running

Por defecto, firewalld estará activo y rechazará todo el tráfico entrante con un par de excepciones, como SSH. Eso significa que su sitio web no recibirá demasiados visitantes, lo que sin duda le ahorrará muchos costos de transferencia de datos. Sin embargo, como probablemente eso no es lo que tenía en mente para su servidor web, querrá abrir los puertos HTTP y HTTPS que, por convención, están designados como 80 y 443, respectivamente. firewalld ofrece dos formas de hacerlo. Uno es a través de –add-port argumento que hace referencia al número de puerto directamente junto con el protocolo de red que usará (TCP en este caso). El –permanent El argumento le dice a firewalld que cargue esta regla cada vez que se inicia el servidor:

# firewall-cmd --permanent --add-port=80/tcp
# firewall-cmd --permanent --add-port=443/tcp

El –reload argumento aplicará esas reglas a la sesión actual:

# firewall-cmd --reload

¿Tiene curiosidad por conocer la configuración actual de su cortafuegos? Ejecute –list-services :

# firewall-cmd --list-services
dhcpv6-client http https ssh

Suponiendo que haya agregado el acceso al navegador como se describió anteriormente, los puertos HTTP, HTTPS y SSH ahora deberían estar todos abiertos, junto con dhcpv6-client , que permite a Linux solicitar una dirección IP IPv6 de un servidor DHCP local.

Configure un quiosco de cliente bloqueado usando iptables

Estoy seguro de que ha visto quioscos:son tabletas, pantallas táctiles y PC tipo cajero automático en una caja que los aeropuertos, las bibliotecas y las empresas dejan tiradas, invitando a los clientes y transeúntes a buscar contenido. Lo que pasa con la mayoría de los quioscos es que, por lo general, no desea que los usuarios se sientan como en casa y los traten como si fueran sus propios dispositivos. Por lo general, no están destinados a navegar, ver videos de YouTube o lanzar ataques de denegación de servicio contra el Pentágono. Por lo tanto, para asegurarse de que no se utilicen indebidamente, debe bloquearlos.

Una forma es aplicar algún tipo de modo de quiosco, ya sea mediante el uso inteligente de un administrador de pantalla de Linux o a nivel del navegador. Pero para asegurarse de que tiene todos los agujeros tapados, probablemente también desee agregar algunos controles de red duros a través de un firewall. En la siguiente sección, describiré cómo lo haría usando iptables.

Hay dos cosas importantes que debe recordar sobre el uso de iptables:el orden en que da sus reglas es fundamental y, por sí mismas, las reglas de iptables no sobrevivirán a un reinicio. Me ocuparé de esos aquí uno a la vez.

El proyecto del quiosco

Para ilustrar todo esto, imaginemos que trabajamos para una tienda que forma parte de una cadena más grande llamada BigMart. Han existido durante décadas; de hecho, nuestros abuelos imaginarios probablemente crecieron comprando allí. Pero en estos días, los muchachos de la sede corporativa de BigMart probablemente solo estén contando las horas antes de que Amazon los destruya definitivamente.

Sin embargo, el departamento de TI de BigMart está haciendo todo lo posible y le acaban de enviar algunos dispositivos de quiosco listos para Wi-Fi que se espera que instale en ubicaciones estratégicas en toda su tienda. La idea es que muestren un navegador web conectado a las páginas de productos de BigMart.com, lo que les permitirá buscar las características de la mercancía, la ubicación del pasillo y los niveles de existencias. Los quioscos también necesitarán acceso a bigmart-data.com, donde se almacenan muchas de las imágenes y videos.

Además de eso, querrá permitir actualizaciones y, cuando sea necesario, descargas de paquetes. Finalmente, querrá permitir el acceso SSH entrante solo desde su estación de trabajo local y bloquear a todos los demás. La siguiente figura ilustra cómo funcionará todo:

El guión

Así es como todo eso encajará en un script de Bash:

#!/bin/bash
iptables -A OUTPUT -p tcp -d bigmart.com -j ACCEPT
iptables -A OUTPUT -p tcp -d bigmart-data.com -j ACCEPT
iptables -A OUTPUT -p tcp -d ubuntu.com -j ACCEPT
iptables -A OUTPUT -p tcp -d ca.archive.ubuntu.com -j ACCEPT
iptables -A OUTPUT -p tcp --dport 80 -j DROP
iptables -A OUTPUT -p tcp --dport 443 -j DROP
iptables -A INPUT -p tcp -s 10.0.3.1 --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -s 0.0.0.0/0 --dport 22 -j DROP

La anatomía básica de nuestras reglas comienza con -A , diciéndole a iptables que queremos agregar la siguiente regla. OUTPUT significa que esta regla debe convertirse en parte de la cadena de SALIDA. -p indica que esta regla se aplicará solo a los paquetes que utilizan el protocolo TCP, donde, como -d nos dice, el destino es bigmart.com. El -j la bandera apunta a ACCEPT como la acción a realizar cuando un paquete coincide con la regla. En esta primera regla, esa acción es permitir, o aceptar, la solicitud. Pero más abajo, puede ver las solicitudes que se eliminarán o denegarán.

Recuerda que el orden importa. Y eso es porque iptables ejecutará una solicitud más allá de cada una de sus reglas, pero solo hasta que obtenga una coincidencia. Entonces, una solicitud de navegador saliente para, digamos, youtube.com pasará las primeras cuatro reglas, pero cuando llegue a –dport 80 o –dport 443 regla, dependiendo de si se trata de una solicitud HTTP o HTTPS, se eliminará. iptables no se molestará en seguir comprobando porque coincidió.

Por otro lado, una solicitud del sistema a ubuntu.com para una actualización de software se realizará cuando alcance la regla correspondiente. Lo que estamos haciendo aquí, obviamente, es permitir solicitudes HTTP o HTTPS salientes solo a nuestros destinos BigMart o Ubuntu y a ningún otro.

Las dos reglas finales se ocuparán de las solicitudes SSH entrantes. Las dos reglas de eliminación anteriores no las habrán denegado ya que no usan los puertos 80 o 443, sino el 22. En este caso, se aceptarán las solicitudes de inicio de sesión de mi estación de trabajo, pero se descartarán las solicitudes de cualquier otro lugar. Esto es importante:asegúrese de que la dirección IP que usa para su regla del puerto 22 coincida con la dirección de la máquina que está usando para iniciar sesión; si no lo hace, será bloqueado instantáneamente. No es gran cosa, por supuesto, porque de la forma en que está configurado actualmente, simplemente puede reiniciar el servidor y todas las reglas de iptables se eliminarán. Si usa un contenedor LXC como su servidor e inicia sesión desde su host LXC, use la dirección IP que usa su host para conectarse al contenedor, no su dirección pública.

Deberá recordar actualizar esta regla si la IP de mi máquina cambia alguna vez; de lo contrario, quedará bloqueado.

¿Jugar en casa (con suerte en una máquina virtual desechable de algún tipo)? Estupendo. Crea tu propio guión. Ahora puedo guardar el script, use chmod para hacerlo ejecutable y ejecútelo como sudo . No se preocupe si bigmart-data.com not found error—por supuesto que no se encuentra; no existe.

chmod +X scriptname.sh
sudo ./scriptname.sh

Puede probar su firewall desde la línea de comando usando cURL . Solicitar ubuntu.com funciona, pero manning.com falla.

curl ubuntu.com
curl manning.com

Configuración de iptables para cargar en el arranque del sistema

La terminal de Linux

  • Los 7 mejores emuladores de terminal para Linux
  • 10 herramientas de línea de comandos para el análisis de datos en Linux
  • Descargar ahora:hoja de referencia de SSH
  • Hoja de trucos de comandos avanzados de Linux
  • Tutoriales de línea de comandos de Linux

Ahora, ¿cómo hago para que estas reglas se carguen automáticamente cada vez que se inicia el quiosco? El primer paso es guardar las reglas actuales en un archivo .rules usando iptables-save herramienta. Eso creará un archivo en el directorio raíz que contiene una lista de las reglas. La tubería, seguida del comando tee, es necesaria para aplicar mi sudo autoridad a la segunda parte de la cadena:el guardado real de un archivo en el directorio raíz restringido.

Entonces puedo decirle al sistema que ejecute una herramienta relacionada llamada iptables-restore cada vez que arranca. Un trabajo cron regular del tipo que vimos en el módulo anterior no ayudará porque se ejecutan en tiempos establecidos, pero no tenemos idea de cuándo nuestra computadora podría fallar y reiniciarse.

Hay muchas maneras de manejar este problema. Aquí hay uno:

En mi máquina Linux, instalaré un programa llamado anacron que nos dará un archivo en el directorio /etc/ llamado anacrontab. Editaré el archivo y agregaré este iptables-restore comando, diciéndole que cargue los valores actuales de ese archivo .rules en iptables cada día (cuando sea necesario) un minuto después de un arranque. Le daré al trabajo un identificador (iptables-restore ) y luego agregue el comando en sí. Ya que estás jugando conmigo en casa, deberías probar todo esto reiniciando tu sistema.

sudo iptables-save | sudo tee /root/my.active.firewall.rules
sudo apt install anacron
sudo nano /etc/anacrontab
1 1 iptables-restore iptables-restore < /root/my.active.firewall.rules

Espero que estos ejemplos prácticos hayan ilustrado cómo usar iptables y firewalld para administrar problemas de conectividad en firewalls basados ​​en Linux.


Linux
  1. Lo que los usuarios y empaquetadores de Linux deben saber sobre Podman 4.0 en Fedora

  2. Listas de control de acceso y unidades externas en Linux:lo que necesita saber

  3. 15 cosas que debe saber sobre la estructura de directorios de Linux

  4. Lo que necesita saber sobre IPv6

  5. ¿Qué es una VPN? Todo lo que necesita saber sobre las VPN

Todo lo que necesita saber sobre Black Lab Linux

Todo lo que necesita saber sobre la distribución Linux Mint

Todo lo que necesita saber sobre los inodos en Linux

Todo lo importante que necesita saber sobre Hard Link en Linux

Todo lo importante que necesita saber sobre UID en Linux

Todo lo que necesita saber sobre el directorio /tmp de Linux