Поэтому я провел ряд исследований о том, как это сделать после того, как один и тот же ip-адрес попал в мой кластер веб-серверов один за другим. Поскольку я использую AWS, я подумал, что может быть простой способ, и он прекрасно работает в первые два дня тестирования 5 серверов.
Первое, что я рекомендую, это временно отключить SELinux, мы разберемся с ним в конце. Я не эксперт SELinux, но то, что я сделал, работает до сих пор.
Основное требование - общий источник файлов, я использую AWS EFS. Как только новый диск подготовлен и смонтирован, я изменил logtarget в /etc/fail2ban/fail2ban.conf на подпапку на диске EFS.
logtarget = /efsmount/fail2ban/server1.log
Затем я написал простой фильтр и поместил его в /etc/fail2ban/filter.d/fail2ban-log.conf
[Definition]
failregex = .* Ban <HOST>
ignoreregex =
Добавлен фильтр в /etc/fail2ban/jail.local
[fail2ban-log]
enabled = true
port = http,https
findtime = 86400 ; 1 day
logpath = /efsmount/fail2ban/server1.log
/efsmount/fail2ban/server2.log
/efsmount/fail2ban/server3.log
/efsmount/fail2ban/server4.log
maxretry = 1
Потом перезапустил fail2ban
sudo fail2ban-client reload
Все идет нормально! Нет, самая болезненная часть - это SELinux. После того, как я позволил fail2ban немного поработать, я запустил эту команду, которая пропустит fail2ban через фильтры.
sudo grep fail2ban /var/log/audit/audit.log | sudo audit2allow -M fail2ban-nfs
Audit2allow скажет вам, чтобы запустить эту команду
sudo semodule -i fail2ban-nfs.pp
Я все еще проверяю свои журналы SELinux тут и там, чтобы увидеть, есть ли еще отказы. Если у кого-нибудь есть совет, как получить этот чистый SELinux другим методом, это было бы здорово.
sudo cat /var/log/audit/audit.log |grep fail2ban |grep denied
На этом этапе я все еще получал ошибки при перезапуске fail2ban. Существует ошибка при использовании action = action_mwl в jail.local. После небольшого поиска я нашел это, которое работает до сих пор. Из того, что я прочитал, из-за разрывов строк в директиве logpath, указывающих на несколько файлов. Я пробовал с запятыми, пробелами и т. Д. С action_mwl ничего не получалось.
action_mwm = %(banaction)s[name=%(__name__)s, bantime="%(bantime)s", port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
%(mta)s-whois-matches[name=%(__name__)s, dest="%(destemail)s", chain="%(chain)s"]
action = %(action_mwm)s
Не забудьте снова включить SELinux!