OpenVPN Debian install + configuring Linux, Android, iOs, MacOs client
Мы решили написать довольно объемный туториал по очень важной, объемной и самое главное в современных условиях – важный туториал. Мы напишем не только о том, как грамотно сконфигурировать VPN сервер под управлением ОС Debian Linux, но и не менее важной теме – конфигурирования клиентов под ОС Linux, Android, iOs, MacOS и Windows. Этакая мультиплатформенная статья:-)
Оглавление
- Установка OpenVPN в debian Linux
- Установка и конфигурирование клиента в MacOS
- Установка и конфигурирование клиента в Linux
- Установка и конфигурирование клиента в Windows
- Установка и конфигурирование клиента в Android
- Установка и конфигурирование клиента в iOs
Почему мы выбрали вариацию OpenVPN? Никаких секретов нет – простота, доступность, мультиплатформенность и конечно же открытость исходных кодов. OpenVPN это TLS/SSL VPN архитектура. Если мы собираемся использовать нами сгенерированный ключ/сертификат, необходимо установить пакет EasyRSA. Причем желательно именно последнюю версию. EasyRSA – это будет наш простой центр доверенных сертификатов. В оффициальной документации настоятельно рекомендуется устанавливать пакеты OpenVPN и EasyRSA на разные серверы. Если будет успешная атака на сервер с VPN сервисом, атакующий сможет получить доступ к приватному ключу и следовательно иметь возможность перехватить весь Ваш трафик. Так как мы делаем все скорее в целях ознакомления, ничто Вам не помешает заменить localhost в конфигах на ip Вашего EASYRSA сервера.
Установка OpenVPN и EasyRSA
Для начала необходимо обновить систему пакетов apt и дальше устанавливаем самую свежую версию OpenVPN.
sudo apt update apt install openvpn
Установка EasyRSA тоже не представляет каких либо сложностей.
wget -c https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.8/EasyRSA-3.0.8.tgz tar xvf EasyRSA-3.0.8.tgz
На этом установка закончена EasyRSA. Теперь самое время занять конфигами.
cd ~/EasyRSA3.0.8/ cp vars.example vars vim vars
Хотя лично я привык пользоваться редактором mc. Дело принципа. Ищем следующие закомментированные строки
#set_var EASYRSA_REQ_COUNTRY "US" #set_var EASYRSA_REQ_PROVINCE "California" #set_var EASYRSA_REQ_CITY "San Francisco" #set_var EASYRSA_REQ_ORG "Copyleft Certificate Co" #set_var EASYRSA_REQ_EMAIL "me@example.net" #set_var EASYRSA_REQ_OU "My Organizational Unit"
Меняем на наши значения. В моем случае получилось это:
set_var EASYRSA_REQ_COUNTRY "US" set_var EASYRSA_REQ_PROVINCE "Illinois" set_var EASYRSA_REQ_CITY "Chicago" set_var EASYRSA_REQ_ORG "FutureApp" set_var EASYRSA_REQ_EMAIL "vpnapp@it-notepad.com" set_var EASYRSA_REQ_OU "It-notepad"
Выполняем иницилизацию:
./easyrsa init-pki
Получим следующий вывод:
init-pki complete; you may now create a CA or requests. Your newly created PKI dir is: /src/EasyRSA-3.0.8/pki
Раз просят(см.выше) – значит генерируем наш корневой сертификат.
./easyrsa build-ca nopass Enter
Что же в итоге мы получили?
ca.crt – публичный корневой сертификат нашего центра аутентификации. Нашему OpenVPN серверу он понадобится.
ca.key – приватный ключ корневого сертификата. В отличии от утери публичного ключа, потеря приватного ключа сотрет все наши попытки построить защищенный туннель.
./easyrsa gen-crl
Создание серверного сертификата и ключа
./easyrsa gen-req server nopass sudo cp ~/EasyRSA-3.0.8/pki/private/server.key /etc/openvpn/ sudo cp ~/EasyRSA-3.0.8/pki/ca.crt /etc/openvpn/ ./easyrsa sign-req server server sudo cp ~/src/EasyRSA-3.0.8/pki/issued/server.crt /etc/openvpn/ ./easyrsa gen-dh sudo openvpn --genkey --secret ta.key cp /src/EasyRSA-3.0.8/ta.key /etc/openvpn cp /src/EasyRSA-3.0.8/pki/dh.pem /etc/openvpn/
Много команд. Что же все это значит? Сначала gen-req server nopass – генерируем наш основной сертификат. И конечно копируем сгенерированные сертификаты в конфиг папку OpenVPN – /etc/openvpn/. Далее генерируем файлы ta.key и dh.pem. Последний – это ключ Диффи – Хельмана, используется он при обмене ключами. Кстати его генерация может занять продолжительное время для старых машин(серверов). ta.key – подпись HMAC. Нужна она для усиления шифрования TLS. Хотя и так при 512 битном шифровании, ваш трафик расшифровать под силу только сверхдержавам с предельно высокими вычислительными нагрузками.
Создание клиентских сертификатов
mkdir -p ~/client-configs/keys chmod -R 700 ~/client-configs
Создадим папку для нашего клиентского сертификата. И сгенерируем наш клиентский сертификат. Ниже я привел вывод своего сервера.
cd /src/EasyRSA-3.0.8/ ./easyrsa gen-req client1 nopass Note: using Easy-RSA configuration from: /src/EasyRSA-3.0.8/vars Using SSL: openssl OpenSSL 1.1.1g 21 Apr 2020 Generating a RSA private key ......+++++ ....................+++++ writing new private key to '/src/EasyRSA-3.0.8/pki/easy-rsa-25118.yHrzMN/tmp.r9cxzB' ----- 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) [client1]: Keypair and certificate request completed. Your files are: req: /src/EasyRSA-3.0.8/pki/reqs/client1.req key: /src/EasyRSA-3.0.8/pki/private/client1.key
./easyrsa sign-req client client1 cp pki/private/client1.key ~/client-configs/keys/
И скопируем наш сгенерированный ключ в папку с ключами.
конфигурирование OpenVPN сервера
Настало время сконфигурировать наш OpenVPN сервер.
sudo nano /etc/openvpn/server.conf
port 1194 proto udp dev tun sndbuf 0 rcvbuf 0 ca ca.crt cert server.crt key server.key dh dh.pem auth SHA512 tls-auth ta.key 0 topology subnet server 10.8.0.0 255.255.255.0 ifconfig-pool-persist ipp.txt push "redirect-gateway def1 bypass-dhcp" keepalive 10 120 cipher AES-256-CBC user nobody #dhcp test push "dhcp-option DNS 8.8.8.8" group nogroup persist-key persist-tun status openvpn-status.log verb 3 crl-verify crl.pem log-append /var/log/openvpn/openvpn.log
Нас интересует на самом деле всего пару записей – порт. Это 1194, протокол – udp. если вы планируете пускать “тяжелый” трафик, не стоит указывать tcp. Наша внутрення сеть – 10.8.0.0. user nobody и nogroup обязательно к указанию. Чтобы понизить приоритет в системе при удачном подключении. Лучше ставить SHA512, чем 256 битное шифрование.
Настраиваем конфигурацию сети
sudo nano /etc/sysctl.conf
Настраиваем проброс трафика.
net.ipv4.ip_forward=1
Далее проверяем
sudo sysctl -p net.ipv4.ip_forward = 1
Все отлично.
ip route |grep default default via XXX.XXX.XXX.XXX dev eth0 onlink
Если Ваш вывод команды route похож на наш – значит вся сетевая настройка у нас завершена. Остался файреволл.
sudo nano /etc/ufw/before.rules # START OPENVPN RULES # NAT table rules *nat :POSTROUTING ACCEPT [0:0] # Allow traffic from OpenVPN client to eth0 (change to the interface you discovered!) -A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE COMMIT # END OPENVPN RULES # Don't delete these required lines, otherwise there will be errors *filter
И непосредственно разрешение 1194 пора и udp. OpenSSH нужен на случай если Вы планируете работать через терминал. И кстати в этом случае необходимо поменять протокол на tcp.
sudo nano /etc/default/ufw DEFAULT_FORWARD_POLICY="ACCEPT"
sudo ufw allow 1194/udp sudo ufw allow OpenSSH sudo ufw disable sudo ufw enable
Запускаем наш OpenVPN сервер и проверяем его состояние.
sudo systemctl start openvpn@server sudo systemctl status openvpn@server ● openvpn@server.service - OpenVPN connection to server Loaded: loaded (/lib/systemd/system/openvpn@.service; disabled; vendor preset: enabled) Active: active (running) since Sun 2019-07-21 13:59:57 UTC; 1 years 7 months ago Docs: man:openvpn(8) https://community.openvpn.net/openvpn/wiki/Openvpn23ManPage https://community.openvpn.net/openvpn/wiki/HOWTO Main PID: 774 (openvpn) CGroup: /system.slice/system-openvpn.slice/openvpn@server.service └─774 /usr/sbin/openvpn --daemon ovpn-server --status /run/openvpn/server.status 10 --cd /etc/openvpn --config /etc/openvpn/server.conf --writepid /run/openvpn/server.pid Warning: Journal has been rotated since unit was started. Log output is incomplete or unavailable. addr show tun0 4: tun0: &;lt;POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100 link/none inet 10.8.0.1/24 brd 10.8.0.255 scope global tun0 valid_lft forever preferred_lft forever inet6 fe80::b2ba:8751:fa5c:d9dd/64 scope link flags 800 valid_lft forever preferred_lft forever
Если Вы планируете автозапуск OpenVPN при загрузке – выполните команду
sudo systemctl enable openvpn@server
Создание клиентского конфигурационного файла
~/client-configs/base.conf
клиентский конфиг файл еще короче и еще проще – указывается my_server – ip адрес. Порт и конечно протокол. В моем случае это udp из за необходимости пересылки потокового видео.
client dev tun proto udp sndbuf 0 rcvbuf 0 remote my_server 1194 resolv-retry infinite nobind persist-key persist-tun remote-cert-tls server auth SHA512 cipher AES-256-CBC setenv opt block-outside-dns key-direction 1 verb 3
И напишем наш небольшой скрипт на генерирование клиентского ovpn файла конфигурации.
nano ~/client-configs/make_config.sh
Скрипт довольно простой – указываем пути к выходному файлу, сертификатам и клиентскому конфигу.
#!/bin/bash # First argument: Client identifier KEY_DIR=/home/timur/client-configs/keys OUTPUT_DIR=/home/timur/client-configs/files BASE_CONFIG=/home/timur/client-configs/base.conf cat ${BASE_CONFIG} \ <(echo -e '') \ ${KEY_DIR}/ca.crt \ <(echo -e '\n') \ ${KEY_DIR}/${1}.crt \ <(echo -e '\n') \ ${KEY_DIR}/${1}.key \ <(echo -e '\n') \ ${KEY_DIR}/ta.key \ <(echo -e '') \ >${OUTPUT_DIR}/${1}.ovpn
Далее устанавливаем права на наш скрипт, выполняем и смотрим на результаты нашей работы. После полученный сгенерированный файл переносим на клиентскую машину.
chmod 700 ~/client-configs/make_config.sh cd ~/client-configs sudo ./make_config.sh client1 ls ~/client-configs/files
Клиент OpenVPN под macOS
Скачиваем оффициальный пакет OpenVPN Connect под macOS. Устанавливаем. При запуске выбираем наш сгенерированный клиентский файл. Нажимаем подключить после импорта и наслаждаемся туннелем.
Установка и конфигурирование клиента в Linux
Мы рассмотрим установку и настройку клиента OpenVPN в Debian 10 Linux. Так уж сложилось, что опыт работы с ним у меня более 10 лет и я в основном с ним работаю. К сожалению процесс установки OpenVPN клиента в Linux сложнее. Если у Вас возникнут сложности с установкой в другом дистрибутиве, пишите в комментариях – мы обязательно напишем. Общий алгоритм будет похож.
Для начала надо убедиться что система установки пакетов apt поддерживает протокол https.
apt install apt-transport-https
Далее устанавливаем ключ репозитория OpenVPN
wget https://swupdate.openvpn.net/repos/openvpn-repo-pkg-key.pub apt-key add openvpn-repo-pkg-key.pub wget -O /etc/apt/sources.list.d/openvpn3.list https://swupdate.openvpn.net/community/openvpn3/repos/openvpn3-buster.list apt update apt install openvpn3
Запускаем и проверяем
openvpn3 session-start --config ${MY_CONFIGURATION_FILE}
должно появиться следующее информационное сообщение
Using configuration profile from file: client1.ovpn Session path: /net/openvpn/v3/sessions/239f2f21sfcc7s42ccs87b4sc2776c6dc0fe Connected
Чтобы убедиться наверняка, выполните команду
openvpn3 sessions-list
Разъеденить канал тоже несложно –
openvpn3 session-manage --session-path /net/openvpn/v3/sessions/239f2f21sfcc7s42ccs87b4sc2776c6dc0fe --disconnect Initiated session shutdown. Connection statistics: BYTES_IN.................2221331 BYTES_OUT.................874718 PACKETS_IN..................3310 PACKETS_OUT.................3362 TUN_BYTES_IN..............790371 TUN_BYTES_OUT............2148341 TUN_PACKETS_IN..............3352 TUN_PACKETS_OUT.............3299
Установка и конфигурирование клиента в Windows
Скачиваем клиент OpenVPN под Windows. Алгоритм действий полностью идентичен. Сначала устанавливаем приложение. Потом открываем приложение. Импортируем наш ovpn файл, подключаемся и наслаждаемся подсоединением.