Articles

Ejemplos simplificados de Firewall de Linux iptables

En la publicación anterior, hablamos sobre cómo Proteger el servidor Linux Utilizando las Mejores Prácticas de Endurecimiento. Algunas personas me preguntaron sobre la sección de cortafuegos, que era una breve introducción al cortafuegos de iptables. Hoy discutiremos en detalle el firewall iptables de Linux y cómo proteger el tráfico de su servidor usando ese impresionante firewall.

Tabla de contenidos

Iptables en CentOS 7

Si está utilizando CentOS 7, encontrará que firewalld administra iptables, por lo que si desea volver a iptables, debe detener y enmascarar firewalld.

$ systemctl stop firewalld$ systemctl mask firewalld

A continuación, instale el servicio iptables y habilítelo:

$ yum install iptables-services$ systemctl enable iptables

A continuación, puede iniciarlo:

$ systemctl start iptables

Cómo funciona el firewall de Linux

Las funciones del firewall de Iptables Marco Netfilter que está disponible en el núcleo Linux para el filtrado de paquetes.

Tipos de cortafuegos

Hay dos tipos de cortafuegos:

El cortafuegos sin estado procesa cada paquete por su cuenta, lo que significa que no ve otros paquetes de la misma conexión.

Firewall con estado este tipo de firewall se preocupa por todos los paquetes que pasan a través de él, por lo que conoce el estado de la conexión. Da más control sobre el tráfico.

Netfilter contiene tablas. Estas tablas contienen cadenas, y las cadenas contienen reglas individuales.

Si un paquete coincide con cualquier regla, iptables aplicará la acción de regla a ese paquete.

Las acciones pueden ser: acepte, rechace, ignore o pase el paquete a otras reglas para un mayor procesamiento.

Netfilter puede procesar el tráfico entrante o saliente utilizando la dirección IP y el número de puerto.

El comando iptables administra y configura Netfilter.

Antes de comenzar a escribir comandos de firewall, necesitamos comprender un poco la estructura del firewall para poder escribir reglas de firewall fácilmente.

tablas de firewall de iptables

Netfilter tiene tres tablas que pueden contener reglas para el procesamiento.

La tabla de filtros iptables es la tabla principal para procesar el tráfico.

La segunda es la tabla nat, que maneja las reglas NAT.

La tercera tabla es la tabla mangle para destrozarlo paquetes.

Cadenas de tabla

Cada tabla de las tablas mencionadas anteriormente contiene cadenas; estas cadenas son el contenedor de las reglas de iptables.

La tabla de filtros contiene cadenas de REENVÍO, ENTRADA y SALIDA. Puede crear una cadena personalizada para guardar sus reglas en ella.

Si un paquete llega al host, iptables lo procesará mediante reglas de cadena de ENTRADA.

Si el paquete va a otro host, eso significa que las reglas de la cadena de salida lo procesarán.

iptables utiliza la cadena de reenvío para manejar paquetes que han accedido al host pero están destinados a otro host.

Política de cadena

Cada cadena de la tabla de filtros tiene una política. La política es la acción predeterminada que iptables tomar.

La política podría ser DROP, REJECT y ACCEPT.

La política de ACEPTACIÓN permite que los paquetes pasen el firewall. La directiva DROP suelta un paquete sin informar al cliente. La política de rechazo también elimina el paquete e informa al remitente.

Desde una perspectiva de seguridad, debe eliminar todos los paquetes que llegan al host y aceptar solo los paquetes que provienen de fuentes de confianza.

Agregar reglas de iptables

Puede agregar una nueva regla usando el comando iptables como este:

$ iptables -A INPUT -i eth1 -p tcp --dport 80 -d 1.2.3.4 -j ACCEPT

Dividamos este comando en partes para que podamos entender todo sobre él.

La-A significa que estamos agregando una nueva regla. De forma predeterminada, iptables agrega todas las reglas nuevas a la tabla de filtros a menos que especifique otra tabla.

La bandera-i especifica el dispositivo al que se aplicará la regla. Si no especifica un dispositivo, iptables aplicará la regla a todo el tráfico entrante, independientemente de los dispositivos.

El indicador-p especifica el protocolo del paquete que desea procesar, que en nuestro caso es TCP.

