tm

   Без утомительной теории зарисовка о настройке OpenVPN с доменной авторизацией по сертификатам на Ubuntu 18.04.

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

apt-get install openvpn easy-rsa

 

   Создаём центр сертификации.

Создаём директорию центра сертификации:

make-cadir ~/openvpn-ca

Переходим в рабочую директорию и правим файл с переменными:

cd ~/openvpn-ca
nano vars
export EASY_RSA="`pwd`"
export OPENSSL="openssl"
export PKCS11TOOL="pkcs11-tool"
export GREP="grep"
export KEY_CONFIG=`$EASY_RSA/whichopensslcnf $EASY_RSA`
export KEY_DIR="$EASY_RSA/keys"
echo NOTE: If you run ./clean-all, I will be doing a rm -rf on $KEY_DIR
export PKCS11_MODULE_PATH="dummy"
export PKCS11_PIN="dummy"
export KEY_SIZE=2048
export CA_EXPIRE=3650
export KEY_COUNTRY="RU"
export KEY_PROVINCE="NSO"
export KEY_CITY="City"
export KEY_ORG="Organization"
export KEY_EMAIL="Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра."
export KEY_OU="IT Dapartment"
export KEY_NAME="server"

Акцент на переменную KEY_NAME, значение будем использовать с будущем.

 

Применяем:

source vars

Пересоздаём директорию с ключами и назначаем права:

./clean-all

и создаём корневой ЦС:

./build-ca

Данные берутся из ранее созданного vars. Только подтверждаем нажатием Enter.

ERROR
root@vm-uAdmVPN:~/openvpn-ca# ./build-ca
grep: /root/openvpn-ca/openssl.cnf: Нет такого файла или каталога
pkitool: KEY_CONFIG (set by the ./vars script) is pointing to the wrong
version of openssl.cnf: /root/openvpn-ca/openssl.cnf
The correct version should have a comment that says: easy-rsa version 2.x

 

ln -s /root/openvpn-ca/openssl-1.0.0.cnf /root/openvpn-ca/openssl.cnf

Создаём сертификат и ключи центра сертификации:

./build-key-server server

server - это то, что было указано в качестве переменной KEY_NAME в файле vars.

Challenge password НЕ задаём, пропускаем нажатием Enter. На заданые пару вопросов отвечем y.

Создаём ключ Diffie-Hellman:

./build-dh

Может занять продолжительное время.

Создаём подпись для проверки целостности TSL:

openvpn --genkey --secret keys/ta.key

 

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

Находясь в рабочей директории ~/openvpn-ca запускаем скрипт для создания ключей без пароля, например:

./build-key popov.ivan

Для ключей с парольной защитой:

./build-key-pass popov.ivan

Ключи сертиификаты и ключи будут в директории ~/openvpn-ca/keys/.

 

   Настройка OpenVPN.

 Копируем ключи и сертификаты центра сертификации в директорию с OpenVPN:

cd ~/openvpn-ca/keys/
cp ca.crt ca.key dh2048.pem server.crt server.key ta.key /etc/openvpn

Файл конфигурации OpenVPN:

nano /etc/openvpn/server.conf
local 10.1.2.7   #Адрес на котором работает сервис
port 1194   #Порт на котором работает сервис
proto udp4   #Используемый протокол
dev tap0   #Тип интерфейса для приватной сети
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key
dh /etc/openvpn/dh2048.pem
server 192.168.150.0 255.255.255.0   #Приватная сеть
ifconfig-pool-persist /etc/openvpn/ipp.txt   #Соответствия USER-IP
keepalive 10 120   #Проверка состояния подключения
tls-auth ta.key 1
cipher AES-128-CBC
auth SHA256
comp-lzo
;max-clients 100   #Максимальное количество подключений
user nobody
group nogroup
persist-key
persist-tun
writepid /var/run/openvpn.pid
status '/etc/openvpn/status.log'
log-append '/etc/openvpn/openvpn.log'
verb 3
;mute 20
push "route 10.1.6.0 255.255.254.0"   #Маршрут создаваемый на клиентском устройстве
push "route 10.1.2.0 255.255.254.0"
key-direction 0
username-as-common-name
plugin /usr/lib/openvpn/openvpn-auth-ldap.so /etc/openvpn/auth/ldap.conf
script-security 2

Для доменной авторизации устанавливаем:

apt-get install openvpn-auth-ldap
mkdir /etc/openvpn/auth

Редактируем файл конфигурации AD авторизации:

nano /etc/openvpn/auth/ldap.conf
<LDAP>
URL ldap://regions.office.domain.ru
BindDN CN=ldap_user_ro,OU=Service,OU=Users,OU=nsk,DC=domain,DC=ru
Password i1dsfb$sM4
Timeout 15
TLSEnable no
</LDAP>
<Authorization>
BaseDN "OU=Active,OU=Users,OU=nsk,DC=domain,DC=ru"
SearchFilter "(sAMAccountName=%u)"
RequireGroup false
</Authorization>

Или если нужно ограничить возможность авторизации по членству в группе в SearchFilter пишем:

"(&(sAMAccountName=%u)(memberOf=CN=vpn,OU=Groups,OU=nsk,DC=domain,DC=ru))"

Настройка ядра:

sysctl net.ipv4.ip_forward=1
sysctl -p

 Стартуем сервис и добавляем в автозагрузку:

systemctl start openvpn@server
systemctl enable openvpn@server

 

   Настройка подключающихся клиентов:

Клиентской стороне понадобятся следующие файлы из директории ~/openvpn-ca/keys:

ca.crt, ta.key, popov.ivan.key, popov.ivan.crt, дистрибутив OpenVPN и файл конфигурации клиентской части с расширением .ovpn.

OpenVPN скачиваем от сюда или с оф. сайта.

.ovpn
client
dev tap
proto udp
remote 10.1.6.56 1194   #IP адрес к которому подключаемся
resolv-retry infinite
nobind
user nobody
group nogroup
persist-key
persist-tun
ca "ca.crt"
cert "popov.ivan.crt"
key "popov.ivan.key"
remote-cert-tls server
tls-auth ta.key 1
auth SHA256
cipher AES-128-CBC
comp-lzo
verb 3
key-direction 1
auth-user-pass

Если нужно получать на сервере уведомления об отключении клиента, то в конфигурацию добавляем  explicit-exit-notify 3.

Далее устанавливаем OpenVPN, помещаем ca.crt, ta.key, popov.ivan.key, popov.ivan.crt и .ovpn в директорию с установленной программой, как правило сюда: C:\Program Files (x86)\OpenVPN\config. И запускаем OpenVPN от имени администратора.

   Если нужно завернуть весь трафик через VPN добавляем в конфигурацию сервера следующие строки:

nano /etc/openvpn/server.conf
push "dhcp-option DNS 10.1.6.10"
push "dhcp-option DNS 10.1.6.11"
push "dhcp-option DOMAIN domain.ru"
push "redirect-gateway autolocal"

Комментарии отключены