Ограничить количество входящих пакетов в секунду для UDP-порта INPUT [только на IP, а не глобально] [Ubuntu IPTables]
Я искал и не могу найти правило для ограничения количества входящих пакетов для входного UDP-порта в секунду и для каждого IP-адреса.
Мне нужно это для всех IP-адресов, которые подключаются к моему сокету, а не для конкретного.
Я использую iptables на Ubuntu 14.0.4 LTS amd64.
Я знаком с тем, как работает UDP. В моем сценарии кто-то может создать множество UDP-сокетов, используя разные порты.
Мне нужен только один сокет с одного IP, чтобы подключиться к моему порту UDP.
Это возможно с iptables? Я знаю Netfilter и C++, могу ли я сделать это с этим?
1 ответ
Вот что вы можете сделать:
iptables -A INPUT -p udp -s 111.111.111.111 --dport 123 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
У вас должно быть ограничение iptables limit. Приведенный пример ограничивает максимум 25 соединений в минуту. limit-burst 100
указывает, что предел / минута будет применен только после того, как общее количество соединений достигнет уровня предельного пакета.
Из руководства:
-s, --source address[/mask][,...]
Source specification. Address can be either a network name, a hostname, a network IP address (with /mask), or a plain IP
address. Hostnames will be resolved once only, before the rule is submitted to the kernel. Please note that specifying any
name to be resolved with a remote query such as DNS is a really bad idea. The mask can be either an ipv4 network mask (for
iptables) or a plain number, specifying the number of 1's at the left side of the network mask. Thus, an iptables mask of 24
is equivalent to 255.255.255.0. A "!" argument before the address specification inverts the sense of the address. The flag
--src is an alias for this option. Multiple addresses can be specified, but this will expand to multiple rules (when adding
with -A), or will cause multiple rules to be deleted (with -D).