Sintaxis de iptables.

Hogar iptables - utilidad línea de comando , es interfaz estándar gestionar el funcionamiento del firewall (firewall) filtro de red para núcleos Versiones de Linux 2.4 y 2.6. Se requieren privilegios para utilizar la utilidad iptables superusuario (raíz). A veces la palabra iptables significa la interconexión misma. cortafuegos

filtro de red.

1. ¿Qué es un firewall y por qué es necesario? Cortafuegos - un complejo de hardware o software , que controla y filtra a quienes lo atraviesan. paquetes de red en varios niveles


Modelo OSI de acuerdo con reglas especificadas.

La tarea principal de un firewall es proteger las redes informáticas o nodos individuales del acceso no autorizado. Además, los firewalls a menudo se denominan filtros, ya que su tarea principal es no dejar pasar (filtrar) paquetes que no cumplan con los criterios definidos en la configuración.

2. Cómo funciona iptables Cuando un paquete llega a nuestro firewall, primero va a dispositivo de red , es interceptado por el controlador correspondiente y luego transmitido al kernel. Luego, el paquete pasa a través de varias tablas y luego se transmite aplicación local

, o se transfiere a otra máquina.

  1. Iptables utiliza tres tipos de tablas: Mutilar
  2. - esta cadena se utiliza normalmente para realizar cambios en el encabezado del paquete, por ejemplo para cambiar bits TOS, etc. nat - esta cadena se utiliza para transmitir direcciones de red
  3. (Traducción de direcciones de red de destino). La traducción de la dirección de red de origen se realiza más tarde, en otra cadena. Cualquier tipo de filtrado en esta cadena sólo podrá realizarse en casos excepcionales. Filtrar

- El tráfico se filtra aquí. Recuerde que todos los paquetes entrantes dirigidos a nosotros pasan por esta cadena, independientemente de la interfaz de donde procedan.

  1. En consecuencia, nos interesa la tercera tabla de filtros. Esta mesa tiene tres cadenas incorporadas:
  2. ENTRADA: para paquetes entrantes.
  3. ADELANTE - para aquellos que pasan de esta máquina a otra.

SALIDA - para saliente.

Un paquete que pasa por estas cadenas, según la regla, puede pasarse (ACEPTAR) o descartarse (DROP).

El programa Iptables le permite editar reglas a través de la terminal ingresando comandos.

Cada regla es una cadena que contiene criterios que determinan si un paquete coincide con una regla determinada y la acción que se debe realizar si se cumple el criterio. En general, las reglas están escritas así:

iptables [-t nombre-tabla ] comando [patrón] [ -j acción ]

La opción -t especifica mesa. Si se omite la opción, el valor predeterminado es utilizar la tabla de filtros. Si tiene intención de utilizar otra tabla, deberá indicarlo explícitamente.

A continuación, inmediatamente después del nombre de la tabla, debería haber un comando. Si no hay ningún especificador de tabla, el comando siempre debe ir primero.
Equipo define la acción de iptables, por ejemplo: insertar una regla, o agregar una regla al final de la cadena, o eliminar una regla, etc.

