Cómo usar Netfilter en su sistema Linux: Activación de un cortafuegos de filtrado de paquetes

  1. Ordenadores
  2. Sistemas Operativos
  3. Linux
  4. Cómo usar Netfilter en su sistema Linux: Activación de un cortafuegos de filtrado de paquetes

Libro Relacionado

Linux All-In-One para tontos, 6ª Edición

Por Emmett Dulaney

El núcleo de Linux tiene incorporado un software de filtrado de paquetes en forma de algo llamado netfilter. Utilice el comando iptables para configurar las reglas de lo que ocurre con los paquetes basándose en las direcciones IP de su cabecera y en el tipo de conexión de red.

Para obtener más información sobre netfilter y iptables, visite la sección de documentación del sitio web de netfilter.

La capacidad de filtrado de paquetes integrada es útil cuando no se dispone de un cortafuegos dedicado entre el sistema Linux e Internet, como cuando se conecta el sistema Linux a Internet a través de un módem DSL o de cable. Esencialmente, puede tener un cortafuegos de filtrado de paquetes dentro de su sistema Linux entre el núcleo y las aplicaciones.

La herramienta de configuración del nivel de seguridad en Linux

La mayoría de las distribuciones de Linux, como Fedora y SUSE, ahora incluyen herramientas GUI para activar un cortafuegos de filtrado de paquetes y simplificar la experiencia de configuración para el usuario.

En algunas distribuciones, necesita instalar ufw (acrónimo de Uncomplicated Firewall), que le permite administrar un firewall de filtro de red y simplificar la configuración. ufw sirve como interfaz para iptables, que le permite introducir comandos en una ventana de terminal directamente a través de ella. El comando

sudo ufw enable

enciende el cortafuegos, y el comando

sudo ufw status verbose

muestra información como la siguiente:

Status: activeLogging: on (low)Predeterminado: deny (incoming), allow (outgoing), disabled (routed)Nuevos perfiles: skip

La configuración predeterminada es exactamente la que busca en la mayoría de los casos para un equipo cliente: permitir el tráfico saliente y denegar el tráfico entrante.

Puede permitir paquetes entrantes destinados a servicios de Internet específicos como SSH, Telnet y FTP. Si selecciona una interfaz de red como eth0 (la primera tarjeta Ethernet) como confiable, todo el tráfico de red sobre esa interfaz se permite sin ningún tipo de filtrado.

En SUSE, para configurar un cortafuegos, elija Main Menu→ System→ YaST. En la ventana del Centro de control de YaST que aparece, haga clic en Seguridad y usuarios en el lado izquierdo de la ventana y, a continuación, haga clic en Firewall en el lado derecho. YaST abre una ventana que puede utilizar para configurar el cortafuegos.

Puede designar interfaces de red (por nombre de dispositivo, como eth0, ppp0, etc.) a una de las tres zonas: interna, externa o desmilitarizada. Luego, para esa zona, puede especificar qué servicios (como HTTP, FTP y SSH) están permitidos. Si tiene dos o más interfaces de red y utiliza el sistema Linux como gateway (un router), puede habilitar el reenvío de paquetes entre interfaces de red (una característica llamada enmascaramiento).

También puede activar diferentes niveles de registro, como el registro de todos los paquetes perdidos que intentan conectarse en puertos específicos. Si cambia la configuración del firewall, elija la categoría Inicio y haga clic en Guardar configuración y Reiniciar el firewall ahora.

El comando iptables en Linux

Las herramientas de configuración del firewall de la interfaz gráfica de usuario (GUI) son sólo frontales que utilizan el comando iptables para implementar el firewall. Si su sistema Linux no tiene una herramienta GUI, puede usar iptables directamente para configurar firewalls en su sistema Linux.

Usar el comando iptables es algo complejo. El comando utiliza el concepto de cadena, que es una secuencia de reglas. Cada regla dice qué hacer con un paquete si el encabezado contiene cierta información, como la dirección IP de origen o destino. Si una regla no se aplica, iptables consulta la siguiente regla en la cadena. Por defecto, hay tres cadenas:

  • Cadena de ENTRADA: Contiene el primer conjunto de reglas con las que se prueban los paquetes. Los paquetes continúan a la siguiente cadena sólo si la cadena INPUT no especifica DROP o REJECT.
  • Cadena FORWARD: Contiene las reglas que se aplican a los paquetes que intentan pasar a través de este sistema a otro sistema (cuando utiliza su sistema Linux como enrutador entre su LAN e Internet, por ejemplo).
  • Cadena OUTPUT: Incluye las reglas aplicadas a los paquetes antes de que sean enviados (ya sea a otra red o a una aplicación).

Cuando llega un paquete entrante, el núcleo utiliza iptables para tomar una decisión de enrutamiento basada en la dirección IP de destino del paquete. Si el paquete es para este servidor, el núcleo pasa el paquete a la cadena INPUT. Si el paquete satisface todas las reglas de la cadena INPUT, el paquete es procesado por procesos locales como un servidor de Internet que está buscando paquetes de este tipo.

Si el núcleo tiene habilitado el reenvío IP, y el paquete tiene una dirección IP de destino de una red diferente, el núcleo pasa el paquete a la cadena FORWARD. Si el paquete satisface las reglas de la cadena FORWARD, se envía a la otra red. Si el núcleo no tiene habilitado el reenvío IP y la dirección de destino del paquete no es para este servidor, el paquete se elimina.

