Ubuntu OpenConnect Server

Обновляем сервер перед установкой пакетов

sudo apt-get update

sudo apt-get upgrade 

Устанавливаем ocserv и необходимые утилиты 

sudo apt install ocserv gnutls-bin

Проверяем статус сервера ocserv

systemctl status ocserv

Создаём директорию для работы с ключами и сертификатами, переходим в нее

mkdir /etc/ocserv/cert
cd /etc/ocserv/cert/

Создаём файл /etc/ocserv/cert/ca.tmpl с регистрационными данными для сертификационного центра

nano ca.tmpl

Вносим данные (можно изменить на свои),

cn = "My CN"
organization = "CN"
serial = 1
expiration_days = -1
ca
signing_key
cert_signing_key
crl_signing_key

Сохраняем, закрываем генерируем ключ ca-key.pem и сертификат ca-cert.pem сертификационного центра

certtool --generate-privkey --outfile ca-key.pem
certtool --generate-self-signed --load-privkey ca-key.pem --template ca.tmpl --outfile ca-cert.pem

Создаём файл /etc/ocserv/server.tmpl с регистрационными данными сервера

nano /etc/ocserv/server.tmpl

Вносим данные (можно изменить на свои).

Желательно что бы CN совпадало с публичным доменным именем или IP-адресом вашего сервера. Если у вас нет домена, используйте IP. Например cn = “vpn.example.com” или “195.161.0.1” и dns_name = “vpn.example.com”

cn = "MY CN"
dns_name = "my.cnnn"
organization = "My cn"
expiration_days = -1
signing_key
encryption_key
tls_www_server

Сохраняем, закрываем, создаем ключ server-key.pem, и сертификат server-cert.pem для VPN-сервера

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

Создаём директорию для итоговых ключей и сертификатов

mkdir /etc/ocserv/ssl/

Переходим в директорию /etc/ocserv/cert/ копируем ранее созданные в /etc/ocserv/ssl/ файлы

cd /etc/ocserv/cert/
cp ca-cert.pem server-key.pem server-cert.pem /etc/ocserv/ssl/

Конфигурируем OpenConnect сервер, редактируя файл конфигурации /etc/ocserv/ocserv.conf

nano /etc/ocserv/ocserv.conf

Комментируем строку и другие методы аутентификации

auth = "pam"

Добавляем строку. 

auth = "plain[passwd=/etc/ocserv/passwd]"

Все это изменяет метод аутентификации. В последних версиях данные действия уже произведены, но стоит проверить.

Указываем пути расположения будущих файлов сертификатов, вставляя строки

server-cert = /etc/ocserv/ssl/server-cert.pem
server-key = /etc/ocserv/ssl/server-key.pem

Раскомментируем опции сжатия трафика

compression = true
no-compress-limit = 256

При необходимости, указываем максимальное количество подключений к серверу, количество одновременных подключений с одними и теми же учетными данными

max-clients = 16
max-same-clients = 2

а так же настраиваем отслеживание попыток подбора паролей и блокировки перебора

max-ban-score = 80
ban-reset-time = 300
ban-points-wrong-password = 10
ban-points-connection = 1

Система считает баллы, за каждый неправильный ввод пароля начисляется 10 баллов, опция ban-points-wrong-password, при каждом успешном подключении списывается 1 балл, опция ban-points-connection, порог и время блокировки задается в max-ban-score и ban-reset-time

По умолчанию порог равен 80 баллам. 8 неудачных попыток аутентификации заблокируют учетную запись на 5 минут (300 сек), при каждой последующей попытке время блокировки будет продлеваться. 8 неудачных попыток, потребуют 10 успешных аутентификаций.

Если закомментирована строка с указанием подсети VPN, раскомментируем

ipv4-network = 192.168.1.0/24

Если хотим завернуть в туннель все DNS-запросы, указываем

tunnel-all-dns = true

Добавляем DNS сервера

