Conceptos básicos de iptables en Linux. Los conceptos básicos de iptables usando Debian como ejemplo a través de los ojos de un bebé

Hay varias soluciones para configurar un firewall en Linux, pero muchas de ellas son en realidad solo interfaces para configurar iptables, y algunas no son del todo exitosas. En principio, es bueno poder configurar rápidamente un firewall, pero una vez que domines iptables, podrás hacerlo más rápido y con mayor precisión. El ajuste fino de iptables generalmente no está disponible para las interfaces.

Empecemos. Empecemos por uno sencillo y luego complicaremos la configuración. Aquí en el sitio ya hay un artículo sobre la carga automática de reglas de iptables, por lo que no consideraremos la carga de reglas ahora, sino que nos centraremos en las reglas mismas. El firewall siempre está configurado en la cuenta raíz.

Escenarios de conexión de red

Antes de configurar un firewall, debe tener una comprensión precisa de qué conexiones de red y cómo se deben establecer durante el funcionamiento del sistema para que todos los servicios puedan funcionar normalmente. Cuanto más precisa sea nuestra imagen del funcionamiento de los servicios de red, tanto en nuestro servidor como en otros servidores, más finamente podremos configurar el sistema. Por lo tanto, es aconsejable describir siempre primero los escenarios de cómo debería funcionar todo y solo después comenzar a configurar el firewall. El guión se puede escribir en cualquier editor de texto. Primero, describimos todos los servicios externos con los que trabaja el servidor y luego todos los servicios que se ejecutan en el servidor. ¿Por qué es esto necesario? Representar con precisión el propio proceso de trabajo, sin profundizar en la parte técnica. Después de escribir el script más preciso, puede comenzar a configurar el firewall. La descripción del script debería verse así:

1) Todos los usuarios pueden ver el sitio. Por defecto el sitio está en ruso.
2) Si los usuarios provienen de direcciones<список-адресов-или-маска-подсети>, entonces se les debería mostrar el sitio en ucraniano. En nuestro ejemplo, será, por ejemplo, una tienda en línea con un nombre de dominio, que se muestra en ruso o ucraniano, y que tendrá su propio conjunto de venta para Rusia y Ucrania. Simplemente tendremos dos sitios, uno en ruso, el segundo en ucraniano, y la dirección de donde vino el cliente determinará a qué sitio irá. El ejemplo está tomado de mi cabeza; en la práctica, por supuesto, estos problemas se resuelven de manera diferente. Tampoco puede permitir la visualización del sitio desde direcciones chinas debido al spam constante en los comentarios en chino.
3) El correo debe ser accesible desde la oficina; no debe ser accesible desde otros lugares.
4) Debe ser posible conectarse a una VPN desde el exterior.
5) Sólo podemos utilizar unos pocos servidores DNS en los que confiemos. Todos los demás servidores DNS no deberían estar disponibles
6) …..

Etcétera. Creo que eso es suficiente para un ejemplo simple. El objetivo es determinar la imagen de la interacción de la red con la mayor precisión posible. Cualquier script tiene un solo objetivo: formalizar la interacción con los usuarios y servicios antes de elaborar descripciones de conexión, incluido el puerto, protocolo, dirección de origen y dirección de destino para cada conexión.

Configurar iptables: la configuración más sencilla

Si hablamos de servidores de combate, la configuración del firewall en dos servidores puede variar mucho, dependiendo de las tareas que realicen estos servidores. Por lo tanto, intentaré describir los principios generales que se pueden utilizar al configurar un firewall para cualquier servidor. Esto es sólo una base para una mayor personalización.

En primer lugar, debes borrar las reglas cargadas:

Iptables -F ENTRADA iptables -F SALIDA iptables -F ADELANTE

ENTRADA, SALIDA, ADELANTE: estas son las tres cadenas principales a lo largo de las cuales fluirán los paquetes, entrantes, salientes y pasando de una interfaz a otra.

Después de esto, debe configurar la política predeterminada. Solo hay dos: ACEPTAR y SOLTAR, aceptar paquetes o no. Para un servidor de producción, siempre debes seleccionar DROP y luego abrir todo lo que sea necesario y nada más.

Para establecer dichas políticas, primero debe permitir las conexiones a través de SSH; asumiremos que no cambiamos el puerto estándar (lo que normalmente debe hacerse en los servidores de producción inmediatamente después de instalar el servidor SSH).

Iptables -t filtro -A ENTRADA -p tcp -m tcp --dport 22 -j ACEPTAR

Y después de eso puedes comenzar a cambiar las políticas predeterminadas:

Iptables -P ENTRADA DROP iptables -P SALIDA ACEPTAR iptables -P FORWARD DROP

Para la cadena de SALIDA, por ahora puede dejar la política ACEPTAR predeterminada, que permite conexiones salientes; puede cambiar a ella después de configurar la cadena de ENTRADA, cuando prohibimos las conexiones entrantes; En muchos servidores es suficiente configurar correctamente la cadena de ENTRADA, pero también veremos la configuración de SALIDA más adelante para una configuración más rígida.

Entonces. Por el momento, solo tenemos abierto el puerto del servidor SSH para conexiones entrantes, no pasarán por todos los demás puertos. Ahora necesita agregar recepción de conexiones a los puertos de otros servicios, si se están ejecutando en su servidor.

Iptables -t filtro -A ENTRADA -p tcp -m tcp --dport 25 -j ACEPTAR

DNS (normalmente permitir UDP es suficiente, pero también puedes agregar TCP):

Iptables -t filtro -A ENTRADA -p udp -m udp --dport 53 -j ACEPTAR

Iptables -t filtro -A ENTRADA -p tcp -m tcp --dport 80 -j ACEPTAR

Iptables -t filtro -A ENTRADA -p tcp -m tcp --dport 110 -j ACEPTAR

Iptables -t filtro -A ENTRADA -p tcp -m tcp --dport 443 -j ACEPTAR

Pero eso no es todo. Los puertos están abiertos, se puede acceder a los servicios desde el exterior, pero el correo no funciona y los nombres de dominio no se resuelven. El hecho es que al consultar servidores DNS, la solicitud se envía desde un puerto libre arbitrario entre los no privilegiados, como una conexión a otro servidor de correo. Y estos servicios envían la respuesta al mismo puerto. Y este puerto, como comprenderá, está cerrado para nosotros. Podríamos abrir este puerto, pero no sabemos de qué puerto será la conexión saliente. Por lo tanto, podemos hacer lo más simple posible: permitir conexiones desde puertos específicos en la computadora remota:

Iptables -t filtro -A ENTRADA -p tcp -m tcp --sport 25 -j ACEPTAR

Iptables -t filtro -A ENTRADA -p udp -m udp --sport 53 -j ACEPTAR

Estas dos reglas permiten conexiones entrantes desde los puertos 25/tcp y 53/udp, por lo que cuando lleguen paquetes con el protocolo apropiado desde estos puertos, serán aceptados. Si planea actualizar el sistema, el software o instalar paquetes necesarios para el funcionamiento, deberá permitir conexiones desde el puerto 80 de las máquinas remotas.

Ahora tenemos lista la configuración de iptables más sencilla.

Después de ingresar reglas en las tablas, debe guardarlas. Para hacer esto, puede utilizar, por ejemplo, un script.

Manejo de la fuente de conexión

Sigamos adelante. Necesitamos una conexión en ciertos puertos, no con todo Internet, sino con ciertas máquinas, con ciertas direcciones IP. Por lo tanto, podemos complicar un poco las reglas agregándoles la dirección de origen del paquete.

Iptables -t filtro -A ENTRADA -s 123.123.123.123 -p tcp -m tcp --dport 22 -j ACEPTAR

Esta regla le permite recibir paquetes en el puerto 22 a través de TCP solo desde una fuente con la dirección 123.123.123.123, esto se indica con el parámetro “-s” (fuente, fuente). De esta manera, puedes limitar las conexiones al servidor vía SSH a una dirección IP específica, o a una subred específica si especificas la máscara de subred desde la cual se permiten las conexiones en lugar de una dirección IP específica.

Si siempre utiliza la misma puerta de enlace de correo a través de la cual su servidor envía correo, puede, por ejemplo, limitar las conexiones desde el puerto 25/tcp especificando esta puerta de enlace como origen.

Reglas para una interfaz de red o dirección IP específica

Un servidor puede tener varias interfaces de red. Normalmente hay al menos dos de ellos: una interfaz de red externa y la llamada interfaz loopback 127.0.0.1, a la que no se puede acceder desde el exterior a menos que exista una redirección de paquetes adecuada. También puede tener al menos otra dirección IP compartida con el alias de la interfaz de red u otra interfaz de red física. Y cada dirección IP o interfaz de red puede ejecutar servicios específicos. Por ejemplo, uno tiene un servidor web Apache y el otro tiene un servidor de servicio de nombres de dominio bind9. Y cuando permite conexiones en un puerto específico sin especificar esa interfaz de red, abre el acceso a ese puerto en todas las interfaces. Por lo tanto, existen dos formas de limitar el alcance de un permiso.

La primera forma es especificar la dirección IP a la que se permitirá el acceso.

Iptables -t filtro -A ENTRADA -d 234.234.234.234 -p tcp -m tcp --dport 22 -j ACEPTAR

Este ejemplo muestra cómo se puede utilizar una dirección de destino en una regla de iptables. También puedes utilizar la dirección de origen:

Iptables -t filtro -A ENTRADA -s 123.123.123.123 -d 234.234.234.234 -p tcp -m tcp --dport 22 -j ACEPTAR

En este ejemplo, ya limitamos el acceso a dos direcciones, lo que le permite acceder al servidor en 234.234.234.234 vía SSH desde la dirección 123.123.123.123;

