Для того чтобы запретить определенные пути или 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.