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

Какое регулярное выражение можно использовать для выявления недопустимых файловых запросов в журналах nginx?

Мне нужна помощь в настройке регулярного выражения для fail2ban. Я использую свой веб-сервер в основном для простого хостинга файлов подкастов, но вижу в журналах много недопустимых запросов на файлы php, asp и pl.

Я бы хотел настроить fail2ban для поиска недопустимых файловых запросов этих типов в журналах.

В какой-то момент у меня были следующие настройки строк регулярных выражений для apache:

[[] client []] (Нет такого файла или каталога | скрипт не найден или не может быть обработан): /\S*(php|mysql|.asp|.exe|.pl)

[[] client []] скрипт '/\S*(.php|.asp|.exe|.pl)\S*' не найден или не может выполнить статистику * $

Это явно не работает для журналов nginx. Вот отрывок из неверного запроса файла (я изменил пути и IP-адреса):

2011/05/14 20:38:20 [ошибка] 5349 # 0: * 828 open () "/example/path/htdocs/administrator.php" не удалось (2: нет такого файла или каталога), клиент: 123.123.123.123 , сервер: example.server.com, запрос: «GET administrator.php HTTP / 1.1», хост: «example.server.com»

Могу ли я получить помощь в создании измененной строки регулярного выражения, чтобы отловить эти типы ошибок? Я хотел бы повторить, что я не размещаю какие-либо файлы php или asp, поэтому меня не слишком беспокоит потенциальный риск ложного срабатывания здесь.

/etc/fail2ban/filter.d/nginx-noscript.conf

[Definition]
failregex = open\(\) "/\S*(\.php|\.asp|\.exe|\.pl)\S*" failed \(2: No such file or directory\), client: <HOST>,.*
ignoreregex =

/etc/fail2ban/jail.conf

[nginx-iptables]
enabled     = true
filter      = nginx-noscript
action      = iptables[name=nginx, port=81, protocol=tcp]
logpath     = /var/log/nginx/*error_log
maxretry    = 3

Прокомментируйте ignoreip = 127.0.0.1/8 и тестирование с некоторыми несуществующими запросами:

2012/08/10 09:28:11 [error] 3473#0: *27 open() "/var/www/localhost/htdocs/d.pl" failed (2: No such file or directory), client: 127.0.0.1, server: localhost, request: "GET /d.pl HTTP/1.0", host: "localhost:81"

в /var/log/fail2ban.log, вы увидите что-то вроде этого:

2012-08-10 09:32:55,234 fail2ban.actions: WARNING [nginx-iptables] Ban 127.0.0.1

Еще раз просмотрите iptables:

Chain fail2ban-nginx (1 references)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 DROP       all  --  *      *       127.0.0.1            0.0.0.0/0