La segunda forma es especificar el nombre de la interfaz de red. Este método también es aplicable cuando la dirección externa puede cambiar. Si la dirección en la interfaz de red cambia, con la opción anterior perderás el acceso al servidor. El nombre de la interfaz se especifica de la siguiente manera:

Iptables -t filtro -A ENTRADA -i eth0 -s 123.123.123.123 -p tcp -m tcp --dport 22 -j ACEPTAR

Esta opción permite el acceso SSH en la interfaz de red eth0; el acceso SSH no estará disponible en otras interfaces de red.

Todo lo que acabamos de ver es sólo el comienzo, la siguiente parte continuará...

¡Saludos a todos! A continuación publico este artículo práctico sobre Filtro de red Linux. En el artículo consideraré. ejemplos típicos de implementación de reglas de iptables en Linux, y también considerar formas guardando la configuración de iptables creada.

Configurar netfilter/iptables para una estación de trabajo

Comencemos con una tarea elemental: implementación de un firewall de Linux en un escritorio. En la mayoría de los casos, en las distribuciones de Linux de escritorio no existe una necesidad urgente de utilizar un firewall, porque Estas distribuciones no ejecutan ningún servicio que escuche los puertos de la red, pero por razones de prevención no sería superfluo organizar la protección. Porque el núcleo tampoco es inmune a los agujeros. Entonces, tenemos Linux, con eth0, no importa vía DHCP o estáticamente...

Para configurar cortafuegos Intento seguir la siguiente política: prohibir todo y luego lo que hay que permitir. Eso es lo que haremos en este caso. Si tiene un sistema recién instalado y no ha intentado configurar un filtro de red en él, las reglas se verán así:

Netfilter:~# iptables -L Cadena ENTRADA (política ACEPTAR) objetivo prot opt ​​origen destino Cadena ADELANTE (política ACEPTAR) objetivo prot opt ​​origen destino Cadena SALIDA (política ACEPTAR) objetivo prot opt ​​origen destino

Esto significa que la política predeterminada para tablas de filtrado en todas las cadenas - ACEPTAR y no hay otras reglas que prohíban nada. Así que primero prohibir TODO, incluidos los paquetes(ni siquiera intentes hacer esto de forma remota, perderás el acceso inmediatamente):

Netfilter:~# iptables -P ENTRADA DROP netfilter:~# iptables -P SALIDA DROP netfilter:~# iptables -P FORWARD DROP

Con estos comandos instalamos GOTA por defecto. Esto significa que cualquier paquete que no tenga una regla explícita que lo permita es automáticamente descartado. Como aún no hemos establecido una regla única, todos los paquetes que lleguen a tu computadora serán rechazados, así como aquellos que intentes enviar a la red. Como demostración, puedes intentar hacer ping a tu computadora a través de la interfaz loopback:

Netfilter:~# ping -c2 127.0.0.1 PING 127.0.0.1 (127.0.0.1) 56(84) bytes de datos. ping: sendmsg: operación no permitida ping: sendmsg: operación no permitida --- estadísticas de ping del host local --- 2 paquetes transmitidos, 0 recibidos, 100 % de pérdida de paquetes, tiempo 1004 ms

De hecho, esta es una red que no funciona en absoluto y esto no es muy bueno, porque... Algunos demonios utilizan una interfaz de bucle invertido para comunicarse entre sí, que ya no funciona después de que se han realizado las acciones. Esto puede interrumpir el funcionamiento de dichos servicios. Por eso, en primer lugar, es imperativo permitamos que los paquetes se transmitan a través de la interfaz de loopback entrante y la interfaz de loopback saliente en las tablas INPUT(para poder recibir los paquetes enviados) y PRODUCCIÓN(para la posibilidad de enviar paquetes) en consecuencia. Entonces, asegúrese de hacer:

Netfilter:~# iptables -A ENTRADA -i lo -j ACEPTAR netfilter:~# iptables -A SALIDA -o lo -j ACEPTAR

Después de esto, el ping a localhost funcionará:

Netfilter:~# ping -c1 127.0.0.1 PING 127.0.0.1 (127.0.0.1) 56(84) bytes de datos. 64 bytes de 127.0.0.1 (127.0.0.1): icmp_seq=1 ttl=64 tiempo=0.116 ms --- 127.0.0.1 estadísticas de ping --- 1 paquete transmitido, 1 recibido, 0% de pérdida de paquete, tiempo 116ms rtt min/ promedio/máx/mdesv = 0,116/0,116/0,116/0,116 ms

Si no es demasiado fanático de la configuración del firewall, puede permitir que funcione el protocolo ICMP:

Netfilter:~# iptables -A ENTRADA -p icmp -j ACEPTAR netfilter:~# iptables -A SALIDA -p icmp -j ACEPTAR

Sería más seguro especificar el siguiente comando iptables similar:

Netfilter:~# iptables -A ENTRADA -p icmp --icmp-tipo 0 -j ACEPTAR netfilter:~# iptables -A ENTRADA -p icmp --icmp-tipo 8 -j ACEPTAR netfilter:~# iptables -A SALIDA -p icmp -j ACEPTAR

Este comando permitirá que los tipos de paquetes ICMP sean solicitud de eco y respuesta de eco, lo que mejorará la seguridad.

Saber que nuestro ordenador no está infectado (¿o sí?) y sólo establece conexiones salientes seguras. Y además, sabiendo que las conexiones seguras son conexiones de los llamados. rango efímero de puertos, que es especificado por el kernel en un archivo /proc/sys/net/ipv4/ip_local_port_range, Poder permitir conexiones salientes desde estos puertos seguros:

Netfilter:~# cat /proc/sys/net/ipv4/ip_local_port_range 32768 61000 netfilter:~# iptables -A SALIDA -p TCP --sport 32768:61000 -j ACEPTAR netfilter:~# iptables -A SALIDA -p UDP -- deporte 32768:61000 -j ACEPTAR

Si no está paranoico acerca de limitar los paquetes salientes, entonces podría limitarse a un comando iptables permitiendo todas las conexiones salientes Op a todos los protocolos y puertos:

Netfilter:~# iptables -A OUTPUT -j ACCEPT netfilter:~# # o simplemente establezca la política ACEPTAR predeterminada para la cadena de SALIDA netfilter:~# iptables -P OUTPUT ACCEPT

Además, sabiendo que en Netfilter las conexiones de red tienen 4 estados ( NUEVO,ESTABLECIDORELACIONADOS yINVÁLIDO) y se permiten nuevas conexiones salientes desde la computadora local (con el estado NEW) en los dos últimos comandos de iptables, que las conexiones ya establecidas y las adicionales tienen estados ESTABLECIDO yRELACIONADO En consecuencia, y sabiendo además que se accede al sistema local a través de , podemos permitir que sólo lleguen a nuestro ordenador aquellos paquetes TCP y UDP que fueron solicitados por las aplicaciones locales:

Netfilter:~# iptables -A ENTRADA -p TCP -m estado --estado ESTABLECIDO, RELACIONADO -j ACEPTAR netfilter:~# iptables -A ENTRADA -p UDP -m estado --estado ESTABLECIDO, RELACIONADO -j ACEPTAR

¡Eso es todo, en realidad! Si algún tipo de servicio de red todavía se está ejecutando en el escritorio, entonces debe agregar reglas apropiadas para las conexiones entrantes y salientes. Por ejemplo, para ejecutar el servidor ssh que acepta y envía solicitudes en el puerto TCP 22, debe agregar lo siguiente reglas de iptables:

Netfilter:~# iptables -A ENTRADA -i eth0 -p TCP --dport 22 -j ACEPTAR netfilter:~# iptables -A SALIDA -o eth0 -p TCP --sport 22 -j ACEPTAR

Aquellos. para cualquier servicio, debe agregar una regla a las cadenas de ENTRADA y SALIDA, permitiendo, respectivamente, la recepción y el envío de paquetes usando este puerto para una interfaz de red específica (si no especifica una interfaz, se permitirá recibir/enviar paquetes en cualquier interfaz).

Configurar netfilter/iptables para permitir que varios clientes se conecten a una sola conexión.

Veamos ahora nuestra Linux como puerta de entrada de una red local a Internet externa. Supongamos que La interfaz eth0 está conectada a Internet. y tiene IP 198.166.0.200, y La interfaz eth1 está conectada a la red local. y tiene IP 10.0.0.1. Por defecto, en el kernel de Linux reenviar paquetes a través de la cadena FORWARD(paquetes no destinados al sistema local) está deshabilitado. Para habilitar esta característica, debe establecer el valor 1 en el archivo :

Netfilter:~# eco 1 > /proc/sys/net/ipv4/ip_forward

A reenvío de paquetes guardado después del reinicio, debe estar en el archivo /etc/sysctl.conf descomentar (o simplemente agregar) la línea net.ipv4.ip_forward=1.

Entonces, tenemos una dirección externa (198.166.0.200), hay una cantidad de clientes hipotéticos en la red local que tienen y envían solicitudes a la red externa. Si estos clientes envían solicitudes a la red externa a través de la puerta de enlace "tal cual", sin conversión, entonces el servidor remoto no podrá responder a ellas, porque la dirección del remitente será la del destinatario de la "red local". Para que este esquema funcione correctamente, es necesario reemplazar la dirección del remitente con la dirección externa de la puerta de enlace de Linux. Esto se logra mediante (enmascaramiento) en , en .

