Сколько инструкций можно вставить в iptables без потери работоспособности системы?

Скажем, кто-то хочет иметь список заблокированных 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, в здравом уме?

Каков верхний предел, за пределами которого, Эффективность системы сильно пострадает?

9
задан 2 March 2014 в 07:41

1 ответ

Я думаю, что нашел решение с помощью этой статьи, и IPSet, кажется, является ответом

В итоге:

Если набор IP-адресов содержит тысячи элементов, производительность iptables снижается (на самом деле, производительность netfilter, так как iptables является всего лишь инструментом для управления брандмауэром). Ваша загрузка процессора тоже может увеличиться. К счастью, есть идеальное решение - ipsets

IPSet является идеальным инструментом, если вы хотите:

  • Хранить несколько IP-адресов или номеров портов и сопоставлять их с помощью iptables одним махом ;
  • Динамическое обновление правил iptables для IP-адресов или портов без снижения производительности;
  • Экспресс-набор сложных IP-адресов и наборов правил на основе портов с одним правилом iptables и выигрыш от скорости наборов IP
  • [ 1117]

    Установка 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
    
0
ответ дан 2 March 2014 в 07:41

Другие вопросы по тегам:

Похожие вопросы: