Метафора есть средство постижения Бога (Авессалом Подводный).

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

3 мин для чтения
FavoriteLoadingДобавить в избранное
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...
28 марта 2017
Настройка fail2ban для запрета запросов в Nginx 403 Forbidden
Для того чтобы запретить определенные пути или URL – адреса в Nginx для защиты содержимого, вы можете использовать fail2ban, чтобы запретить запросы 403 в Nginx. Например, если вы переименовали страницу входа, используя плагин, то, как правило, хакерские боты будут получать ошибку 403 forbidden при попытке войти в систему. Точно так же, если у вас есть полностью отключить xmlrpc.php.

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

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

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

  • Генерация данных журнала
  • Настройка Fail2ban фильтра и jail

Генерация данных журнала для 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.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Просмотров: 163

Если статья понравилась, то поделитесь ей в социальных сетях:

Добавить комментарий

Войти с помощью: 

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам:

Заполните форму и наш менеджер перезвонит Вам в самое ближайшее время!

badge
Обратный звонок 1
Отправить
galka

Спасибо! Ваша заявка принята

close
galka

Спасибо! Ваша заявка принята

close