Как создать 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 раз.

Другие вопросы по тегам