Настройте Iptables с помощью Ipset

Я был бы очень признателен, если бы кто-нибудь мог помочь с довольно простым правилом ipset, которое я пытаюсь установить. Я действительно не могу понять, почему это не работает. Итак, вот оно:

  1. Я создаю простой файл с IP-адресами, которые хочу заблокировать, и называю его blocklist.

  2. Затем я создаю свой ipset и ссылаюсь на него следующим образом:

     ipset create blocklist nethash
    для i в $ (cat / path / to / blocklist); сделать ipset добавить черный список $ i; сделанный
    -A INPUT -p tcp --match multiport --dport 25,587 -m set --match-set blocklist src -j DROP
    

Когда я проверяю его с помощью

ipset test blocklist (IP address here) and press enter

, он говорит, что IP-адрес находится в списке.

Когда я проверяю его с помощью

iptables -L -n -v

, он говорит, что мое правило iptables существует и действует.

Однако, когда Я подключаюсь с IP-адреса, который находится в черном списке, он не блокирует этот IP-адрес, говоря, что время ожидания соединения истекло, он просто подключается и проходит через ... Я потерялся ... Кто-нибудь может посоветовать, пожалуйста, где есть ошибка в моей настройке? Любые указатели / помощь / предложения и т. Д. Приветствуются! Заранее большое спасибо!

PS Он работает нормально, когда я устанавливаю его без каких-либо опций многопортов, и блокирует только один порт следующим образом:

-A INPUT -p tcp --dport 80 -m set --match-set blocklist src -j DROP

, но когда я делаю то же самое, но на 25-м порте, это не работает:

-A INPUT -p tcp --dport 25 -m set --match-set blocklist src -j DROP

Я не могу понять этого. У меня Postfix работает нормально и прослушивает свой 25-й порт.

PSS Единственное, что мне приходит в голову, это то, что есть предел наборов ipset, который я могу иметь (возможно ли это вообще?), Поэтому мое последнее правило не работает, потому что оно выходит за допустимый предел ... невежественный ...

0
задан 5 April 2017 в 00:02
3 ответа

Возможно, мне придется ответить на свой вопрос, поскольку похоже, что никто в serverfault не знает ответа. Что ж, это действительно просто. Поскольку правила iptable работают последовательно, все, что нужно было - это изменить с -A INPUT на -I INPUT в моем приведенном выше коде. Задача решена.

Он создал измененные (-A) правила в моей входной цепочке и поместил их в конец, что, казалось, противоречило другим правилам, которые были до него. Хитрость заключалась в том, чтобы выполнить вставку (-I), которая создала новое правило и поместила его впереди, что остановило конфликт с другими и начало работать отлично.

Надеюсь, это тоже кому-то поможет.

1
ответ дан 4 December 2019 в 13:34

Как вы, кажется, обнаружили, в том, что вы делали, нет ничего принципиально неправильного - вам просто кажется, что вас укусил приоритет правила iptables. a.k.a. выигрывает первый матч.

В общем, вы, вероятно, захотите, чтобы ваша цепочка INPUT выглядела примерно так:

-A INPUT -m state --state ESTABLISHED -j ACCEPT
-A INPUT -m set --match-set blocklist src -j DROP
<... other rules ....>
-A INPUT -j LOG
-A INPUT -j DROP

Возможно, вы захотите изучить fail2ban, который может помочь автоматизировать пополнение ваших ipset на основе тюрем, которые вы настроить для него (tl; dr: jails ссылка на фильтры, которые запускают регулярное выражение для указанных файлов / событий журнала (например, неудачный вход по SSH, запросы URL-адресов панели администратора и т. д.), извлекают IP-адрес и добавляют / удаляют его из соответствующих IP-адресов ).

0
ответ дан 4 December 2019 в 13:34

Проблема связана с правилом iptables:

-A INPUT -p tcp --match multiport --dport 25,587 -m set --match-set blocklist src -j DROP
                                  ^^^^^^^

параметр для многопортового соответствия - --dports, а не --dport:

-A INPUT -p tcp --match multiport --dports 25,587 -m set --match-set blocklist src -j DROP
                                  ^^^^^^^^
1
ответ дан 4 December 2019 в 13:34

Теги

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