Netfilter:~# iptables -A ADELANTE -m conntrack --ctstate ESTABLECIDO, RELACIONADO -j ACEPTAR netfilter:~# iptables -A ADELANTE -m conntrack --ctstate NUEVO -i eth1 -s 10.0.0.1/24 -j ACEPTAR netfilter: ~# iptables -P FORWARD DROP netfilter:~# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Entonces, en orden de arriba a abajo, resolvemos las conexiones ya establecidas en cadena ADELANTE, tabla de filtros, luego permitimos que se establezcan nuevas conexiones en cadena ADELANTE, tabla de filtros, que vino de la interfaz eth1 y de la red 10.0.0.1/24. Todos los demás paquetes que pasan cadena ADELANTE- desechar. A continuación, realizamos el enmascaramiento (sustitución de la dirección del remitente del paquete en los encabezados) de todos los paquetes que se originan en la interfaz eth0.

Nota. Hay una recomendación general: utilice la regla -j MASQUERADE para interfaces con una IP obtenida dinámicamente (por ejemplo, a través de DHCP del proveedor). Con una IP estática, -j MASQUERADE se puede reemplazar con una IP_interface_eth0 similar -j SNAT -to-source. Además, SNAT puede "recordar" las conexiones establecidas en caso de una indisponibilidad breve de la interfaz. Comparación de MASQUERADE y SNAT en la tabla:

Además de las reglas especificadas, también puede agregar reglas para filtrar paquetes destinados al host local, como se describe en. Es decir, agregue reglas que prohíban y permitan conexiones entrantes y salientes:

Netfilter:~# iptables -P ENTRADA DROP netfilter:~# iptables -P SALIDA DROP netfilter:~# iptables -A ENTRADA -i lo -j ACEPTAR netfilter:~# iptables -A SALIDA -o lo -j ACEPTAR netfilter:~# iptables -A ENTRADA -p icmp --icmp-type 0 -j ACEPTAR netfilter:~# iptables -A ENTRADA -p icmp --icmp-type 8 -j ACEPTAR netfilter:~# iptables -A SALIDA -p icmp -j ACEPTAR netfilter:~# cat /proc/sys/net/ipv4/ip_local_port_range 32768 61000 netfilter:~# iptables -A SALIDA -p TCP --sport 32768:61000 -j ACEPTAR netfilter:~# iptables -A SALIDA -p UDP -- deporte 32768:61000 -j ACEPTAR netfilter:~# iptables -A ENTRADA -p TCP -m estado --estado ESTABLECIDO, RELACIONADO -j ACEPTAR netfilter:~# iptables -A ENTRADA -p UDP -m estado --estado ESTABLECIDO, RELACIONADO -j ACEPTAR

Como resultado, si uno de los hosts de la red local, por ejemplo 10.0.0.2, intenta contactar con uno de los hosts de Internet, por ejemplo, 93.158.134.3 (ya.ru), su dirección de origen será reemplazada por la externa. dirección de puerta de enlace en la tabla POSTROUTING de la cadena nat, es decir, la IP saliente 10.0.0.2 será reemplazada por 198.166.0.200. Desde el punto de vista del host remoto (ya.ru), parecerá como si la puerta de enlace se estuviera comunicando directamente con él. Cuando el host remoto comience a transmitir datos, los dirigirá específicamente a la puerta de enlace, es decir, 198.166.0.200. Sin embargo, en la puerta de enlace la dirección de destino de estos paquetes se cambiará a 10.0.0.2, después de lo cual los paquetes se transmitirán al destinatario real en la red local. Para tal transformación inversa, no es necesario especificar reglas adicionales; esto lo hará el mismo operación MASCARADA, que recuerda qué host de la red local envió la solicitud y qué host debe devolver la respuesta entrante.

Nota: preferiblemente aceptado tácitamente, antes de todos los comandos de iptables cadenas claras a las que se agregarán reglas:

Netfilter:~# iptables -F NOMBRE DE CADENA

Proporcionar acceso a servicios en la puerta de enlace.

Supongamos que en nuestra puerta de enlace se está ejecutando un determinado servicio, que debería responder a las solicitudes provenientes de Internet. Digamos que funciona en algún puerto TCP nn. Para brindar acceso a este servicio, es necesario modificar la tabla de filtros en la cadena INPUT (para permitir recibir paquetes de red dirigidos al servicio local) y la tabla de filtros en la cadena OUTPUT (para permitir respuestas a solicitudes entrantes).

Entonces, tenemos, que enmascara (reemplaza la dirección del remitente por una externa) paquetes a una red externa. Y permite aceptar todas las conexiones establecidas. La prestación de acceso al servicio se realizará utilizando las siguientes reglas de autorización:

Netfilter:~# iptables -A ENTRADA -p TCP --dport nn -j ACEPTAR netfilter:~# iptables -A SALIDA -p TCP --sport nn -j ACEPTAR

Estas reglas permiten conexiones TCP entrantes al puerto nn y conexiones TCP salientes desde el puerto nn. Además, puede agregar parámetros restrictivos adicionales, por ejemplo, permitir conexiones entrantes solo desde la interfaz externa eth0 (clave -yo eth0) etc.

Proporcionar acceso a servicios en la red local.

Supongamos que en nuestra red local existe algún host con IP X.Y.Z.1, que debe responder a las solicitudes de red de la red externa en el puerto TCP xxx. Para que se produzca una respuesta de servicio correcta de la red local cuando un cliente remoto accede a un puerto IP externo xxx, es necesario reenviar las solicitudes que llegan al puerto IP externo xxx al host correspondiente en la red local. Esto se logra modificando la dirección del destinatario en el paquete que llega al puerto especificado. Esta acción se llama DNAT y se aplica en la cadena PREROUTING de la tabla nat. Y también permitir el paso de estos paquetes en la cadena FORWARD en la tabla de filtros.

De nuevo, tomemos el camino. Entonces, tenemos, que enmascara (reemplaza la dirección del remitente por una externa) paquetes a una red externa. Y permite aceptar todas las conexiones establecidas. La prestación de acceso al servicio se realizará utilizando las siguientes reglas permitidas:

Netfilter:~# iptables -t nat -A PREROUTING -p tcp -d 198.166.0.200 --dport xxx -j DNAT --to-destination X.Y.Z.1 netfilter:~# iptables -A FORWARD -i eth0 -p tcp -d X.Y.Z. 1 --dport xxx -j ACEPTAR

Guardar las reglas ingresadas al reiniciar

Todas las reglas ingresadas en la consola se restablecerán a su estado original después de reiniciar el sistema operativo (leer - eliminar). Con el fin de guardar todos los comandos de iptables ingresados, hay varias maneras. Por ejemplo, una de ellas es establecer todas las reglas del firewall en el archivo de inicialización. Pero este método tiene un inconveniente importante: durante todo el período de tiempo desde el inicio del subsistema de red hasta el inicio del último servicio y luego el script rc.local de SystemV, el sistema operativo no estará protegido. Imagine una situación, por ejemplo, si algún servicio (por ejemplo NFS) se inicia en último lugar y se produce algún error cuando se inicia y antes de que se inicie el script rc.local. En consecuencia, rc.local nunca se inicia y nuestro sistema se convierte en un gran agujero.

Por lo tanto, la mejor idea sería inicializar reglas de netfilter/iptables al cargar. Debian tiene una gran herramienta para esto: el directorio /etc/network/if-up.d/, en el que puede colocar scripts que se ejecutarán cuando se inicie la red. También hay equipos iptables-guardar Y restauración-iptables, que guarda, crea un volcado de reglas de netfilter desde el kernel y restaura las reglas del kernel en consecuencia.

Entonces, El algoritmo de guardado de iptables es aproximadamente el siguiente:

  • Configuramos el firewall a tu medida mediante
  • crear un volcado de las reglas creadas usando el comando iptables-save > /etc/iptables.rules
  • crear importar script Creé el volcado cuando se inicia la red (en el directorio /etc/network/if-up.d/) y no olvide hacerlo ejecutable:
# gato /etc/network/if-up.d/firewall #!/bin/bash /sbin/iptables-restore< /etc/iptables.rules exit 0 # chmod +x /etc/network/if-up.d/firewall

Volcado de reglas recibido comando iptables-guardar Tiene formato de texto y, por lo tanto, es adecuado para editar. La sintaxis de salida para el comando iptables-save es la siguiente:

# Generado por iptables-save v1.4.5 el sábado 24 de diciembre 22:35:13 2011 *filtro:ENTRADA ACEPTAR :ADELANTE ACEPTAR ....... # comentario -A ENTRADA -i lo -j ACEPTAR -A ENTRADA ! -i lo -d 127.0.0.0/8 -j REJECT ........... -A ADELANTE -j REJECT COMMIT # Completado el sábado 24 de diciembre 22:35:13 2011 # Generado por iptables-save v1 .4.5 el sábado 24 de diciembre 22:35:13 2011 * sin procesar ...... COMMIT

Líneas que comienzan con # - comentarios, líneas en * - este es el nombre de las tablas, entre el nombre de la tabla y la palabra COMPROMETERSE contiene parámetros pasados ​​al comando iptables. parámetro COMMIT- indica la finalización de los parámetros de la tabla anterior. Las líneas que comienzan con dos puntos definen cadenas que contienen esta tabla en el formato:

:política de cadena [paquetes:bytes]

Dónde cadena- nombre de la cadena, política- la política de cadena predeterminada para esta tabla y luego los contadores de paquetes y bytes en el momento en que se ejecuta el comando.

En RedHat funciones de almacenamiento de comandos de iptables ejecutado cuando la red se inicia y se detiene ejecuta el archivo /etc/sysconfig/iptables. Y la gestión de este archivo recae en el demonio iptables.

Como otra opción para guardar reglas, puede considerar usar el parámetro arriba en el archivo /etc/red/interfaces con un argumento en forma de archivo que almacena comandos de iptables que establecen las reglas necesarias.

