Настройка OpenVPN сервера
Исходная система:
1 2 3 4 5 6 |
root@ubuntu:~# lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 18.04.5 LTS Release: 18.04 Codename: bionic |
1. Установить пакеты
————————————————-
1 |
root# apt install openvpn openvpn-auth-ldap easy-rsa |
Дополнительно рекомендую установить
1 |
root# apt install mc htop iftop snmpd |
2. Настроить Easy-RSA
————————————————-
1 2 |
root# cd /usr/share/easy-rsa root# cp openssl-1.0.0.cnf openssl.cnf |
2.1 Указать требуемые параметры
————————————————-
root# nano vars
export KEY_COUNTRY=»RU»
export KEY_PROVINCE=»SMR»
export KEY_CITY=»Samara»
export KEY_ORG=»SPECNIX»
export KEY_EMAIL=»admin@specnix.ru»
export KEY_OU=»OIT»
2.2 Загрузить vars в переменную среду
————————————————-
1 2 3 |
root# cd /usr/share/easy-rsa root# chmod +x vars root# source ./vars |
Посмотреть что получилось можно командой: printenv
Вроде как надо все почистить, хотя ничего и так нет:
root# ./clean-al
3. Создать CA с паролём.
————————————————-
1 2 3 4 5 6 7 |
root# ./build-ca --pass Can't load /root/.rnd into RNG 140198780277184:error:2406F079:random number generator:RAND_load_file:Cannot open file:../crypto/rand/randfile.c:88:Filename=/root/.rnd Generating a RSA private key ............................+++++ ....+++++ writing new private key to 'ca.key' |
Дальше будет запрос пароля для нашего CA, придумать, запомнить, указать
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Enter PEM pass phrase: Verifying - Enter PEM pass phrase: ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [RU]: State or Province Name (full name) [SMR]: Locality Name (eg, city) [Samara]: Organization Name (eg, company) [SPECNIX]: Organizational Unit Name (eg, section) [OIT]: Common Name (eg, your name or your server's hostname) [SPECNIX CA]: Name [EasyRSA]: Email Address [admin@specnix.ru]: |
3.1 Создать запрос сертификата для сервера
————————————————-
(cd /usr/share/easy-rsa)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
root# ./build-req --server server Can't load /root/.rnd into RNG 140578671763904:error:2406F079:random number generator:RAND_load_file:Cannot open file:../crypto/rand/randfile.c:88:Filename=/root/.rnd Generating a RSA private key .........................................+++++ ....+++++ writing new private key to 'server.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [RU]: State or Province Name (full name) [SMR]: Locality Name (eg, city) [Samara]: Organization Name (eg, company) [SPECNIX]: Organizational Unit Name (eg, section) [OIT]: Common Name (eg, your name or your server's hostname) [server]: VPNS Name [EasyRSA]: Email Address [admin@specnix.ru]: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: |
3.2 Подписать, надо будет указать пароль, которые задавали при формировании CA в п.3.1
————————————————-
(cd /usr/share/easy-rsa)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
root# ./sign-req --server server Using configuration from /usr/share/easy-rsa/openssl.cnf Can't load /root/.rnd into RNG 139935090246080:error:2406F079:random number generator:RAND_load_file:Cannot open file:../crypto/rand/randfile.c:88:Filename=/root/.rnd Enter pass phrase for /usr/share/easy-rsa/keys/ca.key: Can't open /usr/share/easy-rsa/keys/index.txt.attr for reading, No such file or directory 139935090246080:error:02001002:system library:fopen:No such file or directory:../crypto/bio/bss_file.c:72:fopen('/usr/share/easy-rsa/keys/index.txt.attr','r') 139935090246080:error:2006D080:BIO routines:BIO_new_file:no such file:../crypto/bio/bss_file.c:79: Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows countryName :PRINTABLE:'RU' stateOrProvinceName :PRINTABLE:'SMR' localityName :PRINTABLE:'Samara' organizationName :PRINTABLE:'SPECNIX' organizationalUnitName:PRINTABLE:'OIT' commonName :PRINTABLE:'VPNS' name :PRINTABLE:'EasyRSA' emailAddress :IA5STRING:'admind@specnix.ru' Certificate is to be certified until Apr 11 05:53:37 2030 GMT (3650 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated |
3.3 Сформировать ключ Deffie-Hellman
————————————————-
1 2 3 |
root# ./build-dh Generating DH parameters, 2048 bit long safe prime, generator 2 This is going to take a long time |
4. Сертификаты для клиентов
Можно сделать один сертификат на всех, а можно сделать для каждого индивидуальный, что позволит, например, в случае утери мобильного устройства (ноутбук, планшет, телефон) отозвать сертификат и прекратить доступ к нашему VPN.
(cd /usr/share/easy-rsa)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
root# ./build-req client Can't load /root/.rnd into RNG 139943630385600:error:2406F079:random number generator:RAND_load_file:Cannot open file:../crypto/rand/randfile.c:88:Filename=/root/.rnd Generating a RSA private key ....+++++ ......+++++ writing new private key to 'client.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [RU]: State or Province Name (full name) [SMR]: Locality Name (eg, city) [Samara]: Organization Name (eg, company) [SPECNIX]: Organizational Unit Name (eg, section) [OIT]: Common Name (eg, your name or your server's hostname) [client]:client Name [EasyRSA]: Email Address [admin@specnix.ru]: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: |
4.2 Подписать сертификат клиента
————————————————-
(cd /usr/share/easy-rsa)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
root# ./sign-req client Using configuration from /usr/share/easy-rsa/openssl.cnf Can't load /root/.rnd into RNG 140604554564032:error:2406F079:random number generator:RAND_load_file:Cannot open file:../crypto/rand/randfile.c:88:Filename=/root/.rnd Enter pass phrase for /usr/share/easy-rsa/keys/ca.key: Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows countryName :PRINTABLE:'RU' stateOrProvinceName :PRINTABLE:'SMR' localityName :PRINTABLE:'Samara' organizationName :PRINTABLE:'SPECNIX' organizationalUnitName:PRINTABLE:'OIT' commonName :PRINTABLE:'client' name :PRINTABLE:'EasyRSA' emailAddress :IA5STRING:'admin@specnix.ru' Certificate is to be certified until Apr 11 06:44:02 2030 GMT (3650 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated |
5. Выгрузить с сервера из каталога:
————————————————-
/usr/share/easy-rsa/keys
следующие файлы
ca.crt
client.crt
client.key
5.1 Создать каталог для копирования файлов
————————————————-
1 2 3 4 5 6 |
root# cd /usr/share/easy-rsa/ root# mkdir keys-share root# chmod 777 keys-share root# cp keys/ca.crt keys-share/ root# cp keys/client.crt keys-share/ root# cp keys/client.key keys-share/ |
5.2 Подключиться к серверу через WinSCP и загрузить файлы из каталога keys-share на свой ПК
————————————————-
6. Настроить сервер OpenVPN
6.1 Сгенерировать ta.key и переместить в каталог keys-share для загрузки на ПК
————————————————-
1 2 3 |
root# cd /etc/openvpn/ root# openvpn --genkey --secret ta.key root# cp ta.key /usr/share/easy-rsa/keys-share/ |
6.2 Скопировать дефолтный конфиг
————————————————-
1 2 |
root# cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/ root# gzip -d /etc/openvpn/server.conf.gz |
6.3 Привести конфигурацию к виду
————————————————-
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
root# cat /etc/openvpn/server.conf | grep -v ^# | grep -v ^$ | grep -v ";" port 1194 proto udp dev tun ca /usr/share/easy-rsa/keys/ca.crt cert /usr/share/easy-rsa/keys/server.crt key /usr/share/easy-rsa/keys/server.key dh /usr/share/easy-rsa/keys/dh2048.pem server 10.255.249.0 255.255.255.0 ifconfig-pool-persist /var/log/openvpn/ipp.txt push "route 10.0.0.0 255.0.0.0" push "redirect-gateway def1 bypass-dhcp" keepalive 10 120 tls-auth /etc/openvpn/ta.key 0 # This file is secret cipher AES-256-CBC persist-key persist-tun status /var/log/openvpn/openvpn-status.log log /var/log/openvpn/openvpn.log log-append /var/log/openvpn/openvpn.log verb 3 explicit-exit-notify 1 username-as-common-name # Указать плагин для дополнительной авторизации пользователей в домене, если требуется plugin /usr/lib/openvpn/openvpn-auth-ldap.so /etc/openvpn/ldap.conf |
7. Настроить авторизацию в домене, если указан плагин в п. 6.3
————————————————-
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
root# touch /etc/openvpn/ldap.conf root# nano /etc/openvpn/ldap.conf <LDAP> URL ldap://192.168.1.3:389 #Учетная запись (BindDN) и пароль (Password) для доступа к AD BindDN CN=opvpn,OU=users,DC=specnix,DC=local Password указать_пароль_clear-text Timeout 15 TLSEnable no FollowReferrals yes </LDAP> <Authorization> #Где искать пользователей (указать домен) BaseDN "DC=specnix,DC=local" #Только пользователи которые включены в группу op_vpn_emp SearchFilter "(&(sAMAccountName=%u)(memberOf=CN=op_vpn_emp,OU=groups,DC=specnix,DC=local))" RequireGroup false </Authorization> |
где:
BindDN — учётная запись которой OpenVPN авторизуется в домене, в моем случае это учётная запись opvpn-dd-srv;
Password — для BindDN
BaseDN — домен
SearchFilter — группа в AD куда добавляются пользователи для которым разрешён доступ к OpenVPN
8. Разрешаем серверу работать как роутер, что бы сеть за пределами VPN была доступна
————————————————-
1 2 |
root# echo 1 > /proc/sys/net/ipv4/ip_forward root# sysctl -p |
Что бы после перезагрузки сервер продолжил работать как роутер отредактировать файл /etc/sysctl.config, расcкоментировать параметр:
net.ipv4.ip_forward = 1
9. Настроить клиент
————————————————-
Установить клиент
openvpn-install-2.4.8-I602-Win10.exe
Подложить файлы
ca.crt
client.crt
client.key
ta.key
client.ovpn — предварительно настроить
в каталог c:\Program Files\OpenVPN\config\
подложить преднастроенный файл конфигурации
client.ovpn
Добавить комментарий