Установка і настройка сервера OpenVPN на CentOS 7

У даній статті ми розглянемо установку і настройку OpenVPN сервера на базі Linux CentOS 7, і покажемо, як за допомогою налаштованого OpenVPN-сервера об'єднати в одну мережу два віддалених комп'ютера (або офісу), що знаходяться за NAT. Аутентфікацію VPN клієнтів ми будемо виконувати за сертифікатами.

зміст:

  • Установка OpenVPN і Easy-RSA
  • Налаштування Easy-RSA і випуск сертифікатів
  • Створюємо ключі та сертифікати для OpenVPN-сервера
  • Налаштування OpenVPN сервера: конфігураційний файл, фаєрвол
  • Об'єднуємо кілька офісів (комп'ютерів) за допомогою OpenVPN

VPN - набір технологій, які дозволяють побудувати захищену мережу поверх загальнодоступних мереж або Інтертета. За допомогою VPN можна об'єднати в єдину локальну мережу розділені інтернетом сегментисеті.

OpenVPN - одна з реалізацій технології VPN з відкритим вихідним кодом на базі SSL / TLS (заснований на бібліотеці OpenSSL). За допомогою OpenVPN можна об'єднувати в єдину мережу як віддалені офіси, так і окремі локальні ПК, які знаходяться за NAT.

Установка OpenVPN і Easy-RSA

Першим кроком потрібно підключити репозиторій EPEL і оновити систему:

yum install epel-release -y
yum update -y

Коли система оновиться, потрібно за допомогою менеджера пакетів yum встановити OpenVPN і Easy-RSA (Він нам знадобиться для реалізації інфраструктури PKI ключів на сервері VPN).

yum install openvpn easy-rsa -y

Налаштування Easy-RSA і випуск сертифікатів

Скопіюємо всі скрипти easy-rsa в каталог / Etc / openvpn /:

cp -r / usr / share / easy-rsa / etc / openvpn /

Перейдемо в каталог / Etc / openvpn / easy-rsa / 3 / і створимо там файл vars:

cd / etc / openvpn / easy-rsa / 3 /
nano vars

Додаємо вміст файлу (ви можете його виправити під себе):

set_var EASYRSA "$ PWD" set_var EASYRSA_PKI "$ EASYRSA / pki" set_var EASYRSA_DN "cn_only" set_var EASYRSA_REQ_COUNTRY "RU" set_var EASYRSA_REQ_PROVINCE "MSK" set_var EASYRSA_REQ_CITY "MSK" set_var EASYRSA_REQ_ORG "IT-Company" set_var EASYRSA_REQ_EMAIL "[email protected]. ru "set_var EASYRSA_REQ_OU" IT department "set_var EASYRSA_KEY_SIZE 4096 set_var EASYRSA_ALGO rsa set_var EASYRSA_CA_EXPIRE 7500 set_var EASYRSA_CERT_EXPIRE 3650 set_var EASYRSA_NS_SUPPORT" no "set_var EASYRSA_NS_COMMENT" CERTIFICATE AUTHORITY "set_var EASYRSA_EXT_DIR" $ EASYRSA / x509-types "set_var EASYRSA_SSL_CONF" $ EASYRSA / openssl-1.0 .cnf "set_var EASYRSA_DIGEST" sha512 "

Дані у файлі можна взяти довільні, це не завадить налаштування і подальшій роботі сервера.

Файл повинен бути виконуваним, тому виконаємо:

chmod + x vars

Створюємо ключі та сертифікати для OpenVPN-сервера

Перш ніж створювати ключ, нам потрібно виконати ініціалізацію каталогу PKI і створити ключ CA.
cd / etc / openvpn / easy-rsa / 3 /
# ./Easyrsa init-pki

Note: using Easy-RSA configuration from: ./vars init-pki complete; you may now create a CA or requests. Your newly created PKI dir is: / etc / openvpn / easy-rsa / 3 / pki

створюємо ключ CA:

./ Easyrsa build-ca

