Configurar un firewall usando iptables en cinco minutos. Los conceptos clave de iptables son

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!

-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. 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

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

Insertando una regla al principio de una cadena:

iptables -ENTRÉ...

O puede especificar una posición específica:

iptables -ENTRÉ 3...

iptables-save > /etc/iptables.rules

Restaurar reglas:< / etc/ iptables.rules

restauración-iptables

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")

"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:

netstat-tuwpln

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

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.

acero, visón, ternera, papel 28 de septiembre de 2010 a las 19:47

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

¿De qué hablaremos?

Todo es muy simple, una vez más explicando en el foro a los recién llegados al mundo Linux que sí, según tengo entendido, en Internet no se puede encontrar un artículo completo que explique no solo la configuración de iptables, sino también algunos conceptos básicos de la red.
Por eso les presento una breve 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). Actualmente estamos interesados ​​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 hay muchas más computadoras de las que permite IPv4, o puedes decir que un amigo en casa tiene la misma dirección que tú. Y aquí es donde hablamos de NAT: le permite conectar redes de computadoras entre sí usando una única dirección IP propia, la acción del firewall se llama SNAT (NAT de origen 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 desaparecerá 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). Todas las configuraciones de red en el servidor se pueden realizar así:
$ 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 un servidor Windows en la red 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 (Destino NAT o sustitución de la dirección del destinatario): las tarjetas de red funcionan de tal modo que solo aceptan paquetes dirigidos específicamente a ellas, pero ¿puede ir a nuestro servidor si la IP con la que accede a Internet es una docena de otras máquinas? en tu oficina? ¿Cómo le llegará la petición? 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 simple regla redirigirá todos los paquetes que lleguen a la puerta de enlace desde Internet al puerto TCP 3389 (esto es lo que usa el protocolo RDP) a su servidor interno de Windows. 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 a páginas web desde sus estaciones de trabajo a través de los protocolos http((80) y https(443) serán redirigidas al puerto que escucha squid. Recibirá filtrado de contenido, información sobre quién estaba, dónde y qué hicieron en Internet, el usuario no hace nada sin sospechar que 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 iniciar su amistad con los enrutadores de software basados ​​en Linux.

Etiquetas: iptables, netfilter, NAT

tarea principal cortafuegos(firewall) filtrado y procesamiento de paquetes que pasan a través de una red. Al analizar el paquete de entrada, el firewall toma una decisión sobre el destino de este paquete: descartar el paquete ( GOTA), aceptar paquete ( ACEPTAR) o hacer algo más con él.

EN linux El firewall es un módulo del kernel llamado netfilter y es un conjunto de ganchos para trabajar con la pila de red. La interfaz para modificar las reglas mediante las cuales el firewall procesa paquetes es la utilidad iptables para IPv4 y utilidad tablas ip6 para IPv6.

Todo el trabajo de filtrado del tráfico lo realiza el núcleo del sistema. iptables No es un demonio y no crea nuevos procesos en el sistema. Activar o desactivar iptables solo está enviando una señal al núcleo. Se logra una mayor velocidad de filtrado analizando únicamente los encabezados de los paquetes.

A las características principales. iptables referirse:

  • filtrado de tráfico basado en direcciones de remitente y destinatario de paquetes, números de puerto;
  • redirección de paquetes según ciertos parámetros;
  • organización del acceso a la red (SNAT);
  • reenvío de puertos desde la red global a la red local (DNAT);
  • limitar el número de conexiones;
  • establecer cuotas de tráfico;
  • ejecución de reglas según cronograma;

Veamos el proceso de trabajo principal. iptables(fuente de la imagen rigacci.org).

Un paquete entrante llega primero al dispositivo de red, después de lo cual es interceptado por el controlador y transmitido al kernel. Después de esto, el paquete pasa a través de varias tablas y solo luego se transfiere a la aplicación local o se redirige a otro sistema si es un paquete de tránsito.

EN iptables Se utilizan tres tipos de tablas:

  1. mutilar– utilizado para realizar cambios en el encabezado del paquete;
  2. nat– utilizado para traducir direcciones de red;
  3. filtrar– filtrar el tráfico;

mangle de mesa

Propósito principal de la mesa. mutilar- realizar cambios en el encabezado del paquete. En esta tabla se pueden realizar las siguientes acciones:

  • establecer el bit de tipo de servicio;
  • establecer el campo Tiempo de vida;
  • establecer una etiqueta en un paquete que pueda comprobarse según otras reglas;

Cadenas en la mesa mutilar:

  • ENRUTAMIENTO PREVIO- se utiliza para realizar cambios en los paquetes en la entrada de iptables, antes de tomar una decisión de enrutamiento;
  • POSTRRUTAMIENTO- se utiliza para realizar cambios en los paquetes que salen de iptables, después de tomar una decisión de enrutamiento;
  • APORTE- se utiliza para realizar cambios en los paquetes antes de transferirlos a la aplicación local;
  • PRODUCCIÓN- utilizado para realizar cambios en paquetes provenientes de una aplicación dentro de iptables;
  • ADELANTE- se utiliza para realizar cambios en los paquetes de tránsito;

mesa nat

La tabla se utiliza para la traducción de direcciones de red y cuando se encuentra un paquete que establece una nueva conexión. En esta tabla se pueden realizar las siguientes acciones:

  • DNAT (Traducción de direcciones de red de destino)– traducción de la dirección de destino en el encabezado del paquete;
  • SNAT (Traducción de direcciones de red de origen)– cambiar la dirección de origen del paquete;
  • MASCARADA– utilizado para los mismos fines que SNAT, pero le permite trabajar con direcciones IP dinámicas;

Las cadenas en esta tabla:

  • ENRUTAMIENTO PREVIO– utilizado para realizar cambios en los paquetes que ingresan a iptables;
  • PRODUCCIÓN– se utiliza para convertir direcciones en paquetes antes de seguir encaminándolos;
  • POSTRRUTAMIENTO– utilizado para transformar paquetes antes de enviarlos a la red;

Filtro de tabla

La tabla se utiliza para filtrar paquetes. Hay tres cadenas en esta tabla:

  1. APORTE– cadena para paquetes entrantes;
  2. ADELANTE– cadena para paquetes reenviados (tránsito);
  3. PRODUCCIÓN– cadena para paquetes salientes;

Un paquete que pasa por estas cadenas puede estar sujeto a las siguientes acciones: ACEPTAR, GOTA, RECHAZAR, REGISTRO.

En resumen, el paquete que llega pasa por una cadena de reglas. Cada regla contiene condición Y objetivo(acción). Si el paquete cumple la condición, se transmite al destino; de lo contrario, se aplica la siguiente regla de la cadena al paquete. Si el paquete no cumple ninguna de las condiciones de la cadena, se le aplica la acción predeterminada.

Cadena Mesa
filtrar nat mutilar
APORTE + +
ADELANTE + +
PRODUCCIÓN + + +
ENRUTAMIENTO PREVIO + +
POSTRRUTAMIENTO + +

utilidad iptables

instalando iptables

# en Arch Linux yaourt -S iptables # en Ubuntu sudo apt-get install iptables

Ejecutando iptables

# en Arch Linux sudo systemctl enable iptables sudo systemctl start iptables # en Ubuntu sudo service iptables start

Guardar reglas

# en Arch Linux sudo sh -c "iptables-save > /etc/iptables/iptables.rules" # en Ubuntu sudo sh -c "iptables-save > /etc/iptables.rules"

Restaurar reglas desde un archivo

Restauración de iptables< firewall-config

Cada regla en iptables- esta es una línea separada, formada de acuerdo con ciertas reglas y que contiene criterios y acciones. En general, la regla tiene el siguiente formato:

Comando iptables [-t tabla]

  • t table: especifica el nombre de la tabla para la cual se creará la regla;
  • comando: el comando que define la acción iptables- agregar una regla, eliminar una regla, etc.;
  • coincidencia: especifica los criterios de verificación que determinan si un paquete está sujeto a la regla o no;
  • objetivo/salto: qué acción se debe realizar cuando se cumple el criterio;

Comandos de iptables:

  • -A: al agregar una regla a la cadena, la regla se agregará al final de la cadena;
  • -D - eliminar una regla de la cadena;
  • -R - reemplaza una regla por otra;
  • -I - inserto una nueva regla en la cadena;
  • -L: muestra una lista de reglas en una cadena determinada;
  • -F - restablecer todas las reglas en la cadena dada;
  • -Z: restablece todos los contadores de una cadena determinada;
  • -N - crea una nueva cadena con el nombre de pila;
  • -X - eliminar la cadena;
  • -P: establece la política predeterminada para la cadena;
  • -E - cambiar el nombre de la cadena de usuarios;

Ejemplos de comandos de iptables

Los paquetes se pueden filtrar según los siguientes parámetros:

Fuente del paquete

Para filtrar por fuente, utilice la opción -s. Por ejemplo, rechacemos todos los paquetes entrantes del nodo 192.168.1.95:

Iptables -A ENTRADA -s 192.168.1.95 -j SOLTAR

Puede utilizar un nombre de dominio para especificar la dirección del host:

Iptables -A ENTRADA -s test.host.net -j DROP

También puede especificar una red completa:

Iptables -A ENTRADA -s 192.168.1.0/24 -j SOLTAR

También puedes usar la negación (¡signo!). Por ejemplo, todos los paquetes de hosts distintos de 192.168.1.96 serán destruidos:

Iptables -UNA ENTRADA! -s 192.168.1.96 -j SOLTAR

Permitimos que el tráfico fluya a través de localhost:

Iptables -A ENTRADA 1 -i lo -j ACEPTAR

Registramos intentos de suplantación de identidad con el prefijo "IP_SPOOF A:" y desconectamos la conexión.

Iptables -A ENTRADA -i eth1 -s 10.0.0.0/8 -j LOG --log-prefix "IP_SPOOF A: " iptables -A ENTRADA -i eth1 -s 10.0.0.0/8 -j DROP

Dirección de destino

Para hacer esto necesitas usar la opción -d. Por ejemplo, rechacemos todos los paquetes salientes al host 192.168.1.95:

Iptables -A SALIDA -d 192.168.156.156 -j SOLTAR

Denegar el acceso al recurso

Iptables -A SALIDA -d vk.com -j RECHAZAR

Al igual que con el origen del paquete, puede utilizar direcciones de red y nombres de dominio. La negación también funciona.

Protocolo

La opción -p especifica el protocolo. se puede utilizar todos, icmp, tcp, udp o número de protocolo (de /etc/protocolos).

Permitir solicitudes de eco entrantes

Iptables -A ENTRADA -p icmp --solicitud de eco tipo icmp -j ACEPTAR

Puerto de origen

Permitir todos los paquetes salientes desde el puerto 80:

Iptables -A ENTRADA -p tcp --sport 80 -j ACEPTAR

Bloquee todas las solicitudes entrantes en el puerto 80:

Iptables -A ENTRADA -p tcp --dport 80 -j DROP

Para especificar el puerto, debe especificar el protocolo (tcp o udp). Puedes usar la negación.

Rango de puerto abierto

Iptables -A ENTRADA -m estado --estado NUEVO -m tcp -p tcp --dport 7000:7010 -j ACEPTAR

puerto de destino

Permitir conexiones a través de HTTP

Iptables -A ENTRADA -p tcp --dport 80 -j ACEPTAR iptables -A ENTRADA -p tcp -i eth0 --dport 22 -j ACEPTAR

Permitir recibir datos del servidor DHCP

Iptables -A ENTRADA -p UDP --dport 68 --sport 67 -j ACEPTAR

  • Remoto explotación de errores de software para dejarlo inoperante;
  • Inundación- enviar una gran cantidad de paquetes sin sentido a la dirección de la víctima. El objetivo de una inundación puede ser un canal de comunicación o recursos de una máquina. En el primer caso, un flujo de paquetes ocupa todo el ancho de banda y no permite que la máquina atacada procese solicitudes legítimas. En el segundo, los recursos de la máquina se capturan mediante llamadas repetidas y muy frecuentes a algún servicio que realiza una operación compleja que requiere muchos recursos. Esto podría ser, por ejemplo, una llamada prolongada a uno de los componentes activos (script) del servidor web. El servidor gasta todos los recursos de la máquina procesando las solicitudes del atacante y los usuarios tienen que esperar. Hay diferentes inundaciones: inundación ICMP, inundación SYN, inundación UDP y inundación HTTP.

Recopilar información sobre conexiones de red

Ver conexiones abiertas

Netstat -ntu | awk "(imprimir $5)" | cortar -d: -f1 | ordenar | único -c | ordenar -n

Número de conexiones al puerto 80

Netstat-na | grep ":80\ " | baño -l

Volcado de conexión TCP (a qué dominio se envían las solicitudes con mayor frecuencia)

Tcpdump -npi dominio de puerto eth0

La inundación SYN se puede verificar contando el número de conexiones TCP medio abiertas

Netstat-na | grep ":80 " | grep SYN_RCVD

Protección contra diferentes tipos de inundaciones.

Inundación ICMP. Un método muy primitivo para obstruir el ancho de banda y crear cargas en la pila de la red mediante el envío monótono de solicitudes ICMP ECHO (ping). Se detecta fácilmente analizando el flujo de tráfico en ambas direcciones: durante un ataque de inundación ICMP, son casi idénticos. Un método casi indoloro de protección absoluta se basa en deshabilitar las respuestas a las solicitudes ICMP ECHO:

Sysctl net.ipv4.icmp_echo_ignore_all=1

O usando etiquetas iptabel:

Iptables -A ENTRADA -p icmp -j DROP --icmp-tipo 8

Inundación SYN. Una de las formas más comunes no sólo de obstruir el canal de comunicación, sino también de poner la pila de red del sistema operativo en un estado en el que ya no puede aceptar nuevas solicitudes de conexión. Basado en un intento de inicializar una gran cantidad de conexiones TCP simultáneas enviando un paquete SYN con una dirección de retorno inexistente. Después de varios intentos de enviar un paquete de respuesta ACK a una dirección inalcanzable, la mayoría de los sistemas operativos ponen en cola la conexión no establecida. Y sólo después del enésimo intento se cierra la conexión. Dado que el flujo de paquetes ACK es muy grande, la cola pronto se llena y el núcleo rechaza los intentos de abrir una nueva conexión. Los robots DoS más inteligentes también analizan el sistema antes de lanzar un ataque para enviar solicitudes sólo para abrir puertos vitales. Es fácil identificar un ataque de este tipo: basta con intentar conectarse a uno de los servicios.

iptables es una utilidad de línea de comandos que es una interfaz estándar para administrar el funcionamiento de un firewall (firewall) filtro de red para los kernels de Linux versiones 2.4 y 2.6. Se requieren privilegios para utilizar la utilidad iptables superusuario(raíz). A veces la palabra iptables se refiere al propio firewall netfilter.

1. ¿Qué es un firewall y por qué es necesario?

Cortafuegos- un conjunto de hardware o software que monitorea y filtra los paquetes de red que lo atraviesan en varios niveles del modelo OSI de acuerdo con reglas específicas.


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 llega al dispositivo de red, es interceptado por el controlador apropiado y luego transmitido al kernel. A continuación, el paquete pasa por varias tablas y luego se transfiere a una aplicación local o se reenvía a otra máquina.

Iptables utiliza tres tipos de tablas:

  1. Mutilar- normalmente esta cadena se utiliza para realizar cambios en el encabezado del paquete, por ejemplo para cambiar bits TOS, etc.
  2. nat- esta cadena se utiliza para traducir direcciones de red (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.
  3. 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.

En consecuencia, nos interesa la tercera tabla de filtros. Esta mesa tiene tres cadenas incorporadas:

  1. ENTRADA - para paquetes entrantes.
  2. ADELANTE - para aquellos que pasan de esta máquina a otra.
  3. 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.

Un poco sobre escribir reglas:

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 el número especificado, numerando desde 1; la clave --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(muestra 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 Filtrar 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 los 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 Filtrar ADELANTE Sólo aquellos paquetes que van a otro host caen en la cadena FORWARD. Aquí se debe realizar todo el filtrado del tráfico de tránsito. 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 opciones diferentes para pasar paquetes.

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

2. Desde el servicio local (servidor) de esta computadora hacia el exterior (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 las 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!




Arriba