15.3. Limitar la tasa de ICMP para prevenir dDoS

Recientemente, los ataques distribuidos de negación de servicio se han convertido en una amenaza importante para la Internet. Filtrando y limitando tasas de forma adecuada en nuestra red, podemos evitar tanto ser una víctima como la causa de uno de estos ataques.

Debería filtrar sus redes de manera que no permita abandonarlas a ningún paquete con IP de origen no local. Esto hace que la gente no pueda enviar porquería a la Internet de forma anónima.

La limitación de tasas va como dijimos antes. Para refrescarle la memoria, aquí tiene de nuevo nuestro ASCIIgrama.

[La Internet] ---<E3, T3, da igual>--- [router Linux] --- [Oficina+ISP]
                                      eth1          eth0

Primero configuramos los prerequisitos:

# tc qdisc add dev eth0 root handle 10: cbq bandwidth 10Mbit avpkt 1000
# tc class add dev eth0 parent 10:0 classid 10:1 cbq bandwidth 10Mbit rate \
  10Mbit allot 1514 prio 5 maxburst 20 avpkt 1000

Si tenemos interfaces de 100Mbit o más, hay que ajustar estos números. Ahora tenemos que determinar cúanto tráfico ICMP deseamos permitir. Se pueden hacer mediciones con tcpdump, haciendo que escriba en un fichero durante un rato, y viendo cuánto ICMP pasa por la red. ¡No olvide aumentar la longitud de la captura!

Si hacer mediciones es poco práctico, quizá quiera escoger un 5% del ancho de banda disponible. Configuremos nuestra clase:

# tc class add dev eth0 parent 10:1 classid 10:100 cbq bandwidth 10Mbit rate \
  100Kbit allot 1514 weight 800Kbit prio 5 maxburst 20 avpkt 250 \
  bounded

Esto limita a 100Kbit. Ahora necesitamos un filtro para asignarle el tráfico ICMP a esta clase:

# tc filter add dev eth0 parent 10:0 protocol ip prio 100 u32 match ip
  protocol 1 0xFF flowid 10:100