Fail2Ban: уже забанены?


17

У меня Fail2Ban работает на моем сервере Centos. (Конфиг ниже)

В моих var / log / messages я заметил нечто действительно странное:

Jun 19 12:09:32 localhost fail2ban.actions: INFO   [postfix] 114.43.245.205 already banned

Я настроил Fail2Ban для добавления запрещенного IP в iptables.

Мой jail.conf:

[postfix]

enabled  = true
filter   = postfix
action   = iptables
port     = smtp,ssmtp
filter   = postfix
logpath  = /var/log/maillog
bantime  = 43200
maxretry = 2

Мой postfix.conf:

[INCLUDES]

before = common.conf

[Definition]
failregex = reject: RCPT from (.*)\[<HOST>\]: 550 5.1.1
            reject: RCPT from (.*)\[<HOST>\]: 450 4.7.1
            reject: RCPT from (.*)\[<HOST>\]: 554 5.7.1
            reject: RCPT from (.*)\[<HOST>\]: (.*)@yahoo.com.tw
ignoreregex =

Мой вопрос: как кто-нибудь, кто уже заблокирован, iptablesвсе еще может подключиться к серверу?


Не могли бы вы добавить вывод iptables -L -nvк вашему вопросу?
Ладададада

Ответы:


14

Рекомендованная тюрьма, рекомендованная в другом ответе здесь, не решает проблему для меня. Однако в конце концов я это исправил, поэтому вот мой метод на случай, если он поможет другим.

По умолчанию Fail2ban блокирует только TCP. По крайней мере, с моей настройкой, я заметил, что «уже забаненное» сообщение появляется, когда боты возвращаются, чтобы вместо этого попробовать заблокированный порт через UDP.

Чтобы устранить эту проблему, скажите Fail2ban заблокировать порт для всех протоколов, а не только для TCP. Вам нужно будет внести это изменение в /etc/fail2ban/jail.conf и в раздел [Init] каждого действия, которое вы используете в /etc/fail2ban/action.d/ .

Изменить это:

# Default protocol
protocol = tcp

Для того, чтобы:

# Default protocol
protocol = all

Затем я отключил эхо-запросы ICMP, чтобы заблокированные IP-адреса не могли попасть на сервер:

  1. nano /etc/sysctl.conf
  2. Добавьте эти две строки:

    net.ipv4.icmp_echo_ignore_all = 1  
    net.ipv4.icmp_echo_ignore_broadcasts = 1
    
  3. Выйдите и сохраните файл.
  4. Запустите sysctl -p, чтобы изменения вступили в силу.

После этого запустите перезагрузку fail2ban-client, и вы больше не увидите эти «уже заблокированные» сообщения, если только вы не получили спам от IP-адреса, который получает пару попыток доступа до того, как блок вступит в силу.

Кроме того, важно заблокировать все порты для каждого нарушителя, а не для порта, к которому они пытались получить доступ, с помощью действия iptables-allports в каждой тюрьме. В противном случае они могут вызвать другой джейл и в конечном итоге «уже забанены» в журналах.


3
для меня это не очень ясно ... в /etc/fail2ban/jail.localнекоторых моих фильтрах есть, action = iptables-multiport[name=apache-myadmin, port="http,https", protocol=tcp]а в некоторых нет, я должен изменить все эти? Должен ли я что-то изменить в /etc/fail2ban/filter.d?
NineCattoRules

1
извините, но протокол = все не работает, выдает ошибку!
Патрик Ласло

