Установка і настройка openvpn-сервера в debian - debian help

Home # 149; статті # 149; Установка і настройка OpenVPN-сервера в Debian

список розділів

VPN (Virtual Private Network) - віртуальна приватна мережа. VPN - система, що дозволяє організувати якусь віртуальну мережу об'єднує кілька віддалених одна від одної мереж в єдине ціле за допомогою сторонньої мережі, яка при цьому може бути незахищеними. Наприклад, об'єднання мереж філій в одну за допомогою інтернету. Безпека і надійність забезпечується за рахунок коштів криптографії.

Для чого може знадобиться VPN-сервер? У професійному варіанті - для безпечного доступу до сервера або до мережі з великою кількістю серверів або робочих комп'ютерів. Можна організувати доступ користувачів з будь-якої точки світу за допомогою інтернету і ноутбука до їх робочих машин в офісі або доступ системних адміністраторів до серверів знаходяться в локальній мережі організації з віддалених робочих місць.

В куди менш професійному варіанті - для доступу до закритих сайтів з офісу. Якщо злий адмін закрив доступ до потрібних вам сайтам і при цьому чисто випадково у вас вдома працює сервер під Debian 6, то ви можете налаштувати VPN-тунель зі своєї робочої машини до VPN-сервера у вас вдома і насолоджуватися інтернетом без обмежень.

У цьому посібнику ми будемо налаштовувати VPN на основі OpenVPN під управлінням Linux Debian 6. Крім того в тексті наведені довгі витримки з логів, так як коли настроюєш перший раз не відомо як має виглядати нормальний вміст журналу. Також будемо розраховувати, що ви вже налаштували мережу.

Друга команда не дала ніякого висновку на моєму сервері, але роботі VPN це не завадило.

Установка OpenVPN-сервера

Припускаємо, що на сервері всі дії проводяться з-під рута.

У підсумку на сервері використовувалися наступні версії ПО: Debian 6.0.7, OpenVPN 2.1.3-2, OpenSSL 0.9.8o

генерація ключів

Створюємо директорію під ключі:

У неї копіюємо утиліти і конфіги для роботи з ключами:

UPD. Якщо у вас більш нова версія OpenVPN і easy-rsa в постачанні немає, то ви можете побачити наступне повідомлення про помилку:

cp: can not stat '/usr/share/doc/openvpn/examples/easy-rsa/2.0/*': No such file or directory

Не варто лякатися. Досить встановити його зі сховищ:

і скопіювати файли з іншого директорії:

Робиться це для того, щоб після поновлення OpenVPN-сервера зроблені нами зміни не перезаписати.

Переходимо в цю директорію:

У файлі vars налаштовуємо параметри ключа:

Нас цікавить тільки наступний блок:

Міняємо на що-небудь на зразок:

Очищаємо від старих сертифікатів і ключів папку keys / server:

Generating a 1 024 bit RSA private key
. ++++++
. ++++++
writing new private key to 'ca.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) [Leningradskaya]:
Locality Name (eg, city) [SaintPetersburg]:
Organization Name (eg, company) [Firm]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) [Firm CA]: debgate
Name []: vasya
Email Address [[email protected]]:

У квадратних дужках вказуються значення за замовчуванням, ті які були задані у файлі vars. У таких рядках можна просто натискати клавішу "Введення".

Генеруємо ключ сервера:

Generating a 1 024 bit 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) [Leningradskaya]:
Locality Name (eg, city) [SaintPetersburg]:
Organization Name (eg, company) [Firm]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) [server]:
Name []:
Email Address [[email protected]]:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /etc/openvpn/easy-rsa/openssl.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName: PRINTABLE: 'RU'
stateOrProvinceName: PRINTABLE: 'Leningradskaya'
localityName: PRINTABLE: 'SaintPetersburg'
organizationName: PRINTABLE: 'Firm'
commonName: PRINTABLE: 'server'
emailAddress: IA5STRING: '[email protected]'
Certificate is to be certified until Mar 24 14:50:43 2023 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

По ходу справи можна задати пароль для сертифіката для більшої безпеки.

Генеруємо сертифікат клієнта:

Generating a 1 024 bit RSA private key
. ++++++
. ++++++
writing new private key to 'user.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) [LO]:
Locality Name (eg, city) [SaintPetersburg]:
Organization Name (eg, company) [Firm]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) [user]:
Name []:
Email Address [[email protected]]:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /etc/openvpn/easy-rsa/openssl.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName: PRINTABLE: 'RU'
stateOrProvinceName: PRINTABLE: 'LO'
localityName: PRINTABLE: 'SaintPetersburg'
organizationName: PRINTABLE: 'Firm'
commonName: PRINTABLE: 'user'
emailAddress: IA5STRING: '[email protected]'
Certificate is to be certified until Mar 28 13:30:46 2023 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

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

Зверніть увагу, що значення полів Common Name для сервера і клієнта повинні бути різними.

Генеруємо ключ Діффі - Хеллмана:

