Привет Codeby !
В этой статье хотелось поделиться опытом настройки VPS и установки/настройки OVPN на Linux Ubuntu 20.04. Начал работать с линукс недавно и в процессе возникали подводные камни, которые вроде бы удалось побороть. В сети достаточно много мануалов по данной теме, но проблема в том, что та или иная инструкция не сработала для меня полностью, пришлось покурить несколько доков и в итоге собрать из них один. Плюс сразу добавить некоторые рекомендации по безопасности сервера. По идее все должно работать с данной ОС без проблем. Клиент подключаю из под WINды, но можно использовать любые другие клиенты, планирую подключать к сети свой смартфон. В итоге получаем свой VPN канал и левый ip-адрес, но пинги увеличатся и скорость передачи данных соответственно упадет (полностью побороть проблему со скорость пока не удалось), что в принципе не сильно заметно при серфинге, просмотре и тд. (зависит от ваших нужд)
Но обо всем по-порядку.
План такой :
1. Начальная (стандартная) настройка VPS сервера на Linux (покупку/админку и тд. рассматривать не буду, там все более-менее понятно)
2. Настройка SSH и подключение по сертификату.
3. Настройка сертификатов/конфигураций сервера и клиента OVPN
Начальная настройка VPS сервера на Linux :
Подключаться буду из под клиента на винде. Для подключения по SSH использую
Создаем нового пользователя и добавляем в группу sudo :
Проверяем статус брандмауэра и если надо, ключаем :
И вот тут у меня появилась первая проблемка. В общем я отошел по делам, а вернувшись, понял, что коннект из лост и я вообще не могу достучаться до сервера по shh и отваливаюсь по тайм ауту. При условии что ни RDP ни VNC пакеты не установлены, на этом можно было бы и заканчивать настройку и звонить "местным" админам
потому как я просто не знал, как же я могу еще попасть на сервак. Благо в админ панели есть браузерная VNC консоль и подключившись, я решил проблему с SSH.
Настройка SSH и подключение по сертификату :
Повозившись немного, я начал получать connection refused вместо тайм аута, ну и после полной переустановки пакетов, перезапуска службы и добавления правил фаирвола, вроде как все заработало.
Далее создаем директорию и файл где будут храниться ключи и назначаем им права :
Создаем ключи в puttygen и записываем в файл authorized_keys :
Сохраняем приватный ключ и добавляем в сессию putty в настройках SSH - Auth. После этого можем коннектится без ввода пароля под пользователем codeby@server
При подключении, вместо проверки по паролю, получим проверку криптографическую, соответствия публичного ключа, который добавили на сервер и нашего приватного.
Для безопасности отключаем вход под root по ssh и использование пароля в файле /etc/ssh/sshd_config а также повесим сервис ssh на нестандартный порт :
Настройка OpenVPN сервер/клиент :
Устанавливаем пакет, создаем директорию, копируем все скрипты в нашу новую директорию :
Создаем pki директорию и файлы для генерации, генерируем ключи :
ca - серт центра сертификации (ставим пароль)
dh - ключ Диффи - Хелмана
crl - сертифкат отзыва
ta.key - ключ для TLS авторизации
Создаем сертификаты сервера и копируем все ключи в директорию openvpn (server - имя сервера) :
Копируем содержимое дефолтного серверного конфига в /etc/openvpn/server.conf :
Если убрать комментарии то дефолтный конфиг выглядит так (я добавил сжатие и указал вручную
обнулил буфер, для увеличения скорости) :
Стартуем сервер (если есть ошибки, проверяем конфиг и запускаем второй командой) :
Если все хорошо - наблюдаем сообщение :
Включаем форвардинг пакетов, настраиваем правила iptables и разрешаем в фаирволе, ens3 - название интерфейса смотрящего во внешнюю сеть интернет :
Проходим процедуру создание конфигурации клиента, генерим сертификат, создаем директорию, переносим туда ключи :
Конфиг клиента :
Конфиг должен быть идентичен серверу, то есть поддерживать те же опции. Добавлено сжатие и строки обнуления буфера, строка redirect-gateway def1 добавляет маршрут по умолчанию (в интернет) через VPN - туннель (без нее айпишник не поменяется)
Все готово. Ставим приложение на клиента и переносим клиентский конфиг (с помощью
Вы можете добавить дополнительную защиту, создав пользователя впн в системе и включить дополнительный запрос логина/пароля. Для этого надо найти файл openvpn-plugin-auth-pam.so библиотеки авторизации plugin и добавить в server.conf две строки с указанием директории tmp :
Чтобы включить опцию на клиенте, добавляем в конец клиентского конфига :
Теперь при подключении дополнительно будет запрашиваться логин/пароль
Спасибо за внимание !
В этой статье хотелось поделиться опытом настройки VPS и установки/настройки OVPN на Linux Ubuntu 20.04. Начал работать с линукс недавно и в процессе возникали подводные камни, которые вроде бы удалось побороть. В сети достаточно много мануалов по данной теме, но проблема в том, что та или иная инструкция не сработала для меня полностью, пришлось покурить несколько доков и в итоге собрать из них один. Плюс сразу добавить некоторые рекомендации по безопасности сервера. По идее все должно работать с данной ОС без проблем. Клиент подключаю из под WINды, но можно использовать любые другие клиенты, планирую подключать к сети свой смартфон. В итоге получаем свой VPN канал и левый ip-адрес, но пинги увеличатся и скорость передачи данных соответственно упадет (полностью побороть проблему со скорость пока не удалось), что в принципе не сильно заметно при серфинге, просмотре и тд. (зависит от ваших нужд)
Но обо всем по-порядку.
План такой :
1. Начальная (стандартная) настройка VPS сервера на Linux (покупку/админку и тд. рассматривать не буду, там все более-менее понятно)
2. Настройка SSH и подключение по сертификату.
3. Настройка сертификатов/конфигураций сервера и клиента OVPN
Начальная настройка VPS сервера на Linux :
Подключаться буду из под клиента на винде. Для подключения по SSH использую
Ссылка скрыта от гостей
и вполне себе доволен этой утилитой. После того как узнали свой айпишник и права от рута, подключаемся к серверу, можно запустить в cmd (если putty была установлена в систему или добавлена в окружение) :
Код:
putty.exe user@server -pw password
Создаем нового пользователя и добавляем в группу sudo :
Код:
adduser codeby
usermod -aG sudo codeby
su - codeby
Проверяем статус брандмауэра и если надо, ключаем :
Код:
ufw status
ufw enable
И вот тут у меня появилась первая проблемка. В общем я отошел по делам, а вернувшись, понял, что коннект из лост и я вообще не могу достучаться до сервера по shh и отваливаюсь по тайм ауту. При условии что ни RDP ни VNC пакеты не установлены, на этом можно было бы и заканчивать настройку и звонить "местным" админам

Настройка SSH и подключение по сертификату :
Код:
sudo apt update
sudo apt install openssh-server
sudo systemctl status ssh
sudo ufw allow openssh
Повозившись немного, я начал получать connection refused вместо тайм аута, ну и после полной переустановки пакетов, перезапуска службы и добавления правил фаирвола, вроде как все заработало.
Далее создаем директорию и файл где будут храниться ключи и назначаем им права :
Код:
cd /home/codeby
mkdir .ssh
chmod 700 .ssh
cd .ssh
touch authorized_keys
chmod 600 authorized_keys
Создаем ключи в puttygen и записываем в файл authorized_keys :
Код:
cat >> authorized_keys << EOF сюда копируем публичный ключ из puttygen EOF
Сохраняем приватный ключ и добавляем в сессию putty в настройках SSH - Auth. После этого можем коннектится без ввода пароля под пользователем codeby@server
При подключении, вместо проверки по паролю, получим проверку криптографическую, соответствия публичного ключа, который добавили на сервер и нашего приватного.
Для безопасности отключаем вход под root по ssh и использование пароля в файле /etc/ssh/sshd_config а также повесим сервис ssh на нестандартный порт :
Код:
sudo nano /etc/ssh/sshd_config
PermitRootLogin no
PasswordAuthentication no
port xxxx
sudo ufw allow xxxx/tcp
sudo /sbin/iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport xxxx -j ACCEPT
sudo systemctl restart ssh
Настройка OpenVPN сервер/клиент :
Устанавливаем пакет, создаем директорию, копируем все скрипты в нашу новую директорию :
Код:
sudo apt install openvpn easy-rsa
mkdir etc/openvpn/easy-rsa
sudo cp –R /usr/share/easy-rsa /etc/openvpn/
Создаем pki директорию и файлы для генерации, генерируем ключи :
Код:
cd etc/openvpn/easy-rsa
sudo ./easy-rsa init-pki
sudo ./easy-rsa build-ca
sudo ./easy-rsa gen-dh
sudo ./easy-rsa gen-crl
openvpn --genkey --secret pki/ta.key
ca - серт центра сертификации (ставим пароль)
dh - ключ Диффи - Хелмана
crl - сертифкат отзыва
ta.key - ключ для TLS авторизации
Создаем сертификаты сервера и копируем все ключи в директорию openvpn (server - имя сервера) :
Код:
sudo ./easyrsa build-server-full server nopass
cp ./pki/ca.crt /etc/openvpn/ca.crt
cp ./pki/dh.pem /etc/openvpn/dh.pem
cp ./pki/crl.pem /etc/openvpn/crl.pem
cp ./pki/ta.key /etc/openvpn/ta.key
cp ./pki/issued/server.crt /etc/openvpn/server.crt
cp ./pki/private/server.key /etc/openvpn/server.key
Копируем содержимое дефолтного серверного конфига в /etc/openvpn/server.conf :
Код:
zcat /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz | sudo tee /etc/openvpn/server.conf
Если убрать комментарии то дефолтный конфиг выглядит так (я добавил сжатие и указал вручную
обнулил буфер, для увеличения скорости) :
Код:
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist /var/log/openvpn/ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.8.8"
keepalive 10 120
tls-auth ta.key 0
cipher AES-256-CBC
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
verb 3
explicit-exit-notify 1
sndbuf 0
rcvbuf 0
comp-lzo
Стартуем сервер (если есть ошибки, проверяем конфиг и запускаем второй командой) :
Код:
sudo openvpn /etc/openvpn/server.conf
sudo systemctl start openvpn@server
Если все хорошо - наблюдаем сообщение :
Включаем форвардинг пакетов, настраиваем правила iptables и разрешаем в фаирволе, ens3 - название интерфейса смотрящего во внешнюю сеть интернет :
Код:
sysctl -w net.ipv4.ip_forward=1
sudo iptables -I FORWARD -i tun0 -o ens3 -j ACCEPT
sudo iptables -I FORWARD -i ens3 -o tun0 -j ACCEPT
sudo iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
sudo ufw allow 1194
Проходим процедуру создание конфигурации клиента, генерим сертификат, создаем директорию, переносим туда ключи :
Код:
sudo ./easyrsa build-client-full client nopass
sudo mkdir /etc/openvpn/clients
sudo mkdir /etc/openvpn/clients/client
cd /etc/openvpn/clients/uvpn
cp /etc/openvpn/easy-rsa/pki/ca.crt /etc/openvpn/clients/client/
cp /etc/openvpn/easy-rsa/pki/ta.key /etc/openvpn/clients/client/
cp /etc/openvpn/easy-rsa/pki/issued/client.crt /etc/openvpn/clients/client/
cp /etc/openvpn/easy-rsa/pki/private/client.key /etc/openvpn/clients/client/
Конфиг клиента :
Код:
sudo cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ./client.conf
Конфиг должен быть идентичен серверу, то есть поддерживать те же опции. Добавлено сжатие и строки обнуления буфера, строка redirect-gateway def1 добавляет маршрут по умолчанию (в интернет) через VPN - туннель (без нее айпишник не поменяется)
Код:
client
dev tun
proto udp
remote server_ip_address 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert losst.crt
key losst.key
remote-cert-tls server
tls-auth ta.key 1
cipher AES-256-CBC
verb 3
redirect-gateway def1
sndbuf 0
rcvbuf 0
comp-lzo
<ca>
-----BEGIN CERTIFICATE-----
Тело сертификата
-----END CERTIFICATE-----
</ca>
<cert>
-----BEGIN CERTIFICATE-----
Тело сертификата
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN CERTIFICATE-----
Тело сертификата
-----END CERTIFICATE-----
</key>
<tls-auth>
-----BEGIN CERTIFICATE-----
Тело сертификата
-----END CERTIFICATE-----
</tls-auth>
Все готово. Ставим приложение на клиента и переносим клиентский конфиг (с помощью
Ссылка скрыта от гостей
например). Должен подняться интерфейс - по дефолту в 10.8.0.0/24 подсети. Весь трафик будет идти через ваш ВПН-сервер.Вы можете добавить дополнительную защиту, создав пользователя впн в системе и включить дополнительный запрос логина/пароля. Для этого надо найти файл openvpn-plugin-auth-pam.so библиотеки авторизации plugin и добавить в server.conf две строки с указанием директории tmp :
Код:
find / -name "openvpn-*auth-pam*.so" -print
mkdir /etc/openvpn/tmp
chmod 777 /etc/openvpn/tmp
sudo nano /etc/openvpn/server.conf
# добавляем в конфиг сервера
plugin путь до файла/openvpn-plugin-auth-pam.so login
tmp-dir /etc/openvpn/tmp
sudo useradd codebyvpn -s /sbin/nologin
sudo passwd codebyvpn
Чтобы включить опцию на клиенте, добавляем в конец клиентского конфига :
Код:
auth-user-pass
Теперь при подключении дополнительно будет запрашиваться логин/пароль
Спасибо за внимание !
Последнее редактирование: