OpenConnect и haproxy
Код: Выделить всё
[Unit]
Description=OpenConnect SSL VPN server
Documentation=man:ocserv(8)
After=network-online.target
[Service]
PrivateTmp=true
PIDFile=/run/ocserv.pid
Type=simple
ExecStart=/usr/sbin/ocserv --foreground --pid-file /run/ocserv.pid --config /etc/ocserv/ocserv.conf
ExecReload=/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target
ocserv.conf - основной конфиг;
ocpasswd - файл со списком пользователей для подключения к VPN-серверу;
Возможно также создать директорию "config-per-user" и кидать в нее файлы, соответствующие имени пользователя из ocpasswd, чтобы переопределять какие-либо параметры конфигурации для конкретного юзера (например, если нужно постоянно выдавать какому-нибудь юзеру определенный IP-адрес).
Добавляются новые пользователи в "ocpasswd" очень просто, с комплекте с OCserv идет утилита с таким же названием "ocpasswd", то есть перейдя в /etc/ocserv и запустив ocpasswd, передав ей в качестве аргумента имя пользователя, которое вы хотите добавить в список, она спросит у вас пароль для него и добавит новый аккаунт куда надо. Естественно, никто не запрещает открывать этот файл в текстовом редакторе и удалять оттуда строки, которые уже не нужны.
/etc/ocserv/ocsvserv.conf
Код: Выделить всё
# TLS-сертификат вашего сервера. Нужно подсунуть сюда пути для сертификатов
# для вашего домена - можете сгененировать их с помощью Letsencrypt/Certbot.
server-cert = /etc/letsencrypt/live/yourdomain.com/fullchain.pem
server-key = /etc/letsencrypt/live/yourdomain.com/privkey.pem
# Можно ограничить количество одновременно подключенных клиентов
max-clients = 32
# И одновременно подключенных одинаковых клиентов (с одинаковым логином), 0 - безлимитно
max-same-clients = 0
# ваш домен
default-domain = video.uralnix.ru
# диапазон IP-адресов, которые вы будете выдавать подключенным клиентам
ipv4-network = 172.16.5.1
ipv4-netmask = 255.255.255.0
# предотвращает утечку DNS, должно быть true
tunnel-all-dns = true
# DNS-сервер, которые будут использовать ваши клиенты.
# Их можем быть несколько
dns = 77.88.8.1
dns = 77.88.8.8
dns = 1.1.1.1
dns = 8.8.8.8
# маршруты, которые будут переданы клиентам: какие диапазоны IP
# нужно будет отправлять через VPN
# route = 10.10.10.0/255.255.255.0
# route = 192.168.0.0/255.255.0.0
# route = fef4:db8:1000:1001::/64
# default = все
route = default
# либо можно пойти "от противного"
# no-route = 192.168.5.0/255.255.255.0
# про это я уже упоминал чуть выше, можно указать путь к дире
# с файлами для переопределения параметров конфигурации для отдельных юзеров
# config-per-user = /etc/ocserv/config-per-user/
# должно быть true если мы подключаемся клиентами от Cisco
cisco-client-compat = true
iptables -t nat -A POSTROUTING -s 172.16.5.0/24 -o ens33 -j SNAT --to-source 192.168.10.1
iptables-save > /etc/iptables
Генерация пароля:
ocpasswd -c /etc/ocserv/ocpasswd gt
haproxy
https://www.linuxbabe.com/linux-server/ocserv-vpn-server-apache-nginx-haproxy
Apache
/etc/apache2/sites-enabled/example.com.conf
Код: Выделить всё
<VirtualHost 127.0.0.2:443>
Код: Выделить всё
Listen 127.0.0.2:443
ocserv
/etc/ocserv/ocserv.conf
Код: Выделить всё
listen-proxy-proto = true
listen-host = 127.0.0.1
haproxy
Закомментировать в файле /etc/haproxy/haproxy.cfg всё что связано с ssl
Код: Выделить всё
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin
stats timeout 30s
user haproxy
group haproxy
daemon
# Default SSL material locations
# ca-base /etc/ssl/certs
# crt-base /etc/ssl/private
# See: https://ssl-config.mozilla.org/#server=haproxy&server-version=2.0.3&config=intermediate
# ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
# ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
# ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets
defaults
log global
mode http
#option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
errorfile 400 /etc/haproxy/errors/400.http
errorfile 403 /etc/haproxy/errors/403.http
errorfile 408 /etc/haproxy/errors/408.http
errorfile 500 /etc/haproxy/errors/500.http
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http
/etc/haproxy/haproxy.cfg
Код: Выделить всё
frontend https
# bind 31.25.244.70:443
bind 192.168.10.245:443
mode tcp
tcp-request inspect-delay 5s
tcp-request content accept if { req_ssl_hello_type 1 }
use_backend ocserv if { req_ssl_sni -i vpn.example.com }
use_backend apache if { req_ssl_sni -i www.example.com }
use_backend apache if { req_ssl_sni -i example.com }
default_backend ocserv
backend ocserv
mode tcp
option ssl-hello-chk
# pass requests to 127.0.0.1:443. Proxy protocol (v2) header is required by ocserv.
server ocserv 127.0.0.1:443 send-proxy-v2
backend apache
mode tcp
option ssl-hello-chk
server apache 127.0.0.2:443 check
Для проверки работоспособности:
echo | openssl s_client -connect 31.25.244.70:443 | grep subject
Логи:
journalctl -u haproxy.service --since today --no-pager
journalctl -xeu haproxy.service