В стеке 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
Теперь мои неудачные попытки входа в систему регистрируются с правильной меткой времени, и меня действительно забанят.