Будуємо VPN на Raspberry Pi. Частина перша: як і для чого будувати сервер
Оценка пользователей: / 8
ПлохоОтлично 
There are no translations available.

VPN Raspberry PiБезкоштовний незашифрований бездротовий доступ є майже скрізь, але Ви не повинні перевіряти свій банківський рахунок через нього, бо не можете бути впевнені, що хтось не стежить. Рішення? Віртуальна приватна мережа або VPN.
VPN розширює власну приватну мережу на громадські місця так, що навіть, якщо Ви використовуєте Wi-Fi з'єднання Starbucks, Ваш інтернет-браузер залишається зашифрованим і захищеним.
Є багато способів створити VPN, з використанням безкоштовних і платних сервісів, але кожне рішення має свої плюси і мінуси, що визначається тим, як працює постачальник послуг VPN, а також від параметрів VPN, які надає.
Найпростіше і дешеве рішення зберегти Ваші дані в безпеці, це просто повністю утримуватися від публічного Wi-Fi. Але це звучить трохи екстремально для автора, коли є відносно простий і недорогий спосіб, щоб побудувати свій власний сервер VPN дома, і запустити його на крихітному, недорогому ($35) Raspberry Pi.
Raspberry Pi має розмір смартфона, але він запускає повнофункціональний сервер VPN. Це означає, що незалежно від того, де б автор не був, він може підключити свій комп'ютер до домашньої мережі і отримати доступ до загальних файлів і медіа через захищене з'єднання. Це особливо буває в нагоді при подорожах та відрядженнях.
Це перша частина, в якій автор знайомить Вас зі зручним підручником про те, як встановити VPN. Проблема полягає в тому, що не існує підручника або, принаймні, такого, який міг би задовольнити середнього користувача комп'ютера. І хоча є багато підручників про те, як налаштувати сервер VPN на Raspberry Pi, серед них дуже небагато таких, що пояснюють для чого.
Автор прочитав кілька різних підручників і зліпив результати в цьому напів-когерентному підручнику для створення VPN на Raspberry Pi, який навіть він сам може зрозуміти, в комплекті з «для чого». Слід особливо відзначити, що автор спирався на VPN урок Еріка Jodoin для експертів і спростив його для себе.
VPN Raspberry Pi Home
Архітектура VPN на Raspberry Pi
Тому йдіть далі за автором по кролячій норі криптографії і дізнайтеся, що незалежно від того, наскільки Ви параноїк, той, хто придумав методи для створення віртуальних приватних мереж, був ним і поготів.
Матеріали
Апаратні засоби
Raspberry Pi-2
Raspberry Pi Модель B: Плюс все, що необхідне для нього - автор має на увазі звичайне джерело живлення і коробку, щоб покласти його. Коробка може допомогти запобігти випадковому короткому замиканню, яке може призвести до виходу пристрою з ладу - коробка може бути досить простою, типу картонної коробки, яку Ви зробите самі.
SD-карта: Автор пропонує на 8GB або більше, просто щоб переконатися, що у Вас є простір. Як завжди, для всіх проектів Raspberry Pi, вона має мати встановлений NOOBS.
Кабель категорії 5e: Для з'єднання порта Ethernet Pi з Ethernet-портом маршрутизатора.
Програмне забезпечення
Open VPN: Це послуга VPN з відкритим вихідним кодом, яку ми зараз встановлюватимемо.
Передпроектні вимоги
1) Ви повинні налаштувати NOOBS і встановити Raspbian. Автор раніше написав, які кроки треба зробити для цього, тому Ви можете звернутися до попередньої статті.
2) Вам потрібна статична IP-адреса для Raspberry Pi у Вашій домашній мережі. Це залежить від моделі маршрутизатора, так що використовуйте вказівки виробника маршрутизатора. Якщо Ви ще її не створили, прочитайте підручник ReadWrite.
3) Вам буде потрібний включений SSH. Ми будемо підключатися до Raspberry Pi через SSH - інструмент підключення, який дозволяє нам отримати доступ до Pi з іншого комп'ютера. Таким чином, нам не потрібно приєднувати Pi до монітора і бездротової клавіатури для цього проекту. Ще раз перевірте підручник ReadWrite.
4) Ви повинні будете направити порт 1194 (UDP трафік) на внутрішню IP-адресу Вашого Raspberry Pi, але, як це зробити, залежатиме від Вашого маршрутизатора, так що перевірте інформацію виробника маршрутизатора. Якщо Ви хочете використовувати інший порт або TCP, це нормально, лише переконайтеся в підручнику, що змінили 1194 на правильне для Вас число, і в будь-якому місці він говорить: "UDP" на "TCP". Ви вже здогадалися, що для цього є підручник ReadWrite, звичайно.
Ви можете сказати, що ми будуємо без деяких основних понять Raspberry Pi, це тому, що побудова VPN з Raspberry Pi не є хорошим першим проектом для більшості новачків.
Коротке слово застереження
Автор скопіював фактичний код, який використав, щоб завершити цей проект, але, повертаючись назад до підручника, він помітив, що копіювання і вставка коду зі статті в командному рядку часто призводить до помилок через пробіли і форматування. Якщо у Вас виникли проблеми на будь-якій стадії цього уроку, першою пропозицією автора з усунення неполадок буде переписати команду вручну!
Перші кроки
1) Завантажте та змініть пароль. Якщо Ви все ще використовуєте ім'я користувача за замовчуванням (pi) і пароль (raspberry), то це робить іншу частину даного проекту з безпеки повністю безглуздою!
Відкрийте термінальне/PuTTY вікно і введіть:
sudo passwd
Змініть ім'я користувача і пароль на щось сильне і незабутнє, в іншому випадку навіщо будувати приватну мережу?
2) Тепер давайте збережемо і оновимо Raspberry Pi. Є дві команди, які треба ввести:
sudo apt-get update
sudo apt-get upgrade
Це не займе багато часу і врятує нас від необхідності пошуку та усунення несправностей надалі.
3) Тепер нам потрібне програмне забезпечення з відкритим вихідним кодом. Введіть:
sudo apt-get install openvpn
VPN Raspberry Pi-3
Raspberry Pi запитає, чи Ви впевнені, тому що буде використано небагато місця. Але так як ми готові, отримавши 8 Гб або більшу SD-карту, то для нас це абсолютно нормально.
Генерація ключів
4) Ви ж не хочете нікого, хто знайде адресу Вашого VPN-сервера, щоб мати можливість підключитися. Так що наступне, що ми збираємося зробити, це ключ для адреси сервера. Це все одно, що зберігати двері до Вашого будинку замкненими.
OpenVPN поставляється з Easy_RSA, легким і простим пакетом для використання методу шифрування RSA. Розроблений в 1977 році, RSA був однією з перших використовуваних криптографічних систем, яка все ще використовуються й сьогодні. Ключ шифрування є відкритим, в той час як ключ дешифрування є секретним. Якщо Ви щось читали про те, як працює Bitcoin, то це може здатися трохи знайомим.
З Easy_RSA, Ви запустите алгоритм, який поставляється разом з програмним забезпеченням для створення нового унікального ключа.
Отже, спочатку давайте дамо собі суперповноваження. Ви будете знати, що це працює, коли запрошення командного рядка переключається з "pi@raspberrypi" на "root@raspberrypi".
sudo -s
Ця команда створює ще один екземпляр вікна, в якому ми працюємо, але з привілеями суперкористувача. Ми повинні це зробити тому, бо якщо ми цього не зробимо, Raspberry Pi намагатиметься нам сказати, що у нас немає дозволу, щоб займатися виготовленням ключів.
Так що далі, ми набираємо:
cp –r /usr/share/doc/openvpn/examples/easy-rsa/2.0 /etc/openvpn/easy-rsa
Тут, "cp" виступає для копіювання, а "–r" означає рекурсив (зробити з меншими випадками теж). Це означає, що ми говоримо комп'ютеру, "Скопіюйте цей каталог і все під ним".
Пробіл між /2,0 і /etc означає, що ми копіюємо перші адреси (файл прикладу) в другу папку, яка є тією, яку Ви скажете OpenVPN, щоб знайти ключі.
cd /etc/openvpn/easy-rsa
5) Далі, ми повинні зробити cd, або змінити каталог, на місце, в яке ми тільки що перемістили файл Easy_RSA. Опинившись там, ми повинні відкрити файл /etc/openvpn/easy-rsa/vars для редагування. Ми могли б це зробити, написавши nano /etc/openvpn/easy-rsa/vars, але так як ми знаходимося в папці, то в ній є ярлик:
nano vars
Нано є вбудованим інструментом для редагування на Raspbian і, хоча є й інші, але вони для більш технічно підкованих людей, ми ж просто будемо використовувати нано для редагування всього нашого тексту в цьому підручнику.
Тепер знайдіть і змініть змінну EASY_RSA на:
export EASY_RSA=”/etc/openvpn/easy-rsa”
В автора це було в рядку 13.
VPN Raspberry Pi-4
Навіщо робити цю зміну? В принципі, Ви відповідаєте на питання комп'ютера, "Де Ви хочете розмістити файл?" Ми хочемо експортувати його в ту ж папку, в якій ми будемо тримати наші ключі, в даному випадку, верхній рівень дерева файлів easy-rsa.
Тут одна додаткова річ, яку Ви можете зробити в vars, якщо Ви параноїк відносно читання електронної пошти, - змінити метод шифрування з 1024-бітної на 2048-біт. Документ буквально каже: "збільшіть це число до 2048, якщо Ви параноїк».
Але так як цей метод робить шлях генерування ключів довшим, ми його тут не робимо. Ми залишимо це, як воно виглядає на тексті зображення нижче:
export KEY_SIZE=1024
Натисніть Ctrl+X, щоб зберегти зміни і вийти з редактора нано.
Отримання криптографіки
6) Прийшов час будувати сертифікати CA Certificate і Root CA.
У криптографії, Центр сертифікації (CA) є організацією, яка видає цифрові сертифікати. Цифровий сертифікат засвідчує право власності відкритого ключа.
Ви, напевно, використовувати це весь час, і навіть не знаєте про це. Наприклад, коли автор входить на свій банківський рахунок, то бачить HTTPS перед адресою. Якщо він натискаю на замок, то бачить, що компанія під назвою GeoTrust перевіряє законність сайту його банку, так що автор знає, що сайт не є шахрайським. (Звичайно, останнім часом помилка Heartbleed показала, що HTTPS - не є мірою безпеки, як ми всі звикли думати.)
У разі Raspberry Pi , автор веде себе як власник свого центру сертифікації та підписує ключі OpenVPN сам, замість того, щоб довіряти це сторонній компанії.
cd /etc/openvpn/easy-rsa  
Тепер, коли ми змінили каталоги, введіть кожний з цих рядків один за одним:
source ./vars → Це «джерела» або завантаження документу vars, який відредагований нами раніше.
./clean-all → Це дозволить видалити всі попередні ключі, якщо вони є. Якщо у Вас є ключі і Ви не хочете видаляти в цій папці (наприклад, Ви робите цей урок вдруге), пропустіть цю команду.
./build-ca → Цей останній рядок будує Ваш центр сертифікації .
Після третьої команди, Raspberry Pi вистрелить для Вас купою додаткових полів, щоб заповнити, якщо Ви хочете – назва країни, назва штату або провінції, назва місцевості, назва організації, підрозділ, загальноприйнята назва, ім’я і E-mail адреса. Якщо Ви не бажаєте заповнювати ці поля, просто натисніть "enter" в кожному екземплярі, щоб дати Pi заповнити значення за замовчуванням. Скріншот нижче показує, як це виглядає:
VPN Raspberry Pi-5
Тепер Ви можете назвати сервер. Автор творчо назвав свій "Server". Називайте як хочете, але не забудьте назву:
./build-key-server [Server_Name]
Ще раз, еам збираються виплюнути деякі необов'язкові поля. натисніть "enter" або введіть, що ви хочете, але зверніть увагу на ці області:
  • Common Name (Загальне ім'я) МАЄ бути ім'ям сервера, яке Ви обрали. Це за замовчуванням.
  • A challenge password? (Задати пароль?) ПОВИННО бути порожнім.
  • Sign the certificate? [y/n] (Підписати сертифікат?) Очевидно, що необхідно ввести "у". Ви отримаєте повідомлення про те, що сертифікат буде придатний для сертифікації більше 3650 днів. Так в основному, якщо Ви використовуватимете свій VPN досить довго, то Вам доведеться подовжити цей процес знову на 10 років.
  • 1 out of 1 certificate requests certified, commit? [y/n] (1 з 1 сертифікатів отримав запит на сертифікацію, здійснити?) Очевидно, ввести "у".
VPN Raspberry Pi-6
6) Це установка на стороні сервера. Тепер прийшов час, щоб побудувати ключі для кожного користувача, або "клієнта". В автора є п'ять ключів дома, по одному на кожному комп'ютері, планшетнику, і стільниковому телефоні в будинку. Можливо Ви лінуєтеся і створите тільки один клієнтський ключ для всіх них, але в цьому випадку тільки один пристрій зможе отримати доступ до VPN одночасно.
./build-key-pass UserName
Автор вирішив, що найпростіше зробити імена користувачів client1, client2, client3...
VPN Raspberry Pi-7
І після цього, більше підказок!
  • Enter PEM pass phrase (Введіть PEM парольну фразу). Це зробить пароль, який Ви повинні пам'ятати! Він просить Вас ввести це двічі, так що немає ніякої небезпеки зруйнувати його.
  • A challenge password? (Задати пароль?) ПОВИННО бути порожнім.
  • Sign the certificate? [y/n](Підписати сертифікат). Підписання засвідчує його ще на 10 років.
cd keys
openssl rsa -in Client1.key -des3 -out Client1.3des.key
Важливим висновок цього рядка тексту в тому, що ми використовуємо шифрування DES3, в якому комплексний EncryptionAlgorithm, застосовуваний три рази, для кожного блоку даних, щоб утримати хакерів від злому його методом грубою силою. OpenSSL виступає за реалізацію з відкритим вихідним кодом від Secure Socket Layer, стандартного методу створення захищеного з'єднання. Ви повинні виконати цей крок для кожного клієнта, якого Ви створили.
Деякі стверджують, що цей крок не є необхідним, і що Ви можете просто пропустити цей рядок. Але якщо Ви запускаєте клієнтів OpenVPN Connect на Android або iOS, то це повинно бути зроблено. В іншому випадку, поточні версії можуть мати труднощі розбору ключі, які Вами згенеровані.
Enter pass phrase for Client1.key
Чесно кажучи, автор просто використав ту ж парольний фразу, яку ввів раніше. А потім ще двічі, як показано.
VPN Raspberry Pi-8
Тепер, коли ми створили сертифікат сервера і (принаймні один) сертифікат клієнта, введіть наступну команду:
cd /etc/openvpn/easy-rsa/
або
cd ..
У кожному разі, комп'ютер поверне Вас на одну директорію, до /easy-rsa/.
7) Тепер давайте згенеруємо обмін ключами Діффі-Хеллмана. Це центральний код, який робить Ваш сервер VPN довіреним для обміну, що дозволяє двом об'єктам без попереднього знання один одного поширення секретних ключів повер загальнодоступного сервера. Подібно RSA, це одна з найбільш ранніх криптосистем.
./build-dh
Це може зайняти деякий час: довше, якщо Ви зупинилися на 2048-бітовому шифруванні. Тут немає ніякого дієвого способу передбачити, як довго це займе, тому що використовуються випадкові числа і пошук деяких конкретних співвідношень. Справді, коли автор робив даний урок, це зайняло тільки 5 хвилин з 1024-бітовим шифруванням.
VPN Raspberry Pi-9
8) Нарешті, ми збираємося реалізувати вбудований в OpenVPN захист від атаки відмови в обслуговуванні (DoS). Можливо, Ви вже знаєте, що атака DoS є успішною, коли хакер дізнається адресу Вашого сервера, і генерує таку велику кількість спроб, що Ваш сервер виходить з ладу.
OpenVPN має спосіб, щоб запобігти такого роду нападу до його виникнення, який запускається шляхом створення статичного Pre-Shared ключа коду аутентифікації повідомлення на основі хеша (hash-based message authentication code - HMAC). З цього місця, сервер не буде навіть розглядати ідею аутентифікації запиту на доступ, якщо, в першу чергу, не виявляє цей статичний ключ. Таким чином, хакер не може просто спамити сервер з випадковими неодноразовими запитами.
Генеруємо статичний ключ HMAC за допомогою наступного рядка:
openvpn –-genkey –-secret keys/ta.key
Збираємо все разом
9) Ми згенерували ключі і центр сертифікації, щоб підписати їх. Те, що ми все ще пропустили, це налаштування, щоб сказати OpenVPN, як ми хочемо цей сервер налаштувати.
Програма OpenVPN вже запущена. Проблема в тому, що вона не знає, які ключі використовувати, звідки Ви збираєтеся підключатися, які зв'язки Ви будуєте, або які IP-адреси та порт для використання.
Так як ми використовуємо Linux на Raspberry Pi, то немає графічного інтерфейсу користувача (GUI), щоб розповісти OpenVPN, що він повинен знати. Ось чому ми повинні фактично створити файл .conf (configuration - конфігурація ) в нано редакторі повністю в командному рядку.
Причиною, що ми починаємо ці адреси з /etc/openvpn, є те, що в кінцевому підсумку він буде в папці openvpn. Але зараз, цей файл повністю порожній. Заповніть його звідси. Автор прокоментував заголовними буквами, де Вам обов’язково необхідно змінити значення та назви Вашим власних IP-адрес/імен. Натисніть Ctrl+X, щоб зберегти зміни.
10) Давайте швидко відредагуємо інший файл конфігурації. За замовчуванням, Raspbian не надсилає інтернет-трафіку. Нам потрібно відредагувати ще один файл, щоб дозволити Pi направляти інтернет- трафік через нашу нову мережу.
nano /etc/sysctl.conf
Зверху він говорить, "Розкоментувати наступний рядок, щоб включити форвард пакетів для IPv4". Автор виділив цю частину файлу в скріншоті нижче:
VPN Raspberry Pi-10
Щоб розкоментувати рядок, видаліть # безпосередньо перед ним. Це настройка конфігурації, щоб він знав про направлення IPv4. Тепер, коли Ви розкоментувати цей рядок, то Pi має дозвіл діяти як ретранслятор в мережі Інтернет, а не просто бути приймачем, тобто працювати на передачу і прийом пакетів.
Натисніть Ctrl+X, щоб зберегти зміни. Застосуйте ці зміни, ввівши таку команду:
sysctl -p
Команда sysctl "налаштовує параметри ядра під час виконання". -p говорить, щоб перезавантажився файл із змінами, які Ви тільки що зробили.
11) Ми зараз зробили функціонуючий сервер, який може отримати доступ до Інтернету. Але ми не можемо використовувати його ще й тому, що Raspbian має вбудований міжмережевий екран, який буде блокувати вхідні з'єднання.
Raspbian має брандмауер для захисту Вашого Raspberry Pi від невідомих і несподіваних джерел Інтернету. Ми, як і раніше, хочемо мати брандмауер, щоб захистити нас від більшості вхідного і вихідного мережевого трафіку, але нам потрібно «віткнути» OpenVPN -подібний виріз в брандмауер.
Крім того, брандмауер скидає настройки Raspbian в «за замовчуванням» при перезавантаженні Pi. Ми хочемо переконатися, що він пам'ятає, що з'єднання OpenVPN завжди дозволяється. Що ми збираємося зробити для цього - це створити простий скрипт, який працює при завантаженні:
nano /etc/firewall-openvpn-rules.sh
В даний час це порожній виконуваний файл оболонки. Залийте його так:
#!/bin/sh
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j SNAT --to-source 192.168.XX.X
Не забудьте змінити IP-адресу за замовчуванням на IP-адресу Вашого Pi!
Давайте розберемо це нижче: 10.8.0.0 є адресою за замовчуванням для Raspberry Pi для клієнтів, підключених до VPN. "eth0" означає порт локальних мереж. Перемкніть це на "wlan0", якщо Ви знаходитесь на бездротовому з'єднанні, що не рекомендується. Натисніть Ctrl+X, щоб зберегти зміни.
Як міра безпеки, створені файли не можуть виконуватися за замовчуванням, так що нам потрібно буде змінити права доступу і володіння /etc/firewall-openvpn-rules.sh. Спочатку ми змінимо режим на 700 (власник може читати, писати і виконувати). Потім ми змінимо власника на root, в якому "root" є стандартним ім'ям в Linux для суперкористувача:
chmod 700 /etc/firewall-Openvpn-rules.sh
chown root /etc/firewall-Openvpn-rules.sh
12) Ми створили сценарій, який пробиває OpenVPN -подібний виріз в брандмауері. Тепер нам просто потрібно встановити його в код інтерфейсу введення, щоб він працював при завантаженні системи.
nano /etc/network/interfaces
Знайдіть рядок, який має: "iface eth0 inet dhcp". Ми хочемо додати рядок під ним з відступом. Так щоб ці дві лінії, існуючі та нові, виглядали так, коли Ви закінчите :
iface eth0 inet dhcp
pre-up /etc/firewall-openvpn-rules.sh
Натисніть Ctrl+X, щоб зберегти зміни (що Ви завжди повинні робити, коли використовуєте нано).
Нарешті, зрештою, перезавантажте Pi.
sudo reboot
Вітаємо! Це сервер! Знову ж, це не добре, якщо у Вас немає комп'ютера клієнта, щоб з'єднатися з ним, так що запам'ятайте імена клієнтів і ключі, отримані на етапі шість, а потім перейдіть до другої частини цього підручника, щоб дізнатися, як створити зашифровану сторону клієнта.
(Джерело EN: readwrite.com)
 
>
КнигаНовости Практика поискаПартнерыО нас
Підтримка та дизайн: Могильний С.С. Шаблон: Joomla Templates by BuyHTTP Joomla Hosting