dns = 8.8.8.8
dns = 8.8.4.4

По умолчанию сервер работает на 443 порту, отключаем режим UDP закомментировав строку в начале файла

udp-port = 443

Если необходимо завернуть весь трафик в туннель указываем

route = default

что автоматически, вне зависимости от настроек, активирует

tunnel-all-dns = true

Если необходимо обеспечить доступ в сеть за VPN-сервером, то указываем сеть в параметре

route = 192.168.72.0/24

Параметр no-route позволяет создать исключение в правилах маршрутизации, например можно направить в туннель все сети 192.168.1.0/24 за исключением сети 10.10.1.0/24

route = 192.168.1.0/24
no-route = 10.10.1.0/24

default – весь трафик идет через VPN соединение

split vpn – только указанные подсети или отдельные IP адреса будут перенаправляться через VPN соединение

no route – указанные подсети или отдельные IP адреса не будут перенаправляться через VPN соединение

Сохраняем конфигурацию, включаем маршрутизацию в файле /etc/sysctl.conf 

nano /etc/sysctl.conf

раскомментируя строку

net.ipv4.ip_forward = 1

Перечитываем изменения

sysctl -p

Создание пользователей VPN

Выше настроили аутентификацию по логину и паролю указав файл, в котором будут находится эти данные, создадим данный файл

touch /etc/ocserv/passwd

Создадим пользователя, для примера user в группе default и зададим пароль

ocpasswd -c /etc/ocserv/passwd -g default user

Запуск сервера и добавление в автозапуск

systemctl start ocserv
systemctl enable ocserv

Контрольный рестарт сервера

systemctl restart ocserv

Проверка статуса

systemctl status ocserv

Для мониторинга сервера будем использовать утилиту occtl, например

occtl show users

перечень команд

disconnect user [NAME] – отключить указанного пользователя
disconnect id [ID] – отключить указанный ID
unban ip [IP] – разблокировать указанный IP
reload – перезагружает конфигурацию сервера
show status – выводит состояние и статистику сервера
show users – выводит подключенных пользователей
show ip bans – выводит запрещенные IP-адреса
show ip ban points – выводит все известные IP-адреса, на которых есть точки
show iroutes – выводит маршруты, предоставленные пользователями сервера
show sessions all – выводит все идентификаторы сеансов
show sessions valid – выводит все сеансы, допустимые для повторного подключения
show session [SID] – выводит информацию об указанном сеансе
show user [NAME] – выводит информацию об указанном пользователе
show id [ID] – выводит информацию об указанном ID
show events – выводит информацию о подключенных пользователях
stop now – завершает работу сервера
reset – сбрасывает экран и терминал
help or ? – выводит эту справку
exit – выходит из этого приложения

Для мониторинга параметров Интернет подключения будем использовать SpeedTest установив командой

apt install speedtest-cli

Устанавливаем, если это необходимо, Iptables

sudo apt install iptables

sudo apt install iptables-persistent

Разрешим доступ по 22 порту SSH с определенных IP

sudo iptables -A INPUT -s вашIP -p tcp –dport 22 -j ACCEPT

Откроем 443 порт HTTPS

sudo iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT

Разрешим установленные соединения, правило должно быть первым

iptables -I INPUT 1 -m state --state RELATED,ESTABLISHED -j ACCEPT

Закроем остальные подключения, указав что для данной зоны (входящего трафика) запрещено все что не разрешено

sudo iptables -P INPUT DROP

Настроим NAT

sudo iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to-source ip_нашего_сервера

Правила для трафика из VPN наружу (все разрешено)

iptables -A FORWARD -s 192.168.1.0/24 -j ACCEPT
sudo iptables -A FORWARD -p all -m state --state ESTABLISHED,RELATED -j ACCEPT

Сохраняем правила, иначе они сбросятся при перезагрузке (было неожиданно обидно)

sudo netfilter-persistent save

Вроде все. Пробуем подключаться.

 

 

Leave a Reply