Після запуску команди, нам потрібно буде вказати пароль, щоб сертифікати і ключ згенерувати. Пароль буде потрібно надалі для підписання сертифікатів.

Створимо ключ сервера (назва сервера server.vpn.ru):

опція nopass - відключення пароля для server.vpn.ru

# ./Easyrsa gen-req server.vpn.ru nopass

Note: using Easy-RSA configuration from: ./vars Using SSL: openssl OpenSSL 1.0.2k-fips 26 Jan 2017 Generating a 4096 bit RSA private key ... ++ ... ++ writing new private key to '/ etc / openvpn / easy -rsa / 3 / pki / private / server.vpn.ru.key.R4IYCbD1zP '----- 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. ----- Common Name (eg: your user, host, or server name) [server.vpn.ru]: Keypair and certificate request completed. Your files are: req: /etc/openvpn/easy-rsa/3/pki/reqs/server.vpn.ru.req key: /etc/openvpn/easy-rsa/3/pki/private/server.vpn.ru .key

У процесі випуску сертифіката, в графі Common Name потрібно натиснути Enter,.

Підпишемо ключ server.vpn.ru використовуючи наш CA-сертифікат:

./ Easyrsa sign-req server server.vpn.ru

При підписанні сертифіката потрібно пароль, який ми задавали при випуску сертифіката CA:

Як зазначено на скріншоті, в процесі потрібно буде ввести yes і пароль від CA.

Щоб переконатися, що сертифікати згенерувати без помилок, виконайте команду:

# Openssl verify -CAfile pki / ca.crt pki / issued / server.vpn.ru.crt

pki / issued / server.vpn.ru.crt: OK

Все сертифіката OpenVPN сервера створені.

  • Кореневий сертифікат розташований: 'pki / ca.crt'
  • Закритий ключ сервера розташований: 'pki / private / server.vpn.ru.key'
  • Сертифікат сервера розташований: 'pki / issued / server.vpn.ru.crt'

Для генерації ключа клієнта, потрібно виконати команду:

./ Easyrsa gen-req імякліента nopass

Згенеруємо ключ клієнта admin1:

# ./Easyrsa gen-req admin1 nopass

Note: using Easy-RSA configuration from: ./vars Using SSL: openssl OpenSSL 1.0.2k-fips 26 Jan 2017 Generating a 4096 bit RSA private key ... ++ ... ++ writing new private key to '/ etc / openvpn / easy -rsa / 3 / pki / private / admin1.key.R5OY6reT2e '----- 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. ----- Common Name (eg: your user, host, or server name) [admin1]: Keypair and certificate request completed. Your files are: req: /etc/openvpn/easy-rsa/3/pki/reqs/admin1.req key: /etc/openvpn/easy-rsa/3/pki/private/admin1.key

Як і з ключем сервера, потрібно його підписати, використовуючи CA-сертифікат:

./ Easyrsa sign-req client admin1

Сертифікат для користувача створено.

Додатково потрібно згенерувати ключ Діффі-Хеллмана, який буде використовуватися при обміні ключів:

./ Easyrsa gen-dh

Він генерується тривалий час:

Після чого генеруємо TLS сертифікат:

openvpn --genkey --secret ta.key

Якщо ми надалі плануємо відкликати клієнтські сертифікати, нам необхідно згенерувати CRL ключ:

# ./Easyrsa gen-crl

Note: using Easy-RSA configuration from: ./vars Using SSL: openssl OpenSSL 1.0.2k-fips 26 Jan 2017 Using configuration from /etc/openvpn/easy-rsa/3/pki/safessl-easyrsa.cnf Enter pass phrase for /etc/openvpn/easy-rsa/3/pki/private/ca.key: An updated CRL has been created. CRL file: /etc/openvpn/easy-rsa/3/pki/crl.pem

Щоб відкликати сертифікат треба виконати команду:

./ Easyrsa revoke admin1 - де admin1 це ім'я сертифіката

Необхідні для роботи сертифікати створені, скопіюємо їх в робочі директорії:

Сертифікати сервера:

cp pki / ca.crt / etc / openvpn / server /
cp pki / issued / server.vpn.ru.crt / etc / openvpn / server /
cp pki / private / server.vpn.ru.key / etc / openvpn / server /
cp pki / private / dh.pem / etc / openvpn / server /
cp pki / private / ta.key / etc / openvpn / server /
cp pki / crl.pem / etc / openvpn / server /

Сертифікати клієнта:

cp pki / issued / admin1.crt / etc / openvpn / client /
cp pki / private / admin1.key / etc / openvpn / client /

Налаштування OpenVPN сервера: конфігураційний файл, фаєрвол

Перейдемо до налаштувань конфігураційного файлу OpenVPN. Спочатку створимо файл конфігурації OpenVPN server.conf:

cd / etc / openvpn / && nano server.conf

Міняємо вміст файлу на наступне:

# Вказуємо порт, протокол і пристрій port тисячі сто дев'яносто чотири proto udp dev tun # Вказуємо шляху до сертифікатів сервера ca /etc/openvpn/server/ca.crt cert /etc/openvpn/server/server.vpn.ru.crt key / etc / openvpn /server/server.vpn.ru.key # Шляхи до CRL і DH ключів dh /etc/openvpn/server/dh.pem crl-verify /etc/openvpn/server/crl.pem # Вказуємо налаштування IP мережі, адреси з якої буде отримуватимуть VPN клієнти server 15.10.2.0 255.255.255.0 push "redirect-gateway def1" # Вказуємо призначаються DNS сервера push "dhcp-option DNS 77.88.8.8" push "dhcp-option DNS 8.8.4.4" # Дозволити підключатися різним клієнтам, з однаковим ключем duplicate-cn # TLS захист tls-auth /etc/openvpn/server/ta.key 0 cipher AES-256-CBC tls-version-min 1.2 tls-cipher TLS-DHE-RSA-WITH-AES-256 GCM-SHA384: TLS- DHE-RSA-WITH-AES-256-CBC-SHA256: TLS-DHE-RSA-WITH-AES-128-GCM-SHA256: TLS-DHE-RSA-WITH-AES-128-CBC-SHA256 auth SHA512 auth-nocache # Інша конфігурація keepalive 20 60 persist-key persist-tun comp-lzo yes daemon user nobody group nobody # Шлях до лог файлу log-append /var/log/openvpn.log verb 3 

Після чого зберігаємо файл. Я вказав стандартний UDP порту 1194 для VPN сервера, але для роботи OpenVPN ви можете вказати будь-який вільний порт на сервері.

Залишилося налаштувати правила брандмауера, щоб дозволити підключення і маршрутизацію між сегментами.

Якщо ви використовуєте Firewalld, спочатку потрібно активувати модуль ядра forwarding:

# Echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
# Sysctl -p

net.ipv4.ip_forward = 1

Додамо службу openvpn в firewalld, і інтерфейс tun0 в довірену зону

firewall-cmd --permanent --add-service = openvpn
firewall-cmd --permanent --zone = trusted --add-interface = tun0

Активуємо 'MASQUERADE' для довіреної зони firewalld:
firewall-cmd --permanent --zone = trusted --add-masquerade

Активуємо NAT:

firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 15.10.2.0/24 -o IPсервера -j MASQUERADE
firewall-cmd -reload

Якщо ви використовуєте iptables без firewalld, то потрібно виконати наступні команди:

iptables -t nat -A POSTROUTING -s 15.10.2.0/24 -o eth0 -j MASQUERADE
iptables -A INPUT -p tcp -dport 1194 -j ACCEPT
service iptables save

Запустимо OpenVPN і додамо його в автозавантаження Linux:

systemctl start openvpn @ server
systemctl enable openvpn @ server

Перевіримо слухається чи порт 1194 сервісом:

# Lsof -i: 1194 Отримати