El indicador-dport especifica el puerto de destino, que es 80.

La-d especifica la dirección IP de destino, que es 1.2.3.4. Si no se especifica ninguna dirección IP de destino, la regla se aplicará a todo el tráfico entrante en eth1, independientemente de la dirección IP.

– j especifica la acción o la acción de SALTO a realizar. Aquí estamos aceptando los paquetes utilizando la política de aceptación.

La regla anterior permite el tráfico HTTP entrante, que se encuentra en el puerto 80.

¿Qué hay de permitir el tráfico saliente?

$ iptables -A OUTPUT -o eth1 -p tcp --sport 80 -j ACCEPT

Puede usar la bandera-A para agregar reglas a la cadena de salida.

El indicador-o se utiliza para el dispositivo utilizado para el tráfico saliente.

La bandera-sport especifica el puerto de origen.

Puede usar el nombre del servicio como http o https en lugar del número de puerto numérico en sport o dport. Todos los nombres de los servicios están en el archivo / etc / services.

Debe usar el nombre del servicio en lugar de un número de puerto, lo que facilita la lectura de las reglas.

orden de reglas de iptables

iptables coloca nuevas reglas al final de la cadena. Puede agregarlo a la parte superior utilizando la opción-I.

La secuencia de las reglas importa como verá ahora. Puedes insertar tus reglas exactamente donde quieras usando la bandera I.

Observe las siguientes reglas para comprender cómo importa el orden de las reglas:

$ iptables -I INPUT 3 -i eth1 -p udp -j ACCEPT$ iptables -I INPUT 4 -i eth1 -p udp --dport 80 -j DROP

La primera regla acepta que todo el tráfico UDP llegue a eth1, y el número 3 es el orden de la regla.

La segunda regla elimina el tráfico que entra en el puerto 80.

La primera regla aceptará todo el tráfico, luego la segunda regla que debería eliminar el tráfico no hará nada, ya que iptables pasa el tráfico en la primera regla.

Sus reglas deben tener sentido, ya que el orden de las reglas en la cadena importa.

Listar reglas de iptables

Puede listar las reglas de una cadena usando la bandera-L:

$ iptables -L INPUT

Puede mostrar los números de línea de las reglas usando –line-numbers:

$ iptables -L INPUT --line-numbers

La lista muestra los nombres de los servicios. Puede mostrar los números de puerto utilizando la opción-n:

$ iptables -L INPUT -n --line-numbers

La regla anterior hará que el listado sea más rápido porque evita que los iptables obtengan resolución de DNS y búsquedas de servicios.

Puede enumerar todas las reglas para todas las cadenas de la siguiente manera:

$ iptables -L -n --line-numbers

Para obtener cuántos paquetes procesa cada regla, puede usar la bandera-v:

$ iptables -L -v

Además, puede restablecer los contadores a cero usando la bandera-Z.

Ahora podemos agregar una nueva regla a cualquier cadena que queramos, podemos insertar la regla en un orden específico y podemos enumerar las reglas para cualquier cadena o todas las cadenas, pero ¿qué hay de eliminar una regla?

Eliminar reglas

Puede eliminar una regla utilizando el indicador-D:

$ iptables -D INPUT -i eth1 -p tcp --dport 80 -d 1.2.3.4 -j ACCEPT

Este comando eliminará la regla HTTP que especificó anteriormente.

Antes de eliminar una regla, solo asegúrese de la especificación de la regla enumerándola y, a continuación, elimínela.

Puede eliminar la regla utilizando el número de pedido en lugar de escribir las especificaciones de la regla.

$ iptables -D INPUT 2

Puede eliminar todas las reglas de una cadena específica utilizando la bandera-F, lo que significa eliminar todas las reglas.

$ iptables -F INPUT

Si olvida mencionar el nombre de la cadena cuando usa la bandera-F, se eliminarán todas las reglas de la cadena.

Reemplazar reglas

Puede reemplazar reglas existentes con su propia regla usando la bandera-R:

$ iptables -R INPUT 1 -i eth1 -p tcp --dport httpht -d 1.2.3.4 -j ACCEPT

Este comando reemplazará la primera regla de la cadena de entrada con la regla escrita.

Listar una tabla específica

