Без утомительной теории зарисовка о настройке OpenVPN с доменной авторизацией по сертификатам на Ubuntu 18.04.
Устанавливаем необходимый инструментарий:
apt-get install openvpn easy-rsa
Создаём центр сертификации.
Создаём директорию центра сертификации:
make-cadir ~/openvpn-ca
Переходим в рабочую директорию и правим файл с переменными:
cd ~/openvpn-ca
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.
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:
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 авторизации:
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 скачиваем от сюда или с оф. сайта.
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 добавляем в конфигурацию сервера следующие строки:
push "dhcp-option DNS 10.1.6.11"
push "dhcp-option DOMAIN domain.ru"
push "redirect-gateway autolocal"