En pocas palabras

Eso será suficiente por hoy. Definitivamente publicaré implementaciones de firewall más complejas en artículos futuros.

¡Saludos cordiales, McSim!

Un pequeño script inicial (reglas, preguntas frecuentes de iptables) para una computadora de escritorio o un servidor simple. En este caso, ejemplos de cómo trabajar con puertos de uno u otro software que se ejecuta en su computadora. Se deben observar precauciones de seguridad en cualquier computadora. El mito de que Linux es más seguro no es cierto; todo depende de la torpeza de las manos del administrador. También hay sistemas Windows bien protegidos, así como sistemas Linux que están abiertos a casi cualquier persona. Por lo tanto, todavía vale la pena pensar un poco en la protección de la red de su computadora. A continuación se muestran algunas reglas de iptables que pueden resultar útiles al principio.

Reemplacé específicamente $IPT con /sbin/iptables, si alguien necesita solo una regla, para no cambiar nada, simplemente la copia y la ejecuta. Naturalmente, aquí todavía hay algunas reglas, no hay VPN diferentes, etc., si lo desea, agréguelas.

Estas líneas se pueden copiar completamente en un script y simplemente ejecutarlas. Para casos normales esto es suficiente. Si alguna aplicación no puede acceder a la red, se ha agregado especialmente el registro. ¡Simplemente abra tail -f /var/log/syslog (o el suyo, si es diferente de Ubuntu) y observe! Si tiene preguntas, agréguelas a la discusión y las resolveremos juntos.

PD: Además de estas reglas, piense en lo que debería tomar del artículo Optimización de TCP.

Cómo eliminar una regla en Iptables

Publicado por Alexey Ubozhenko

Varias veces me he encontrado con el hecho de que incluso las personas generalmente inteligentes cometen errores completamente imperdonables. Por ejemplo, abren el puerto en el que se ejecuta la base de datos a todo Internet.

Blog sobre administración de sistemas. Artículos sobre Linux, Windows, almacenamiento y virtualización de NetApp.

Esto les sucede a menudo a los principiantes en DevOps que han estado escribiendo código toda su vida y ahora sus responsabilidades también incluyen la configuración de servidores. Hay buenos tutoriales en Internet sobre la configuración básica del firewall en Linux y otros *nix, pero a menudo son hojas en muchas pantallas. Entonces, espero que este tutorial más conciso sea útil para alguien.

¡Importante! Es muy fácil bloquear por error una máquina hasta tal punto que ya no se pueda acceder a ella. Esto es especialmente cierto en el caso del alojamiento en la nube. Por ejemplo, si en AWS cierra todos los puertos del 1024 al 65536, por alguna razón la máquina se cierra después de reiniciar todo en general puertos. Si estás alojado en las nubes, es mejor configurar un firewall a través de la interfaz web proporcionada por el hosting.

Una pequeña nota sobre terminología. El firewall integrado en el kernel de Linux se llama Netfilter e iptables es una utilidad para administrar este firewall. Mucha gente cree erróneamente que el firewall se llama iptables. Esto está mal. Al decir algo como "filtro paquetes usando iptables", les estás mostrando a los demás tu ignorancia.

En general, qué tipo de problemas se pueden resolver con Netfilter:

  • Permitir/denegar el tráfico entrante a ciertos puertos usando ciertos protocolos (IPv4/IPv6, TCP/UDP) desde direcciones específicas (IP, MAC) o subredes;
  • Todo es igual para el tráfico saliente;
  • Puede, por ejemplo, ignorar por completo todos los paquetes ICMP;
  • Configurando NAT, consulte la publicación sobre cómo instalar y configurar OpenVPN;
  • He oído que los verdaderos gurús pueden configurar protección DDoS y de fuerza bruta, limitar el acceso a la red a aplicaciones, usuarios o grupos específicos y hacer otras locuras;

Me gustaría señalar que al principio personalmente encontré la utilidad iptables extremadamente inconveniente en comparación con ipfw en FreeBSD. Afortunadamente, después de trabajar con él durante algún tiempo, todos estos indicadores como -A, -D, -j y otros se vuelven familiares, así que tenga paciencia. Veamos los comandos básicos.

Mostrar todas las reglas:

Puede notar que Netfilter tiene algunas "cadenas": al menos ENTRADA, SALIDA y ADELANTE.

Personalmente también tengo una cadena DOCKER en mi máquina. Por primera vez, puedes pensar en los dos primeros como todo el tráfico entrante y saliente, respectivamente, y olvidarte temporalmente del resto. Es muy probable que nunca los necesite en absoluto.

Eliminar todas las reglas:

Cambie la política (comportamiento predeterminado) de la cadena:

iptables -P CAÍDA DE ENTRADA
iptables -P ENTRADA ACEPTAR

Denegar el acceso desde el host/subred:

iptables -A ENTRADA -s 123.45.67.89 -j SOLTAR
iptables -A ENTRADA -s 123.45.0.0/16-j SOLTAR

También puedes utilizar nombres de dominio:

iptables -A ENTRADA -s ejemplo.ru -j DROP

Prohibición de conexiones salientes:

iptables -A SALIDA -d 123.45.67.89 -j SOLTAR

Puedes usar negaciones en las reglas:

iptables -A ENTRADA!-s 123.45.67.89 -j SOLTAR

Eliminando una regla por su número en la cadena:

iptables -D ENTRADA 1

Eliminar una regla según lo que hace:

iptables -D ENTRADA -s 123.45.67.89 -j SOLTAR

La opción -p especifica el protocolo. Puede utilizar todo, icmp, tcp, udp o el número de protocolo de /etc/protocols. El indicador --sport especifica el puerto desde el que se envió el paquete y el indicador --dport especifica el puerto de destino:

iptables -A ENTRADA -p tcp --sport80-j ACEPTAR
iptables -A ENTRADA -p tcp --dport80-j ACEPTAR

Insertando una regla al principio de una cadena:

iptables -ENTRÉ...

O puede especificar una posición específica:

iptables-save >/etc/iptables.rules

Restaurar reglas:

restauración-iptables

Ahora veamos algunos ejemplos prácticos. Por ejemplo, así es como se ve la emulación de Netsplit en una prueba que verifica el comportamiento de una aplicación que usa Akka Cluster:

ejecutar(nodo1, s"iptables -A ENTRADA -s $nodo2 -j DROP")
ejecutar(nodo1, s"iptables -A ENTRADA -s $nodo3 -j DROP")
ejecutar(nodo1, s"iptables -A SALIDA -d $nodo2 -j DROP")
ejecutar(nodo1, s"iptables -A SALIDA -d $nodo3 -j DROP")

La restauración se produce exactamente de la misma manera, solo que el indicador -A se reemplaza por el indicador -D.

Otro ejemplo. Debe averiguar qué puertos están escuchando en la máquina y cerrar los innecesarios. Entramos en el coche y decimos:

Salida de ejemplo:

Conexiones activas a Internet (solo servidores)
Proto Recv-Q Send-Q Dirección local Dirección extranjera Estado PID/nombre de programa
tcp 0 0 0.0.0.0:80 0.0.0.0:* ESCUCHAR 3210/nginx
tcp 0 0 0.0.0.0:4369 0.0.0.0:* ESCUCHAR 1789/epmd
tcp 0 0 0.0.0.0:22 0.0.0.0:* ESCUCHAR 797/sshd
tcp 0 0 127.0.0.1:5432 0.0.0.0:* ESCUCHAR 990/postgres

Nginx y SSHd miran Internet, esto es normal. PostgreSQL sólo escucha la interfaz local, por lo que tampoco hay problemas con eso. Pero epmd sobresale (puedes comprobarlo con telnet desde otra máquina), y esto no sirve. Solo puede cerrar el puerto 4369. Cómo hacerlo se mostró arriba. O puede ir aún más lejos y denegar todas las conexiones desde el exterior al puerto 81 y anteriores:

iptables -A ENTRADA -m multipuerto \
-p tcp --dports81:65535!-s 127.0.0.0/8-j CAÍDA

Esto utiliza la extensión multipuerto, que le permite especificar rangos de puertos.

Comprobemos que todo funciona. Si está bien, guarde las reglas:

iptables-save >/etc/iptables.rules

Para garantizar que las reglas se seleccionen cuando se inicie el sistema, creamos un nuevo archivo /etc/network/if-pre-up.d/iptables:

restauración-iptablessalir0

... y decimos:

chmod +x /etc/network/if-pre-up.d/iptables

Se ha probado que este método funciona en Ubuntu 14.04 LTS.

También debería funcionar en Debian. Encontrará una descripción de una forma alternativa de restaurar las reglas del firewall al iniciar el sistema en la nota ya mencionada sobre OpenVPN.

Materiales adicionales para quienes quieran saber más sobre Netfilter:

¿Cómo se configuran firewalls en sus servidores?

Etiquetas: Linux, Seguridad, Redes.

La utilidad de línea de comandos iptables se utiliza para configurar el firewall netfilter integrado en un sistema basado en el kernel de Linux.

Esta instrucción es adecuada tanto para principiantes que desean comprender aspectos de la seguridad de la red como para profesionales experimentados como hoja de trucos.

Principio de configuración

La sintaxis general para usar iptables es:

iptables-t<таблица> <команда> <цепочка>[número]<условие> <действие>

<таблица>

Las reglas de Netfilter se distribuyen en 4 tablas, cada una de las cuales tiene su propio propósito (más detalles a continuación). Se especifica con el modificador -t, pero si no se especifica este parámetro, la acción se realizará para la tabla predeterminada: filtro.

<команда>

Los comandos indican qué tipo de acción realizamos en netfilter, por ejemplo, crear o eliminar una regla.

<цепочка>

Cada tabla tiene cadenas, para cada una de las cuales se crean las reglas. Por ejemplo, para la tabla de filtros anterior hay tres cadenas predefinidas: ENTRADA (paquetes entrantes), SALIDA (paquetes salientes) y ADELANTE (paquetes en tránsito).

[número]

Algunos comandos requieren especificar un número de regla, por ejemplo, para eliminar o editar.

<условие>

Una condición describe los criterios para elaborar una regla particular.

<действие>

Bueno, en realidad, ¿qué hacemos con el paquete si cumple con los criterios de la condición?

* para ser justos, vale la pena señalar que la clave de acción no tiene por qué estar al final. Lo que pasa es que este formato se encuentra con mayor frecuencia en las instrucciones y hace que las reglas sean más fáciles de leer.

Claves de iptables y ejemplos de su uso.

Para trabajar con tablas (iptables -t)

Permítanme recordarles que todas las reglas en netfilter se distribuyen en tablas. Para trabajar con una tabla específica, debe usar el modificador -t.

equipos

Las siguientes claves determinan las acciones que realiza la utilidad iptables.

Llave Descripción y ejemplos
-A Agregar una regla al final de la lista:
iptables -A ENTRADA -s 192.168.0.15 -j SOLTAR
negar mensajes entrantes desde 192.168.0.15.
-D Eliminar una regla:
iptables -D ENTRADA 10
eliminar regla en la cadena INPUT con el número 10.
-I Insertar una regla en una parte específica de la lista:
iptables -I ENTRADA 5 -s 192.168.0.15 -j SOLTAR
insertar la regla quinta en la lista.
-R Reemplazo de la regla.
iptables -R SALIDA 5 -s 192.168.0.15 -j ACEPTAR
reemplace nuestra quinta regla de prohibir a permisiva.
-F Restablecer reglas en una cadena.
iptables -F ENTRADA
-Z Restablecer estadísticas.
iptables -Z ENTRADA
-NORTE Creando una cadena.
iptables -N CADENANUEVO
-INCÓGNITA Eliminando una cadena.
iptables -X CADENA NUEVA
-PAG Defina la regla predeterminada.
iptables -P CAÍDA DE ENTRADA
-MI Cambiar el nombre de una cadena.
iptables -E CADENANEW CHAINOLD

Términos

Estas claves definen las condiciones de la regla.

Llave Descripción y ejemplos
-pag Protocolo de red. Las opciones válidas son TCP, UDP, ICMP o TODAS.
iptables -A ENTRADA -p tcp -j ACEPTAR
Permitir todas las conexiones TCP entrantes.
-s Dirección de origen: nombre de host, dirección IP o subred en notación CIDR.
iptables -A ENTRADA -s 192.168.0.50 -j SOLTAR
negar mensajes entrantes del nodo 192.168.0.50
-d Dirección de destino. El principio de uso es similar al de la clave -s anterior.
iptables -A SALIDA -d 192.168.0.50 -j SOLTAR
negar salida al nodo 192.168.0.50
-i El adaptador de red por el que llegan los paquetes (ENTRADA).
iptables -A ENTRADA -i eth2 -j SOLTAR
deshabilite el tráfico entrante para la interfaz Ethernet eth2.
-o El adaptador de red desde el que se envían los paquetes (SALIDA).
iptables -A SALIDA -o eth3 -j ACEPTAR
Permitir mensajes salientes desde la interfaz Ethernet eth3.
--dport Puerto de destino.
iptables -A ENTRADA -p tcp --dport 80 -j ACEPTAR
Permitir llamadas entrantes en el puerto 80.
--deporte Puerto de origen.
iptables -A ENTRADA -p tcp --sport 1023 -j SOLTAR
prohibir mensajes entrantes desde el puerto 1023.

Las claves enumeradas también admiten la construcción mediante el signo. ! .

Configurar netfilter usando iptables

Invierte la condición, por ejemplo,
iptables -A ENTRADA -s! 192.168.0.50 -j CAÍDA
negará la conexión a todos los hosts excepto 192.168.0.50.

Comportamiento

Acciones que se realizarán en un paquete que coincida con los criterios de la condición. Cada tabla tiene su propio conjunto de acciones permitidas. Especificado mediante una clave -j.

Mesa Acción Descripción
filtrar ACEPTAR Permite el paquete.
GOTA Niega el paquete.
RECHAZAR Prohíbe enviar un mensaje a la fuente.
nat MASCARADA Para paquetes salientes, reemplaza la dirección IP de origen con la dirección de la interfaz desde la que sale el paquete.
SNAT Similar a MASQUERADE, pero indica una interfaz de red específica cuya dirección se utilizará para la suplantación de identidad.
ADNT Sustitución de dirección para paquetes entrantes.
REDIRIGIR Redirige la solicitud a otro puerto en el mismo sistema.
mutilar TOS Modificación del campo TOS (priorización de tráfico).
DSCP Cambio de DSCP (también priorización de tráfico).
TTL Cambie TTL (vida útil del paquete).
HL Similar a TTL, pero para IPv6.
MARCA Marcado de paquetes. Se utiliza para su posterior filtración o modelado.
CONNMARK Marcado de conexión.
TCPMSS Cambiando el valor de MTU.

Ejemplos de comandos de iptables de uso común

Comandos generales

Ver reglas con sus números:

iptables -L --números-de-línea

Para cada tabla necesitas mirar las reglas por separado:

iptables -t nat -L --números-de-línea

Eliminar todas las reglas:

Establecer reglas predeterminadas:

iptables -P CAÍDA DE ENTRADA

iptables -P CAÍDA DE SALIDA

* en estos ejemplos, de forma predeterminada, la regla de denegación (DROP) funcionará para todos los paquetes entrantes (ENTRADA) y salientes (SALIDA).

Permitir todo

Método 1: agregando una regla:

iptables -I ENTRADA 1 -j ACEPTAR

iptables -I SALIDA 1 -j ACEPTAR

iptables -I ADELANTE 1 -j ACEPTAR

* estos tres comandos crearán reglas que permitirán todos los paquetes entrantes, salientes y en tránsito.

Método 2. Reglas de limpieza:

* aquí primero eliminamos todas las reglas (-F), luego configuramos la política predeterminada para permitir entradas, salidas y tránsito (-S).

Método 3. Deshabilitar el servicio (es conveniente deshabilitar temporalmente el firewall para diagnosticar problemas):

Trabajar con reglas

Agregue una regla al final de la lista:

iptables -A ENTRADA -p tcp --dport 25 -j ACEPTAR

iptables -A ENTRADA -p tcp -s! 192.168.0.25 —puerto 993 -i eth0 -j ACEPTAR

Agregar rango de puertos:

iptables -A ENTRADA -p tcp --dport 3000:4000 -j ACEPTAR

*en este caso, de 3000 a 4000.

Insertar regla:

iptables -I ADELANTE 15 -p udp -d 8.8.8.8 --dport 53 -i eth1 -j ACEPTAR

Reenvío de puertos

Hay dos métodos de configuración.

1. Reglas de PRERRUTAMIENTO + POSTRRUTAMIENTO:

iptables -t nat -A PREROUTING -p tcp -m tcp -d 19.8.232.80 —dport 22 -j DNAT —al destino 192.168.1.15:2222

iptables -t nat -A POSTROUTING -p tcp -m tcp -s 192.168.1.15 —sport 2222 -j SNAT —to-source 19.8.232.80:22

* Dónde 19.8.232.80 — la dirección en la que escuchamos las solicitudes de conexión; 22 — puerto para reenvío; 192.168.1.15 2222 — puerto interno.

2. Reglas de PRERRUTAMIENTO + ADELANTE:

iptables -t nat -A PREROUTING -p tcp -i eth1 --dport 22 -j DNAT --to-destination 192.168.1.15:2222

iptables -A FORWARD -p tcp -d 192.168.1.15 —dport 22 -m estado —estado NUEVO, ESTABLECIDO, RELACIONADO -j ACEPTAR

* Dónde eth1— interfaz de red en la que escuchamos las solicitudes; 22 — puerto para reenvío; 192.168.1.15 — dirección IP interna a la que transferimos todas las solicitudes; 2222 — puerto interno.

Configuración inicial

Permitir SSH:

iptables -A ENTRADA -p tcp --dport 22 -j ACEPTAR

Establecimos la política para prohibir los mensajes entrantes y permitir todos los mensajes salientes:

iptables -P SALIDA ACEPTAR

Creamos una regla para el funcionamiento normal de apt-get:

iptables -A ENTRADA -p tcp --sport 80 -m estado --estado ESTABLECIDO -j ACEPTAR

Permitir ICMP (para ejecutar el comando ping):

iptables -A ENTRADA -p icmp -j ACEPTAR

Reglas de guardado (permanente)

De forma predeterminada, todas las reglas dejan de funcionar después de reiniciar la red o la computadora. Existen varios métodos de configuración para guardar las reglas después de reiniciar.

Método 1. iptables-save

Guarde las reglas en un archivo:

iptables-save > /etc/iptables.rules

Abrir configuración de red:

vi /etc/red/interfaces

y agrega la línea:

restauración previa de iptables< /etc/iptables.rules

Método 2: iptables-persistente

Instale el paquete persistente de iptables:

apto para instalar iptables-persistente

Para guardar las reglas, ingrese el comando:

servicio de guardado persistente de iptables

Método 3. servicio iptables

Funciona en versiones anteriores de Linux:

Método 4: iptables.init

Funciona en CentOS:

/usr/libexec/iptables/iptables.init guardar

Ubuntu y CentOS