Generating DH parameters, 1024 bit long safe prime, generator 2
This is going to take a long time

Нарешті, останній ключ для tls-аутіфікаціі:

Після цього в директорії / etc / openvpn / easy-rsa / keys / утворилося досить кілька файлів частина з яких потрібна сервера, а частина - клієнтові.

Копіюємо серверні ключі в директорію / etc / openvpn:

Клієнту ж знадобляться наступні ключі:

user.crt
user.key
ca.crt
ta.key

Ключ ta.key знадобиться для tls-аутентифікації, яку ми будемо налаштовувати на другому етапі.

Налаштування OpenVPN-сервера

Базовий конфігураційний файл можна отримати наступним чином:

Правимо конфігураційний файл VPN-сервера в Debian:

Задаємо такі параметри:

За рахунок зазначених параметрів ми вибираємо порт, протокол, тип з'єднання, вказуємо сертифікати, задаємо параметри VPN-мережі, вказуємо файл в якому зберігання інформації з'єднань (щоб можна було їх відновити після перепідключення клієнта), задаємо параметри підтримки з'єднання, просимо використовувати стиснення переданих даних , вказуємо сервера при перезавантаження сторінки не підключатися до ресурсів які можуть бути недоступні через зниження привілеїв, задаємо файл статусу (містить інформацію про підключених клієнтів), лог-файл і рівень підр бності налагоджувальної інформації.
Якщо потрібно більше налагоджувальної інформації, то для параметра verb можна встановити значення аж до 9. У більшості випадків вам повинно вистачити значення 5 або максимум 6.

Після цього для перевірки запустіть сервер з командного рядка:

Хоча швидше за все після установки openvpn в Debian, демон буде вже запущений і щоб він нам не заважав, його варто зупинити:

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

Налаштування OpenVPN-клієнта

Я використовував дистрибутив Linux Mint 14 заснований на Ubuntu, який в свою чергу заснований на Debian. На клієнті дії виконувалися під звичайним користувачем із застосуванням команди sudo.

Нагадаю, клієнту потрібно передати наступні ключі:

Потім на клієнтській машині розташувати їх в директорії / etc / openvpn /.

Копіюємо файл з приблизною конфігурацією клієнта в потрібну директорію:

Далі наведено список базових директив дозволяють підключитися до налаштованому раніше сервера:

Після цього, якщо все нормально то в консолі нічого не повинно з'являтися і не повинно відображатися запрошення командного рядка. У балці клієнта /var/log/openvpn.log долно з'явитися приблизно наступне:

У балці сервера додасться наступне:

Ми налаштували OpenVPN-сервер в Debian по мінімуму, перевірили його працездатність. Залишилося додати tls-шифрування і загорнути на VPN-сервер весь трафік клієнта.

Додаємо tls-шифрування

На сервері пишемо в /etc/openvpn/server.conf:

На клієнті в /etc/openvpn/client.conf:

Фактично різниця тільки в першому рядку. На сервері в кінці рядка ставимо нуль, на клієнті - одиницю.

Знову єднаємося, пінгуем 10.8.0.1. Якщо пінг проходить, значить все добре.

Якщо VPN-сервер перезапустити, то після з'єднання з клієнтом в балці буде приблизно наступне:

Як видно, з'явилися рядки про ключ ta.key. також змінилися рядки про cipher.

Загортаємо весь трафік на VPN-сервер

Тут потрібно замінити конфігураційний файл тільки на сервері. Додаємо рядки:

Перший рядок змінює шлюз на заданий на VPN-сервері. Після відключення буде повернений шлюз, який був заданий на клієнті раніше.

Другий рядок задає DNS-сервер, який буде використовуватися після підключення до VPN-сервера.

Також нам необхідно на сервері задати правило для маршрутизації трафіку з мережі VPN-сервера в локальну мережу або мережу інтернет-провайдера. У debian це можна зробити правилом для iptables:

Тепер можна по нормальному запустити openvpn-сервер і клієнт:

Єдина незручність, при запуску демона на клієнті буде постійно підтримуватися VPN-з'єднання. Про те, як відключити автозавантаження демона можна прочитати в статті про управління автозавантаженням в debian.

Якщо ви використовуєте Linux на вашому робочому комп'ютері, то для зручного підключення до VPN можна використовувати модуль до Network-Manager.

Додаткові параметри

client-to-client - дозволяє клієнтам VPN-сервера зв'язуватися один з одним.
duplicate-cn - параметр потрібно додати якщо ви для всіх клієнтів створили однакові ключі, але клієнти при цьому представляються різними common name.
max-clients 100 - обмеження максимального числа одночасно підключених клієнтів

Для підвищення безпеки на linux-системах можна знизити права VPN-сервера:

UPD. Якщо після всього у вас проблеми з NAT і пристроєм TUN, то включіть підтримку форвардинга. Для цього в файлі /etc/sysctl.conf налаштуйте параметр:

і потім застосуйте його командою:

Схожі статті