Lista de comandos:

  • -A nombre-cadena regla (agregue una regla al final de la cadena; el modificador --set-counters le permite configurar contadores de paquetes y bytes)
  • -I nombre-cadena número regla (inserte la regla en la cadena antes de la regla con número especificado, numerando desde 1; el interruptor --set-counters le permite configurar contadores de paquetes y bytes)
  • -R nombre-cadena número regla (reemplazar;
    el interruptor --set-counters le permite configurar contadores de paquetes y bytes)
  • -D nombre-cadena número (elimine la regla con el número especificado, numerando desde 1)
  • -D nombre-cadena regla (eliminar regla por coincidencia de texto)
  • -DO nombre-cadena bolsa de plastico (pase del paquete de prueba;
    dirección de salida, dirección de destino, protocolo, interfaz, puertos se especifican mediante las claves correspondientes)
  • -l [nombre-cadena ] (mostrar lista de reglas; claves adicionales:
    • -v(producción información adicional, en particular, contadores)
    • --exacto(mostrar contadores sin redondear a KB, MB, etc.)
    • --numérico(muestre direcciones y números de puerto como números)
    • --números de línea(mostrar números de reglas)
  • -F nombre-cadena (eliminar todas las reglas de la cadena)
  • -Z nombre-cadena (restablecer contadores)
  • -NORTE nombre-cadena (crea una cadena)
  • -INCÓGNITA nombre-cadena (eliminar hilo vacío que no tiene enlaces)
  • -PAG nombre-cadena acción (cambiar acción predeterminada: ACEPTAR,
    SOLTAR, HACER COLA, REGRESAR)
  • -MI nombre-de-cadena-antigua nuevo nombre de cadena (cambiar el nombre de la cadena)

Capítulo muestra establece los criterios de verificación mediante los cuales se determina si el paquete está sujeto a esta regla o no. Aquí puede especificar una variedad de criterios: la dirección IP del origen del paquete o red, la interfaz de red. Dirección IP de destino, puerto, protocolo, etc. Otros parámetros para filtrar se pueden encontrar en la ayuda de la utilidad iptables (man iptables)

Y finalmente acción especifica qué acción se debe realizar si se cumplen los criterios de la regla. Aquí puede forzar al kernel a transferir el paquete a otra cadena de reglas, "descartar" el paquete, emitir un mensaje de error a la fuente, etc.

Lista de algunas acciones:

  • ACEPTAR - omitir el paquete; finaliza el escaneo de la tabla
  • SOLTAR - tirar en silencio; el escaneo finaliza no solo para la cadena actual, sino también para otras tablas
  • RECHAZAR - tirar, notificando al remitente ( --rechazar-con tipo de notificación )

3. El orden de un paquete de red destinado a un proceso/aplicación local:

Para aplicaciones locales

Paso Mesa Cadena Nota
1 Cable (es decir)
2 Aporte
3 mutilar ENRUTAMIENTO PREVIO Normalmente se utiliza para realizar cambios en el encabezado del paquete, como configurar bits TOS, etc.
4 nat ENRUTAMIENTO PREVIO Traducción de direcciones (Traducción de direcciones de red de destino). Aquí el filtrado de paquetes sólo se permite en casos excepcionales.
5 Tomar decisiones de ruta.
6 mutilar APORTE El paquete termina en la cadena INPUT de la tabla mangle. Esto realizará cambios en el encabezado del paquete antes de pasarlo a la aplicación local.
7 filtrar APORTE El tráfico entrante se filtra aquí. Recuerde que todos los paquetes entrantes dirigidos a nosotros pasan por esta cadena, independientemente de la interfaz de donde procedan.
8 Proceso/aplicación local (es decir, programa servidor o programa cliente)

Es importante recordar que esta vez los paquetes pasan por la cadena INPUT, y no por la FORWARD.

El orden de movimiento de los paquetes creados por procesos locales.

De los procesos locales

Paso Mesa Cadena Nota
1 Proceso local (es decir, programa servidor o programa cliente).
2 Tomar decisiones de ruta. Aquí se decide adónde irá el paquete: a qué dirección, a través de qué interfaz de red, etc.
3 mutilar PRODUCCIÓN Aquí es donde se realizan los cambios en el encabezado del paquete. Realizar un filtrado en esta cadena puede tener consecuencias negativas.
4 nat PRODUCCIÓN Esta cadena se utiliza para la traducción de direcciones de red (NAT) en paquetes que se originan en procesos de firewall locales.
5 (Traducción de direcciones de red de destino). La traducción de la dirección de red de origen se realiza más tarde, en otra cadena. Cualquier tipo de filtrado en esta cadena sólo podrá realizarse en casos excepcionales. PRODUCCIÓN El tráfico saliente se filtra aquí.
6 mutilar POSTRRUTAMIENTO La cadena POSTROUTING de la tabla mangle se usa principalmente para reglas que necesitan realizar cambios en el encabezado del paquete antes de que salga del firewall, pero después de que se haya tomado la decisión de enrutamiento. Todos los paquetes, tanto en tránsito como creados por procesos de firewall locales, caen en esta cadena.
7 nat POSTRRUTAMIENTO Aquí es donde se realiza la traducción de la dirección de red de origen. No debes realizar filtrado de paquetes en esta cadena para evitar efectos secundarios no deseados. Sin embargo, aquí también puede detener paquetes aplicando la política DROP predeterminada.
8 Interfaz de red (por ejemplo, eth0)
9 Cable (es decir, Internet)

El orden de movimiento de los paquetes en tránsito.

Paso Mesa Cadena Nota
1 Cable (es decir, Internet)
2 Interfaz de red (por ejemplo, eth0)
3 mutilar ENRUTAMIENTO PREVIO Normalmente, esta cadena se utiliza para realizar cambios en el encabezado del paquete, como cambiar bits TOS, etc.
4 nat ENRUTAMIENTO PREVIO Esta cadena se utiliza para la traducción de direcciones de red de destino. La traducción de la dirección de red de origen se realiza más tarde, en otra cadena. Cualquier tipo de filtrado en esta cadena sólo podrá realizarse en casos excepcionales.
5 Decidir sobre rutas adicionales, es decir en este punto se decide dónde irá el paquete: a una aplicación local o a otro nodo de la red.
6 mutilar ADELANTE Luego, el paquete ingresa a la cadena FORWARD de la tabla mangle, que solo debe usarse en casos excepcionales cuando es necesario realizar algunos cambios en el encabezado del paquete entre dos puntos de decisión de enrutamiento.
7 (Traducción de direcciones de red de destino). La traducción de la dirección de red de origen se realiza más tarde, en otra cadena. Cualquier tipo de filtrado en esta cadena sólo podrá realizarse en casos excepcionales. ADELANTE La cadena FORWARD incluye sólo aquellos paquetes que van a otro host. Todo el filtrado del tráfico de tránsito debe realizarse aquí. No olvide que el tráfico pasa por esta cadena en ambas direcciones; asegúrese de tener esto en cuenta al escribir reglas de filtrado.
8 mutilar POSTRRUTAMIENTO Esta cadena está destinada a realizar cambios en el encabezado del paquete después de que se haya tomado la última decisión de enrutamiento.
9 nat POSTRRUTAMIENTO Esta cadena está destinada principalmente a la traducción de direcciones de red de origen. No lo utilice para filtrar a menos que sea absolutamente necesario. Aquí también se realizan disfraces.
10 Interfaz de red de salida (por ejemplo, eth1).
11 Cable (que sea LAN).

hay tres varias opciones pasando paquetes.

1. Desde fuera al servicio local (servidor) de esta computadora (ENTRADA).

2. De servicio local(servidor) de esta computadora fuera de (SALIDA).

3. Pasando por la puerta de enlace, pasando por esta interfaz de red de esta computadora (ADELANTE).

4. Algunos ejemplos de configuración:

guión de ejemplo:

#establecer variables para designar la interfaz de red externa e interna

LOCAL_IF="eth0"
INET_IF="eth0:g"

#=======================
# Eliminar todas las reglas de la cadena.
#=======================
iptables-F
iptables -X

#=======================
# Establecer la política predeterminada.
#=======================

iptables -P CAÍDA DE ENTRADA

iptables -P CAÍDA DE SALIDA

iptables -P ADELANTE ACEPTAR

#=======================
# Crear reglas para todas las interfaces.
#=======================

# http - abre el puerto 80
iptables -A ENTRADA -i TODO -p tcp -m tcp --dport 80 -j ACEPTAR
iptables -A ENTRADA -i TODO -p icmp -j ACEPTAR

#=======================
# Crear reglas para la interfaz interna.
#=======================

#ssh - abierto 22

iptables -A ENTRADA -p tcp -i $LOCAL_IF -m tcp --dport 22 -j ACEPTAR

Todo lo que queda es ejecutar el script.

Ejemplos de cadenas individuales:

Permitimos todo en interfaces internas (lo, eth0, eth1 - interfaces internas)
iptables -A ENTRADA -i eth1 -j ACEPTAR
iptables -A ENTRADA -i eth0 -j ACEPTAR
iptables -A ENTRADA -i lo -j ACEPTAR

Permitir el acceso a un puerto específico desde Internet
iptables -A ENTRADA -p tcp -m tcp -d external_ip --dport 80 -j ACEPTAR

Abriendo el protocolo
iptables -A ENTRADA -p gre -j ACEPTAR

5. Enlaces a documentación para configurar iptables

http://www.posix.ru/network/iptables/ - artículo de Dmitry Kulakov "Configuración del firewall de Iptables"

http://www.opennet.ru/docs/RUS/iptables/ - artículo de Oscar Anderson traducido por Andrey Kiselev "Guía de IPtables"

http://system-administrators.info/?p=396 - artículo "netfilter e iptables en Linux: principios de funcionamiento, configuración"

http://www.iptables.ru/ - configuración paso a paso de iptables. apoyo técnico


¡Deja tu comentario!

Todo es muy sencillo, una vez más explicando en el foro a los principiantes en mundo linux Sí, según tengo entendido, en Internet no se puede encontrar un artículo elaborado que explique no solo la configuración de iptables, sino también algunos conceptos básicos de la red.
Entonces les presento a su atención. pequeña excursión sobre cómo configurar un firewall en Linux. Profundicemos en la configuración de netfilter/iptables; sin duda, también tocaremos otros temas aplicados, porque nos faltan respuestas completas a nuestras preguntas... Y trataré de presentar todo aquí lo más claramente posible.

¿Cómo se ve?

Consideraremos un esquema típico para oficinas y apartamentos, sí, ¡apartamentos! Pocas personas tienen su propio pequeño servidor en casa debajo de la mesa, pero la mayor parte de Internet en casa se distribuye a través de un enrutador y en su mayor parte también están firmware con Linux.
Este es el diseño típico de una oficina pequeña. Cuando 1 computadora (servidor) está conectada a Internet y el resto está conectado a Internet a través de este servidor.

Vámonos, despacio...

Y entonces, ¿qué tenemos?
  • Servidor con 2 tarjetas de red y Debian Lenny instalado.
  • predeterminado en el firewall Debian Lenny - netfilter/iptables
  • Red local de N computadoras, todas conectadas a través de un conmutador, incluido el servidor.
¿Qué es NAT?
Primero, debemos comprender que configuraremos la NAT (traducción de direcciones de red) más común. Para aquellos que tengan sed, al final también mencionaré un servidor proxy usando Squid como ejemplo. Como ya dije, masticaremos casi todo.
¿Qué es NAT? De hecho, todo es sencillo, todas las computadoras tienen una dirección física (MAC) y de red (IP). nosotros en en este momento Estoy interesado en las direcciones IP. ¡La dirección IP dentro de la misma red debe ser única! Y con el estándar IPv4 actual, sólo 4.294.967.296 (2 32) pueden ser únicos, lo cual no es mucho y casi han desaparecido. pero no te preocupes, IPv6 está a punto de generalizarse y ¡hay toneladas de direcciones allí!
Pero aquí puedes notar que las computadoras son significativamente además números que permite IPv4 o decir que un amigo en casa tiene la misma dirección que tú! Y aquí es donde entra en juego NAT: le permite conectarse redes informáticas utilizando una única dirección IP entre sí, la acción del firewall se denomina SNAT (Source NAT o sustitución de dirección de origen). Aquellos. en el 99% de los casos, toda su oficina accede a Internet con 1 dirección IP, mientras que dentro de la oficina cada uno tiene la suya propia. Puede leer sobre clases de direcciones IP en Internet.

Ahora que sabemos qué es NAT y para qué sirve, podemos proceder directamente a configurar el servidor.

tráfico de tránsito
Todos los comandos se ejecutan como root (superusuario). En Debian, el llamado tráfico de tránsito está deshabilitado de forma predeterminada, es decir. De forma predeterminada, el funcionamiento se proporciona únicamente como una única máquina. Como habrás adivinado, sin tráfico de tránsito no hay NAT. Para habilitarlo, simplemente cambie 1 dígito - $ eco 1 > /proc/sys/net/ipv4/ip_forward, Pero esta configuración se bloqueará después de reiniciar, por lo que es mejor corregir la configuración. $ nano /etc/sysctl.conf a continuación buscamos la línea #net.ipv4.ip_forward=1 y elimine el hash (símbolo de comentario) al comienzo de la línea y verifique que el valor sea 1. Ahora puedes proceder directamente a configurar iptables.
configurando iptables
Hay muchos artículos en Internet sobre cómo escribir reglas en iptables y qué se puede hacer con su ayuda. Este me pareció el más completo y divertido de leer;
Y entonces comencemos. Primero, limpiemos las tablas de reglas innecesarias, en caso de que haya algo innecesario allí...
$ iptables -F
$ iptables -t nat -F
$ iptables -t mangle -F

Se limpió el exceso. Es muy importante entender y recordar que las reglas en iptables se aplican jerárquicamente, es decir. la regla anterior se cumplirá antes. Todas las cadenas tienen la política ACEPTAR de forma predeterminada: lo permiten todo. que no entra dentro de las reglas de esta cadena.
Aceptemos que la interfaz frente a la red local es eth0 y la interfaz a Internet es eth1, la red local tiene direcciones 192.168.0.0/24 y el proveedor nos dio una dirección estática 10.188.106.33 (aunque no "blanca" - también puedes hablar sobre los tipos de direcciones IP que puedes buscar en Internet). Y entonces escribimos:
$ iptables -A ADELANTE -i eth0 -o eth1 -s 192.168.0.0/24 -j ACEPTAR
$ iptables -A ADELANTE -i eth1 -o eth0 -d 192.168.0.0/24 -j ACEPTAR
$ iptables -P CAÍDA HACIA ADELANTE

Por lo tanto, permitimos que los paquetes de tránsito pasen a través del firewall para nuestro rango de direcciones IP y prohibimos todo lo demás.
Ahora NAT en sí:
$ iptables -A POSTROUTING -s 192.168.0.0/24 -o eth1 -j SNAT --to-source 10.188.106.33
Esto es suficiente para que NAT funcione.
Pequeñas cosas...
En los clientes, indicamos una IP del rango seleccionado e indicamos la dirección IP de nuestro servidor como puerta de enlace (generalmente se asigna primero desde la subred; lo dejaré a su discreción). Todo configuración de red En el servidor puedes hacer esto:
$ nano /etc/red/interfaces especifica la configuración de sus interfaces de red.
acceso a las profundidades de la red a través de una puerta de enlace o DNAT
Y luego te diste cuenta de que tienes en línea Servidor Windows al que siempre tuviste fácil acceso a través de RDP, ¡y luego apareció esta molesta puerta de enlace de Debian! Todo es muy simple: solo necesitas agregar una regla DNAT a nuestras iptables.
¿Qué clase de bestia es DNAT? DNAT (NAT de destino o sustitución de dirección de destinatario) - tarjetas de red trabajan en un modo tal que solo aceptan paquetes dirigidos específicamente a ellos, pero ¿puede ir a nuestro servidor si la IP bajo la cual accede a Internet se encuentra en una docena de otras máquinas en su oficina? ¿Cómo le llegará la solicitud? De hecho, todas las solicitudes de este tipo chocan con nuestra puerta de enlace. Y todo lo que tenemos que hacer es establecer las reglas para trabajar con dichos paquetes.
$ iptables -A PREROUTING -i eth1 -p tcp -m tcp --dport 3389 -j DNAT --to-destino 192.168.0.2
Esta sencilla regla redirigirá todos los paquetes que lleguen a la puerta de enlace desde Internet a puerto TCP 3389 (esto es lo que usa protocolo RDP) al tuyo ventanas internas Servidor. Y listo, todo funciona para ti.
¿Y qué pasa con tus calamares favoritos?
Y aunque ahora todo funciona, todo el mundo tiene Internet y todo funciona, algunos todavía necesitan un servidor proxy. No hablaré de montar calamares, mostraré una regla que lo hará “transparente”. En el Squid solo necesitas escribir la palabra mágica transparente en el lugar correcto y comenzará a procesar correctamente las solicitudes que le hayan caído.
escribimos $ iptables -A ENRUTAMIENTO PREVIO -d! 192.168.0.0/24 -i eth0 -p tcp -m multipuerto --dports 80,443 -j REDIRECT --to-ports 3128.
¿Y esto qué nos aporta? Ahora todas las solicitudes de paginas web desde tus estaciones de trabajo a través de los protocolos http((80) y https(443) serán redirigidos al puerto que escucha squid. Recibes filtrado de contenidos, información sobre quién estaba, dónde y qué hizo en Internet, el usuario, sin sospechar nada , funciona como antes...
un poco de seguridad
Deberías proteger al menos mínimamente tu puerta de enlace, así que agreguemos un par de reglas más.
$ iptables -A ENTRADA -i lo -j ACEPTAR
$ iptables -A ENTRADA -i eth0 -s 192.168.0.0/24 -j ACEPTAR
$ iptables -A ENTRADA -i eth1 -m conntrack --ctstate RELACIONADO,ESTABLECIDO -j ACEPTAR
$ iptables -P CAÍDA DE ENTRADA

Por lo tanto, se prohibió cualquier comunicación directa con la puerta de enlace, excepto las conexiones ya establecidas, es decir. aquellos que fueron iniciados por usted y simplemente recibe respuestas a ellos. No tengas miedo, nuestro DNAT simplemente no cumple con estas reglas...
¿por qué tan poco?
El artículo no es de goma y todavía no se puede contar todo... Traje mínimo un conjunto de acciones y conceptos para que puedas empezar a dominar un coloso como una puerta de enlace en Linux. Aquí puede hablar durante mucho, mucho tiempo, discutiendo muchos aspectos y capacidades de Netfilter.

Total

Como vemos, ¡todo es realmente sencillo! Lo principal es comprender el principio de funcionamiento de la red y no tener miedo de configurar y leer manuales extensos.
Espero haber podido reunir suficiente información para comenzar tu amistad con enrutadores de software basado en Linux.

Etiquetas: iptables, netfilter, NAT

IPTables es una utilidad que se utiliza para administrar un firewall en Linux. Es poderoso y herramienta útil y conexiones no deseadas. Todo el proceso está contenido en reglas de iptables, que se pueden editar y ver. Más información detallada presentado en el artículo.

Historia de la creación

A IPTables en Linux utilizó el firewall IPFW, tomado de BSD. Luego, con la versión 2.4 del kernel de Linux, empezó a venir con el firewall Netfilter y la utilidad IPTables para gestionarlo. En la metodología de su trabajo, se conservaron todos los aspectos y se ampliaron ligeramente funcionalmente.

Estructura y diseño de IPTables.

Al ingresar al firewall, el paquete pasa por varias comprobaciones. podría ser suma de control o cualquier otro análisis a nivel de kernel. Entonces es el momento de pasar por la cadena PREROUTING. A continuación, se comprueba según qué se produce la redirección a la siguiente cadena. Si el paquete no tiene una dirección, como, por ejemplo, en TCP, se envía a la cadena FORWARD. En los casos en que hay una dirección específica, sigue la cadena INPUT, y luego a aquellos demonios o servicios a los que está destinada. La respuesta de ellos también debe pasar por varias cadenas, por ejemplo SALIDA. El último eslabón de este proceso es la cadena POSTROUTING.

Ahora un poco sobre cadenas. Cada uno de ellos contiene varias tablas. Sus nombres pueden repetirse, pero esto no afecta en modo alguno la obra, ya que no están interconectados.

Las tablas, a su vez, contienen varias reglas. Básicamente, una regla es una determinada condición que debe cumplir el paquete que se está verificando. Dependiendo del resultado, se realiza una determinada acción en el paquete.

Por lo tanto, al pasar por todas las etapas de la red, el paquete visita secuencialmente todas las cadenas y en cada una se verifica el cumplimiento de la condición de una determinada regla. Si la tabla no la crea el usuario, entonces se realiza la acción predeterminada, básicamente ACEPTAR, que le permite continuar avanzando, o DROP, que detiene el paquete.

Las cadenas preestablecidas vienen en las siguientes categorías:

  • ENRUTAMIENTO PREVIO. Procesamiento inicial de todos los paquetes entrantes.
  • APORTE. Esto incluye aquellos paquetes que se envían directamente a la computadora local.
  • ADELANTE. Se utiliza para "paquetes de tránsito" que siguen la tabla de enrutamiento.
  • PRODUCCIÓN. Se utiliza para paquetes salientes.
  • POSTRRUTAMIENTO. La última etapa en el paso de un paquete saliente a través de todas las cadenas.

Además de las cadenas integradas, los usuarios pueden crear o eliminar las suyas propias.

Ver y administrar reglas de IPTables

Como se mencionó anteriormente, todas las cadenas contienen ciertas condiciones para los paquetes. La utilidad IPTables se utiliza para ver y administrar las reglas de IPTables. Cada regla individual es una línea con un conjunto de condiciones para los paquetes, así como acciones sobre ellos, según el resultado.

El formato del comando se ve así: iptables [-t nombre de la tabla que se está procesando] comando llamado [criterios] [acción realizada].

Todo lo contenido en se puede omitir. Si se trata de un parámetro que especifica una tabla, se utilizará el filtro. Para usar un nombre específico, debe agregar el modificador -t. El comando llamado le permite llamar acción requerida, por ejemplo, agregue una regla IPTables o elimínela. Los “criterios” indican los parámetros mediante los cuales se realizará la selección. Y en "acción" hay una acción que debe realizarse si se cumple la condición.

Comandos para crear y ver reglas de IPTables

  • Agregar (-A). Al utilizar el comando, se especifica la cadena y la tabla a la que desea agregar. regla necesaria. El valor del equipo es que lo hace al final de la lista.
  • Eliminar (-D). Como sugiere el nombre, elimina una regla. Como parámetros, puede especificar tanto el nombre completo como los números asignados a ellos.
  • Cambiar nombre de cadena (-E). Cambia el nombre de la cadena. El comando especifica el nombre antiguo y luego el nuevo.
  • Enrasado (-F). Borrar absolutamente todas las reglas de una determinada tabla.
  • Insertar(-I). Este comando inserta la regla requerida en la ubicación indicada por el número.
  • Lista(-L). Ver reglas de Iptables. Si no se especifica ninguna tabla, se utilizará el filtro predeterminado.
  • Política (-P). Se utiliza la política predeterminada para la cadena especificada.
  • Reemplace (-R). Cambia la regla bajo el número especificado a la requerida.
  • Eliminar cadena (-X). Este comando elimina todas las cadenas creadas. Sólo quedarán los preinstalados.
  • Cero (-Z). Restablece los contadores de datos transmitidos en la cadena especificada.

Un poco sobre los parámetros de selección de paquetes.

Se pueden dividir en tres tipos:

  • Criterios generales. Se pueden especificar para cualquier regla. No requieren la conexión de extensiones y módulos especiales, y tampoco dependen del protocolo que se utilizará.
  • No criterios generales. Están disponibles cuando se utilizan criterios generales.
  • Explícito. Para utilizar este tipo, debe conectarse complementos especiales para filtro de red. Además, debe utilizar el modificador -m en el comando.

Vale la pena hablar un poco sobre los parámetros más frecuentes que se utilizan al analizar paquetes:

  • Protocolo (-p). Indica el protocolo.
  • Fuentes). Este parámetro determina la dirección IP de la fuente de donde proviene el paquete. Se puede especificar de varias maneras. Un host específico, una dirección o una subred completa.
  • Destino (-d). Dirección de destino del paquete. Al igual que el anterior, se puede describir de varias formas.
  • Interfaz interna (-i). Especifica la interfaz entrante del paquete. Se utiliza principalmente para NAT o en sistemas con múltiples interfaces.
  • Interfaz exterior (-o). Interfaz saliente.

Algunos ejemplos

¿Para ver las reglas nat de IPTables? necesitas usar el comando - "iptables -L -t nat". Descubra el estado general del firewall: "iptables -L -n -v". Además, este comando le permite ver las reglas de IPTables disponibles en todo el sistema. Inserte una regla en un lugar determinado de la tabla, por ejemplo, entre la primera y la segunda línea: "iptables -I INPUT 2 -s 202.54.1.2 -j DROP". Luego vea si se ha agregado: "iptables -L INPUT -n --line-numbers".

para bloquear dirección específica, por ejemplo, 12.12.12.12 - “iptables -A INPUT -s 12.12.12.12 -j DROP”.

Ayuda para iptables - “man iptables”. Si necesita información sobre equipo específico- “iptables -j DROP -h”.

En conclusión

Utilice los comandos de IPTables con precaución porque configuración incorrecta(sin saberlo) puede provocar fallos en la red o un fallo total. Por lo tanto, vale la pena estudiar detalladamente los manuales e instrucciones antes de realizar la configuración. En manos hábiles, las IPTables pueden convertirse en un protector confiable de las conexiones de red. Administradores de sistemas Utilice activamente la utilidad para crear conexiones aisladas del acceso no autorizado.

Iptables es el principal responsable del filtrado de paquetes. Configurar Iptables manualmente es bastante no es una tarea fácil. No espere resolver esto "rápidamente". Afortunadamente, existen muchas herramientas que pueden ayudarlo si aún no ha descubierto iptables, pero necesita proteger el sistema con urgencia: fwbuilder, firestarter, guarddog, arno firewall; esencialmente, esta es una GUI para iptables. No hay una respuesta clara cuál es mejor. La elección es tuya. Sin embargo, el artículo de hoy está dedicado específicamente a iptables y se divide en dos partes: teoría y práctica. Los más impacientes pueden realizar inmediatamente la parte práctica, aunque no se recomienda esta modalidad.

¡Atención!¡Todas las acciones con iptables se realizan en nombre de un usuario privilegiado!

Teoría

Formato de entrada de iptables iptables [-t tabla] [comando] [acción] Ejemplo: iptables -t filtro -A ENTRADA ACEPTAR

Comportamiento

  • ACEPTAR - Aceptar el paquete
  • DROP - Soltar un paquete
  • DNAT - Convertir dirección de destino
  • SNAT: cambiar la dirección IP saliente en el encabezado del paquete
  • LOG - Registro de paquetes y eventos
  • MARCA - Establecer una marca en un paquete
  • MASQUERADE: cambia la dirección IP saliente en el encabezado del paquete (a diferencia de SNAT: trabaja con IP dinámicas)
  • QUEUE: pone en cola un paquete para su procesamiento.
  • REDIRECT - Redirigir un paquete/flujo a otro puerto
  • RECHAZAR: descartar el paquete + notificar al sistema remoto al respecto. que su paquete fue rechazado
  • RETORNO: impide que el paquete se mueva a lo largo de la cadena actual y lo devuelve a la cadena de llamada.

equipos

  • -A - Añade una regla a la cadena.
  • -D - Eliminar una regla de la cadena.
  • -R - Reemplazar una regla por otra
  • -I - Insertar una nueva regla
  • -L - Listar reglas existentes
  • -F - Restablecer reglas
  • -Z - Restablecer contadores en una cadena determinada
  • -N - Crea una nueva cadena con el nombre de pila
  • -X - Eliminar cadena
  • -P: establece la política predeterminada para la cadena seleccionada
  • -E - Cambiar nombre de cadena de usuarios

Criterios (generales)

  • -p: especifica el tipo de protocolo
  • -s - dirección IP de origen del paquete
  • -d: dirección IP del destinatario del paquete
  • -j: especifica la acción para la regla
  • -i: interfaz desde la que se recibió el paquete
  • -o: especifica el nombre de la interfaz de salida.
  • -f: propaga la regla a todos los fragmentos del paquete.

Criterios del TCP:

  • –tcp-flags: define la máscara y los indicadores del paquete

Criterios UDP:

  • –sport: puerto desde el que se envió el paquete
  • –dport: puerto al que se dirige el paquete

Más detalles en man iptables

Práctica

Ver la configuración actual

$ sudo 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

Si ve algo como esto, significa que su firewall aún no está configurado y lo permite todo. Arreglemos la situación.

Configuración de la política predeterminada

  • iptables -P INPUT DROP - bloqueo de paquetes entrantes
  • iptables -P ACEPTAR SALIDA - permite paquetes salientes
  • iptables -P FORWARD DROP: procesamiento de paquetes que han llegado al servidor desde otra máquina y están esperando un mayor reenvío. En el ejemplo está bloqueado. En este caso, deberá agregar reglas para máquinas confiables.

Dado que los paquetes de ENTRADA entrantes están bloqueados, escribiremos la siguiente regla:

$ sudo iptables -A ENTRADA -m estado --estado RELACIONADO,ESTABLECIDO -j ACEPTAR

Esto permitirá aceptar paquetes de una conexión previamente establecida y aceptar nuevos paquetes generados por esta conexión.

O indicando el tipo de protocolo:

$ sudo iptables -A ENTRADA -p TCP -m estado --estado ESTABLECIDO, RELACIONADO -j ACEPTAR $ sudo iptables -A ENTRADA -p UDP -m estado --estado ESTABLECIDO, RELACIONADO -j ACEPTAR

Ahora la interfaz local:

$ sudo iptables -A ENTRADA -i lo -j ACEPTAR

  • NUEVO: datos que inician una nueva conexión.
  • ESTABLECIDO: un paquete procedente de una conexión ya establecida.
  • RELACIONADO- nuevo paquete datos, pero generado por una antigua conexión establecida
  • NO VÁLIDO - para que quede claro

$ sudo iptables-save > /etc/iptables.up.rules

Habilite estas reglas:

$sudo iptables-restaurar< /etc/iptables.up.rules

Y mira la diferencia:

$sudo iptables-L

Inicie iptables al iniciar el sistema:

En el directorio /etc/init.d, cree un archivo llamado iptables

$ sudo toque /etc/init.d/iptables

Escribimos en él lo siguiente:

#!/bin/sh /sbin/iptables-restore< /etc/iptables.up.rules

Hacer ejecutable el archivo iptables:

$ sudo chmod +x /etc/init.d/iptables

Agréguelo a ejecución automática

$ sudo update-rc.d -n valores predeterminados de iptables

Inicie iptables cuando esté conectado a la red:

$ sudo echo "#! /sbin/iptables-restore" > /etc/network/if-up.d/iptables.up.rules $ sudo iptables-save >> /etc/network/if-up.d/iptables. up.rules $ sudo chmod +x /etc/network/if-up.d/iptables.up.rules

Nota: en cualquier momento puedes comprobar si tus reglas están cargadas simplemente ingresando iptables-save as root

Para archlinux, guardar las reglas de iptables se realiza con el comando:

$ sudo rc.d guardar iptables

¡Saludos a todos! A continuación publico este artículo práctico sobre red filtro de 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 firewall de Linux en el 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 dichas distribuciones no ejecutan ningún servicio que escuche puertos de red, pero en aras de la 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 en este caso. Si tiene un sistema recién instalado y no ha intentado configurarlo protector contra sobretensiones, entonces 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 servicios similares. 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 también sabiendo que conexiones seguras- estos son compuestos 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 conexiones de red tener 4 estados ( NUEVO,ESTABLECIDORELACIONADOS yINVÁLIDO) y nuevas conexiones salientes con computadora local(con el estado NUEVO) hemos permitido en los dos últimos comandos de iptables, lo cual ya está conexiones establecidas y otros adicionales tienen estados ESTABLECIDO yRELACIONADO en consecuencia, y sabiendo también que para sistema local pasar, podemos permitir que solo aquellos paquetes TCP y UDP que fueron solicitados por las aplicaciones locales lleguen a nuestra computadora:

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 software todavía funciona en el escritorio servicio de red, entonces necesita 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 una externa red de internet . 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 núcleo de linux reenviar paquetes a través de la cadena FORWARD(paquetes no destinados al sistema local) está deshabilitado. para habilitar esta función, debes 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), en la red local hay una serie de clientes hipotéticos que tienen y envían solicitudes a 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 una dirección externa. 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 cierta recomendación general: utilice la regla -j MASQUERADE para interfaces con 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 anfitrión remoto comenzará la transmisión de datos de respuesta, 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. por tal conversión inversa No reglas adicionales no es necesario especificarlo: hará lo mismo operación MASCARADA, que recuerda qué host de la red local envió la solicitud y qué host debe devolver la respuesta recibida.

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

Netfilter:~# iptables -F CHAIN_NAME

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 proporcionar acceso a este servicio, debe modificar tabla de filtros en la cadena de ENTRADA (para poder recibir paquetes de red dirigidos al servicio local) y la tabla de filtros en la cadena de SALIDA (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 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 al contactar cliente remoto hubo una respuesta de servicio correcta de la red local a la IP externa en el puerto 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 de autorización:

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 condición original(leído - eliminado). 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 Hay inconveniente significativo: todo el período de tiempo desde el lanzamiento del subsistema de red hasta el lanzamiento último servicio y más allá del 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 mayoría mejor idea voluntad 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 el volcado creado cuando se inicia la red (en el directorio /etc/network/if-up.d/) y no olvides 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!




Arriba