Обновляем сервер перед установкой пакетов
sudo apt-get update
sudo apt-get upgrade
Устанавливаем ocserv и необходимые утилиты
sudo apt install ocserv gnutls-bin
Проверяем статус сервера ocserv
systemctl status ocserv
Создаём директорию для работы с ключами и сертификатами, переходим в нее
mkdir /etc/ocserv/certcd /etc/ocserv/cert/
Создаём файл /etc/ocserv/cert/ca.tmpl с регистрационными данными для сертификационного центра
nano ca.tmpl
Вносим данные (можно изменить на свои),
cn = "My CN"organization = "CN"serial = 1expiration_days = -1casigning_keycert_signing_keycrl_signing_key
Сохраняем, закрываем генерируем ключ ca-key.pem и сертификат ca-cert.pem сертификационного центра
certtool --generate-privkey --outfile ca-key.pemcerttool --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 = -1signing_keyencryption_keytls_www_server
Сохраняем, закрываем, создаем ключ server-key.pem, и сертификат server-cert.pem для VPN-сервера
certtool --generate-privkey --outfile server-key.pemcerttool --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.pemserver-key = /etc/ocserv/ssl/server-key.pem
Раскомментируем опции сжатия трафика
compression = trueno-compress-limit = 256
При необходимости, указываем максимальное количество подключений к серверу, количество одновременных подключений с одними и теми же учетными данными
max-clients = 16max-same-clients = 2
а так же настраиваем отслеживание попыток подбора паролей и блокировки перебора
max-ban-score = 80ban-reset-time = 300ban-points-wrong-password = 10ban-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.8dns = 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/24no-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 ocservsystemctl 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 ACCEPTsudo iptables -A FORWARD -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
Сохраняем правила, иначе они сбросятся при перезагрузке (было неожиданно обидно)
sudo netfilter-persistent save
Вроде все. Пробуем подключаться.