Устанавливаем 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

Добавить комментарий