¿Debería limitar los paquetes con iptables?

8

Estoy usando iptables en Ubuntu Server. Es un servidor web en un VPS.
Me gustaría saber si debo limitar los paquetes de velocidad. Si es así, ¿qué debo limitar? ¿Y debo hacerlo globalmente o por dirección IP?

Referencia
vi gente sugiriendo esto:

# Limit packet traffic on a TCP or UDP port:
iptables -A INPUT -p $proto --destination-port $port --syn -m state --state NEW -m limit --limit $lim/s --limit-burst $lb -j ACCEPT

# Limit established/related packet traffic:
iptables -A INPUT -m state --state RELATED,ESTABLISHED -m limit --limit $lim/s --limit-burst $lb -j ACCEPT

Lo anterior, un límite de tasa global no parece muy útil, al menos para los casos que puedo imaginar. ¿Hay algún caso en el que deba limitar la tasa globalmente?
Creo que un límite de velocidad por IP suele ser mejor:

# Add the IP to the list:
iptables -A INPUT -p $proto --destination-port $port --syn -m state --state NEW -m recent --set --name RATELIMITED
# Drop if exceeded limit:
iptables -A INPUT -p $proto --destination-port $port --syn -m state --state NEW -m recent --update --seconds $sec --hitcount $hc --rttl --name RATELIMITED -j DROP
# Accept if inside limit:
iptables -A INPUT -p $proto --destination-port $port --syn -m state --state NEW -j ACCEPT

Pregunta adicional: las IP remotas pueden ser falsificadas. ¿Cómo limitarlos adecuadamente?
Se agregó otra pregunta para esto:
/server/340258/how-to-rate-limit-spoofed-ips-with-iptables

El objetivo
que estoy tratando de mitigar el riesgo de algunos ataques D / DoS y abuso general.

Relacionado
¿Cómo puedo calificar las conexiones de límite SSH con iptables?

PD : Acabo de abrir una pregunta relacionada solo para ICMP e incluye la limitación de velocidad para este protocolo: iptables | Tipos de ICMP: ¿cuáles son (potencialmente) dañinos?

ML--
fuente

Respuestas:

6

Un límite de velocidad no es una prevención, sino más bien una invitación a DoS, especialmente en el sabor presentado anteriormente donde los paquetes se descartarán si se ha excedido una cierta velocidad de paquetes no autenticados sin información de estado. Dado que todo el mundo puede falsificar paquetes (incluidas las direcciones IP de origen) en este estado de conexión sin mayor esfuerzo, surgirá un nuevo vector de ataque DoS que aprovecha su facilidad de límite de velocidad.

Un límite de tasa generalmente solo tendrá sentido si tiene

  1. ya sea un límite predecible de conexión dura o suave en su configuración
  2. establezca el límite de velocidad para el tráfico general por debajo de este límite para poder establecer conexiones para tráfico prioritario o administrativo independientemente de la carga

Si bien 1. a menudo es lo suficientemente difícil de determinar como para molestarse, 2. obviamente solo funcionará si puede diferenciar de manera confiable el tráfico "prioritario o administrativo" del resto al configurar la conexión, por ejemplo, si viene a través de una interfaz de red diferente.

En otros casos, preferiría reducir la resistencia de su sistema en lugar de agregarle.

el wabbit
fuente
Hola syneticon-dj. Entiendo y acepto que un firewall mal configurado es otra herramienta para un ataque DoS. ¡Gracias por el aviso!
ML--
La limitación de la velocidad por ip o por puerto también parece tener sentido cuando se defiende del tráfico legítimo que es demasiado masivo para el servidor pero cuyo creador no es probable que explote el problema que usted menciona, digamos, el comportamiento abusivo del Bingbot o Bots de Facebook.
Ján Lalinský
3

El problema con el límite -m es la limitación de todos los paquetes TCP, independientemente de las direcciones IP de origen. Entonces, si tiene una limitación baja para paquetes syn como

-A INPUT -p tcp  --syn -m limit --limit 30/s --limit-burst 30 -j ACCEPT
-A INPUT -p tcp --syn -j DROP

solo un cliente con la línea de comando hping puede eliminar su servidor enviando tantos paquetes tcp con el indicador SYN porque la regla de límite coincidirá y eliminará muchos paquetes, independientemente de las direcciones IP de origen. límite no hace diferencia entre buen tráfico y mal tráfico. También eliminará el buen tráfico entrante.

hping podría ser algo como:

hping thetargetedhostip -p 80 -S -c 1000 -i u20000

Es mejor usar hashlimit para limitar las conexiones TCP entrantes por dirección IP . La siguiente regla coincidirá solo si se recibirán 30 paquetes por segundo, reduciendo el número de paquetes autorizados por IP a 15 paquetes por segundo.

-A INPUT -p tcp --syn -m hashlimit --hashlimit 15/s --hashlimit-burst 30 --hashlimit-mode srcip --hashlimit-srcmask 32 --hashlimit-name synattack -j ACCEPT 
-A INPUT -p tcp --syn -j DROP

De hecho, estoy CONVENCIDO de que muchos servidores que se desactivan hoy no se eliminan por falta de recursos durante un ataque, sino porque el módulo de límite elimina todo el tráfico entrante.

Nicolas Guérinet
fuente
1

Normalmente limito las reglas de limitación de velocidad a los servidores que espero tener:

  • bajas cantidades de tráfico esperado
  • servicios de autenticación

Por ejemplo, la página de inicio de sesión de un panel de control de alojamiento, POP3, IMAP, SSH, etc. Por lo general, dejo los servicios HTTP abiertos y solo bloqueo si hay un problema.

No desea dejar caer buen tráfico web. Un enlace en slashdot podría enviarle toneladas de tráfico y, con las reglas globales, es posible que no se dé cuenta de un problema.

Con respecto a las IP falsificadas, no se pueden bloquear con este método y, por lo general, no son una preocupación, ya que estas reglas se centran principalmente en limitar las conexiones TCP establecidas. Con una IP falsa, la conexión TCP nunca se puede establecer.

jeffatrackaid
fuente
Hola jeffatrackaid, gracias por tu respuesta! También estoy inclinado a limitar la tasa (globalmente) de este tipo de servicios (SSH, etc.). Con respecto al tráfico HTTP, es por eso que no tengo la intención de aplicar un límite global. En esta pregunta espero ver si hay casos en los que un límite por IP puede ser interesante. Con respecto a las IP falsificadas (abrí una pregunta separada sobre eso) aunque no se pueden establecer conexiones, existe la posibilidad de un DoS mediante el uso de una inundación SYN. Sigo interesado en escuchar cómo se podría mitigar esto.
ML--