Pritunl — установка и настройка

Pritunl — тот же OpenVPN, но с преферансом и куртизанками. Почитать можно здесь. На самом деле Pritunl является оболочкой для OpenVPN, предоставляя удобный графический интерфейс для создания конфигураций OpenVPN сервера, создания пользователей, генерации ключей и т.д. Продукт предназначен для  энтерпрайза, но есть и бесплатная версия. Её функционал урезан, однако для личных целей или для малого офиса его вполне достаточно. Установка не сложная, советую попробовать.

Нам понадобится любой VPS с поддержкой TUN/TAP. Pritunl можно поставить практически на любую операционную систему. Про это можно почитать здесь. В рамках данной статьи будет применяться CentOS 7.

Обновим сервер командами:

yum -y install epel-release
yum -y update

Для начала настройте безопасную аутентификацию на сервере, как написано здесь. Далее настроим правила файрволла. В текущей статье будет настраиваться следующая конфигурация: порт для web-консоли — 4445, порт для подключение ovpn-клиентов — 443. Для настроийки файрволла используйте вот эту инструкцию. Единственный момент — в файл ipt-set вписывайте не то, что указано в инструкции, а вот такое содержимое:

#!/bin/sh
IF_EXT="venet0"
VPN_PORT="443"
WEBADMIN_PORT="4445"
IPT="/sbin/iptables"
IPT6="/sbin/ip6tables"

# flush
$IPT --flush
$IPT -t nat --flush
$IPT -t mangle --flush
$IPT -X
$IPT6 --flush

# default
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP
$IPT6 -P INPUT DROP
$IPT6 -P OUTPUT DROP
$IPT6 -P FORWARD DROP


# loopback
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT
$IPT6 -A INPUT -i lo -j ACCEPT
$IPT6 -A OUTPUT -o lo -j ACCEPT

# allow forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward

# INPUT chain
# #########################################
$IPT -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT6 -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# ssh
$IPT -A INPUT -p tcp --dport 22 -j ACCEPT
# pritunl_web
$IPT -A INPUT -p tcp --dport $WEBADMIN_PORT -j ACCEPT
$IPT -A INPUT -p tcp --dport 80 -j ACCEPT
# pritunl_vpn
$IPT -A INPUT -p tcp --dport $VPN_PORT -j ACCEPT
$IPT -A INPUT -p udp --dport $VPN_PORT -j ACCEPT

# OUTPUT chain
# #########################################
$IPT -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT6 -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

Не забудьте про правильное имя внешнего интерфейса в переменной IF_EXT.

Если всё сделано верно, то по команде

iptables -L -n

будет получен такой вывод:

Обратите внимание, что открыт также порт 80. Это нужно для получения и обновления сертификатов от LetsEncrypt для нашей web-консоли. Не лишним будет проверить, что этот порт не занят. Такое может быть, если при установке операционной системы сразу установлен apache или иной web-сервер. Выполните команду:

netstat -tulnp | grep 80

В ответ мы должны получить ровно ничего, а значит порт свободен.

Если система ругается, что -bash: netstat: command not found, то выполняем команду:

yum install net-tools -y

Теперь пробуем:

netstat -tulnp | grep 80

Если в выводе команды видим:

то значит порт занят, в данном случае, службой httpd. Остановим её и уберем из автозагрузки:

systemctl stop httpd
systemctl disable httpd

Таким же способом можно проверить незанятость порта 443.

Теперь добавим репозиторий mongodb командой:

tee /etc/yum.repos.d/mongodb-org-4.0.repo << EOF
[mongodb-org-4.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/7/mongodb-org/4.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.0.asc
EOF

Добавим репозиторий pritunl командой:

tee /etc/yum.repos.d/pritunl.repo << EOF
[pritunl]
name=Pritunl Repository
baseurl=https://repo.pritunl.com/stable/yum/centos/7/
gpgcheck=1
enabled=1
EOF

Импортируем ключи:

rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys 7568D9BB55FF9E5287D586017AE645C0CF8E292A
gpg --armor --export 7568D9BB55FF9E5287D586017AE645C0CF8E292A > key.tmp; rpm --import key.tmp; rm -f key.tmp

Теперь можно установить mongodb и pritunl командами:

yum -y install pritunl mongodb-org

Запустим службы mongodb и pritunl и добавим в автозагрузку mongodb:

systemctl start mongod pritunl
systemctl enable mongod

Запустите приведенные ниже команды, чтобы увеличить ограничение на количество открытых файлов на сервере. Это нужно для нормальной работы mongodb:

sh -c 'echo "* hard nofile 64000" >> /etc/security/limits.conf'
sh -c 'echo "* soft nofile 64000" >> /etc/security/limits.conf'
sh -c 'echo "root hard nofile 64000" >> /etc/security/limits.conf'
sh -c 'echo "root soft nofile 64000" >> /etc/security/limits.conf'

Когда вы запускаете Pritunl в первый раз, на веб-сервере, работающем через порт 443, вам будет показано приглашение настроить базу данных. Программа установки базы данных запросит ключ установки и URI MongoDB. Чтобы получить ключ установки запустите команду:

pritunl setup-key

В ответ получите тот самый setup-key из цифр и букв.

Теперь можно перейти по адресу https://[IP-адрес вашего сервера] в браузере. Так как сертификат для https пока самоподписанный, то увидим предупреждение. Соглашаемся:

Получаем приглашение настроить базу данных:

Используем секретный ключ, полученный ранее командой pritunl setup-key. Строчку URI не трогаем.

Некоторое время будет идти создание и настройка базы данных.

После это появится запрос логина и пароля.

Логин и пароль получим в ssh-консоли командой:

pritunl default-password

Вводим логин и пароль и попадаем в web-консоль. Нас сразу попросят сделать базовые настройки.

Здесь вам нужно сделать как инимум одну настройку: поменять порт с 443 на 4445. Также рекомендую изменить имя пользователя и пароль с дефолтных на свои.

Также, если у Вас есть доменное имя и настроена DNS-запись на IP-адрес сервера (подробнее можно найти в этой статье), то може вписать это имя в поле «Lets Encrypt Domain». Это позволит ходить в консоль по имени, а не по IP-адресу и не получать указанное выше предупреждение браузера при каждом входе. Если использовать доменное имя не планируется, оставьте поле пустым. Вы всегда можете вернуться к этим настройкам позднее.

Когда настройки сделаны, нажмите Save. Если вы ввели доменное имя, то некоторое время будет происходить получение сертификата Lets Encrypt . Обычно 5-10 секунд.

Так как порт мы поменяли, то в браузере нужно открыть новый адрес:

  • https://[IP-адрес вашего сервера]:4445 — если доменное имя не используется
  • https://[имя сервера]:4445 — если доменное имя используется

Теперь мы видим консоль

Осталось сделать еще одну вещь, прежде, чем мы начнем конфигурировать vpn-сервер.

Мы будем в web-консоли создавать vpn-серверы, а pritunl будет сам прописывать правила для них в iptables. При этом, в начале статьи, мы сделали свои настройки iptables. Нужно сделать так, чтобы это всё уживалось и не конфликтовало. Выше, после установки mongodb и pritunl мы добавили в автозагрузку только mongodb. И это неспроста. Теперь в файл /root/ipt-set в самом конце мы допишем строчки:

# Starting Pritunl Service
systemctl start pritunl

Сохраним и перезагрузим сервер командой reboot.

Т.е. теперь у нас будут при запуске сервера отрабатываться настройки iptables из файла ipt-set и только после применения настроек скрипт ipt-set запустит pritunl, а тот уже, в свою очередь, добавит в iptables свои настройки. В итоге никаких конфликтов и никаких лишних доступов.

Всё, ssh-консоль больше не нужна, заходим в web-консоль и работаем с ней. Жмём сверху в меню «Users», а потом кнопку «Add Organization».

Вводим любое имя организации. Не важно.

И нажимаем «Add». Теперь жмём «Add User». Здесь вводим имя будущего пользователя, а также пин-код. В пин-коде должно быть не менее 6 цифр. Он используется как второй фактор при авторизации. Email вводить не обязательно.

Жмём «Add» и получаем запись нового пользователя.

Обратите внимание на иконки слева. Когда создадим vpn-сервер, то с их помощью сможем получить готовый конфиг пользователя.

Сверху в меню выбираем «Servers»

Жмём кнопку «Add Server»  и, в появившемся окне, сверху, «Advanced».

На скриншоте цветом выделены параметры, на которые нужно обратить внимание:

  • Name — любое понятное вам имя сервера.
  • Port — порт, на котором будет работать сервер. В моём примере я ставлю 443.
  • Protocol — протокол. В моём примере я ставлю tcp.
  • Encryption Cipher — ставим AES 256bit или 512bit.
  • DNS Server — DNS сервер, к которому будут обращаться клиенты. Я поставил гугловые восьмёрки.
  • Enable Google Authenticator — если поставите галочку, то клиенты смогут дополнительно, при аутентификации, использовать одноразовые пароли из Google Authenticator. Сначала потренеруйтесь без этой опции. Её можно включить позже.
  • Bind Address — впишите внешний IP вашего сервера к которому будет привязан vpn-сервер.
  • Hash Algorithm — ставьте SHA-256.
  • Allow Multiple Devices — если галочка стоит, то клиент сможет использовать свой конфиг и ключи на нескольких устройствах одновременно.
  • Block Outside DNS — если галочка стоит, то клиенты будут использовать только тот DNS -сервер, который прописан здесь.
  • Inter-Client Communication — если галочка стоит, то клиенты могут видеть друг друга по виртуальным IP-адресам.

Настраиваем и жмём Add. Теперь нужно привязать сервер к организации.

Жмём кнопку «Attach Organization»

и привязываем наш сервер к организации.

Т.е. мы можем создать разные организации (например отдельные организации для рабочих и домашних устройств или для разных отделов в офисе), у каждой организции свой набор пользователей и серверов. Это позволит очень гибко предоставлять и прекращать доступы. Один сервер можно привязать к нескольким организациям.

Итоговый вид такой:

Оратите внимание: вместе с организацией к серверу прикрепился и пользователь этой организации.

Запускаем сервер кнопкой «Start Server» и видим, что сервер запустился

Дальше в меню выбираем «Users». Используя иконки напротив имени пользователя скачиваем конфиг с ключами.

Например если так:

То будет предложено несколько временных ссылок на разные типы ахивов. Скачиваем zip, внутри него стандартный ovpn-файл, который добавляем в OpenVPN-клиент.

Или так:

Тогда будет скачан tar-архив, но внтури всё тот же ovpn-файл.

Если нажать на стрелочку, то увидите виртуальный адрес клиента (или несколько адресов, если клиенту разрешено использовать профиль на нескольких устройствах):

Как использовать готовый ovpn-файл, описано во второй половине этой статьи.

На этом, думаю, достаточно. Пользуйтесь. В web-консоли ещё куча кнопок, кроме описанных здесь. Их все можно нажимать, найдёте ещё много интересного.

Вы можите оставить комментарий, или поставить трэкбек со своего сайта.

Написать комментарий

XHTML: Вы можете использовать эти теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>