COMMAND PID USER FD TYPE DEVICE SIZE / OFF NODE NAME openvpn 11887 nobody 5u IPv4 45892 0t0 UDP *: openvpn

Перевіримо настройки IP мережевого інтерефейса:

# Ip a

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 3: tun0: mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100 link / none inet 15.10 .2.1 peer 15.10.2.2/32 scope global tun0 valid_lft forever preferred_lft forever inet6 fe80 :: db7c: 7fed: 6d4f: 70d2 / 64 scope link flags 800 valid_lft forever preferred_lft forever

Як бачимо, на пристрої tun0 додана зазначена при конфігурації мережу.

Це мінімальні настройки, які потрібно зробити для роботи OpenVPN.

Об'єднуємо кілька офісів (комп'ютерів) за допомогою OpenVPN

Розглянемо, як підключитися до OpenVPN сервера з двох віддалених комп'ютерів, які підключені до інтернету через NAT, і організувати спільну мережу між ними. Для підключення з Windows комп'ютера до сервера OpenVPN я використовую офіційний клієнт від розробників. Завантажити його можна на офіційному сайті, загострювати на цьому увагу не будемо, а перейдемо відразу до налаштування.

Після того як ви встановили клієнт, потрібно перейти до файлу конфігурації, який потрібно створити шляхом:

C: \ Program Files \ OpenVPN \ config \

Я створив файл client і додав в нього наступне вміст:

client dev tun proto udp remote 182.122.41.12 тисячі сто дев'яносто чотири resolv-retry infinite nobind block-outside-dns persist-key persist-tun mute-replay-warnings remote-cert-tls server tls-client auth SHA512 tls-auth "C: \\ Program Files \\ OpenVPN \\ config \\ ta.key "1 remote-cert-eku" TLS Web Server Authentication "ca" C: \\ Program Files \\ OpenVPN \\ config \\ ca.crt "cert" C: \\ Program Files \\ OpenVPN \\ config \\ admin1.crt "key" C: \\ Program Files \\ OpenVPN \\ config \\ admin1.key "cipher AES-256-CBC comp-lzo verb 3

Для настройки нам будуть потрібні створені нами раніше сертифікати клієнта, безпеки і сервера. Їх потрібно завантажити з сервера і помістити в зручну вам директорію, після чого в файлі конфігурації клієнта OpenVPN потрібно вказати шлях до них шлях.

Після ми підключаємося через ярлик Open VPN client в треї:

Я підключився і отримав таку IP для свого ПК:

IPv4-адрес ...: 15.10.2.14 Маска підмережі ...: 255.255.255.252

На другому комп'ютері за NAT я виконав ті ж дії, попередньо створивши сертифікат для другого користувача, при підключенні другої ПК так само отримав IP з мережі:

IPv4-адрес ...: 15.10.2.6 Маска підмережі ...: 255.255.255.252

Після підключення, обидва комп'ютера виявилися в одній мережі і бачать один одного.

Запускаємо пінг на другому ПК:

Обмін пакетами з 15.10.2.14 по з 32 байтами даних: Відповідь від 15.10.2.14: число байт = 32 час = 67мс TTL = 127

Запускаємо пінг на першому ПК:

Обмін пакетами з 15.10.2.6 по з 32 байтами даних: Відповідь від 15.10.2.6: число байт = 32 час = 71мс TTL = 127

Обидва підключені VPN клієнта можуть обмінюватися пакетами, і передавати файли один одному безпосередньо. Таким чином ми змогли об'єднати в одну локальну мережу два ПК, що знаходяться в різних точках країни.

На сервері з OpenVPN ви можете створити необмежену кількість ключів і сертифікатів для користувачів. Якщо вам буде потрібно новий сертифікат, виконайте наступні команди в директорії / Etc / openvpn / easy-rsa / 3:

./ Easyrsa gen-req імякліента nopass
./ Easyrsa sign-req client імякліента

Не забувайте періодично відкликати сертифікати клієнтів, якщо вони не використовуються, щоб зберегти в безпеці ваші дані.