Назад | Перейти на главную страницу

Fail2Ban не запрещает использование CentOS 7 с помощью SELinux

В стеке LEMP с WordPress и плагином WP fail2ban проблемы аутентификации WordPress прекрасно регистрируются в / var / log / messages.

$ sudo fail2ban-client version
0.9.2

За последние пару дней я получил около 25К этих строк, попытка перебора из Швеции:

Aug 17 10:48:58 ip-172-1-6-5 wordpress(mydomain.com)[29203]: Blocked authentication attempt for mydomain from 217.70.32.9
Aug 17 10:48:58 ip-172-1-6-5 wordpress(mydomain.com)[29204]: Blocked authentication attempt for mydomain from 217.70.32.9
Aug 17 10:48:58 ip-172-1-6-5 wordpress(mydomain.com)[29796]: Blocked authentication attempt for mydomain from 217.70.32.9
Aug 17 10:48:58 ip-172-1-6-5 wordpress(mydomain.com)[29203]: Blocked authentication attempt for mydomain from 217.70.32.9
Aug 17 10:48:58 ip-172-1-6-5 wordpress(mydomain.com)[29204]: Blocked authentication attempt for mydomain from 217.70.32.9

Джайл wordpress.conf включен, и тест regexp работает:

$ sudo fail2ban-regex /var/log/messages /etc/fail2ban/filter.d/wordpress.conf

Failregex: 25865 total
|-  #) [# of hits] regular expression
|   1) [180] ^\s*(<[^.]+\.[^.]+>)?\s*(?:\S+ )?(?:kernel: \[ *\d+\.\d+\] )?(?:@vserver_\S+ )?(?:(?:\[\d+\])?:\s+[\[\(]?wordpress(?:\(\S+\))?[\]\)]?:?|[\[\(]?wordpress(?:\(\S+\))?[\]\)]?:?(?:\[\d+\])?:?)?\s(?:\[ID \d+ \S+\])?\s*Authentication failure for .* from <HOST>$
|   2) [25685] ^\s*(<[^.]+\.[^.]+>)?\s*(?:\S+ )?(?:kernel: \[ *\d+\.\d+\] )?(?:@vserver_\S+ )?(?:(?:\[\d+\])?:\s+[\[\(]?wordpress(?:\(\S+\))?[\]\)]?:?|[\[\(]?wordpress(?:\(\S+\))?[\]\)]?:?(?:\[\d+\])?:?)?\s(?:\[ID \d+ \S+\])?\s*Blocked authentication attempt for .* from <HOST>$

Однако никого не забанят.

$ sudo fail2ban-client status wordpress
Status for the jail: wordpress
|- Filter
|  |- Currently failed: 0
|  |- Total failed: 0
|  `- File list:    /var/log/messages
`- Actions
   |- Currently banned: 0
   |- Total banned: 0
   `- Banned IP list:

Подтверждение, что firewalld знает об этом:

$ sudo ipset list

Name: fail2ban-wordpress
Type: hash:ip
Revision: 1
Header: family inet hashsize 1024 maxelem 65536 timeout 3600
Size in memory: 16528
References: 1
Members:

Из jail.local

bantime  = 3600
findtime  = 600
banaction = firewallcmd-ipset

# Protect agains WP Login bruteforce attemps via
# https://wordpress.org/plugins/wp-fail2ban/installation/

[wordpress]

port     = http,https
logpath  = /var/log/messages
maxretry = 3
enabled = true

Обратите внимание, что выше мы получаем 5 повторных попыток в течение одной секунды, что, конечно, должно вызвать бан.

Я не вижу никаких тревожных сообщений об отказе в /var/log/audit/audit.log о том, что SELinux мешает этому работать, хотя я далек от эксперта по SELinux.

Ведение журнала работает. Регулярное выражение работает. Fail2Ban запускается. Тюрьма была включена. Firewalld ожидает чего-то. Но ничего не происходит.

Блокировка вручную тоже работает:

$ sudo fail2ban-client set wordpress banip 217.70.32.9

$ sudo fail2ban-client status wordpress
Status for the jail: wordpress
|- Filter
|  |- Currently failed: 0
|  |- Total failed: 3
|  `- File list:    /var/log/messages
`- Actions
   |- Currently banned: 1
   |- Total banned: 1
   `- Banned IP list:   217.70.32.9

$ sudo ipset list
Name: fail2ban-wordpress
Type: hash:ip
Revision: 1
Header: family inet hashsize 1024 maxelem 65536 timeout 3600
Size in memory: 16592
References: 1
Members:
217.70.32.9 timeout 3457

Похоже, это подтверждает, что мой jail.local загружается:

$ sudo fail2ban-client status
Status
|- Number of jail:  6
`- Jail list:   1, 2, 3, 4, 5, wordpress

Я использовал бэкэнд-опрос, но теперь я использую Gamin. Установка уровня журнала Fail2Ban для отладки, это работает, когда я ошибочно вхожу в систему:

2015-08-18 22:57:52,874 fail2ban.filtergamin    [29664]: DEBUG   File changed: /var/log/messages

Средство проверки регулярных выражений также продолжает увеличивать количество совпадений. Но все же я могу сделать это 20 раз за 2 минуты без бана ...

Где мне искать дальше?

После нескольких часов работы меня наконец осенило, что метка времени в / var / log / messages не синхронизирована на 2 часа. Это, конечно, имеет последствия, когда дело доходит до fail2ban для определения времени поиска.

$ timedatectl
      Local time: Tue 2015-08-18 23:50:11 CEST

В / var / log / messages:

Aug 18 21:50:11 ip-172-1-6-5 systemd: Started Time & Date Service.

Решать:

$ sudo systemctl restart rsyslog.service

Теперь мои неудачные попытки входа в систему регистрируются с правильной меткой времени, и меня действительно забанят.