Вы довольно близки. Запятая или знак $ перед переменной не нужны. Попробуйте:
awk '{if (NF == 4) {print $0; name=$1} else {print name$0}}'
Похоже, ваша конфигурация iptables
не включает цепочку фильтров с именем f2b-sshd
.
Во-первых, небольшой -праймер по iptables
.
iptables
— это и команда, и имя подсистемы брандмауэра Linux. Команда используется для настройки правил брандмауэра в оперативной памяти. Правила брандмауэра iptables
сначала организованы в таблицы :, есть таблица filter
по умолчанию, а также таблицы nat
, mangle
, raw
и security
для различных целей. fail2ban
выполняет фильтрацию трафика, поэтому использует таблицу filter
.
Затем таблицы дополнительно делятся на цепочки фильтров. Каждая таблица имеет определенные стандартные цепочки :для таблицы filter
, стандартными цепочками являются INPUT
, FORWARD
и OUTPUT
. Цепочка FORWARD
используется только тогда, когда система настроена на маршрутизацию трафика для других систем. Цепочка INPUT
имеет дело с входящим трафиком в эту систему.
Если fail2ban
добавил свои правила непосредственно в цепочку INPUT
и стер эту цепочку после истечения срока действия всех банов,тогда вам придется передать полный контроль над входными правилами вашего брандмауэра fail2ban
-, у вас не может быть никаких пользовательских правил брандмауэра в дополнение к , что делает fail2ban
. Это явно нежелательно, поэтому fail2ban
этого делать не будет.
Вместо этого fail2ban
создает свою собственную цепочку фильтров, которой она может полностью управлять самостоятельно, и добавляет при запуске -одно правило в цепочку INPUT
для отправки любого соответствующего трафика для обработки через fail2ban
цепь.
Например, при настройке защиты sshd
, fail2ban
должны выполнять эти команды при запуске -вверх:
iptables -N f2b-sshd
iptables -A f2b-sshd -j RETURN
iptables -I INPUT -p tcp -m multiport --dports <TCP ports configured for sshd protection> -j f2b-sshd
Эти команды создают цепочку фильтров f2b-sshd
, устанавливают RETURN
в качестве ее последнего правила (, чтобы после обработки любых правил fail2ban
нормальная обработка правил ВВОДА продолжалась, как и без fail2ban
, и, наконец, добавьте правило в начало таблицы INPUT
, чтобы перехватывать любой SSH-трафик и отправлять его сначала в цепочку f2b-sshd
.
Теперь, когда fail2ban
нужно запретить IP-адрес для использования SSH, он просто вставит новое правило в цепочку f2b-sshd
.
Если вы используете firewalld
или какую-либо другую систему, которая управляет правилами брандмауэра iptables вместо вас, или если вы очищаете все правила iptables
вручную, то эти исходные правила и, возможно, вся цепочка фильтров f2b-sshd
могут быть стерты. Вы должны убедиться, что любой инструмент управления брандмауэром, который вы можете использовать, поддерживает это исходное правило в цепочке INPUT и вообще не затрагивает цепочку f2b-sshd
.
Сообщения об ошибках в конце вашего фрагмента указывают на то, что fail2ban
проверяет наличие исходных правил ("проверка инвариантов" )и обнаруживает, что это не так.
для меня проблема заключалась в том, что бан работал, но злоумышленник использовал постоянные соединения, поэтому бан не действовал сразу, так как он все еще был подключен, а нового подключения не было, единственный способ сделать, когда происходило перезапуск почтового сервера
Мне просто пришлось иметь дело с этим. проблема была связана с выполнением руководства exim4 fail2ban. в файле jail.d/exim4.conf было это:
[exim-spam]
port = smtp,ssmtp
где то, что собственно нужно, т.к. exim4 работает на портах 25, 464 и 587, было это:
[exim-spam]
port = smtp,ssmtp,587
Вот и все.
в принципе все фильтры настроены правильно, все работает... однако:
Поэтому, конечно, атаки продолжаются! поэтому адаптируйте это к протоколу, который вы используете (sshd в этом случае ).
"netstat -an | more" и "iptables -L -n" и "lsof -i :587" ваши друзья, здесь.