En mi servidor, tengo tres reglas, para simplificar:
iptables -t mangle -N RATE-LIMIT
iptables -t mangle -A RATE-LIMIT -m hashlimit --hashlimit-mode srcip --hashlimit-upto 100/sec --hashlimit-burst 20 --hashlimit-name conn_rate_limit -j RETURN
iptables -t mangle -A RATE-LIMIT -j DROP
iptables -t mangle -A INPUT -p tcp --dport 25565 ! -i lo -j RATE-LIMIT
Esto funciona para mí como debería, pero me preguntaba acerca del siguiente resultado detallado:
Chain INPUT (policy ACCEPT 11M packets, 921M bytes)
pkts bytes target prot opt in out source destination
5699K 264M RATE-LIMIT tcp -- !lo * 0.0.0.0/0 0.0.0.0/0 tcp dpt:25565
...
Chain RATE-LIMIT (1 references)
pkts bytes target prot opt in out source destination
3060K 158M RETURN all -- * * 0.0.0.0/0 0.0.0.0/0 limit: up to 100/sec burst 20 mode srcip
84990 3882K DROP all -- * * 0.0.0.0/0 0.0.0.0/0
La primera regla coincide con cada paquete que está por debajo de 100 pps desde una IP de origen específica; si está por debajo, debe RETURN
regresar INPUT
y continuar allí. La segunda regla simplemente elimina todos los paquetes que superan este límite y básicamente debería actuar como una política predeterminada para esta cadena.
En la INPUT
cadena, hay alrededor de 5.700 mil paquetes que saltaron a mi RATE-LIMIT
cadena. Pero si sumo ambas reglas de mi RATE-LIMIT
cadena, obtengo un número mucho más pequeño. Según tengo entendido, deberían sumar 5.700k.
¿Por qué esos dos números no son iguales?