Блокировка неавторизованных запросов к OpenVPN с использованием Fail2ban
Следующее основано на https://stefan.angrick.me/block-unauthorized-openvpn-logins-using-fail2ban.
Установка и настройка fail2ban — https://www.oslogic.ru/knowledge/306/zashhita-servera-fail2ban/
Создание конфигурации фильтра
Добавьте конфигурацию фильтра в файл /etc/fail2ban/filter.d/openvpn.conf. Содержимое файла должно быть примерно следующим (регулярные выражения могут потребовать корректировки):
[INCLUDES] before = common.conf [Definition] failregex = %(__hostname)s ovpn-server.*:.<HOST>:[0-9]{4,5} TLS Auth Error:.* %(__hostname)s ovpn-server.*:.<HOST>:[0-9]{4,5} VERIFY ERROR:.* %(__hostname)s ovpn-server.*:.<HOST>:[0-9]{4,5} TLS Error: TLS handshake failed.* %(__hostname)s ovpn-server.*: TLS Error: cannot locate HMAC in incoming packet from $$AF_INET$$<HOST>:[0-9]{4,5}
- [INCLUDES] before = common.conf: Включает общие настройки Fail2ban.
- [Definition] failregex = …: Определяет регулярные выражения для поиска в логах OpenVPN. В данном случае, ищутся ошибки аутентификации TLS. %(__hostname)s соответствует имени хоста. <HOST> соответствует IP-адресу, который нужно заблокировать. [0-9]{4,5} соответствует номеру порта.
Протестируйте регулярные выражения на ваших лог-файлах с помощью fail2ban-regex:
$ fail2ban-regex -v /var/log/syslog /etc/fail2ban/filter.d/openvpn.conf
- -v: Включает подробный вывод.
- /var/log/syslog: Путь к лог-файлу, который нужно анализировать. Этот путь может отличаться в зависимости от вашей системы.
- /etc/fail2ban/filter.d/openvpn.conf: Путь к файлу фильтра, который нужно использовать.
Создание конфигурации jail
Добавьте конфигурацию jail в файл /etc/fail2ban/jail.d/openvpn.conf:
[openvpn] enabled = true port = 11194 protocol = udp filter = openvpn logpath = /var/log/syslog maxretry = 5
- [openvpn]: Имя jail.
- enabled = true: Включает jail.
- port = 11194: Порт OpenVPN. Измените, если ваш OpenVPN использует другой порт.
- protocol = udp: Протокол OpenVPN. Измените на tcp, если ваш OpenVPN использует TCP.
- filter = openvpn: Имя фильтра, который нужно использовать.
- logpath = /var/log/syslog: Путь к лог-файлу, который нужно анализировать. Этот путь может отличаться в зависимости от вашей системы.
- maxretry = 5: Количество неудачных попыток, после которых IP-адрес будет заблокирован.
Перезапуск Fail2ban
Перезапустите службу Fail2ban:
$ sudo systemctl restart fail2ban.service
Наблюдайте за вашими iptables на предмет заблокированных хостов в цепочке f2b-openvpn (-v также покажет количество пакетов, связанных с каждым правилом):
$ sudo iptables -L -n -v
- -L: Показывает правила в таблице filter.
- -n: Показывает IP-адреса и порты в числовом формате.
- -v: Включает подробный вывод.
Дополнительные замечания и улучшения
- Путь к лог-файлу: Убедитесь, что logpath в файле /etc/fail2ban/jail.d/openvpn.conf соответствует фактическому пути к лог-файлу OpenVPN. В Ubuntu 24.04 OpenVPN обычно пишет логи в /var/log/syslog, но это может быть изменено в конфигурации OpenVPN.
- Регулярные выражения: Регулярные выражения в файле /etc/fail2ban/filter.d/openvpn.conf могут потребовать корректировки в зависимости от формата ваших логов OpenVPN.
- Используйте fail2ban-regex для тестирования регулярных выражений.
- Порт OpenVPN: Убедитесь, что port в файле /etc/fail2ban/jail.d/openvpn.conf соответствует порту, который использует ваш OpenVPN сервер.
- Протокол OpenVPN: Убедитесь, что protocol в файле /etc/fail2ban/jail.d/openvpn.conf соответствует протоколу, который использует ваш OpenVPN сервер (UDP или TCP).
- bantime: Добавьте параметр bantime в файл /etc/fail2ban/jail.d/openvpn.conf для указания времени блокировки IP-адреса. Например, bantime = 3600 заблокирует IP-адрес на 1 час.
- findtime: Добавьте параметр findtime в файл /etc/fail2ban/jail.d/openvpn.conf для указания времени, в течение которого Fail2ban будет учитывать неудачные попытки. Например,
- findtime = 600 будет учитывать попытки в течение 10 минут.
- ignoreip: Добавьте параметр ignoreip в файл /etc/fail2ban/jail.d/openvpn.conf для указания IP-адресов, которые не должны быть заблокированы. Например, ignoreip = 127.0.0.1/8 192.168.1.0/24 будет игнорировать IP-адреса из локальной сети.
- action: Добавьте параметр action в файл /etc/fail2ban/jail.d/openvpn.conf для указания действия, которое должно быть выполнено при блокировке IP-адреса. По умолчанию используется iptables-multiport, который блокирует IP-адрес на всех портах. Вы можете использовать другие действия, такие как отправка уведомления по электронной почте.
Пример улучшенного файла /etc/fail2ban/jail.d/openvpn.conf:
[openvpn] enabled = true port = 1194 protocol = udp filter = openvpn logpath = /var/log/syslog maxretry = 5 findtime = 600 bantime = 3600 ignoreip = 127.0.0.1/8 192.168.1.0/24