ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)

Настройка fail2ban для запрета запросов 403 Forbidden в Nginx

Настройка fail2ban для запрета запросов в Nginx 403 Forbidden

Для того чтобы запретить определенные пути или URL – адреса в Nginx для защиты содержимого, вы можете использовать fail2ban, чтобы запретить запросы 403 в Nginx. Например, если вы переименовали страницу входа, используя плагин, то, как правило, хакерские боты будут получать ошибку 403 forbidden при попытке войти в систему. Точно так же, если у вас есть полностью отключить xmlrpc.php.

Это руководство покажет вам, как использовать fail2ban, чтобы запретить ботам на уровне сервера с помощью IPTables автоматически. Будьте осторожны, убедитесь, что вы не запрещаете Google или другим поисковикам индексацию сайта!

Настройка fail2ban для запрета запросов в Nginx 403 Forbidden

Обзор установки

Генерация данных журнала для 403 ошибки

Перейдите на URL, который запрещен вашим виртуальным хостом Nginx, чтобы сгенерировать данные журнала

Показажите последние 50 строк вашего файла журнала Nginx

tail -n 50 /var/log/nginx/logfile

 

Мы нашли эти записи, которые будут использоваться в качестве основы для фильтра fail2ban для бана пользователей, которые генерируют ошибку 403 forbidden

2016/09/15 17:01:18 [error] 3176#3176: *1 access forbidden by rule, client: 189.167.27.53, server: guides.andreyex.ru, request: "GET /wp-login.php HTTP/1.1", host: "guides.andreyex.ru", referrer: "android-app://com.Slack"
2016/09/15 17:01:54 [error] 3176#3176: *1 access forbidden by rule, client: 189.167.27.53, server: guides.andreyex.ru, request: "GET /wp-login.php HTTP/1.1", host: "guides.andreyex.ru", referrer: "android-app://com.Slack"

 

Теперь, когда у нас есть данные журнала мы можем создать фильтр для fail2ban.

Настройка fail2ban для ошибки в Nginx 403 Forbidden

Нам нужно создать фильтр Fail2ban, который будет соответствовать ошибки из файла журнала. Затем мы создаем jail  чтобы использовать этот фильтр и запретить пользователей.

Создание фильтра Fail2ban для запросов forbidden в Nginx

Создать затем фильтр для Nginx

sudo nano /etc/fail2ban/filter.d/nginx-forbidden.conf

 

Добавьте это регулярное выражение, которое будет соответствовать ошибке 403 forbidden в журналах Nginx

[Definition]
failregex = ^ \[error\] \d+#\d+: .* forbidden .*, client: <HOST>, .*$

ignoreregex = 

 

Ctrl + X, Y + Enter, чтобы сохранить изменения и выйти.

Теперь мы можем проверить фильтр аутентификации Nginx HTTP, сканируя журнал ошибок, указанный в виртуальном хосте Nginx.

fail2ban-regex /var/log/nginx/wpbullet.error.log /etc/fail2ban/filter.d/nginx-forbidden.conf

 

Вы увидите этот вывод, который показывает, что нашел неудачные попытки входа, которые мы сгенерировали ранее.

Running tests
=============

Use   failregex file : /etc/fail2ban/filter.d/nginx-forbidden.conf
Use         log file : log

Results
=======

Failregex: 2 total
|-  #) [# of hits] regular expression
|   1) [2] ^ \[error\] \d+#\d+: .* forbidden .*, client: <HOST>, .*$
`-

Ignoreregex: 0 total

Date template hits:
|- [# of hits] date format
|  [2] Year/Month/Day Hour:Minute:Second
`-

Lines: 2 lines, 0 ignored, 2 matched, 0 missed

 

Создание Jail в Fail2ban для запретных запросов в Nginx

Убедитесь, что у вас есть в Fail2ban папка jail

sudo mkdir -p /etc/fail2ban/jail.d

 

Создайте конфигурационный файл jail Fail2ban в Nginx для HTTP аутентификации

sudo nano /etc/fail2ban/jail.d/nginx-forbidden.conf

 

Вставьте эту конфигурацию, которая использует фильтр, который мы создали ранее, который сканирует все файлы журналов Nginx и запрещает пользователям в течение 6000 минут, которые сгененировали ошибку 3 раза в 60-секундный период.

[nginx-forbidden]
enabled = true
filter = nginx-forbidden
port = http,https
logpath = /var/log/nginx/*error*.log
findtime = 60
bantime = 6000
maxretry = 3

 

Теперь, когда мы знаем, сделаем jail, проверим синтаксис Fail2ban, чтобы убедиться, что это все работает

sudo fail2ban-client -d

 

Если вы не видите каких-либо ошибок (предупреждения OK), то можно перезапустить fail2ban

service fail2ban restart

Проверка состояния nginx на запрещеное в fail2ban

Клиент Fail2ban может быть использован, чтобы показать статистику своих мест заключения

sudo fail2ban-client status nginx-forbidden

 

Во время тестирования на виртуальных машинах, мне удалось получить забаненный шлюз.

Status for the jail: nginx-forbidden
|- filter
|  |- File list:        /var/log/nginx/andreyex.error.log /var/log/nginx/error.log
|  |- Currently failed: 0
|  `- Total failed:     3
`- action
   |- Currently banned: 1
   |  `- IP list:       192.168.60.1
   `- Total banned:     1

 

Вы также можете перечислить IPTables

sudo iptables -L -n

 

Это показывает цепочку Iptables для Nginx запрещенных  в jail

Chain f2b-nginx-forbidden (2 references)
target     prot opt source               destination
REJECT     all  --  192.168.0.1          0.0.0.0/0            reject-with icmp-port-unreachable
RETURN     all  --  0.0.0.0/0            0.0.0.0/0
RETURN     all  --  0.0.0.0/0            0.0.0.0/0

Любые боты, которые сканируют и вызывают ошибку 403 forbidden в Nginx, теперь будут автоматически запрещены в Fail2ban.

Exit mobile version