LINUX.ORG.RU

Fail2ban. Jail для кодов 403 и 404

 , , ,


0

1

Есть веб-сервис, в логах которого наблюдаются попытки открыть несуществующие страницы, либо выйти за пределы папки сервиса, либо вообще попытки что-то запустить. Это всё сопровождается кодами ответов 403 и 404.

Строка лога

196.251.92.121 - - [27/May/2025:22:12:05 +0000] "GET /.env HTTP/1.1" 404 153 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:77.0) Gecko/20100101 Firefox/77.0" "-"

Получается, что мне нужна регулярка, чтоб из лога взять IP, метод (GET|POST) и код ответа

Подскажите, как написать правило для f2b, чтоб если такие коды встречаются в логах, он этих злодеев отправлял в nftables.



Последнее исправление: Dodik (всего исправлений: 2)

Я себе написал вот такое:

cat /etc/fail2ban/filter.d/nginx-garbage.conf

# Fail2Ban filter to match intentionally broken web requests

[INCLUDES]
before = botsearch-common.conf

[Definition]

failregex = ^<HOST> \- \S+ \[\] \"(?!GET|POST|HEAD).*$
            ^<HOST> \- \S+ \[\] \"(GET|POST|HEAD) [^"]+\" 400 .+$
            ^<HOST> \- \S+ \[\] \"(GET|POST|HEAD) \/(.?<block>|(sql|mysql|\.env|laravel|backend|app|db|database|PMA|admin[^/]*/(pma|phpMyAdmin|db|sqladmin|admindb|dbadmin))[^,]*) \S+\" (400|404|444) .+$
            ^ \[error\] \d+#\d+: \*\d+ (\S+ )?\"\S+\" (failed|is not found) \(2\: No such file or directory\), client\: <HOST>\, server\: \S*\, request: \"(GET|POST|HEAD) \/<block> \S+\"\, .*?$

datepattern = {^LN-BEG}%%ExY(?P<_sep>[-/.])%%m(?P=_sep)%%d[T ]%%H:%%M:%%S(?:[.,]%%f)?(?:\s*%%z)?
              ^[^\[]*\[({DATE})
              {^LN-BEG}

cat /etc/fail2ban/jail.d/nginx.local

[nginx]
enabled  = true
port = http,https
#port = all
filter = nginx-garbage 
logpath = /var/log/nginx/*access.log
maxretry = 1
findtime = 180
bantime = 4294967
banaction = firewallcmd-ipset
legolegs ★★★★★
()