1
«iptables v1.6.2: многопортовые потребности -p tcp', -p udp ', -p udplite', -p sctp' или` -p dccp '"
Патрик Ласло

Хорошо, для меня проблема была в том, что запрет работал, но злоумышленник использовал постоянные соединения, поэтому запрет не вступил в силу сразу, так как он все еще был подключен и нового соединения не было, единственный способ сделать это, когда происходило перезагрузка почтового сервера
Патрик Ласло

3

Если вы посмотрите на выходные данные iptables-save, вы увидите, что fail2banцепочки настроены так, что они оценивают пакеты в соответствии с правилами, определенными фильтрами, например:

:fail2ban-ssh - [0:0]
-A INPUT -p tcp -A INPUT -p tcp -A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh 
-A fail2ban-ssh -j RETURN

Трафик все еще достигает сервера до применения других правил маршрутизации, и трафик отклоняется. fail2banвсе еще видит этот начальный трафик, и именно поэтому вы видите «уже забаненные» сообщения. Кроме того, есть специальный фильтр для рецидивистов ( /etc/fail2ban/filter.d/recidive.conf):

# Fail2Ban filter for repeat bans
#
# This filter monitors the fail2ban log file, and enables you to add long
# time bans for ip addresses that get banned by fail2ban multiple times.
#
# Reasons to use this: block very persistent attackers for a longer time,
# stop receiving email notifications about the same attacker over and
# over again.
#
# This jail is only useful if you set the 'findtime' and 'bantime' parameters
# in jail.conf to a higher value than the other jails. Also, this jail has its
# drawbacks, namely in that it works only with iptables, or if you use a
# different blocking mechanism for this jail versus others (e.g. hostsdeny
# for most jails, and shorewall for this one).

[INCLUDES]

# Read common prefixes. If any customizations available -- read them from
# common.local
before = common.conf

[Definition]

_daemon = fail2ban\.server\.actions

# The name of the jail that this filter is used for. In jail.conf, name the
# jail using this filter 'recidive', or change this line!
_jailname = recidive

failregex = ^(%(__prefix_line)s| %(_daemon)s%(__pid_re)s?:\s+)WARNING\s+\[(?!%(_jailname)s\])(?:.*)\]\s+Ban\s+<HOST>\s*$

[Init]

journalmatch = _SYSTEMD_UNIT=fail2ban.service PRIORITY=4

# Author: Tom Hendrikx, modifications by Amir Caspi

1

Это произойдет, если IP-адрес, который вы запрещаете, на самом деле не является IP-адресом клиента, подключающегося к серверу. Например, если ваш сервер находится за балансировщиком нагрузки или прокси.

Мне потребовалось много времени, чтобы понять это в последнее время. Красной сельдью было то, что журналы были настроены на захват X-Forwarded-ForIP-адреса, а не реального адреса источника, который в моем случае был балансировщиком нагрузки.

В этом случае fail2ban не сильно помогает, так как блокировка нарушающего IP-адреса в конечном итоге блокирует весь трафик.


Итак, какие альтернативные действия вы предприняли?
Хасан

@HassanBaig - нет. Fail2ban не может ничего сделать, если он работает за балансировщиком нагрузки или обратным прокси.
Дейл Андерсон

Хм, тогда какие меры вы бы предприняли в отношении распределенной DoS, возникающей на уровне приложений, скажем, поток HTTP GET?
Хасан

1
@HassanBaig Поговорите с вашим хостинг-провайдером. Скорее всего, вы не единственный человек, который столкнулся с той же проблемой в своих системах.
Дейл Андерсон

0

Я хочу поделиться своей проблемой и ее решением с помощью "уже забаненных" сообщений. Как вы написали, у меня их было сотни в течение нескольких минут, а злоумышленник должен был быть уже забанен.

Прежде чем я начну, вот моя система:

  • Plesk 12
  • Centos 7
  • Plesk-модуль установлен, работает и настраивает fail2ban для меня

Когда я установил OpenVPN на свой корневой сервер, я переключил firewalld на iptables. Это могло вызвать у меня эту проблему, но, кроме того, моя система была в основном нетронутой и довольно свежей (установочный образ Strato rootserver предложил установить).

Если у вас есть эта проблема, пожалуйста, проверьте /etc/fail2ban/jail.d/00-firewalld.conf для строки, которая выглядит следующим образом:

banaction = firewallcmd-ipset

С того момента, как я это прокомментировал, сохранил файл и перезапустил fail2ban.service, все было нормально с fail2ban. Больше сообщений нет

Я не эксперт, но надеюсь дать вам правильный ответ. Если это работает для вас, пожалуйста, дайте мне знать!


0

Мой вопрос: как кто-нибудь, кто уже заблокирован в iptables, все еще может подключиться к серверу?

Он подключался к серверу только один раз, но в этом одном подключении он пытался доставить несколько электронных писем в вероятно несуществующие почтовые ящики (например, info@domain.com, sales@domain.com, tech@domain.com и т. Д.)

Вы настроили свой постфиксный фильтр, чтобы запретить эти попытки, чтобы IP-адрес был забанен после X попыток. Возможно, клиент уже отключен от postfix, но поскольку postfix, возможно, не завершил обработку всей своей электронной почты, fail2ban может обнаружить другую попытку того же клиента, когда postfix обрабатывает свою почту, и, таким образом, вы получаете адрес сообщения, уже заблокированный. Это из-за того, как работает очередь postfix.


0

Мой вопрос: как кто-нибудь, кто уже заблокирован в iptables, все еще может подключиться к серверу?

Невероятно хороший вопрос. Я искал, если мои правила брандмауэра не работают, но iptables --list-rulesточно совпадают с другим рабочим сервером с работающим fail2ban.

Разумным решением было добавить порт 8080 к заблокированным портам, так как я все еще получал доступ к странице входа через порты разработки.

Таким образом, исправление в моей ситуации - это довольно простая адаптация моей проблемы jail.local:

[JIRA-LOGIN-tcp]
  enabled = true
  port = http,https,8080
  protocol = tcp
  filter = JIRA-LOGIN-ERROR
  logpath = /var/atlassian/application-data/jira/log/atlassian-jira-security.log
  bantime = 600
  maxretry = 1

0

см. /unix//a/525798/22315

вы, вероятно, пропускаете порт 587 из строки «port =», и вы можете проверить файл конфигурации postfix или выполнить «lsof -i: 587», чтобы напрямую узнать, настроен ли postfix для открытия этого порта.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.