Ubuntu 24.04.3 и OpenConnect VPN Server 1.2.4

 

 

Установка и настройка 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

Leave a Reply