Установка и настройка OpenConnect VPN Server
В статье использованы: Ubuntu 24.04.3 и OpenConnect VPN Server 1.2.4.
От версии к версии конфигурация ocserv может меняться, поэтому инструкция дана максимально сжато — в виде шпаргалки. Настройка сервера, выбор железа и подключение к консоли считаются уже выполненными.
1. Обновление системы
sudo apt update && sudo apt upgrade -y
2. Установка ocserv и зависимостей
sudo apt install -y ocserv gnutls-bin
3. (Опционально) Проверка статуса службы
Если ocserv падает сразу после установки, проще переустановить систему или поставить другую версию Ubuntu.
systemctl status ocserv
4. Генерация сертификатов
Создаём рабочую директорию
sudo mkdir -p /etc/ocserv/cert
cd /etc/ocserv/cert
Создаём шаблон CA
nano ca.tmpl
Вставьте:
cn = "VPN CA"
organization = "MyCompany"
serial = 1
expiration_days = 3650
ca
signing_key
cert_signing_key
crl_signing_key
Создаём ключ и сертификат CA
certtool --generate-privkey --outfile ca-key.pem
certtool --generate-self-signed --load-privkey ca-key.pem --template ca.tmpl --outfile ca-cert.pem
Создаём шаблон сертификата сервера
nano /etc/ocserv/server.tmpl
Вставьте:
cn = "your.domain.or.ip"
dns_name = "your.domain.or.ip"
organization = "MyServer"
expiration_days = 3650
signing_key
encryption_key
tls_www_server
Генерируем ключ и сертификат сервера
certtool --generate-privkey --outfile server-key.pem
certtool --generate-certificate --load-privkey server-key.pem \
--load-ca-certificate ca-cert.pem \
--load-ca-privkey ca-key.pem \
--template /etc/ocserv/server.tmpl \
--outfile server-cert.pem
Переносим сертификаты в рабочую директорию
sudo mkdir -p /etc/ocserv/ssl
sudo cp ca-cert.pem server-key.pem server-cert.pem /etc/ocserv/ssl/
5. Настройка ocserv.conf
sudo nano /etc/ocserv/ocserv.conf
Основные параметры:
Аутентификация по логину/паролю
Комментируем все строки с методами аутентификации и добавляем или раскомментируем строку. В текущей версии это уже сделано по умолчанию.
auth = "plain[passwd=/etc/ocserv/passwd]"
Пути к сертификатам
Добавляем пути расположения будущих файлов, в текущей версии другие пути закомментированы, но я не раз встречал где это не так и пути приходится замещать, я ставлю их в конце файла
server-cert = /etc/ocserv/ssl/server-cert.pem
server-key = /etc/ocserv/ssl/server-key.pem
ca-cert = /etc/ocserv/ssl/ca-cert.pem
Сжатие трафика
Раскомментируем опции сжатия трафика, в текущей версии они уже раскомментированы
compression = true
no-compress-limit = 256
Ограничения подключений
max-clients = 16
max-same-clients = 2
Защита от перебора паролей
Система считает баллы, за каждый неправильный ввод пароля начисляется 10 баллов, опция ban-points-wrong-password, при каждом успешном подключении списывается 1 балл, опция ban-points-connection, порог и время блокировки задается в max-ban-score и ban-reset-time. По умолчанию порог равен 80 баллам. 8 неудачных попыток аутентификации заблокируют учетную запись на 5 минут (300 сек), при каждой последующей попытке время блокировки будет продлеваться. 8 неудачных попыток, потребуют 10 успешных аутентификаций.
max-ban-score = 80
ban-reset-time = 300
ban-points-wrong-password = 10
ban-points-connection = 1
Подсеть VPN
Если закомментирована строка с указанием подсети VPN, раскомментируем
ipv4-network = 192.168.1.0/24
DNS
dns = 1.1.1.1
dns = 8.8.8.8
Маршрутизация — весь трафик в VPN
default – весь трафик идет через VPN соединение, split vpn – только указанные подсети или отдельные IP адреса будут перенаправляться через VPN соединение, no route – указанные подсети или отдельные IP адреса не будут перенаправляться через VPN соединение. В файле конфигурации есть подробное описание
route = default
tunnel-all-dns = true
Исключение локальной сети (если нужно)
если вы подключаетесь к VPN из локальной сети и хотите оставить доступными устройства сети добавьте данную сеть в параметры no-route
no-route = 10.10.1.0/24
Отключение UDP (опционально)
По умолчанию сервер работает на 443 порту, отключаем режим UDP закомментировав строку в начале файла, не до конца понимаю смысл, пишут что так стабильнее и быстрее, ну ок
# udp-port = 443
6. Включаем маршрутизацию и оптимизацию TCP
sudo nano /etc/sysctl.conf
убедитесь, что присутствуют строки ниже и не забудьте перезапустить сервис
net.ipv4.ip_forward = 1
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
sudo sysctl -p
7. Создание пользователей
Создаём файл паролей
sudo touch /etc/ocserv/passwd
Создаём пользователя
sudo ocpasswd -c /etc/ocserv/passwd -g default user
8. Запуск сервера
sudo systemctl start ocserv
sudo systemctl enable ocserv
sudo systemctl restart ocserv
systemctl status ocserv
9. Мониторинг через occtl
occtl show users
occtl show status
occtl show ip bans
occtl unban ip 1.2.3.4
Основные команды occtl:
disconnect user NAME — отключить пользователя
disconnect id ID — отключить сеанс
show users — список подключённых
show status — информация о сервере
show ip bans — заблокированные IP
show session SID — информация о сеансе
reload — перечитать конфигурацию
exit — выход
10. SpeedTest (если нужно)
sudo apt install -y speedtest-cli
11. Настройка Firewall / NAT
Устанавливаем Iptables
sudo apt install -y iptables iptables-persistent
Разрешаем SSH с определённых IP
sudo iptables -A INPUT -s ВАШ_IP -p tcp --dport 22 -j ACCEPT
Разрешаем HTTPS (порт ocserv)
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
Разрешаем ESTABLISHED
sudo iptables -I INPUT 1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -I INPUT 2 -i lo -j ACCEPT
Запрещаем остальное
sudo iptables -P INPUT DROP
NAT — MASQUERADE (лучше всего для динамического IP)
sudo iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
Разрешаем трафик VPN наружу
sudo iptables -A FORWARD -s 192.168.1.0/24 -j ACCEPT
sudo iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -P FORWARD DROP
Сохраняем правила
sudo netfilter-persistent save
Запуск iptables (если используется)
sudo systemctl start iptables
sudo systemctl enable iptables
sudo systemctl restart iptables