УНИТе

Портал > Документация > Инсталиране и конфигуриране на OpenVPN сървър под Linux за свързване на клиентски работни станции и сървъри към инфраструктурата на УНИТе

Инсталиране и конфигуриране на OpenVPN сървър под Linux за свързване на клиентски работни станции и сървъри към инфраструктурата на УНИТе

Съдържание:

  1. Предварителна информация
  2. Изтегляне и инсталиране на OpenVPN сървъра
  3. Конфигуриране на OpenVPN сървъра
  4. Дефиниране на услуга за OpenVPN сървъра (стартиране на OpenVPN при зареждане на системата)
  5. Стартиране на OpenVPN сървъра
  6. Рестартиране на OpenVPN сървъра
  7. Спиране на OpenVPN сървъра
  8. Проверка на статуса на OpenVPN сървъра

 

1. Предварителна информация

Предложеното по-долу изграждане на OpenVPN сървър е специфично за нуждите на проекта УНИТе и има за цел да даде достъп на определени клиентски системи до инфраструктурата на УНИТе. Това не е услуга, която може да се използва за достъп до Интернет през VPN. Обект на достъпа е само инфраструктурата на УНИТе и нищо друго извън нея.

 

2. Изтегляне и инсталиране на OpenVPN сървъра

Използвайте актуализирана и поддържана Linux дистрибуция!

  • CentOS 7, Scientific Linux 7:

    $ sudo yum install epel-release
    $ sudo yum update
    $ sudo yum install openvpn
  • CentOS 8, Scientific Linux 8:

    $ sudo dnf update
    $ sudo dnf install openvpn
  • Debian, Ubuntu:

    $ sudo apt upgrade
    $ sudo apt install openvpn

 

3. Конфигуриране на OpenVPN сървъра

Преди да започнете с конфигурирането на OpenVPN сървъра, отбележете следните важни принципи, на които е базирана тя:

  • комуникацията между клиента и сървъра е TCP-базирана:

    Вярно е, че транспорта на тунелните пакети на база на UDP, е за предпочитане пред TCP. Но поради характера на някои протоколи, които ще бъдат транспортирани и с цел преодоляване на ограничения, наложени от пакетни филтри близо до клиента (понякога UDP комуникациите са лимитирани или обект на неправилна приоритизация), предложената конфигурация използва TCP комуникация между клиента и сървъра.

  • комуникацията между клиента и сървъра имитира HTTPS web-комуникация:

    Клиентът се свързва със сървъра на порт 443/tcp. По този начин се избягва ограничението, наложено от някои пакетни филтри (близо до клиента), което те налагат, блокирайки комуникацията до подразбиращия се OpenVPN порт на сървъра (1194).

  • клиентът получава IPv6 адрес за тунелния интерфейс и маршрут само до IPv6 мрежата, използвана от инфраструктурата на УНИТе:

    Целта на тунелирането не е да предоставя достъп на потребителите до IPv6 Интернет, а нефилтриран достъп до IPv6 инфраструктурата на УНИТе.

  • клиентът получава IPv4 адрес за тунелния интерфейс само формално, без заедно с това да получава маршрутизация до IPv4 инфраструктурата на УНИТе:

    В текущата си версия, OpenVPN сървърът все още изисква клиента да получава не само IPv6, но и IPv4 адрес за тунелния интерфейс (в следващите версии на пакета openvpn това ограничени може да отпадне и ще може да се създава само IPv6 тунел). Клиентът получава, чисто формално, IPv4 адрес (от адресно пространство за частно ползване), но не получава IPv4 маршрутизация до мрежовата инфраструктура на УНИТе или IPv4 Интернет през тунела.

  • клиентът се удостоверява пред сървъра на база валиден X.509 сертификат, чиято валидност допълнително се проверява спрямо OCSP сървър:

    Клиентският софтуер използва (конфигуриран при себе си) X.509 сертификат, за да се удостовери пред сървъра. Този сертификат трябва да е издаден от сертификатния удостоверител на УНИТе и валиден към момента на използването. Валидността се проверява чрез запитване до OCSP сървъра на проекта УНИТе (възможно е сертификата да е бил отменен по някаква административна причина и тоза отмяна се публикува в базата на OCSP сървъра).

По подразбиране, конфигурацията на OpenVPN сървъра се намира в директория /etc/openvpn. При използването на OpenVPN в системи, подчинени на systemd, всеки конфигурационен файл в тази директория (с разрешение *.conf), се разглежда като база за нова услуга (или може да се използва като такава).

Изтеглете шаблона на конфигурационния файл:

https://raw.githubusercontent.com/vessokolev/openvpn-unite/master/server-linux/etc/openvpn/server/hpc-remote-access.conf