Los sistemas operativos modernos Ubuntu y CentOS no tienen iptables de forma predeterminada.

Debe instalarlo o utilizar utilidades más nuevas.

En CentOS

firewall-cmd se utiliza como programa de gestión de firewall estándar. Para obtener más detalles, lea las instrucciones sobre Cómo configurar firewalld en CentOS.

Si necesita utilizar iptables, instale el paquete con la utilidad:

yum instalar servicios-iptables

Deshabilitar firewall:

systemctl detener firewalld

systemctl deshabilita el firewalld

Permitir e iniciar iptables:

systemctl habilita iptables

en ubuntu

ufw ahora se usa para administrar el firewall.

Para trabajar con iptables, instale el siguiente paquete:

apt-get install iptables-persistente

Deshabilitar ufw:

# Redes# Seguridad# UNIX# Ubuntu# Linux

¿Le resultó útil esta instrucción?

DETRÁS DEL “Muro DE FUEGO”:
FIREWALL (FIREWALL) Y PUERTA DE ENTRADA A INTERNET
EN DEBIAN GNU/LINUX 4.0 ETCH

Una guía práctica para organizar un acceso seguro a Internet
desde una computadora separada y desde una red local en Debian GNU/Linux 4.0 Etch
una pequeña teoría

Cada acceso a Internet no sólo permite conectarse a varios servidores y sitios, sino que también crea el peligro potencial de penetración en nuestro ordenador desde el exterior. Este peligro no debe pasarse por alto, ya que actualmente la mayoría de los intentos de acceso no autorizado a los ordenadores de los usuarios desde Internet forman parte de un negocio delictivo bien organizado. Después de piratear con éxito su sistema, intentarán usar su computadora para enviar spam, organizar ataques DoS en otras computadoras o para otros fines nefastos. Descuidar este peligro, en el mejor de los casos, aumentará sus costos de tráfico y ralentizará la velocidad de su computadora; en el peor, puede involucrarlo sin darse cuenta en las actividades delictivas de grupos cibernéticos.

La situación se ve agravada por el hecho de que en algunos sistemas operativos (aún) muy extendidos, muchos puertos se dejan abiertos de forma predeterminada, lo que permite a un atacante de Internet conectarse con el usuario sin que éste se dé cuenta.

Para evitar conexiones no autorizadas desde el exterior y filtrar el tráfico entrante/saliente, se debe utilizar un programa especial en el sistema operativo: cortafuegos(firewall inglés), también conocido como cortafuegos Y cortafuegos. A continuación se describe una configuración simple de firewall en un sistema operativo gratuito. Debian GNU/Linux 4.0.

El uso de un firewall cobra especial relevancia si tienes más de un ordenador, pero red doméstica u oficina, cuyas computadoras acceden a Internet.

Incluso una pequeña red local debe estar organizada adecuadamente. Supongamos que tiene un punto de acceso a una conexión a Internet de alta velocidad (por ejemplo, un módem ADSL) con una interfaz Ethernet (es decir, de red).

Existe la tentación (alimentada por recomendaciones de analfabetos, como en las instrucciones para mi módem ADSL) de conectar el módem directamente al conmutador y luego conectarlo al conmutador. Todo Computadoras de la red local. En este caso, el módem emite dinámicamente direcciones IP locales a través del conmutador, ¡pero resulta que cada computadora se queda sola con Internet! Ni un módem ni un interruptor pueden convertirse en un obstáculo para un malvado. Un atacante puede escanear Todo ordenadores de una red local organizada de esta manera.

Una solución lógica y segura es crear barrera entre el módem y la red local, en forma de una computadora separada con un "muro de fuego" (firewall) configurado en ella. Esta computadora tiene dos interfaces: con una “mira” a Internet (es decir, está físicamente conectada al módem), con la otra mira hacia la red local (y está físicamente conectada al conmutador, al que también están conectadas otras computadoras). conectado). Dado que nuestra computadora con firewall ahora es un centro para que otras computadoras accedan a Internet, también se le llama puerta(Puerta de entrada inglesa).

Con tal organización de la red local, la probabilidad de piratería se reduce significativamente: el atacante "ve" sólo la puerta de enlace de Internet, y hay un firewall instalado en la puerta de enlace, y no es fácil piratearlo.

Configurar iptables en Linux para principiantes

Las computadoras de la red local pueden navegar por Internet y permanecer relativamente seguras.

Configurar un firewall usando el configurador arno-iptables-firewall

Para organizar un firewall en GNU/Linux el programa se utiliza iptables, que, por regla general, se instala inmediatamente al instalar la mayoría de las distribuciones. EN DebianGNU/Linux Puedes comprobar esto ejecutándolo con derechos de administrador. aptitud. Si es necesario instalamos iptables.

Sin embargo, la configuración manual iptables No es una tarea trivial y sólo puede realizarla especialistas en el campo de la administración de sistemas. Por lo tanto, para configurar las reglas según las cuales funcionará el firewall, es mejor utilizar configurador especial. EN DebianGNU/Linux este es un programa cortafuegos-arno-iptables. Una vez lanzado, formula una serie de preguntas, a partir de las cuales genera reglas para el funcionamiento del firewall. iptables.

Escriba en la consola con derechos de superusuario:

#aptitude instalar arno-iptables-firewall

Al inicio de la instalación el programa nos preguntará si realmente queremos configurar un firewall con él. iptables:

Primero, debe especificar la interfaz externa: "mirar" a Internet, es decir, conectado al módem. La configuración de la interfaz se define en el archivo de configuración. /etc/red/interfaces. Podría verse así, por ejemplo:

# Esta es la interfaz lo: apunta a nuestra propia máquina. auto lo iface lo inet loopback dirección 127.0.0.1 netmask 255.0.0.0 # Esta es la interfaz eth0, que está conectada a Internet (módem ADSL) # Su peculiaridad es que el proveedor le asigna dinámicamente la dirección IP, # por lo tanto la opción dhcp auto eth0 está configurada iface eth0 inet dhcp # Esta es la interfaz que da a la red local # La dirección de la red local será 192.168.2.0/24 # Por motivos de seguridad en la red local, la puerta de enlace tiene una dirección IP estática - 192.168.2.1, # por lo tanto, se establece la opción estática # Máscara de red - 255.255.255.0 # La dirección de transmisión de red en este caso será 192.168.2.255 auto eth1 iface eth1 inet dirección estática 192.168.2.1 máscara de red 255.255.255.0 transmisión 192.168.2.255

Entonces, mirando la configuración /etc/red/interfaces, indicamos al configurador del firewall que nuestra interfaz es externa eth0:

A la pregunta de si el proveedor nos proporciona una dirección IP dinamicamente(usando el protocolo DHCP), respondemos afirmativamente:

La siguiente pregunta es qué servicios se prestarán desde nuestro ordenador a los internautas externos. ¡No tenemos ninguno! No nos dedicamos al alojamiento web profesional y no pretendemos distribuir información al exterior. Dejamos la línea vacía.

Luego está la cuestión de si proporcionaremos algún servicio a través de UDP. Tampoco, ¡y también dejamos la línea vacía!

¿Necesitamos que nos hagan ping desde el mundo exterior (es decir, para verificar si hay una conexión con la computadora en la que está instalado el firewall)? En nuestro caso, esto es bastante aceptable:

Esto completa la configuración de una computadora separada que no es una puerta de enlace de red local. Si planeamos utilizar la computadora como puerta de entrada, debemos responder algunas preguntas más. Indicamos la interfaz con la que la puerta de enlace se enfrenta a la red local; en nuestro caso es eth1, como se desprende claramente de /etc/red/interfaces(de lo contrario, para una computadora “solitaria”, deje este campo en blanco):

Cuando se le preguntó si permitir la traducción NAT, es decir Al redirigir el tráfico de Internet a través de la puerta de enlace a la red local y viceversa, respondemos "sí"; esta es una de nuestras principales tareas en este caso:

Entonces surge la pregunta: ¿a qué segmento de la red local se puede acceder mediante la redirección a redes externas? Tenemos derecho a acceder a Internet en todas las computadoras de la red local; indicar el valor nuevamente 192.168.2.0/24

Finalmente, confirmamos nuestro deseo de lanzar iptables sin verificación adicional por nuestra parte de las reglas de firewall generadas automáticamente por el configurador:

Luego de esto, si todo salió bien, se muestra un mensaje similar al siguiente. Ahora aparecerá cada vez que se inicie la computadora de la puerta de enlace y le informará que el firewall se ha iniciado exitosamente:

Arno's Iptables Firewall Script v1.8.8c ————————————————————————————- Se pasaron las comprobaciones de cordura... OK Módulo IPTABLES detectado...

