OpenConnect

Материал из sysadm
Перейти к навигации Перейти к поиску

Обзор

  • OpenConnect - это Open Source версия AnyConnect от CISCO, к серверу OpenConnect можно подключаться клиентами для AnyConnect, так же есть OpenSource клиенты для OpneConnect на Windows и Linux


Установка

# установка debian/ubuntu
apt install ocserv

# установка rhel/rocky
dnf install ocserv

# сохранение оригинала конфигурации и зачистка комментариев
mv /etc/ocserv/ocserv.conf /etc/ocserv/ocserv.conf.orig
grep -Ev '^#|^$' /etc/ocserv/ocserv.conf.orig > /etc/ocserv/ocserv.conf

# что необходимо проверить/изменить в конфигурации
vi /etc/ocserv/ocserv.conf
#-------------------------------------------------------------------------------
# задать аутентификацию по паролю
auth = "plain[passwd=/etc/ocserv/passwd]"

# если необходимо сменить tcp порт
tcp-port = 8443

# закоментировать udp
#udp-port = 443

# задать актуальные параметры для сертификата
server-cert = /etc/letsencrypt/live/vpn.yourdomain.com/fullchain.pem
server-key = /etc/letsencrypt/live/vpn.yourdomain.com/privkey.pem
ca-cert = /etc/letsencrypt/live/vpn.yourdomain.com/chain.pem

# задать интервал проверки/завершения неактивных клиентских сессий
keepalive = 120 

# включите PMTUD (Path MTU Discovery), для согласования MTU
try-mtu-discovery = true

# отключите все устаревшие протоколы SSL/TLS, чтобы работал только последний TLS1.3
tls-priorities = "NORMAL:%SERVER_PRECEDENCE:%COMPAT:-RSA:-VERS-SSL3.0:-ARCFOUR-128:-VERS-TLS1.0:-VERS-TLS1.1:-VERS-TLS1.2"

# задайте домен по умолчанию по полному имени вашего хоста
default-domain = vpn.yourdomain.com

# задайте VPN подсеть, так чтобы она не пересекалась с вашими подсетями
ipv4-network = 10.20.30.0
ipv4-netmask = 255.255.255.0

# если не задано ни одного маршрута, то VPN интерфейс станет шлюзом по умолчанию
# если задан хоть один маршрут, то в VPN будут маршрутизироваться только заданные подсети
#route = 10.0.0.0/8
#route = 172.16.0.0/12
#route = 192.168.0.0/16

# можно явно указать что VPN будет шлюзом по умолчанию (не проверял)
route = default

# исключите из маршрутизации на VPN интерфейс хост VPN сервера и все что не должно идти через VPN
no-route = <IP_VPN_SERVER>/255.255.255.255
no-route = 192.168.4.0/255.255.255.0
no-route = 192.168.5.0/255.255.255.0

# (НЕ ПРОВЕРЕНО) маскировка под обычный сайт
# подключение к VPN по секретному URL https://your.host.ru/***mysecretkey***
camouflage = true
camouflage_secret = "***mysecretkey***"
camouflage_realm = "Restricted Content"    # текст, который будет отображаться при подключении браузером или сканером на корневой URL
default_homepage = "https://your.site.ru"  # дополнительным параметром можно перенаправлять браузер на другой URL

#-------------------------------------------------------------------------------

# статус сервиса
systemctl status ocserv

# включите, если не включен
systemctl enable ocserv

# перезапустите если был запущен на конфигурации по умолчанию
systemctl stop ocserv
systemctl start ocserv

# создайте vpn польователей
ocpasswd -c /etc/ocserv/ocpasswd user1
ocpasswd -c /etc/ocserv/ocpasswd user2

# удаление пользователя (если потребуется)
ocpasswd -c /etc/ocserv/ocpasswd -d user2

Настройка в качестве интернет шлюза

Разрешение на передачу трафика

Debian 13

nano /etc/sysctl.d/99-sysctl.conf
#-------------------------------------------------------------------------------
net.ipv4.ip_forward=1
#-------------------------------------------------------------------------------

# применение конфигурации без перезагрузки
sysctl -p /etc/sysctl.d/99-sysctl.conf

# проверка
sysctl net.ipv4.ip_forward

Rocky Linux

vi /etc/sysctl.conf
#-------------------------------------------------------------------------------
net.ipv4.ip_forward=1
#-------------------------------------------------------------------------------
sysctl -p

# настройте на локальном файрволе SRC-NAT или маскарадинг

Настройка правил firewall

Пример правил для nftables

/etc/nftables.conf
#-------------------------------------------------------------------------------
#!/usr/sbin/nft -f

flush ruleset

table inet filter {
        set manage_nets {
                type ipv4_addr
                flags interval
                elements = { 1.2.3.0/24, 20.30.40.0/22 }
        }

        set vpn_nets {
                type ipv4_addr
                flags interval
                elements = { 10.8.0.0/24, 10.20.30.0/24 }
        }

	chain input {
		type filter hook input priority 0; policy drop;
		ct state invalid drop
		ct state established accept
		tcp dport { http, https } accept comment "Allow public services"
		ip saddr @manage_nets icmp type echo-request counter accept comment "Allow ping"
		ip saddr @manage_nets tcp dport { ssh, 8443 } accept
		iifname lo accept
		ip saddr @vpn_nets ip daddr @vpn_nets accept
	}

	chain forward {
		type filter hook forward priority 0; policy drop;
                ct state invalid drop
                ct state established accept
                ip saddr @vpn_nets ip daddr @vpn_nets accept
                ip saddr @vpn_nets accept
	}

	chain output {
		type filter hook output priority -100; policy accept;
	}

        chain postrouting {
                type nat hook postrouting priority srcnat; policy accept;
                ip saddr @vpn_nets oif "ens3" masquerade
        }
}
#-------------------------------------------------------------------------------

настройка на стороне клиента

# установка клиента debian/ubuntu
apt install openconnect

# установка клиента rhel/rocky
dnf install openconnect

# установка соединения
# -b запуск в фоновом режиме
sudo openconnect -b vpn.yourdomain.com:8443

Установка графической части (не обязательно)

dnf install NetworkManager-openconnect
dnf install NetworkManager-openconnect-gnome