и го копирайте като /etc/openvpn/server/hpc-remote-access.conf. По-долу са дадени подробности относно декларациите в този файл, които може да се наложи да промените:

  • local services.unite.uni-sofia.bg

    Това е IP адреса, на който ще слуша OpenVPN сървърския процес. Обикновено, ако сървъра има само един IP адрес, то няма нужда от тази декларация. Но в повечето случаи, заради особености на тунелирането и свързаното с това маршрутизиране, е по-добре тази декларация да бъде вложена в конфигурационния файл.

  • /etc/pki/tls/private/openvpn-server.dh

    Това е файла с параметрите за Diffie-Hellman базирания обмен на ключ между клиента и сървъра. За да го генерирате, следвайте следната процедура:

    $ sudo touch /etc/pki/tls/private/openvpn-server.dh
    $ sudo chmod 600 /etc/pki/tls/private/openvpn-server.dh
    $ sudo openssl dhparam -out /etc/pki/tls/private/openvpn-server.dh 4096
    $ sudo chmod 400 /etc/pki/tls/private/openvpn-server.dh
  • /etc/pki/tls/private/openvpn-server.key

    Това е файла съдържащ частния ключ към сървърския X.509 сертификат, в PEM формат. Направете така, че да не бъде читаем от всички потребители на системата. Първо създайте празен файл /etc/pki/tls/private/openvpn-server.key, установете върху него правата за достъп:

    $ sudo touch /etc/pki/tls/private/openvpn-server.key
    $ sudo chmod 600 /etc/pki/tls/private/openvpn-server.key

    отворете файла и поставете вътре PEM блока с ключа. Ключа може да не е криптиран. В противен случай (т.е. ако е криптиран) ще трябва да въвеждате паролата за декриптиране на ключа всеки пък, когато стартирате/рестартирате OpenVPN. След като поставите ключа, направете файла само читаем:

    $ sudo chmod 400 /etc/pki/tls/private/openvpn-server.key
  • /etc/pki/tls/certs/openvpn-server.with-chain.crt

    Това е файла, който съдържа X.509 сертификата и веригата към него (без кореновия ("root") сертификат), всички в PEM формат. Най-първи във файла е сертификата на сървъра и след него се поставят сертификатите от веригата (без кореновия ("root") сертификат).

  • /etc/openvpn/CA_1

    Това е директория, в която се поставят symlink обекти, които сочат към сертификати, с които се удостоверяват сертификатите на клиентите и чието име е хеш на "subject" полето в сертификата. За да работи удостоверяването на клиентите, трябва да изпълните следното:

    $ wget https://pki.uni-sofia.bg/crt/SU_ECC_Root_CA.crt
    $ sudo mv SU_ECC_Root_CA.crt /etc/openvpn/CA_1/
    $ openssl x509 -noout -hash -in /etc/openvpn/CA_1/SU_ECC_Root_CA.crt

    Резултатът ще е 4c5f24de. Следователно, symlink обекта ще трябва да се създаде така:

    $ cd /etc/openvpn/CA_1
    $ sudo ln -s SU_ECC_Root_CA.crt 4c5f24de.0
  • tls-cipher ...

    Това е декларация, в която се описват шифрите, допустими за осъществяване на SSL комуникацията между сървъра и клиента. Това, което трябва да направите тук е да изберете тези шифри на база на типа ключ, който е в основата на сървърския X.509 сертификат. Ако този сертификат е базиран на RSA двойка ключове, то набора алгоритми е следния (избрани са най-здравите алгоритми, съгласно спецификациите на OpenSSL библиотеките):

    tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384:TLS-ECDHE-RSA-WITH-AES-128-GCM-SHA256

    В случай, че X.509 сертификата на сървъра е базиран на EC (Elliptic Curves):

    tls-cipher TLS-ECDHE-ECDSA-WITH-AES-256-GCM-SHA384:TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256
  • server 10.8.0.0 255.255.255.0

    Това е декларация, в която се описва диапазона от IPv4 адреси, от които да се избере адреса, който ще бъде конфигуриран на края на тунела, който е при клиента. Добре е да използвате диапазон, който няма шанс да се използва често при клиентите.

  • server-ipv6 2001:67c:20d0:29::/64

    Това е декларация, в която се описва диапазона от IPv6 адреси, от които да се избере адреса, който ще бъде конфигуриран на края на тунела, който е при клиента. Тъй като се използват само публични IPv6 адреси, няма как да се получи колизия на адреси.

  • ifconfig-ipv6 2001:67c:20d0:29:1:: 2001:67c:20d0:29:ffff::

    Това е декларация, в която се ограничава диапазона от IPv6 адреси (в рамките на префикса, зададен от деклрацията server-ipv6 2001:67c:20d0:29::/64), от които да се избере адреса, който ще бъде конфигуриран на края на тунела, който е при клиента.

Изтеглете шаблона на скрипта, чрез който се осъществява валидация на клиентските сертификати спрямо OCSP сървъра на УНИТе:

https://raw.githubusercontent.com/vessokolev/openvpn-unite/master/server-linux/etc/openvpn/ocsp.sh

и го запазете като /etc/openvpn/ocsp.sh. Установете съответните права за изпълнение:

$ sudo chmod 750 /etc/openvpn/ocsp.sh

Допълнително, изтеглете следните сертификати:

https://pki.uni-sofia.bg/crt/SU_ECC_Identity_Management_CA.crt

https://pki.uni-sofia.bg/crt/UNITe_ECC_CA.crt

и ги запазете в директория /etc/openvpn/CA_1.

Изтеглете файла:

https://github.com/vessokolev/openvpn-unite/blob/master/server-linux/etc/logrotate.d/openvpn

копирайте го като /etc/logrotate.d/openvpn и създайте директорията /var/log/openvpn:

$ sudo mkdir /var/log/openvpn

 

4. Дефиниране на услуга за OpenVPN сървъра (стартиране на OpenVPN при зареждане на системата)

$ sudo systemctl enable openvpn@hpc-remote-access

 

5. Стартиране на OpenVPN сървъра

$ sudo systemctl start openvpn@hpc-remote-access

6. Рестартиране на OpenVPN сървъра

$ sudo systemctl restart openvpn@hpc-remote-access

 

7. Спиране на OpenVPN сървъра

$ sudo systemctl stop openvpn@hpc-remote-access

 

8. Проверка на статуса на OpenVPN сървъра

$ sudo systemctl status openvpn@hpc-remote-access

 


Последна актуализация: 22 юни 2019

2019 УНИТе, Веселин Колев