Создание цепочки IPTABLES, правила которой игнорируются, если пакет не поступает с определенного порта?

Создание цепочки IPTABLES, правила которой игнорируются, если пакет не поступает с определенного порта?

Я хочу подтвердить следующее. Если я создам цепочку, первое правило которой:

iptables -I INPUT -p tcp -m multiport --dports 25,465 -j name

Означает ли это, что любые дальнейшие указанные правила в цепочке не проверяются, если только пакет не поступает с этих портов?

Я использую fail2ban, и я создал фильтр с правилом запрета, которое указывает порт 25, 465, используя -m multiport --dports 25,465. Но этот фильтр в конечном итоге создал достаточно большое количество правил, что иногда процесс ksoftirqdиспользовал много ресурсов ЦП, и сеть становилась медленной. Я заметил, что это происходило, когда на сервере было много ввода-вывода, происходящего на других портах.

Я предполагаю, что каждый пакет просматривал все правила в моей цепочке. Я надеюсь, что смогу избежать этого, добавив первое правило, показанное выше, так что пакеты, не приходящие на порты 25 и 465, не будут проверять остальные правила в этой цепочке. Если это не поможет, я был бы признателен за любое другое возможное решение.

решение1

Не «от», а «куда». --dportsспискиместо назначенияпорты. Правило, как вы написали, означает: "если пакет был отправлен на мой сервис, прослушивающий TCP-порт 25 или 465, обработать его в цепочке name". То, как он будет обработан, зависит от содержимого этой цепочки. Если он не соответствует ни одномуокончательное действие( ACCEPT, REJECT, DROP) правило в этой цепочке, или если оно соответствует правилу с RETURNдействием, его обработка будет продолжена в вызывающей цепочке ( INPUT) с правилом, следующим за этим.

По умолчанию fail2banсоздает цепочку и правило, которое вызывает цепочку только для пакетов, предназначенных для определенного порта (если вы не используете ...-allportsдействие, которое не является действием по умолчанию). В эту цепочку он добавляет правило DROP для каждого запрещенного IP. Так, например, пакеты веб-сервера не будут отправляться на обработку в цепочку, созданную для sshdпредоставленной тюрьмы. Поэтому намеренное «исключение» определенных портов из обработки fail2ban способом, который вы предлагаете, непродуктивно; это уже работает так.

Чтобы избежать создания цепочки со слишком большим количеством правил с помощью fail2ban, изучитеipset-связанные действия. Вместо создания цепочки f2b-jailnameон создаетIP-набори единственное правило, которое соответствует ipset. Каждый забаненный IP добавляется в ipset, вместо создания отдельного правила в цепочке. ipset имеет характеристику сложности O(1), что означает, что скорость его обработки не зависит от количества элементов в нем; он может содержать до 65536 элементов.

Чтобы использовать это, короче говоря, вам нужно переопределить default banaction = iptablesс помощью banaction = iptables-ipsetдля ваших джейлов. Вы никогда не должны изменять файлы конфигурации, поставляемые дистрибутивом; вместо этого создайте /etc/fail2ban/jail.localфайл, в который вы добавляете свои переопределения:

[postfix]
bantime = 1h
enabled = true
banaction = iptables-ipset

(Это будет использовать предоставленный postfixпочтовый фильтр и реагировать на все smtpdтипы служб. Если вы используете другой почтовый сервер, настройте его соответствующим образом.)

Другой способ повысить эффективность брандмауэра — начать использоватьnftablesframework вместо iptables. Имеет особенности IP-наборовинтегрированный, и вы можете использовать его с fail2ban, используя banaction = nftables. Прирост эффективности для больших наборов будет примерно таким же.

Связанный контент