Устанавливаем OpenConnect VPN 1.3.0 на Oracle Linux 9.5 и настраиваем client-to-site подключения с использованием PAM-аутентификации и site-to-site подключения с использованием аутентификации на основе сертификатов
Замечание: client-to-site и site-to-site подключения будут устанавливаться с Windows 10 и Oracle Linux соответственно
Установка OpenConnect
Включаем маршрутизацию IPv4-пакетов между интерфейсами
echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/0-ocserv.conf
Устанавливаем репозиторий EPEL
dnf install epel-release
Устанавливаем OpenConnect VPN
dnf install ocserv
Настройка PAM-аутентификации для c2s-подключений
Редактируем файл /etc/ocserv/ocserv.conf
tcp-port = 443
udp-port = 443
server-cert = /etc/ocserv/public.pem
server-key = /etc/ocserv/private.pem
camouflage = true
camouflage_secret = "3a061501-6335-4838-9602-1f1534903e37"
camouflage_realm = "e20b4c1d-e3e1-4531-ac9c-9cd927ab7620"
device = ocs
ipv4-network = 192.168.254.0/24
route = 10.100.100.0/24
dns = 10.100.100.1
default-domain = domain.lan
auth = "pam"
max-clients = 0
max-same-clients = 0
log-level = 1
Выпускаем самоподписанный сертификат
openssl req -x509 -newkey rsa:8192 -days 3650 -keyout /etc/ocserv/private.pem -out /etc/ocserv/public.pem -subj "/CN=Server/" -addext "subjectAltName=IP:1.1.1.1" -nodes
Заменяем содержимое файла /etc/pam.d/ocserv
auth [success=ok default=die] pam_succeed_if.so quiet user ingroup vpn_users
auth [success=1 default=bad] pam_unix.so
auth [default=die] pam_faillock.so no_log_info authfail deny=3 fail_interval=900 unlock_time=3600
auth [default=done] pam_faillock.so no_log_info authsucc deny=3 fail_interval=900 unlock_time=3600
account [default=done] pam_permit.so
Создаем пользователей
groupadd vpn_users
useradd --no-create-home --no-user-group --groups vpn_users test
passwd test
Замечание 1: изменить членство в группе можно командой "gpasswd"
Замечание 2: просмотреть всех членов группы можно командой "lid -g"
Проверяем аутентификацию
pamtester -v ocserv test authenticate
faillock --user test
Установка c2s-подключения
Добавляем корневой сертификат в хранилище доверенных корневых сертификатов
Устанавливаем приложение AnyConnect через Microsoft Store
Создаем новое подключение
VPN provider - AnyConnect
Conection name - AnyConnect
Hostname - https://1.1.1.1?3a061501-6335-4838-9602-1f1534903e37
Устанавливаем подключение
Настройка аутентификации на основе сертификатов для s2s-подключений
Редактируем файл /etc/ocserv/ocserv.conf
tcp-port = 443
udp-port = 443
server-cert = /etc/ocserv/public.pem
server-key = /etc/ocserv/private.pem
camouflage = true
camouflage_secret = "3a061501-6335-4838-9602-1f1534903e37"
camouflage_realm = "e20b4c1d-e3e1-4531-ac9c-9cd927ab7620"
device = ocs
ipv4-network = 192.168.254.0/24
route = 10.100.100.0/24
auth = "certificate"
config-per-user = /etc/ocserv/config-per-user/
route-add-cmd = "ip route add %{R} dev %{D}"
route-del-cmd = "ip route delete %{R} dev %{D}"
max-clients = 0
max-same-clients = 0
log-level = 1
Создаем файл /etc/ocserv/config-per-user/Client
ipv4-network = 192.168.254.0/30
iroute = 10.200.200.0/24
Создаем папку для хранения сертификатов и закрытых ключей
mkdir /var/lib/pki
Создаем файл /var/lib/pki/ca.template
dn = "cn=CA"
serial = 1
expiration_days = -1
ca
signing_key
cert_signing_key
crl_signing_key
Выпускаем сертификат ЦС
certtool --generate-privkey --bits 8192 --outfile /var/lib/pki/ca.key
certtool --generate-self-signed --template /var/lib/pki/ca.template --load-privkey /var/lib/pki/ca.key --outfile /var/lib/pki/ca.crt
Создаем файл /var/lib/pki/server.template
dn = "cn=Server"
ip_address = "1.1.1.1"
expiration_days = -1
signing_key
encryption_key
tls_www_server
Выпускаем сертификат сервера
certtool --generate-privkey --bits 8192 --outfile /var/lib/pki/server.key
certtool --generate-certificate --load-ca-certificate /var/lib/pki/ca.crt --load-ca-privkey /var/lib/pki/ca.key --template /var/lib/pki/server.template --load-privkey /var/lib/pki/server.key --outfile /var/lib/pki/server.crt
Создаем файл /var/lib/pki/client.template
dn = "uid=Client"
expiration_days = -1
signing_key
tls_www_client
Выпускаем сертификат клиента
certtool --generate-privkey --bits 8192 --outfile /var/lib/pki/client.key
certtool --generate-certificate --load-ca-certificate /var/lib/pki/ca.crt --load-ca-privkey /var/lib/pki/ca.key --template /var/lib/pki/client.template --load-privkey /var/lib/pki/client.key --outfile /var/lib/pki/client.crt
Копируем соответствующие сертификаты на сервер и на клиент
Установка s2s-подключения
Устанавливаем необходимые пакеты
dnf install NetworkManager-openconnect
Создаем unit-файл /etc/systemd/system/openconnect.service
[Unit]
Description=OpenConnect Client
After=network.target
[Service]
Type=simple
ExecStart=/usr/sbin/openconnect --protocol=anyconnect --cafile=/etc/openconnect/ca.crt --certificate=/etc/openconnect/client.crt --sslkey=/etc/openconnect/client.key --interface=ocs0 https://1.1.1.1?3a061501-6335-4838-9602-1f1534903e37
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
Устанавливаем подключение
systemctl start openconnect