Si los programas de procesamiento local que reciben los paquetes de entrada quieren enviar paquetes de red, estos paquetes pasan a través de la cadena OUTPUT. Si la cadena OUTPUT acepta esos paquetes, se envían a la red de destino especificada.

Puede ver las cadenas actuales, añadir reglas a las cadenas existentes o crear nuevas cadenas de reglas utilizando el comando iptables, que normalmente requiere que sea root para interactuar. Cuando vea las cadenas actuales, puede guardarlas en un archivo. Si no ha configurado nada más, y su sistema no tiene configurado ningún firewall, escribiendo iptables -L debería mostrar lo siguiente:

Cadena de ENTRADA (política ACEPTAR) objetivo prot opt origen destinoReenvío de cadena (política ACEPTAR) objetivo prot opt origen destinoCadena de SALIDA (política ACEPTAR) objetivo prot destino opt origen

En este caso, las tres cadenas – INPUT, FORWARD y OUTPUT – muestran la misma política de ACEPTACIÓN, lo que significa que todo está completamente abierto.

Si está configurando un filtro de paquetes, lo primero que debe hacer es especificar los paquetes que desea aceptar. Para aceptar paquetes de la dirección de red 192.168.0.0.0, añada la siguiente regla a la cadena INPUT:

iptables -A INPUT -s 192.168.0.0/24 -j ACEPTAR

Ahora agregue una regla para soltar todo excepto el tráfico de bucle local (la interfaz de red lo) y detenga todos los reenvíos con los siguientes comandos:

iptables -A INPUT -i! lo -j REJECTiptables -A FORWARD -j REJECT

El primer comando iptables, por ejemplo, añade a la cadena INPUT (-A INPUT) la regla de que si el paquete no proviene de la interfaz lo (-i!lo), iptables rechaza el paquete (-j REJECT).

Antes de rechazar todos los demás paquetes, puede añadir más reglas a cada cadena INPUT para permitir la entrada de paquetes específicos. Puede seleccionar paquetes para aceptar o rechazar basándose en muchos parámetros, como direcciones IP, tipos de protocolo (TCP, UDP), interfaz de red y números de puerto.

Puede realizar todo tipo de filtrado de paquetes especializados con iptables. Suponga que configura un servidor web y desea aceptar paquetes destinados únicamente a servicios HTTP (puerto 80) y SSH. El servicio SSH (puerto 22) le permite iniciar sesión de forma segura y administrar el servidor. También suponga que la dirección IP del servidor es 192.168.0.10. He aquí cómo puede configurar las reglas para este servidor:

iptables -P INPUT DROPiptables -A INPUT -s 0/0 -d 192.168.0.10 -p tcp --dport 80 -j ACCEPTiptables -A INPUT -s 0/0 -d 192.168.0.10 -p tcp --dport 22 -j ACCEPT

En este caso, la primera regla establece la política por defecto de la cadena INPUT a DROP, lo que significa que si ninguna de las reglas específicas coincide, el paquete se elimina. Las dos reglas siguientes dicen que los paquetes dirigidos a 192.168.0.10 y destinados a los puertos 80 y 22 son aceptados.

No escriba comandos iptables desde una sesión de inicio de sesión remota. Una regla que comienza negando paquetes de todas las direcciones también puede impedir que lo que escriba llegue al sistema; en ese caso, es posible que no tenga forma de acceder al sistema a través de la red. Para evitar sorpresas desagradables, escriba siempre las reglas de iptables en la consola: el teclado y el monitor conectados directamente a su PC con Linux que ejecuta el filtro de paquetes. Si desea eliminar rápidamente todas las reglas de filtrado, escriba iptables -F para eliminarlas. Para cambiar la política predeterminada de la cadena INPUT a ACCEPT, escriba iptables -t filter -P INPUT ACCEPT. Este comando hace que iptables acepte todos los paquetes entrantes por defecto.

No todos los comandos de iptables se discuten aquí. Puede escribir man iptables para leer un resumen de los comandos. También puede leer sobre netfilter y iptables.

Después de definir las reglas usando el comando iptables, esas reglas están en la memoria y desaparecen al reiniciar el sistema. Utilice el comando iptables-save para almacenar las reglas en un archivo. Puede guardar las reglas en un archivo llamado iptables.rules usando el siguiente comando:

iptables-save > iptables.rules

Aquí hay una lista del archivo iptables.rules generado en un sistema Fedora:

# Generado por iptables-save v1.3.0 en Sun Dec 28 16:10:12 2019*filter:FORWARD ACCEPT[0:0]:INPUT ACCEPT[0:0]:OUTPUT ACCEPT[6:636]:OUTPUT ACCEPT[6:636]-A FORWARD -j RECHAZAR --rechazado-con icmp-port-und-unreachable-A INPUT -s 192.168.0.0/255.255.255.255.0 -j ACEPTAR UNA ENTRADA -i ! lo -j RECHAZAR --rechazar-con icmp-port-unreachableCOMMIT# Completado el domingo 28 de diciembre 16:10:12 2019

Estas reglas corresponden a los siguientes comandos de iptables utilizados para configurar el filtro:

iptables -A INPUT -s 192.168.0.0/24 -j ACCEPTiptables -A INPUT -i ! lo -j REJECTiptables -A FORWARD -j REJECT

Si desea cargar estas reglas guardadas en iptables, use el siguiente comando:

iptables-restore < iptables.rules

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *