Скажем, кто-то хочет иметь список заблокированных IP-адресов.
Я видел следующий пример сценария:
BLOCKDB="/path/to/ip.blocked.file"
# omit comments lines
IPS=$(grep -Ev "^#" $BLOCKDB)
for i in $IPS
do
iptables -A INPUT -s $i -j DROP
iptables -A OUTPUT -d $i -j DROP
done
Это несколько тысяч строк, которые превращаются в несколько тысяч записей iptables, в здравом уме?
Каков верхний предел, за пределами которого, Эффективность системы сильно пострадает?
Я думаю, что нашел решение с помощью этой статьи, и IPSet, кажется, является ответом
В итоге:
Если набор IP-адресов содержит тысячи элементов, производительность iptables снижается (на самом деле, производительность netfilter, так как iptables является всего лишь инструментом для управления брандмауэром). Ваша загрузка процессора тоже может увеличиться. К счастью, есть идеальное решение - ipsets
IPSet является идеальным инструментом, если вы хотите:
Установка 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