Защита OpenVPN с помощью Fail2Ban

В связи с последними блокировками IP-адресов Роскомнадзором, встала необходимость завести свой собственный VPN сервер.

После успешного запуска собственного VPN сервера, я обратился к лог файлу и обнаружил, что мой сервер постоянно находился под атакой с определенных IP адресов.

Thu Apr 26 16:16:12 2018 TCP connection established with [AF_INET]100.71.136.146:49811
Thu Apr 26 16:16:13 2018 100.71.136.146:49811 TLS: Initial packet from [AF_INET]100.71.136.146:49811, sid=4225b3c8 162d2179
Thu Apr 26 16:16:13 2018 100.71.136.146:49811 Authenticate/Decrypt packet error: packet HMAC authentication failed
Thu Apr 26 16:16:13 2018 100.71.136.146:49811 TLS Error: incoming packet authentication failed from [AF_INET]100.71.136.146:49811
Thu Apr 26 16:16:13 2018 100.71.136.146:49811 Fatal TLS error (check_tls_errors_co), restarting
Thu Apr 26 16:16:13 2018 100.71.136.146:49811 SIGUSR1[soft,tls-error] received, client-instance restarting

Файл лога от OpenVPN засорялся ненужными записями и разростался в размерах. Я решил настроить автоматическую блокировку.

Как это реализовать? Да очень просто, при помощи утилиты Fail2Ban.

Установка Fail2Ban

У меня данная утилита уже установлена, т.к. я устанавливал админ панель VestaCP, если у вас не установлен Fail2ban, то ставим командой:

sudo apt install fail2ban

Настройка Fail2ban на защиту openVPN

И так открываем файл jail.local

sudo nano /etc/fail2ban/jail.local

добавим в конец файла следующий листинг:

[openvpn]
 enabled = true
 filter = openvpn
 action = iptables-multiport[name=openvpn, port=1194, protocol=tcp]
 logpath = /etc/openvpn/openvpn.log
 maxretry = 5
 findtime = 300
 bantime = 3600
 ignoreip = 10.5.5.0/24

port= и protocol= меняем на те, которые у вас прописаны в файле настройки OpenVPN
ignoreip − здесь можно прописать как подсеть, так и отдельный IP-адрес, который будет игнорироваться нашим Fail2Ban
logpath − здесь прописываем полный путь до лог-файла OpenVPN

если при рестарте вашего fail2Ban он выдает ошибку. Попробуйте перенести ваш лог OpenVPN в директорию /var/log/
Не забываем изменить директорию и файле настройки OpenVPN

Далее создаем файл openvpn.conf

sudo nano /etc/fail2ban/filter.d/openvpn.conf

добавим в него следующий листинг:

[Definition]
failregex = <HOST>:[0-9]{5} SIGUSR1[soft,tls-error] received, client-instance restarting
ignoreregex =

Теперь рестартуем наш сервис Fail2Ban

sudo service fail2ban restart

На этом все. Наш Fail2Ban настроен на защиту OpenVPN.