Cargando módulos IPTABLES adicionales: ¡Todos los módulos IPTABLES cargados! Configurando /proc/…. configuraciones: Habilitar anti-spoof con rp_filter Habilitar la protección contra inundaciones SYN a través de cookies SYN Deshabilitar el registro de marcianos Deshabilitar la aceptación de mensajes de redireccionamiento ICMP Establecer el máximo. cantidad de conexiones simultáneas a 16384 Habilitación de la protección contra paquetes enrutados de origen Configuración de tiempos de espera de conexión predeterminados Habilitación de la reducción de la capacidad de DoS Configuración predeterminada de TTL=64 Deshabilitación de ECN (notificación explícita de congestión) Habilitación del soporte para IP dinámicas Limpieza de la tabla de rutas /proc/ configuración realizada... Borrar reglas en la tabla de filtros Establecer políticas predeterminadas (seguras) Usar “información” de nivel de registro para syslogd Configurar reglas de firewall: —————————————————————————— - Aceptar paquetes desde el dispositivo de loopback local Habilitar la configuración del tamaño máximo de paquete a través de MSS Habilitar la manipulación de TOS Registro de escaneos ocultos (sondas nmap, etc.) habilitado Registro de paquetes con indicadores TCP incorrectos habilitado Registro de paquetes INVÁLIDOS deshabilitado Registro de paquetes fragmentados habilitado Registro de acceso desde direcciones reservadas habilitadas Configuración de reglas anti-spoof Lectura de reglas IPTABLES personalizadas desde /etc/arno-iptables-firewall/custom-rules Carga de complementos (de usuario) Configuración de la política INPUT para la red externa (INET): Habilitación del soporte para un DHCP IP asignada en interfaz(es) externa(s): eth0 Registro de hosts explícitamente bloqueados habilitado Registro de conexiones de salida locales denegadas habilitado Los paquetes NO serán verificados para direcciones de origen privadas Permitir que todo el mundo envíe solicitudes ICMP (ping) Registro de solicitudes ICMP descartadas (ping) habilitado Registro de otros paquetes ICMP descartados habilitado Registro de posibles escaneos ocultos habilitado Registro de (otros) intentos de conexión a puertos TCP PRIVILEGED habilitado Registro de (otros) intentos de conexión a puertos UDP PRIVILEGED habilitado Registro de (otros) intentos de conexión a Puertos TCP SIN PRIVILEGIOS habilitados Registro de (otros) intentos de conexión a puertos UDP SIN PRIVILEGIOS habilitado Registro de otros protocolos IP (no TCP/UDP/ICMP) intentos de conexión habilitados Registro de inundación ICMP habilitado Aplicación de la política INET a la interfaz externa (INET): eth0 (sin una subred externa especificada) Configuración de la política INPUT para las interfaces internas (LAN): eth1 Permitir solicitudes ICMP (ping) Permitir todos (otros) protocolos Configuración de la política FORWARD para las interfaces internas (LAN): eth1 Registro de Conexiones LAN->INET FORWARD denegadas habilitadas Configuración de la política LAN->INET: Permitir solicitudes ICMP (ping) Permitir todos (otros) protocolos Habilitar enmascaramiento (NAT) a través de interfaces externas: eth0 Agregar host(s) (internos) : 192. 168.2.0/24 La seguridad se IMPLICA para las interfaces externas en la cadena FORWARD 16 de enero a las 23:53:12 Se aplicaron todas las reglas de firewall.

Nota 1. En la mayoría de los casos, el inicio exitoso del firewall ocurre después de la primera comunicación con el configurador. Si algo no funciona, se recomienda repetir la configuración ejecutando nuevamente el configurador con derechos de superusuario:

# dpkg-reconfigure arno-iptables-firewall

Esto eliminará errores aleatorios que podrían surgir al responder preguntas del configurador durante su primera experiencia de comunicación con él. Si esto no ayuda, puede intentar editar manualmente el archivo de configuración del programa. cortafuegos-arno-iptables, a saber: /etc/arno-iptables-firewall/firewall.conf. Puede resultar útil visitar el sitio de inicio del creador de este programa en: http://rocky.eld.leidenuniv.nl/. Contiene una guía muy informativa para trabajar con el programa, preguntas frecuentes interesantes y, además, hay información sobre nuevas versiones del programa.

Nota 2. No debemos olvidar que ninguno Un firewall no puede ofrecer una garantía del 100% de la seguridad del funcionamiento de su computadora en Internet. Sin embargo, no se puede descuidar la protección mediante firewall. Debemos hacer todo lo que esté a nuestro alcance para luego confiar en la misericordia de Dios. “Si el Señor no preserva la ciudad, en vano vela el centinela”.(Sal. 126:1).

Fuente del artículo

Escribí una publicación de blog sobre las reglas básicas de Iptables para un usuario de producción hace mucho tiempo, y probablemente deberías leerla y el artículo relacionado sobre Stateful Firewall.

Pero antes del kernel 2.6.39 (que lo incluye y puede usarlo para incluir IP en la lista blanca si tiene más de 10 en la lista blanca (donde 10 es arbitrario)).

Configurar iptables para tontos

El primer estado del identificador que sabemos que queremos aceptar o eliminar, y las interfaces.

Si solo desea permitir solo IP, no hay estado

Lo más probable es que encuentres problemas relacionados con esto y te sugiero que utilices esta condición para hacerte la vida más fácil. Por ejemplo, no se resuelve y definitivamente causará problemas para ciertas aplicaciones.

Varias veces me he encontrado con el hecho de que incluso las personas generalmente inteligentes cometen errores completamente imperdonables. Por ejemplo, abren el puerto en el que se ejecuta la base de datos a todo Internet. Esto les sucede a menudo a los principiantes en DevOps que han estado escribiendo código toda su vida y ahora sus responsabilidades también incluyen la configuración de servidores. Hay buenos tutoriales en Internet sobre la configuración básica del firewall en Linux y otros *nix, pero a menudo son hojas en muchas pantallas. Entonces, espero que este tutorial más conciso sea útil para alguien.

¡Importante! Es muy fácil bloquear por error una máquina hasta tal punto que ya no se pueda acceder a ella. Esto es especialmente cierto en el caso del alojamiento en la nube. Por ejemplo, si en AWS cierra todos los puertos del 1024 al 65536, por alguna razón la máquina se cierra después de reiniciar todo en general puertos. Si estás alojado en las nubes, es mejor configurar un firewall a través de la interfaz web proporcionada por el hosting.

Una pequeña nota sobre terminología. El firewall integrado en el kernel de Linux se llama Netfilter e iptables es una utilidad para administrar este firewall. Mucha gente cree erróneamente que el firewall se llama iptables. Esto está mal. Al decir algo como "filtro paquetes usando iptables", les estás mostrando a los demás tu ignorancia.

En general, qué tipo de problemas se pueden resolver con Netfilter:

  • Permitir/denegar el tráfico entrante a ciertos puertos usando ciertos protocolos (IPv4/IPv6, TCP/UDP) desde direcciones específicas (IP, MAC) o subredes;
  • Todo es igual para el tráfico saliente;
  • Puede, por ejemplo, ignorar por completo todos los paquetes ICMP;
  • Configurando NAT, consulte el artículo sobre un enrutador basado en Raspberry Pi;
  • He oído que los verdaderos gurús pueden configurar protección DDoS y de fuerza bruta, limitar el acceso a la red a aplicaciones, usuarios o grupos específicos y hacer otras locuras;

Observo que la utilidad iptables personalmente me pareció extremadamente inconveniente al principio en comparación con ipfw en FreeBSD. Afortunadamente, después de trabajar con él durante algún tiempo, todos estos indicadores como -A, -D, -j y otros se vuelven familiares, así que tenga paciencia. Veamos los comandos básicos.

Mostrar todas las reglas:

iptables-L-n

Puede notar que Netfilter tiene algunas "cadenas": al menos ENTRADA, SALIDA y ADELANTE. Personalmente también tengo una cadena DOCKER en mi máquina. Por primera vez, puedes pensar en los dos primeros como todo el tráfico entrante y saliente, respectivamente, y olvidarte temporalmente del resto. Es muy probable que nunca los necesite en absoluto.

Eliminar todas las reglas:

iptables-F

Cambie la política (comportamiento predeterminado) de la cadena:

iptables -P CAÍDA DE ENTRADA
iptables -P ENTRADA ACEPTAR

Denegar el acceso desde el host/subred:

iptables -A ENTRADA -s 123.45.67.89 -j SOLTAR
iptables -A ENTRADA -s 123.45.0.0/ 16 -j SOLTAR

También puedes utilizar nombres de dominio:

iptables -A ENTRADA -s ejemplo.ru -j DROP

Prohibición de conexiones salientes:

iptables -A SALIDA -d 123.45.67.89 -j SOLTAR

Puedes usar negaciones en las reglas:

iptables -UNA ENTRADA!

Eliminando una regla por su número en la cadena:

-s 123.45.67.89 -j SOLTAR

Eliminar una regla según lo que hace:

iptables -D ENTRADA 1

iptables -D ENTRADA -s 123.45.67.89 -j SOLTAR La opción -p especifica el protocolo. Puede utilizar todo, icmp, tcp, udp o el número de protocolo de /etc/protocols. Bandera - -sport indica el puerto desde el que se envió el paquete, y -

-dport especifica el puerto de destino:
iptables -A ENTRADA -p tcp --sport 80 -j ACEPTAR

Insertando una regla al principio de una cadena:

iptables -A ENTRADA -p tcp --dport 80 -j ACEPTAR

O puede especificar una posición específica:

iptables -ENTRÉ...

iptables -ENTRÉ 3...

Restaurar reglas:

restauración-iptables< / etc/ iptables.rules

iptables-save > /etc/iptables.rules

Ahora veamos algunos ejemplos prácticos. Así es, por ejemplo, cómo se ve la emulación de Netsplit en una prueba que comprueba el comportamiento de una aplicación que utiliza Akka Cluster: ejecutar (nodo1, s)
"iptables -A ENTRADA -s $nodo2 -j DROP" ejecutar (nodo1, s)
"iptables -A ENTRADA -s $nodo2 -j DROP" "iptables -A ENTRADA -s $nodo3 -j DROP")
"iptables -A ENTRADA -s $nodo2 -j DROP" "iptables -A SALIDA -d $nodo2 -j DROP")

La restauración se produce exactamente de la misma manera, solo que el indicador -A se reemplaza por el indicador -D.

Otro ejemplo. Debe averiguar qué puertos están escuchando en la máquina y cerrar los innecesarios. Entramos en el coche y decimos:

"iptables -A SALIDA -d $nodo3 -j DROP"