Para listar una tabla específica, use la bandera-t con el nombre de la tabla de la siguiente manera:

$ iptables -L -t nat

Aquí enumeramos las reglas en la tabla nat.

Cadena definida por el usuario de Iptables

Para crear una cadena definida por el usuario, utilice el indicador-N.

$ iptables -N MY_CHAIN

Además, puede cambiarle el nombre utilizando la bandera-E.

$ iptables -E MY_CHAIN NEW_NAME

Y puede eliminar la cadena definida por el usuario utilizando la bandera-X.

$ iptables -X MY_CHAIN

Si no menciona el nombre de la cadena al usar la bandera-X, eliminará todas las cadenas definidas por el usuario. No puedes eliminar cadenas integradas como ENTRADA y SALIDA.

Redirección a una cadena definida por el usuario

Puede redirigir paquetes a una cadena definida por el usuario, como cadenas integradas, utilizando la bandera-j.

$ iptables -A INPUT -p icmp -j MY_CHAIN

La regla anterior redirigirá todo el tráfico ICMP a la cadena MI_ CADENA.

Configuración de la Política predeterminada para Cadenas

Puede usar el indicador-P para establecer la política predeterminada para una cadena específica. La política predeterminada podría ser ACEPTAR, RECHAZAR y SOLTAR.

$ iptables -P INPUT DROP

Así que ahora, la cadena de entrada eliminará cualquier paquete que venga a menos que escriba una regla para permitir cualquier tráfico entrante.

Inundación SYN

El atacante envía paquetes SYN solo sin completar el protocolo de enlace TCP y, como resultado, el host receptor tendría muchas conexiones abiertas, y su servidor se volvería demasiado ocupado para responder a otros clientes.

Podemos usar el módulo límite del cortafuegos iptables para protegernos de la inundación SYN.

$ iptables -A INPUT -i eth1 -p tcp --syn -m limit --limit 10/second -j ACCEPT

Aquí especificamos 10 paquetes SYN por segundo solamente. Puede ajustar este valor de acuerdo con sus necesidades de red.

Si esto limitará su red, puede usar cookies SYN.

SYN Cookies

En

/etc/sysctl.conf

el archivo y añadir esta línea:

net.ipv4.tcp_syncookies = 1

a Continuación, guardar y volver a cargar.

$ sysctl -p

Soltar paquetes de estado no válidos

Los paquetes de estado NO válidos son paquetes que no pertenecen a ninguna conexión y usted los suelta.

$ iptables -A INPUT -m state --state INVALID -j DROP

Esta regla eliminará todos los paquetes de estado no válidos entrantes.

Soltar paquetes fragmentados

Los paquetes fragmentados son trozos rotos de paquetes grandes mal formados, y debe escribir reglas para soltarlos.

El indicador-f indica al cortafuegos de iptables que seleccione todos los fragmentos. Por lo tanto, si no está utilizando iptables como enrutador, puede eliminar paquetes fragmentados.

$ iptables -A INPUT -f -j DROP

Guardar Reglas iptables

Si se reinicia el servidor, usted perderá todas las reglas que usted escribió, entonces, ¿cómo mantenerlas?

Puede guardar todas sus reglas utilizando el comando iptables-save si está utilizando CentOS o Red Hat.

iptables-save > /etc/sysconfig/iptables

En CentOS 7, puede guardar reglas como las siguientes:

$ service iptables save

Puede guardar una tabla específica como una tabla de filtro solo:

$ iptables-save -t filter

Además, puede usar iptables-restore para restaurar reglas.

En distribuciones basadas en Debian, puede usar el paquete iptables-persistent para guardar y restaurar reglas.

en Primer lugar, se instala:

$ apt-get install iptables-persistent

a Continuación, puede guardar y restaurar las reglas:

$ netfilter-persistent save
$ netfilter-persistent reload

espero que usted encuentre el cortafuegos iptables fácil. Sigue regresando.

Gracias.

Fundador de LikeGeeks. Trabajo como administrador de sistemas Linux desde 2010. Soy responsable del mantenimiento, la seguridad y la solución de problemas de los servidores Linux para múltiples clientes en todo el mundo. Me encanta escribir scripts de shell y Python para automatizar mi trabajo.