Разворачиваем pritunl-vpn и wireguard

Разворачиваем pritunl-vpn и wireguard


Pritunl это по-сути надстройка над openvpn c удобной веб-мордой, а также отсутствием необходимости конфигурирование конфигов openvpn самостоятельно.

О wireguard думаю все слышали, еще одна технология реализации VPN с крайне простой настройкой.

Поднимаем pritunl-vpn:

Официальная дока находится тут. Там все возможные варианты установок под разные платформы. Мы же рассмотрим ubuntu 22.04.

sudo tee /etc/apt/sources.list.d/pritunl.list << EOF
deb http://repo.pritunl.com/stable/apt jammy main
EOF

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com --recv 7568D9BB55FF9E5287D586017AE645C0CF8E292A

curl https://raw.githubusercontent.com/pritunl/pgp/master/pritunl_repo_pub.asc | sudo apt-key add -

sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list << EOF
deb https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/6.0 multiverse
EOF

wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -

sudo apt update
sudo apt --assume-yes upgrade

sudo ufw disable

sudo apt -y install pritunl mongodb-org
sudo systemctl enable mongod pritunl
sudo systemctl start mongod pritunl

Далее открываем веб морду, увидим что-то вроде этого:

Нужно в консоли ввести предложенную команду и получить ключ.

После его ввода увидим следующее:

Вводим в консоли команду и попадаем в админ панель. Нам сразу открываются настройки:

Здесь можно поменять дефолтный пароль и сразу сделать SSL сертификат от Lets Encrypt, но я не хочу этого делать, а хочу «спрятать» админку за nginx, с базовой авторизацией и защитой от fail2ban, а также сертификатом, который будет на стороне nginx.

Устанавливаем nginx, fail2ban и certbot

apt install nginx fail2ban snap -y
snap install --classic certbot

Меняем у pritunl дефолтный 443 порт и отключаем 80:

pritunl set app.server_port 444
pritunl set app.redirect_server false

Конфигурируем nginx — /etc/nginx/conf.d/pritunl.conf:

upstream pritunl-vpn {
    server 127.0.0.1:444;
}
 
server {
    listen 80;
    root /usr/share/nginx/html;
    server_name vpn.example.com;
    location /.well-known {
      allow all;
    }
    location / {
      return 301 https://vpn.example.com$request_uri;
    }
}
 
server {
    server_name vpn.example.com;
    location / {
        proxy_pass https://pritunl-vpn;
        proxy_ssl_verify off;
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-For $remote_addr;
    }
}

Запускаем:

systemctl enable nginx
systemctl start nginx

Получаем сертификат на домен:

certbot certonly --nginx

И приводим конфиг nginx к следующему виду:

Nginx

upstream pritunl-vpn {
    server 127.0.0.1:444;
}
 
server {
    listen 80;
    root /var/www/html;
    server_name vpn.example.com;
    location /.well-known {
      allow all;
    }
    location / {
      return 301 https://vpn.example.com$request_uri;
    }
}
 
server {
    listen 443 ssl;
    ssl_certificate /etc/letsencrypt/live/vpn.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/vpn.example.com/privkey.pem;
    server_name vpn.example.com;   
    location / {
 auth_basic "Restricted";
 auth_basic_user_file /etc/nginx/.htpasswd;
        proxy_pass https://pritunl-vpn;
        proxy_ssl_verify off;
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-For $remote_addr;
    }
}

Как видите у нас добавилась, помимо SSL сертификатов секция auth_basic_user_file /etc/nginx/.htpasswd;

Создать файл можно так:

apt-get install apache2-utils
htpasswd -c /etc/nginx/.htpasswd <user>

Далее добавляем конфиг в fail2ban вот сюда /etc/fail2ban/jail.d/defaults-debian.conf:

[nginx-http-auth]
enabled = true
port = http,https
filter = nginx-http-auth
logpath = /var/log/nginx/error.log
maxretry = 3
bantime = 43200

Перезапускаем nginx и fail2ban:

systemctl restart nginx fail2ban

Теперь наша веб-морда находится за nginx и за базовой авторизацией, которая защищена силами fail2ban. Это можно легко проверить, несколько раз введя неправильные данные и выполнив команду:

fail2ban-client status nginx-http-auth

Далее идем в меню «Users». Нам нужно создать «Организацию» и добавить пользователя.

При создании пользователя, можно указать pin, его нужно будет вводить каждый раз при подключении. Если не указать, подключится автоматически. Но статичный пин это не удобно, если мы хотим нормальную защиту, pritunl позволяет сделать двухфакторную аутентификацию. Далее рассмотрим как.

После идем в «Servers» и настраиваем сам VPN сервер.

Собственно тут и ставим галочку «Enable Google Authenticator»

Pritunl также позволяет создать wireguard сервер, но сделано крайне странно, итоговый конфиг все равно остается в формате openvpn. Поэтому wireguard мы поставим отдельно.

После создания сервера, к ниму нужно прикрепить созданную ранее организацию. После чего запустить.

При добавлении пользователя, достаточно скачать сформированный конфиг тут:

Там же, если нажать на QR код, то отсканировав его в приложении «Google Authenticator» вы получите ту самую двухфакторку и каждый раз подключаясь через скачанный конфиг, будете вводить код из приложения.

Поднимаем wireguard:

Устанавливаем:

apt-get install wireguard wireguard-tools mawk grep iproute2 qrencode

Далее вся настройка будет сводится к использования bash скрипта. Скачиваем его:

wget https://raw.githubusercontent.com/burghardt/easy-wg-quick/master/easy-wg-quick

И запускаем:

chmod +x easy-wg-quick
./easy-wg-quick

После этого в директории запуска будут сгенерированы все нужные конфиги, ключи и прочее. Нас интересует файл wghub.conf. Это конфиг сервера, его следует положить вот сюда:

cp wghub.conf /etc/wireguard/

Запускаем wg:

systemctl start wg-quick@wghub

Если сохраните файл под другим именем, то соответственно после @ нужно будет указать правильное имя.

Чтобы сформировать новый конфиг клиента, нужно выполнить:

./easy-wg-quick test
cp wghub.conf /etc/wireguard/
systemctl start wg-quick@wghub

Конфиг клиента автоматически добавляется в конфиг сервера, следовательно его нужно перекинуть по новой и перезапустить wireguard.

Также при генерации конфига формируется QR код для подключения. Его можно увидеть прямо в консоли в любое время так:

cat wgclient_<user>.qrcode.txt

Для подключения на телефоне достаточно QR кода. На ПК придется импортить конфиг. Все конфиги имеют один принцип формирования имени wgclient_<user>.conf.

Тем самым можно на одной машине, запущенной в нужной локации иметь несколько реализаций VPN.


Report Page