Salida de ejemplo:

Conexiones activas a Internet (solo servidores)
netstat-tuwpln
Proto Recv-Q Send-Q Dirección local Dirección extranjera Estado PID/nombre de programa
tcp 0 0 0.0.0.0:4369 0.0.0.0:* ESCUCHAR 1789/epmd
tcp 0 0 0.0.0.0:22 0.0.0.0:* ESCUCHAR 797/sshd
tcp 0 0 127.0.0.1:5432 0.0.0.0:* ESCUCHAR 990/postgres

Nginx y SSHd miran Internet, esto es normal. PostgreSQL sólo escucha la interfaz local, por lo que tampoco hay problemas con eso. Pero epmd sobresale (puedes comprobarlo con telnet desde otra máquina), y esto no sirve. Solo puede cerrar el puerto 4369. Cómo hacerlo se mostró arriba. O puede ir aún más lejos y denegar todas las conexiones desde el exterior al puerto 81 y anteriores.

Principio de configuración

La sintaxis general para usar iptables es:

iptables-t<таблица> <команда> <цепочка>[número]<условие> <действие>

<таблица>

Las reglas de Netfilter se distribuyen en 4 tablas, cada una de las cuales tiene su propio propósito (más detalles a continuación). Se especifica con el modificador -t, pero si no se especifica este parámetro, la acción se realizará para la tabla predeterminada: filtro.

<команда>

Los comandos indican qué tipo de acción realizamos en netfilter, por ejemplo, crear o eliminar una regla.

<цепочка>

Cada tabla tiene cadenas, para cada una de las cuales se crean las reglas. Por ejemplo, para la tabla de filtros anterior hay tres cadenas predefinidas: ENTRADA (paquetes entrantes), SALIDA (paquetes salientes) y ADELANTE (paquetes en tránsito).

[número]

Algunos comandos requieren especificar un número de regla, por ejemplo, para eliminar o editar.

<условие>

Una condición describe los criterios para elaborar una regla particular.

<действие>

Bueno, en realidad, ¿qué hacemos con el paquete si cumple con los criterios de la condición?

* para ser justos, vale la pena señalar que la clave de acción no tiene por qué estar al final. Lo que pasa es que este formato se encuentra con mayor frecuencia en las instrucciones y hace que las reglas sean más fáciles de leer.

Claves de iptables y ejemplos de su uso.

Para trabajar con tablas (iptables -t)

Permítanme recordarles que todas las reglas en netfilter se distribuyen en tablas. Para trabajar con una tabla específica, debe usar el modificador -t.

equipos

Las siguientes claves determinan las acciones que realiza la utilidad iptables.

Llave Descripción y ejemplos
-A Agregar una regla al final de la lista:
iptables -A ENTRADA -s 192.168.0.15 -j SOLTAR
negar mensajes entrantes desde 192.168.0.15.
-D Eliminar una regla:
iptables -D ENTRADA 10
eliminar regla en la cadena INPUT con el número 10.
-I Insertar una regla en una parte específica de la lista:
iptables -I ENTRADA 5 -s 192.168.0.15 -j SOLTAR
insertar la regla quinta en la lista.
-R Reemplazo de la regla.
iptables -R SALIDA 5 -s 192.168.0.15 -j ACEPTAR
reemplace nuestra quinta regla de prohibir a permisiva.
-F Restablecer reglas en una cadena.
iptables -F ENTRADA
-Z Restablecer estadísticas.
iptables -Z ENTRADA
-NORTE Creando una cadena.
iptables -N CADENANUEVO
-INCÓGNITA Eliminando una cadena.
iptables -X CADENA NUEVA
-PAG Defina la regla predeterminada.
iptables -P CAÍDA DE ENTRADA
-MI Cambiar el nombre de una cadena.
iptables -E CADENANEW CHAINOLD

Términos

Estas claves definen las condiciones de la regla.

Llave Descripción y ejemplos
-pag Protocolo de red. Las opciones válidas son TCP, UDP, ICMP o TODAS.
iptables -A ENTRADA -p tcp -j ACEPTAR
Permitir todas las conexiones TCP entrantes.
-s Dirección de origen: nombre de host, dirección IP o subred en notación CIDR.
iptables -A ENTRADA -s 192.168.0.50 -j SOLTAR
negar mensajes entrantes del nodo 192.168.0.50
-d Dirección de destino. El principio de uso es similar al de la clave -s anterior.
iptables -A SALIDA -d 192.168.0.50 -j SOLTAR
negar salida al nodo 192.168.0.50
-i El adaptador de red por el que llegan los paquetes (ENTRADA).
iptables -A ENTRADA -i eth2 -j SOLTAR
deshabilite el tráfico entrante para la interfaz Ethernet eth2.
-o El adaptador de red desde el que se envían los paquetes (SALIDA).
iptables -A SALIDA -o eth3 -j ACEPTAR
Permitir mensajes salientes desde la interfaz Ethernet eth3.
--dport Puerto de destino.
iptables -A ENTRADA -p tcp --dport 80 -j ACEPTAR
Permitir llamadas entrantes en el puerto 80.
--deporte Puerto de origen.
iptables -A ENTRADA -p tcp --sport 1023 -j SOLTAR
prohibir mensajes entrantes desde el puerto 1023.

Las claves enumeradas también admiten la construcción mediante el signo. ! . Invierte la condición, por ejemplo,
iptables -A ENTRADA -s! 192.168.0.50 -j CAÍDA
negará la conexión a todos los hosts excepto 192.168.0.50.

Comportamiento

Acciones que se realizarán en un paquete que coincida con los criterios de la condición. Cada tabla tiene su propio conjunto de acciones permitidas. Especificado mediante una clave -j.

Mesa Acción Descripción
filtrar ACEPTAR Permite el paquete.
GOTA Niega el paquete.
RECHAZAR Prohíbe enviar un mensaje a la fuente.
nat MASCARADA Para paquetes salientes, reemplaza la dirección IP de origen con la dirección de la interfaz desde la que sale el paquete.
SNAT Similar a MASQUERADE, pero indica una interfaz de red específica cuya dirección se utilizará para la suplantación de identidad.
ADNT Sustitución de dirección para paquetes entrantes.
REDIRIGIR Redirige la solicitud a otro puerto en el mismo sistema.
mutilar TOS Modificación del campo TOS (priorización de tráfico).
DSCP Cambio de DSCP (también priorización de tráfico).
TTL Cambie TTL (vida útil del paquete).
HL Similar a TTL, pero para IPv6.
MARCA Marcado de paquetes. Se utiliza para su posterior filtración o modelado.
CONNMARK Marcado de conexión.
TCPMSS Cambiando el valor de MTU.

Ejemplos de comandos de iptables de uso común

Comandos generales

Ver reglas con sus números:

iptables -L --números-de-línea

Para cada tabla necesitas mirar las reglas por separado:

iptables -t nat -L --números-de-línea

Eliminar todas las reglas:

Establecer reglas predeterminadas:

iptables -P CAÍDA DE ENTRADA

iptables -P CAÍDA DE SALIDA

* en estos ejemplos, de forma predeterminada, la regla de denegación (DROP) funcionará para todos los paquetes entrantes (ENTRADA) y salientes (SALIDA).

Permitir todo

Método 1: agregando una regla:

iptables -I ENTRADA 1 -j ACEPTAR

iptables -I SALIDA 1 -j ACEPTAR

iptables -I ADELANTE 1 -j ACEPTAR

* estos tres comandos crearán reglas que permitirán todos los paquetes entrantes, salientes y en tránsito.

Método 2. Reglas de limpieza:

* aquí primero eliminamos todas las reglas (-F), luego configuramos la política predeterminada para permitir entradas, salidas y tránsito (-S).

Método 3. Deshabilitar el servicio (es conveniente deshabilitar temporalmente el firewall para diagnosticar problemas):

parada de iptables del servicio

Trabajar con reglas

Agregue una regla al final de la lista:

iptables -A ENTRADA -p tcp --dport 25 -j ACEPTAR

iptables -A ENTRADA -p tcp -s! 192.168.0.25 --dport 993 -i eth0 -j ACEPTAR

Agregar rango de puertos:

iptables -A ENTRADA -p tcp --dport 3000:4000 -j ACEPTAR

*en este caso, de 3000 a 4000.

Insertar regla:

iptables -I ADELANTE 15 -p udp -d 8.8.8.8 --dport 53 -i eth1 -j ACEPTAR

Bloquee una dirección IP específica para la conexión en el puerto 25:

iptables -I ENTRADA 1 -s 1.1.1.1 -p tcp --dport 25 -j DROP

Reenvío de puertos

Hay dos métodos de configuración.

1. Reglas de PRERRUTAMIENTO + POSTRRUTAMIENTO:

iptables -t nat -A PREROUTING -p tcp -m tcp -d 19.8.232.80 --dport 22 -j DNAT --to-destino 192.168.1.15:2222

iptables -t nat -A POSTROUTING -p tcp -m tcp -s 192.168.1.15 --sport 2222 -j SNAT --to-source 19.8.232.80:22

* Dónde 19.8.232.80 — la dirección en la que escuchamos las solicitudes de conexión; 22 — puerto para reenvío; 192.168.1.15 — dirección IP interna a la que transferimos todas las solicitudes; 2222 — puerto interno.

2. Reglas de PRERRUTAMIENTO + ADELANTE:

iptables -t nat -A PREROUTING -p tcp -i eth1 --dport 22 -j DNAT --to-destination 192.168.1.15:2222

iptables -A FORWARD -p tcp -d 192.168.1.15 --dport 22 -m state --state NUEVO,ESTABLECIDO,RELACIONADO -j ACEPTAR




Arriba