Пак знаний, учение свет. #3 Wireguard, поднимаем свой VPN.
Сап джой, будет много текста и картинок, но тебе это понравиться (надеюсь).
Давно хотел написать эту инструкцию, но всё времени не было. Решил заставитьсебя.Немного предыстории, пройдёмся по цифрам и приступим к практике.
Предистория:
Когда я выбирал какой протокол выбрать для поднятия забугорногоVPNсервиса,я ориентировался на то, что-бы туннель обладал высокой пропускной способностьюи не бы чувствителен к небольшой потери сигнала\пакетов (привет мобильноеинтернет соединение).
Тут была инструкция по настройке OpenVPN. Ни в коем случае не хочу приуменьшить вклад анона,так как «я за» любое просвещение людей в компьютерной грамотности. Вот только авторумолчал что OpenVPN достаточно медлителен,и тот же IPSecAES почтив половину производительнее.
Так же любитель пожрать ресурсы хоста.
пруф
Да и скажу честно, в принципе это сложно было назватьинструкцией.
Так же автор забыл о защите самого хоста, а это не мало важно.
Перейдём к практике:
Давайте обновим пакеты, и поставим нужный софт:
sudo apt update && sudo apt upgrade -y && sudoaptautoremove -y && sudo apt install git screen fail2ban mc
Конструкция «sudo apt install git screen fail2ban mc» отвечает за установкунужного нам ПО:
1) git– это апекуха для импортирования проектов из git-репозиториев. Просто навсякий случай.
2) screen– это для того, что бы в случае обрыва sshсоединениявы могли продолжить работать с того же места, где произошёл обрыв.
3) fail2ban–это для защиты второй лини нашего vpnсервиса.
4) MC – (MidnightCommander)это удобный файловый менеджер в «консольной среде», что бы не возится скомандами навигации.
Обновляем и ставим всё это дело, после этого можноперезагрузить хост, и подключиться по SSH.
После подключения набираем команду screen, чтобы в случае обрыва связи, мы смогли вернуться обратнок работе без потерь.
Далее скачиваем деплой-скрипт с github.
curl -O https://raw.githubusercontent.com/angristan/wireguard-install/master/wireguard-install.sh
sudo chmod+x wireguard-install.sh
Запускаеми сразу после старта нас любезно спросят важные для сервера параметры. Давай ихразберём.
Первая строка выводит нам твой внешний (белый) ip-шник к которому мы будемцепляться. Его не меняем, как бы не хотелось. Далее.
Public interface– имя сетевой платы (если по простому) через который будетработать сервер.
Wireguard interface– имя виртуальной сетевой платы. (имя вашего соединения, егонужно запомнить)
Следующие две стоки, внутренние ip-адреса.Здесь вы можете указать удобный для вас диапазон адресов, которое будутприсваиваться вашим устройствам при подключении к серверу.
Далее указываем внешний порт соединения к вашему серверу.
Стандартный порт: 57141.Я бы рекомендовал его сменить и\или запомнить, он пригодится очень скоро.
Последнее два вопроса, это dns сервера. Вы можете указать свои (если знаете какие) у меняже это адреса adguard. Что-бы блокировать рекламу.
Нажимаем Enterи ждём завершенияустановки\настройки. Скрипт начнёт скачивать нужные файлы для сервера.
Длянастройки клиента на Winows\Mac\Linux тебепонадобится файл конфигурации. Он будет находится в директории указанной нижу qr-кода.Вот тут нам и понадобится MC. Запускаем его просто набрав “MC” (илиsudo mc, если хотите запустить с правами суперпользователя, нотогда придётся прогуляться по папкам)
В появившемся окне находим файл .conf именемкоторый мы давали конфигурации, нажимаем F4. Всписке текстовых редакторов лучше выбрать nano. Простоставим цифру, на против которой имя редактора и клацаем enter. Переднами конфигурационные данные, которые мы уже видели при создании пользователя.Скачиваем клиент для вашей ОС (в моём случае это Windows)
Клацаем на треугольник рядом с кнопкой добавить туннель àДобавитьпустой туннель. В открывшаяся окно копируем из ssh сессииданные из файла, сохраняем. Ctrl+x выйтииз редактора и F10 выйти из MC. И впринципе с создание туннеля всё. Весь ваш трафик теперь перенаправляется на вашVPN. На этом можно было бы и закончить, но как я говорил,нужно обезопасить ваш сервер. Но сначала добавим возможность автоматическогозапуска туннеля, так как при перезагрузке сервер не запустится.
sudo systemctl enable wg-quick@имя_вашего соединения (wg0)
Готово.
Безопасность:
Небуду описывать сколько в интернете ботов и всякого другого дерьма, просто скажу,что их много и надо уметь постоять за себя и свою инфраструктуру. Этом мы ибудем заниматься.
Для начала сменим порт ssh-соединения.Открываем файл конфигурации ssh-сервера. (да, без оболочки. Так быстрее.) Запускаемобязательно с правами суперпользователя (sudo)
sudo nano /etc/ssh/sshd_config
Ищем в файле sshd_config строку «port 22» Она обычно сверху. Убираем #, и меняем цифру на вашпорт, допустим 4422. Не забудьте его! Выходим предварительно сохранивизменения.
Перезапускаем службу ssh, что бы она получила новые параметры из файла.
sudo systemctl restart ssh.service
Перезапускаем ssh-сессию,не забывая сменить порт в подключении и при подключении снова набираем screen. Далеенастраиваем firewall. По умолчанию он выключен в ubuntu. Что бы проверить этонабираем sudo ufo status.И ответом нам будет Status: inactive. Прежде чем включать firewall настроим нужные правила, иначе удалённый хост станетнедоступен для нас по ssh. Вот список команд, просто вставляйте их в консоль:
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 4422 <-- наш ssh
sudo ufw allow 57141 <-- наш Wireguard туннель
В двух словах что мы сделали: разрешили весь исходящий трафик, запретиливесь входящий кроме нашего ssh и нашего Wireguard сервера.
Включаем наш firewall командой:
sudo ufw enable
Вы получите предупреждение:
Command may disruptexisting ssh connections.Proceed with operation(y|n)?
Это означает, что запуск этого сервиса может разорвать текущее ssh соединение.
Можно перезагрузится :)
Так же мы качали такую замечательную вещь как Fail2Ban, еёможно не настраивать так как она прекрасно работает из коробки. Я оставлю всессылки на все полезные ресурсы в конце, если захотите покопаться.
Заключение:
Отсылаяськ началу этой статьи я бы хотел сказать, что OpenVPN неплохой протокол, как это могло показаться. У Wireguard есть 2существенных минуса:
1) При подключении к хосту, клиенты могут видеть друг-друга. То есть вы можетепропинговать ваше соседнее устройство. Это можно исправить настройками firewall’aи не так критично, но из коробки OpenVPNсразуотрезает подобное.
2) У Wireguard легко детектится его трафик, а именно момент обмена хендшейков(handshake) то есть в сам туннель попасть сложно, но вот определитьи прикрыть его можно легко. Нужно делать обфускацию трафика что-бы было сложнееего заметить. Сам я ещё не опробовал, но хочу заюзать socks5 дляпередачи первичной передачи хендшейка. У OpenVPNестьже готовая приблуда так же «из коробки»
Так же стоит упомянуть что я не настроил авторизацию на сервере через ключ-файл потому что мне лень, но я осталю на это линк ниже.
В принципе на этом всё, спасибо что прочитали, все ссылки на полезные ресурсы прилагаю.
Пост написан исключительно для любимого Джояи для тебя анон лично.
Занимайтесь самообразованием, остаюсь с вами на связи в комментах, если что то забыл - дополню там, пока.
Полезные сслки:
настройка Fail2ban
Wireguard клиенты
Мой ssh клиент
Git-репозиторий скрипта
Подробнее
Throughput WireGuard IPsoc (ChaPoty) IPsec (AES-GCM) OpanVPN 128 256 384 512 640 768 896 1.024 megabits per second (higher is better)
Ping Time WireGuard IPsec (ChaPoly) IPsec (AES-GCM) OpenVPN 0.5 1.0 I 0.0 milliseconds (lower is better) 1.5
Unpacking Iibqrni-glib5:arnd64 (1.30.4-l~ubuntu20.04.1) ... Selecting previously unselected package libqrni-proxy. Preparing to unpack .../21-libqrni-proxy_l.30.4-l~ubuntu20.04.l_amd64.deb ... Unpacking libqrni-proxy (1.30.4-l~ubuntu20.04.1) ... Preparing to unpack .. ./22-fwupd_1.7.5-3~20.04.1_arnd64.deb ... Unpacking fujupd (1.7.5-3~20.04.1) over (1.5.ll-0ubuntul~20.04.2) ... Preparing to unpack .../23-landscape-cornrnon_13.12-0ubuntu4.3_amd64.deb ... Unpacking landscape-common (13.12-0ubuntu4.3) over (13.12-0ubuntu4.2) ... Selecting previously unselected package rnodernmanager. Preparing to unpack .../24-rnodernrnanager_l.13.6-l~ubuntu20.04.l_arnd64.deb ... Unpacking rnodernmanager (1.13.6-l~ubuntu20.04.1) ... Preparing to unpack .../25-sbsigntool_0.3.2-2ubuntul.I_arnd64.deb ... Unpacking sbsigntool (0.3.2-2ubuntul.1) over (0.3.2-2ubuntul) ... Preparing to unpack .../26-snapd_2.55.5+20.04_arnd64.deb ... Unpacking snapd (2.55.5+20.04) over (2.54.3+20.04.lubuntuO.2) ... Preparing to unpack .../27-sosreport_4.3-lubuntu0.20.04.I_arnd64.deb ... Unpacking sosreport (4.3-lubuntu0.20.04.1) over (4.2-lubuntu0.20.04.1) ... Preparing to unpack .../28-unattended-upgrades_2.3ubuntu0.3_all.deb ... Unpacking unattended-upgrades (2.3ubuntu0.3) over (2.3ubuntu0.1) ... Selecting previously unselected package usb-rnodesniitch-data. Preparing to unpack .. ./23-usb-rnodesujitch-data_20131123-3_all.deb ... Unpacking usb-rnodesujitch-data (20131123-3) ... Selecting previously unselected package usb-rnodesniitch. Preparing to unpack .. ./30-usb-rnodesiuitch_2.5.2+repack0-2ubuntu3_arnd64.deb ... Unpacking usb-rnodesniitch (2.5.2+repack0-2ubuntu3) ... Setting up rnotd-neujs-config (llubuntu5.6) ... Setting up libkeyutilsl:arnd64 (1.6-6ubuntul.1) ... Setting up apt-utils (2.0.3) ... Setting up alsa-ucrn-conf (1.2.2-lubuntuO.13) ... Setting up isc-dhcp-client (4.4.1-2.Iubuntu5.20.04.3) ... Installing new version of config file /etc/apparrnor.d/sbin.dhclient ... Setting up Iibnetplan0:arnd64 (0.104-0ubuntu2~20.04.2) ... Setting up fwupd-signed (1.27.lubuntu7+1.2-2~20.04.1) ... Setting up locales (2.31-0ubuntu3.3) ... Generating locales (this might take a while)... en_US.UTF-3..._ ]
alexfwireguard: $ curl -0 https://raw.githubusGrcontGnt.coni/angristan/wirGguard-install/raaster/wirGguard-install.sh % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 15554 100 15554 0 0 46154 0 —: —:---------------46154 alex§wireguard: $ sudo chmod +x wireguard-install.sh [sudo] password for alex: alexgwireguard: $ ./wireguard-install.sh
alexfwireguard: $ curl -0 https://raw.githubusGrcontGnt.coni/angristan/wirGguard-install/raastGr/wirGguard-install.sh % Total % RGCGivGd % Xford Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 15554 100 15554 0 0 46154 0 —: —:-----: —:------46154 alex£wireguard: $ sudo chrood +x wireguard-install.sh [sudo] password for alex: alex§wireguard: $ ./wireguard-install.sh You need to run this script as root alexfwireguard: $ sudo ./wireguard-install.sh Welcome to the WireGuard installer! The git repository is available at: https://github.com/angristan/wireguard-install I need to ask you a few questions before starting the setup. You can leave the default options and just press enter if you are ok with them. IPv4 or IPv6 public address: 192.168.31.15 Public interface: ens33 WireGuard interface name: wg0 Server's WireGuard IPv4: 10.66.66.1 Server's WireGuard IPv6: fd42:42:42::1 Server's WireGuard port [1-65535]: 57141 First DNS resolver to use for the clients: 94.140.14.14 Second DNS resolver to use for the clients (optional): 94.140.15.15 Okay, that was all I needed. We are ready to setup your WireGuard server now. You will be able to generate a client at the end of the installation. Press any key to continue...
s. Client name: Alex Client's WireGuard IPv4: 10.66.66.2 Client's WireGuard IPv6: fd42:42:42::2 Here is your client config file as a QR Code: It is also available in /home/alex/wg0-client-Alex.conf If you want to add more clients, you simply need to run this script another time! alex§wireguard: $ [Interface] PrivateKey = IGK1MNzNBCMd4nkcMbepmtCVM7lOn4GD7KYfqitumV0= Address = 10.66.66.2/32,fd42:42:42::2/128 DNS = 94.140.14.14,94.140.15.15 [Peer] PublicKey = ROKi/NM506pWZVN+cy7hBnv3S6qT4G2VuoKvhN2QzHM= PresharedKey = 4FD2YZy1v+98iQNzQ4+YieMWb6pbBliwHU6Yjr+Py78= Endpoint = 192.168.31.15:57141 AllowedIPs = 0.0.0.0/0,::/0
Tabby • alex@192.168.31.15:22 Ç - С Переподключение \ш SFTP V Порты GNU nano 4.8_______________________________/home/alex/wg9-client-Alex.conf [Interface] PrivateKey = IGKlMNzNBCMd4nkcMbepratCVM7lOn4GD7KYfqitumV0= Address = 10.66.66.2/32,fd42:42:42::2/128 DNS = 94.140.14.14,94.140.15.15 [Peer] PublicKey = ROKi/NM506pWZVN+cy7hBnv3S6qT4G2VuoKvhN2QzHM= PresharedKey = 4FD2YZylv+98iQNzQ4+YieMWb6pbBliwHU6Yjr+Py78= Endpoint = 192.168.31.15:57141 AllowedIPs = 0.0.0.0/0,::/0 ? Get Help ? Write Out Ц Where Is 3 Cut Text 5 Justify 1 j Cur Pos \ Exit g Read File J Replace £ Paste Text 1 To Spell !1 Go To Line j 1 Q alex@wireguard: - о WireGuard Туннели Журнал Hodif1 Frankfurt Romania Создать туннель Название: Публичный ключ: pbj2J7p6O+egHa01sXb5fio8hE6bRTQWy7P9FyspEW0= [Interface] PrivateKey = IGKlMNzNBCMd4nkcMbepmtCVM7lOn4GD7KYfqitumVO= Address = 10.66.66.2/32,fd42:42:42::2/128 DNS = 94.140.14.14,94.140.15.15 [Peer] PublicKey = ROKi/NM506pWZVN+cy7hBnv3S6qT4G2VuoKvhN2QzHM= PresharedKey = 4FD2YZylv+98iQNzQ4+YieMWb6pbBliwHU6Yjr+Py78= Endpoint = 192.168.31.15:57141 AllowedIPs = 0.0.0.0/0,::/0 PI Блокировать нетуннелированный трафик _______________I Сохранить Отмена ■fcp Добавить туннель ▼ X Редактировать
GNU nano 4.8 /etc/ssh/sshd_config # $OpenBSD: sshd_config,v 1.103 2018/04/09 20:41:22 tj Exp $ # This is the sshd server system-wide configuration file. See # sshd_config(5) for more information. # This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin # The strategy used for options in the default sshd_config shipped with # OpenSSH is to specify options with their default value where # possible, but leave them commented. Uncommented options override the # default value. Include /etc/ssh/sshdcorrfig.d/*.conf »Port 22 #AddressFamily any #ListenAddress 0.0.0.0 #ListenAddress :: #HostKey /etc/ssh/ssh_host_rsa_key #HostKey /etc/ssh/ssh_host_ecdsa_key #HostKey /etc/ssh/ssh_host_ed25519_key # Ciphers and keying #RekeyLimit default none
реактор образовательный,самообразование,it-безопастность,мануал,VPN,сделай сам,системный администратор,it,длинный пост
Да, хочу ещё! :) | |
|
334 (53.2%) |
Нет, пшёл вон :( | |
|
37 (5.9%) |
Я картошка | |
|
257 (40.9%) |
прости но значимость вайргарда для дома крайне переоценена. я пользуюсь вот этим скриптом.
но скриптец который я предложила глянь. очень удобный. автор его много лет использует и правит оп мере надобности. разворачивается на дебианчике в 2 сеекунды. и вообще няшечка.
а производительность чтобы гонять котиков и у опенвпн и у вайргарда равноценная. само собой это все только применительно к котикам а не хайлоуду.
При openvpn я получал 1-3 мегабита скорости, при wireguard 7-12 мегабит.
Сейчас сижу на nano pi r2 так что в железо не будет упираться ни первый ни второй вариант, но если делать на слабом железе то wg показывает себя на порядок лучше.
я не спорю вто вайргард шустреее. но он менее гибкий. опенвпн я могу поднять даже на сопле свисающей с хуя. а вайргард то тут не работает то там с косяками то здесь нет его вообще.
как-то слишком много всего лишнего, wiregurd в плане настройки и так самый простой
тут скорее будет пользователям из россии сложнее оплатить впс иностранный чем настроить сам впн
https://edgecenter.ru/
Держи, ещё есть вариант обзавестить, бесплатным vps у оракла, ссылку надо?
А вот проблем его использование может подкинуть. Допустим ты включил видео-стрим, где данные шуруют через upd. Но так как сам канал ты настроил через TCP, теперь все остальные подключения будут дожидаться каждого потерянного кадра, не смотря на то что видео уже ушло на десятки секунд вперед.
2) Сколько бы тебе готовые сервисы не говорили, что они не ведут логи - они их ведут.
3) Контроль - это один из столпов безопасности. Все, что не под твоим контролем - скомпрометировано.
Короче преимущества есть, но нужны ли они конкретно тебе -- не факт.
https://hackertarget.com/psad-port-scan-detection-in-ubuntu-linux/
А за вас рад. Кафку в кубе готовите?
У wireguard есть ещё один недостаток - невозможность пускать отдельные приложения/соединения через него т.к. он работает на уровне маршрутизации и не умеет в прокси в отличии от например shadowsocks. И с обфускацией у shadowsocks получше - есть тот же v2ray. Но в целом я за такие статьи) Чем больше людей попробует разных технологий тем лучше)
Ну и для микротколюбов (для меня в том числе) маркировать трафик не составит проблем :)
в общем, несмотря на нужность такого рода инструкций, к ним надо относиться в достаточной мере критично.
docker rm -f wireguard
docker run -d --network net --restart=unless-stopped --hostname wireguard --name wireguard \
--sysctl="net.ipv4.conf.all.src_valid_mark=1" \
--cap-add=NET_ADMIN \
--cap-add=SYS_MODULE \
-e 'SERVERPORT=51820' \
-e 'PEERS=1' \
-p 51820:51820/udp \
-v /data/wireguard:/config \
-v /lib/modules:/lib/modules \
-v /etc/localtime:/etc/localtime:ro \
linuxserver/wireguard
Два: https://www.opennet.ru/opennews/art.shtml?num=50765
Три: https://habr.com/ru/company/first/blog/650553/
--cap-add=SYS_ADMIN --security-opt apparmor=unconfined
Чудо, а не багрепорт. Попросил права сисадмина, отключил apparmor, и после этого показываем, что права сисадмина позволяют сисадминить.
Я вот обнаружил, что sudo rm -r /etc /usr /bin ломает почти любой сервер. Это явно уязвимость линукса!
Недавно делал то же самое, но без скрипта на настройку.
Нужно еще уточнить, что хостинг должен быть с нормальным ядром (для модуля wg), а не OVH-лайк.
Так же удобно иметь оплату в крипте.
Например, я юзаю hostwinds, которые принимаю оплату полностью в крипте без начальной привязки карты.