У мене є точне запитання кілька місяців тому, але додатково я хотів мати можливість підключення IPv6, якщо це можливо. Можливо, вас зацікавлять мої запитання на сервері Defaultfault:
У мене на сервері був лише один NIC («мережевий інтерфейс»). У моєму налаштуванні NetworkManager було недостатньо, оскільки мені потрібно запустити спеціальний сценарій для підтримки IPv6. Для простоти, тут я буду використовувати NetworkManager і опускати підтримку IPv6.
По-перше, просто прийміть рішення про метод аутентифікації. Я буду використовувати метод більш безпечного сертифіката, який працює як SSL: під час рукостискання вибирається загальний секрет, який буде використовуватися для сеансу. Інші методи - це загальний ключ; ім’я користувача та пароль.
Сервер
1. Підготуватися
Спочатку встановіть сервер openvpn. Це так само просто sudo apt-get install openvpn
. Важка частина - це налаштування. Конфігурація присутня в /etc/openvpn
.
2. Налаштуйте автентифікацію
Серверу потрібні сертифікати для ідентифікації себе та своїх клієнтів. Ці сертифікати витягуються з ЦА (загального органу). Створення сертифікатів та відповідних приватних ключів можна зробити на будь-якій машині, це не обов'язково робити на сервері. Якщо ви справді параноїк, вам слід це зробити на машині, яка не підключена до мережі, і використовувати флеш-пам’ять для передачі сертифікатів.
Створіть ЦС та сертифікати для сервера
Цей крок потрібно зробити один раз, якщо приватний ключ вашого ЦА не буде порушений. У цьому випадку можуть бути створені дійсні сертифікати, які будуть прийняті сервером, що призведе до порушення безпеки.
Офіційна документація передбачає зробити адміністрацію /etc/openvpn
. Я не є великим шанувальником запуску всього як root, тому я поставлю його в інший каталог.
Створіть каталог адміністрації та скопіюйте файли в ньому, запустивши:
mkdir ~/openvpn-admin
cd ~/openvpn-admin
cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0/ ./easy-rsa
cd easy-rsa
- Відредагуйте типові
vars
настройки за потребою, наприклад, KEY_SIZE=2048
якщо ви параноїдальні.
Завантажте змінні та створіть каталог ключів, запустивши:
. vars
Якщо у вас з’явилася помилка No ... openssl.cnf file could be found
Further invocations will fail
, запустіть ln -s openssl-1.0.0.cnf openssl.cnf
і . vars
знову.
Якщо ви вперше використовуєте цей CA, підготуйте середовище ключів. Ви НЕ запускати цю команду , якщо ви хочете зберегти свій раніше створений CA. Для цього потрібно буде розгорнути новий ca.crt
.
./clean-all
- Створіть ЦС, виконавши
./build-ca
. Ви можете заповнити будь-яку інформацію, яку ви хочете, але зауважте, що ця інформація буде видима у файлах журналу, коли клієнти підключаться до сервера. Це створить файли ca.key
і ca.crt
в підпапці keys
. Зберігайте ca.key
файл у секреті за будь-яких обставин . Якщо цього не зробити, це дозволить кожному, хто має ключ, підключитися до вашого сервера.
- Якщо у вас є попередній сертифікат, який втрачено або закінчився, термін дії якого потрібно попередньо відкликати
./revoke-full server
. Інакше ви отримаєте помилку в базі даних.
Створіть сертифікат для сервера, запустивши:
./build-key-server server
Коли вас запитують пароль, залишайте його порожнім, якщо ви не бажаєте вводити пароль кожного разу при запуску сервера (не рекомендується). Підтвердьте, підписуючи сертифікат та здійснюючи його. У каталозі з'являться два нові файли keys
: server.key
і server.crt
.
DH та використовувати підготовку до tls-auth
Генерація Діффі-Хеллмана параметрів з допомогою:
./build-dh
За порадами щодо загартовування використовуйте tls-auth
. Для цього згенеруйте загально секретний ключ, використовуючи:
openvpn --genkey --secret ta.key
Отриманий файл ( ta.key
) також повинен бути розповсюджений клієнтам, але не слід публікувати його.
Створіть сертифікати для клієнтів
Для кожного клієнта ці кроки слід повторити:
Введіть каталог, у якому ви створили сертифікат сертифікату CA та сервера:
cd ~/openvpn-admin/easy-rsa
Якщо ви пропустили крок створення CA, тому що у вас вже є, вам потрібно спочатку завантажити змінні:
. vars
- Якщо ви створюєте нові сертифікати через те, що старі втрачені або закінчилися термін дії , вам потрібно скасувати попередній сертифікат
./revoke-full you
. Інакше ви отримаєте помилку в базі даних.
Створіть сертифікат клієнта you.key
та його відповідний сертифікат you.crt
:
./build-key you
CommonName
Повинен бути унікальним. Залиште пароль порожнім, якщо ви використовуєте KDE, оскільки він ще не підтримується до 10.10. Як і у випадку генерації сертифікатів сервера, підтвердьте підписання cert та внесення змін.
3. Налаштування служби OpenVPN
За замовчуванням OpenVPN працює як root під час прийняття з'єднань. Непогана ідея, якщо сервіс доступний із злого Інтернету.
Створіть виділеного користувача для OpenVPN, скажіть openvpn
:
sudo useradd openvpn
Передайте файли server.key
, server.crt
, ca.crt
і dh1024.pem
(або dh2048.pem
якщо ви змінили розмір ключа) з каталогу ключів в /etc/openvpn
. Дозвіл 400 (лише для читання для власника) - це добре.
sudo cp ~/openvpn-admin/easy-rsa/keys/{server.key,server.crt,ca.crt,dh*.pem} /etc/openvpn
sudo chmod 400 /etc/openvpn/{server.key,server.crt,ca.crt}
Скопіюйте файл ta.key
також:
sudo cp ~/openvpn-admin/easy-rsa/ta.key /etc/openvpn
sudo chmod 400 /etc/openvpn/ta.key
Створіть файл /etc/openvpn/server.conf
і вставте в нього наступні рядки:
proto udp
dev tap
ca ca.crt
cert server.crt
key server.key
dh dh1024.pem
server 10.8.0.0 255.255.255.0
push "redirect-gateway def1"
ifconfig-pool-persist ipp.txt
keepalive 10 120
tls-auth ta.key 0
# Compress data to save bandwidth
comp-lzo
user openvpn
group openvpn
persist-key
persist-tun
# Logs are useful for debugging
log-append openvpn-log
verb 3
mute 10
Встановіть відповідні дозволи на нього, це не потрібно бути секретним, але я вважаю за краще не витікати деталі конфігурації так:
sudo chmod 640 /etc/openvpn/server.conf
4. Оздоблення сервера
Якщо ви створили сертифікати на сервері, непогано зашифрувати або перемістити їх із сервера. У будь-якому випадку не втрачайте ca.key
і server.key
. У першому випадку інші зможуть підключитися до вашого сервера. В останньому можливий MITM .
Клієнт
Окрім IP-адреси сервера, адміністратор сервера повинен передати такі файли:
ca.crt
: для перевірки сертифікатів
server.crt
: для перевірки сервера та спілкування з ним
ta.key
: для зміцнення безпеки
you.crt
: ідентифікувати себе з сервером
you.key
: це як ваш пароль, дозвіл на файли має бути 400 (лише для власника)
1. Установка
Встановіть OpenVPN та плагін NetworkManager (підходить для KDE та Gnome):
sudo apt-get install openvpn network-manager-openvpn
network-manager-openvpn
знаходиться у сховищі Всесвіту.
2. Конфігурація
На панелі керування використовуйте такі деталі:
- Шлюз: IP-адреса сервера
- Тип: "Сертифікати (TLS)" (Gnome) або "X.509 сертифікат" (KDE)
- Сертифікат CA: шлях до
ca.crt
- Сертифікат користувача: шлях до
you.crt
- Приватний ключ: шлях до
you.key
На розширеному :
- Порт шлюзу: Автоматичний (1194) (не потрібно змінювати)
- Використовуйте стиснення даних LZO: увімкнено
- Використовувати TCP-з'єднання: вимкнено
- Використовувати пристрій TAP: увімкнено
- Шифр: за замовчуванням
- Аутентифікація HMAC: за замовчуванням
- Використовуйте автентифікацію TLS: увімкнено
Вкажіть шлях до файлу ключа ta.key
та встановіть "Ключове напрямок" на 1
.
- ( todo - перевірити це ) сервер виштовхує шлюз за замовчуванням, щоб весь трафік переходив через VPN-з'єднання. Останній раз, коли я перевіряв, плагін network-manager-openvpn цього не робив.
Якщо ви не можете змусити NetworkManager працювати або не хочете ним користуватися, покладіть файли ( ca.crt
, ...) /etc/openvpn
і створіть файл /etc/openvpn/client.conf
файлу:
client
dev tap
proto udp
# replace 1.2.3.4 by your server IP
remote 1.2.3.4 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert you.crt
key you.key
ns-cert-type server
tls-auth ta.key 1
comp-lzo
user nobody
group nogroup
verb 3
mute 20
Якщо ви не хочете ввімкнути цю VPN під час завантаження, відредагуйте /etc/default/openvpn
та скаментуйте наступний рядок, видаливши #
:
#AUTOSTART="none"
Щоб розпочати це з'єднання, запустіть:
sudo /etc/init.d/openvpn start client
client
слід перейменувати, якщо ваш файл конфігурації не названий client.conf
. Приклад: якщо ви назвали свій файл конфігурації safe.conf
, вам потрібно запустити sudo /etc/init.d/openvpn start safe
.
Щоб зупинити OpenVPN, потрібно запустити:
sudo /etc/init.d/openvpn stop