Я думаю, что нашел решение через эту статью, и IPSet, кажется, ответ
В сумме:
Если набор IP-адресов содержит тысячи элементов, производительность iptables снижается (на самом деле производительность netfilter, поскольку iptables становится просто инструментом для управления брандмауэром). Ваша загрузка процессора тоже может увеличиться. К счастью, есть идеальное решение - ипсец
IPSet является идеальным инструментом, если вы хотите:
- Сохраните несколько IP-адресов или номеров портов и сопоставьте их с помощью iptables одним махом;
- Динамически обновлять правила iptables для IP-адресов или портов без снижения производительности;
- Экспресс-набор сложных IP-адресов и наборов правил на основе портов с одним правилом iptables и выигрыш от скорости наборов IP
Установка ipset проста sudo apt-get install ipset
Затем запустите следующее
ipset -N autoban iphash ––hashsize 4096 ––probes 2 ––resize 50
Добавьте его в свою цепочку iptables. Он может отличаться в зависимости от настроек вашего брандмауэра. Здесь мы используем этиновую цепь.
iptables -I ethin 2 -p tcp -m multiport ––dport 80,443 -m set ––match-set autoban src -j DROP
Теперь вы можете добавить все плохие IP к вашему ipset. Например, у вас есть текстовый файл с именем bots.txt, по одному IP на строку. Таким образом, вы можете добавить их в ipset с помощью простого скрипта bash:
for i in $( cat /tmp/bots.txt ) ; do ipset -A autoban $i ; done
Для проверки запуска:
ipset -L autoban