Главная » Виртуальные частные сети » OpenVPN » Защита сервера OpenVPN с использованием Fail2ban

📑 Защита сервера OpenVPN с использованием Fail2ban

Блокировка неавторизованных запросов к 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
При перепечатке просьба вставлять активные ссылки на oslogic.ru
Copyright oslogic.ru © 2025 . All Rights Reserved.