Як налаштувати OpenVPN, щоб я міг безпечно користуватися Інтернетом від незахищеної точки доступу?


31

Мета: Я хочу мати можливість безпечно користуватися Інтернетом через домашній ПК, поки мій ноутбук підключений до відкритої точки доступу / точки доступу.

Я дійсно знаю , що я можу використовувати SSH тунель / SOCKS проксі, але я не хочу возитися з додатками ( що робить їх використовувати, якщо взагалі можливо). Я думаю, що мені потрібно налаштування OpenVPN, тому я шукаю докладний посібник щодо того, як:

  1. Встановіть і налаштуйте сервер OpenVPN
  2. Налаштування клієнта OpenVPN (NetworkManager)

Версії Ubuntu, над якими має працювати 10.10 та 11.04.


Це більше питання сервера за замовчуванням, ніж питання про ubuntu.
Луїс Альварадо

1
@Cyrex: 1) є, 2) певно, ні
Лекенштейн

Відповіді:


40

У мене є точне запитання кілька місяців тому, але додатково я хотів мати можливість підключення IPv6, якщо це можливо. Можливо, вас зацікавлять мої запитання на сервері Defaultfault:

У мене на сервері був лише один NIC («мережевий інтерфейс»). У моєму налаштуванні NetworkManager було недостатньо, оскільки мені потрібно запустити спеціальний сценарій для підтримки IPv6. Для простоти, тут я буду використовувати NetworkManager і опускати підтримку IPv6.

По-перше, просто прийміть рішення про метод аутентифікації. Я буду використовувати метод більш безпечного сертифіката, який працює як SSL: під час рукостискання вибирається загальний секрет, який буде використовуватися для сеансу. Інші методи - це загальний ключ; ім’я користувача та пароль.

Сервер

1. Підготуватися

Спочатку встановіть сервер openvpn. Це так само просто sudo apt-get install openvpn. Важка частина - це налаштування. Конфігурація присутня в /etc/openvpn.

2. Налаштуйте автентифікацію

Серверу потрібні сертифікати для ідентифікації себе та своїх клієнтів. Ці сертифікати витягуються з ЦА (загального органу). Створення сертифікатів та відповідних приватних ключів можна зробити на будь-якій машині, це не обов'язково робити на сервері. Якщо ви справді параноїк, вам слід це зробити на машині, яка не підключена до мережі, і використовувати флеш-пам’ять для передачі сертифікатів.

Створіть ЦС та сертифікати для сервера

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

Офіційна документація передбачає зробити адміністрацію /etc/openvpn. Я не є великим шанувальником запуску всього як root, тому я поставлю його в інший каталог.

  1. Створіть каталог адміністрації та скопіюйте файли в ньому, запустивши:

    mkdir ~/openvpn-admin
    cd ~/openvpn-admin
    cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0/ ./easy-rsa
    cd easy-rsa
    
  2. Відредагуйте типові varsнастройки за потребою, наприклад, KEY_SIZE=2048якщо ви параноїдальні.
  3. Завантажте змінні та створіть каталог ключів, запустивши:

    . vars
    
  4. Якщо у вас з’явилася помилка No ... openssl.cnf file could be found Further invocations will fail, запустіть ln -s openssl-1.0.0.cnf openssl.cnfі . varsзнову.

  5. Якщо ви вперше використовуєте цей CA, підготуйте середовище ключів. Ви НЕ запускати цю команду , якщо ви хочете зберегти свій раніше створений CA. Для цього потрібно буде розгорнути новий ca.crt.

    ./clean-all
    
  6. Створіть ЦС, виконавши ./build-ca. Ви можете заповнити будь-яку інформацію, яку ви хочете, але зауважте, що ця інформація буде видима у файлах журналу, коли клієнти підключаться до сервера. Це створить файли ca.keyі ca.crtв підпапці keys. Зберігайте ca.keyфайл у секреті за будь-яких обставин . Якщо цього не зробити, це дозволить кожному, хто має ключ, підключитися до вашого сервера.
  7. Якщо у вас є попередній сертифікат, який втрачено або закінчився, термін дії якого потрібно попередньо відкликати ./revoke-full server. Інакше ви отримаєте помилку в базі даних.
  8. Створіть сертифікат для сервера, запустивши:

    ./build-key-server server
    

    Коли вас запитують пароль, залишайте його порожнім, якщо ви не бажаєте вводити пароль кожного разу при запуску сервера (не рекомендується). Підтвердьте, підписуючи сертифікат та здійснюючи його. У каталозі з'являться два нові файли keys: server.keyі server.crt.

DH та використовувати підготовку до tls-auth

Генерація Діффі-Хеллмана параметрів з допомогою:

./build-dh

За порадами щодо загартовування використовуйте tls-auth. Для цього згенеруйте загально секретний ключ, використовуючи:

openvpn --genkey --secret ta.key

Отриманий файл ( ta.key) також повинен бути розповсюджений клієнтам, але не слід публікувати його.

Створіть сертифікати для клієнтів

Для кожного клієнта ці кроки слід повторити:

  1. Введіть каталог, у якому ви створили сертифікат сертифікату CA та сервера:

    cd ~/openvpn-admin/easy-rsa
    
  2. Якщо ви пропустили крок створення CA, тому що у вас вже є, вам потрібно спочатку завантажити змінні:

    . vars
    
  3. Якщо ви створюєте нові сертифікати через те, що старі втрачені або закінчилися термін дії , вам потрібно скасувати попередній сертифікат ./revoke-full you. Інакше ви отримаєте помилку в базі даних.
  4. Створіть сертифікат клієнта you.keyта його відповідний сертифікат you.crt:

    ./build-key you
    

    CommonNameПовинен бути унікальним. Залиште пароль порожнім, якщо ви використовуєте KDE, оскільки він ще не підтримується до 10.10. Як і у випадку генерації сертифікатів сервера, підтвердьте підписання cert та внесення змін.

3. Налаштування служби OpenVPN

За замовчуванням OpenVPN працює як root під час прийняття з'єднань. Непогана ідея, якщо сервіс доступний із злого Інтернету.

  1. Створіть виділеного користувача для OpenVPN, скажіть openvpn:

    sudo useradd openvpn
    
  2. Передайте файли 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}
    
  3. Скопіюйте файл ta.keyтакож:

    sudo cp ~/openvpn-admin/easy-rsa/ta.key /etc/openvpn
    sudo chmod 400 /etc/openvpn/ta.key
    
  4. Створіть файл /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
    
  5. Встановіть відповідні дозволи на нього, це не потрібно бути секретним, але я вважаю за краще не витікати деталі конфігурації так:

    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

1
Яка конфігурація сервера для входу на основі імені користувача / пароля, де мій клієнт не має знань, щоб налаштувати клієнт vpn все, що я хочу, щоб він використовував сервер ip, ім'я користувача, пароль.

@YumYumYum Не знаєте, як використовувати ім'я користувача / пароль, перегляньте сторінку керівництва openvpn ( man openvpn). Останні версії openvpn мають можливість вставляти сертифікати та ключові файли, тому, можливо, ще простіше надати користувачеві цей єдиний файл конфігурації з інструкціями.
Лекенштейн

Зауважте, що новіші версії Ubuntu поставляються з OpenSSL 1.0.1 та запускаючи . varsкоманду вище, може призвести до помилки, що "файл Opensl.cnf не знайдено. Далі виклики не вдасться". Вам потрібно sudo -s; cd /usr/share/doc/openvpn/examples/easy-rsa/2.0/; ln -s openssl-1.0.0.cnf openssl.cnf, а потім запустіть . varsі інші команди.
Дан Даскалеску

@DanDascalescu Сценарій whichopensslрозміщує openssl-1.0.0.cnfфайл правильно для мене (easy-rsa 2.3.2, OpenSSL 1.0.1e)
Lekensteyn

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

8

Насправді вам не потрібно поспілкуватися з будь-якими програмами. Це працює "так само, як VPN".

  1. Спочатку встановіть tsocksпакет (тимчасові шкарпетки):

    sudo apt-get install tsocks
    
  2. Потім відредагуйте /etc/tsocks.confта введіть

    server = 127.0.0.1
    server_port = 3333
    
  3. Тепер відкрийте термінал і введіть (це з'єднує вас):

    ssh -ND 3333 ssh.url.to.your.home.machine
    
  4. Запустіть (через інший термінал або ALT-F2):

    tsocks firefox
    

Тепер Firefox передає все спілкування через сервер SOCKS на вашому комп'ютері, який створив SSH. Це надає тунель до вашої домашньої машини, де він переходить в Інтернет. Все, що вам потрібно на домашній машині, - це SSH-сервер. Після першого разу просто повторіть кроки 3 та 4.

Це працює як шарм! На жаль, хром не любить цокотів, але так, Firefox працює.


3
Ну, дивіться ваше останнє речення - я не хочу спочатку перевіряти всі мої програми, чи справді вони добре працюють разом з tsocks, коли це може бути лише один клік в аплеті NetworkManager з OpenVPN.
htorque

ДОБРЕ. Моя відповідь, ймовірно, буде корисна людям, які хочуть швидкого вирішення доступу до веб-сайтів.
MarkovCh1

1

Рішення тунелю SSH простіше, ніж ви думаєте. Така програма, як gSTM, запустить / зупинить тунелі для вас за допомогою GUI. Потім просто відкрийте мережевий проксі і змініть його з прямого підключення до Інтернету на налаштування проксі-сервера вручну, натисніть «Застосувати на всій системі», і всі ваші програми повинні надсилати свої дані в тунель - не потрібно поспілкуватися з кожним окремо.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.