Как создать fail2ban jail и журнал доступа для вашего собственного приложения
Я хочу, чтобы мое собственное маленькое приложение nuxt/vue.js использовало fail2ban для блокировки пользователей со слишком большим количеством неверных попыток входа в систему. Я думаю, что я понял, как настроить Fail2Ban сам.
Мой вопрос: какой синтаксис должен использовать мой файл access.log, чтобы он мог быть понятен fail2ban прямо из коробки? Я не нашел никаких ответов на этот вопрос.
access.log
Какова лучшая практика и какой подход будет работать для fail2ban прямо из коробки? Я представляю что-то вроде этого:
2019-02-17 15:12:10 login-error from 192.168.1.1 Invalid user 'administrator'
2019-02-17 16:11:10 login-error from 192.168.1.1 Invalid password for user 'admin'
Базовая настройка
1) Установите Fail2Ban
sudo apt-get install fail2ban
2) Создайте свою собственную тюрьму
sudo vim /etc/fail2ban/jail.local
Вставьте контент (и отредактируйте его под свои нужды)
[my-app]
enabled = true
port = http,https
filter = my-app
logpath = /home/my-user/my-app/logs/access.log
maxretry = 5
4) Создайте свой фильтр
sudo vim /etc/fail2ban/filter.d/my-app.local
Вставьте содержимое в ваш my-app.local:
[Definition]
failregex = login-error from <HOST>
3) Перезапустите сервис
sudo systemctl restart fail2ban.service
Теперь он будет отслеживать my-app/logs/access.log и блокировать IP-адрес после более чем 5 неправильных попыток после настройки журнала.
1 ответ
В формате журнала должно быть очень строгое разделение между IP-адресом и любыми другими данными пользователя. Основное соображение, которое вам нужно сделать, чтобы предотвратить попытку внешней стороны войти в систему с шаблоном, в котором вы выполняете регулярное выражение, будет сопоставлять IP-адрес в пользовательских данных, а не IP-адрес источника.
Имея формат журнала, подобный вашему, где якорь в начале строки не содержит пользовательских данных (например, имя пользователя), до того как IP облегчит написание сильного регулярного выражения.
Этот шаблон учитывает большинство CVE в fail2ban.
Чтобы предотвратить это в вашем шаблоне, есть руководство в документе FILTERS в хранилище.
В случае с поставщиком фильтров, якорь запуска ^
следует включить в регулярное выражение (предположим, что дата / время были удалены).
Вы также должны заблокировать неверного пользователя так же, как и неверный пароль. Без этого пользователь мог бы перечислить, какие действительные пользователи существуют, пытаясь один и тот же вход в систему 5 раз.