Тож я зробив купу досліджень, як це зробити, переглянувши одну і ту ж 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!