Технические детали¶
Общая информация¶
VPNFace Lite не использует никаких специальных баз данных, не занимается синхронизацией с центрами сертификтов, и хранит все данные в двух json файлах.
Во время Простая установка (по умолчанию), доставляются и конфигурируются необходимые пакеты из официальных репозиториев, после установки VPNFace Lite отвечает только за управление ключами vpn серверов.
VPN подсети¶
По умолчанию VPNFace Lite создаёт три OpenVPN сервера со следующими сетвыми настройками:
VPN | Подсеть | Интерфейс | Адрес сервера |
---|---|---|---|
Админ VPN | 10.1.0.0/24 | tun0 | 10.1.0.1 |
Dark VPN | 10.2.0.0/24 | tun1 | 10.2.0.1 |
Inet VPN | 10.3.0.0/24 | tun2 | 10.3.0.1 |
На уровне iptables
при Простая установка (по умолчанию) сети настраиваются следующим образом:
Админ VPN: Полный доступ к серверу по адресу 10.1.0.1, отсутсвие интернета.
Dark VPN: DNS запросы перенаправляются на TorDNS на порту 5300, весь tcp трафик перенаправляется в тор на порту 9040, остальной udp трафик никуда не уходит.
Inet VPN: В качестве DNS серверов используются Google DNS 8.8.8.8, и 8.8.4.4. Весь сетевой трафик через NAT отправляется в интернет.
Конфигурация TOR¶
По умолчанию TOR настраивается по следующей конфигурации:
vpnface_lite/tpl/tor.conf
DataDirectory /var/lib/torVirtualAddrNetworkIPv4 12.0.0.0/16AutomapHostsOnResolve 1TransPort 10.2.0.1:9040DNSPort 10.2.0.1:5300StrictNodes 1ExcludeExitNodes «{AF},{AL},{DZ},{AI},{BH},{BY},{BT},{BW},{BR},{KH},{CF},{TD},{CL},{CN},{MO},{CG},{CD},{DJ},{EG},{ET},{GA},{GM},{GH},{IR},{IQ},{JO},{KZ},{KE},{KI},{KP},{KW},{KG},{LR},{LY},{MY},{MZ},{NA},{NR},{NI},{NE},{NG},{OM},{PK},{PS},{QA},{RU},{RW},{SA},{SN},{SO},{ZA},{SS},{SD},{SY},{TJ},{TZ},{TH},{TL},{TG},{TK},{TO},{TT},{TN},{TR},{TV},{UG},{UA},{UZ},{VE},{VN},{YE},{ZM},{ZW},{NP},{IN},{LK}»
Конфигурация NGINX¶
По умолчанию NGINX настраивается по следующей конфигурации:
vpnface_lite/tpl/nginx.conf
#панель управленияserver {listen 10.1.0.1:80;access_log /var/log/nginx/vpnface_lite.proxy.log;location / {proxy_pass http://127.0.0.1:8808;}}#документацияserver {listen 10.1.0.1:81;access_log /var/log/nginx/vpnface_lite.docs.log;root /opt/vpnface_lite/cdocs;index index.html;location / {default_type «text/html»;try_files $uri.html $uri $uri/ /index.html;}}
Директория данных¶
По умолчанию VPNFace Lite хранит данные в папке /opt/vpnface_ca
. Для каждого сервера с кодом <S> создаются две директории: <S>_ca
и <S>_cli
. Так же в этой директории хранятся файлы ip.json
и servers.js
.
Значения <S> при Простая установка (по умолчанию)
VPN | <S> |
---|---|
Админ VPN | adm |
Dark VPN | darknet |
Inet VPN | inet |
Центр ключей <S>_ca¶
Директория создаётся коммандой make-cadir DIR
из пакета easy-rsa
и дополняется следующими скриптами:
build-crl
из шаблона vpnface_lite/tpl/build-crl.sh
для генерации файла блокировок.
#!/bin/sh# revoke a certificate, regenerate CRL,# and verify revocationif [ -z «$KEY_DIR» ]; thenecho „Please source the vars script first (i.e. «source ./vars»)“exit 1fiCRL=»crl.pem»cd «$KEY_DIR»# set defaultsexport KEY_CN=»«export KEY_OU=»«export KEY_NAME=»«# required due to hack in openssl.cnf that supports Subject Alternative Namesexport KEY_ALTNAMES=»«# generate a new CRL – try to be compatible with# intermediate PKIs$OPENSSL ca -gencrl -out «$CRL» -config «$KEY_CONFIG»
revoke-key
из шаблона vpnface_lite/tpl/revoke-key.sh
с заменой ключа #MPORT на менеджмент порт openvpn сервера для блокировки пользователя.
#!/bin/bashif [ $# -ne 1 ]; thenecho «usage: voke-key <cert-name-base>»;exit 1fiif [ -z «$KEY_DIR» ]; thenecho „Please source the vars script first (i.e. «source ./vars»)“exit 1fiKEYS_INDEX=$KEY_DIR/index.txtLINE=`grep «/CN=$1/» $KEYS_INDEX`COLS_NUM=`echo $LINE | awk -F“ „ „{print NF;}“`echo $COLS_NUMif [[ $COLS_NUM -eq 5 ]] && [[ $LINE == V* ]]; then./revoke-full $1{sleep 3echo kill $1sleep 3echo exit} | telnet localhost #MPORTecho «Certificate revoked successfully.»exit 0;elif [[ $COLS_NUM -eq 6 ]] && [[ $LINE == R* ]]; thenecho «Client certificate is already revoked.»exit 0;elseecho «Error; Key index file may be corrupted.»exit 1;fiи
voke-key
с шаблонаvpnface_lite/tpl/voke-key.sh
для разблокирования пользовательского ключа#!/bin/bashif [ $# -ne 1 ]; thenecho «usage: voke-key <cert-name-base>»;exit 1fiif [ -z «$KEY_DIR» ]; thenecho „Please source the vars script first (i.e. «source ./vars»)“exit 1fiKEYS_INDEX=$KEY_DIR/index.txtNLINE=`grep -n «/CN=$1/» $KEYS_INDEX`LINE=`grep «/CN=$1/» $KEYS_INDEX`LINE_NUM=`echo $NLINE | cut -f1 -d:`COLS_NUM=`echo $LINE | awk -F“ „ „{print NF;}“`echo $COLS_NUMif [[ $COLS_NUM -eq 6 ]] && [[ $LINE == R* ]]; thenCOL2=`echo $NLINE | awk „{print $2}“`COL4=`echo $NLINE | awk „{print $4}“`COL5=`echo $NLINE | awk „{print $5}“`COL6=`echo $NLINE | awk „{print $6}“`echo -e «Vt$COL2tt$COL4t$COL5t$COL6» >> $KEYS_INDEXsed -i «${LINE_NUM}d» $KEYS_INDEX./build-crlecho «Certificate unrevoked successfully.»exit 0;elif [[ $COLS_NUM -eq 5 ]] && [[ $LINE == V* ]]; thenecho «Certificate is already unrevoked and active»exit 0;elseecho «Error; Key index file may be corrupted.»exit 1;fi
так же, при автоматическом создании серверов в файле <S>_ca/vars
производятся настройки данных сертификата.
все ключи и файлы криптографии сохраняются в директории <S>_ca/keys
.
OVPN генератор <S>_cli¶
Директория содержит базовый клиентский конфиг сервера, и скрипт для генерации ovpn файлов. Так же тут нахдится директория files
в которую помещаются сгенерированные клиентские ovpn файлы.
cli.conf
- шаблон клиентского конфига, при Простая установка (по умолчанию) генерируется при создании серверов, с заменой ключей необходимыми данными из шаблона vpnface_lite/tpl/cli.conf
clientdev tunproto #PROTOremote #REMOTE #PORT#GWnobinduser nobodygroup nogrouppersist-keypersist-tunremote-cert-tls serverkey-direction 1cipher AES-256-CBCauth SHA256verb 3
таблица ключей
ключ | значение | Admin VPN | Dark VPN | Inet VPN |
---|---|---|---|---|
#PROTO | протокол tcp/udp | udp | udp | udp |
#REMOTE | интернет ip сервера | server_ip | server_ip | server_ip |
#PORT | порт openvpn сервера | 1194 | 1195 | 1196 |
#GW | параметры DNS/route | — | TOR DNS | GoogleDNS |
cli.sh
- баш скрипт генерации ovpn файла, из шаблона vpnface_lite/tpl/cli.sh
#!/bin/bash#KEY_DIR#OUTPUT_DIR#BASE_CONFIGcat ${BASE_CONFIG}<(echo -e „<ca>“)${KEY_DIR}/ca.crt<(echo -e „</ca>n<cert>“)${KEY_DIR}/${1}.crt<(echo -e „</cert>n<key>“)${KEY_DIR}/${1}.key<(echo -e „</key>n<tls-auth>“)${KEY_DIR}/ta.key<(echo -e „</tls-auth>“)> ${OUTPUT_DIR}/${1}.ovpn
таблица ключей
ключ | значение |
---|---|
#KEY_DIR | директория <S>_ca/keys - источник ключей |
#OUTPUT_DIR | дирекория <S>_cli/files - выходные ovpn |
#BASE_CONFIG | файл <S>_cli/cli.conf - шаблон клиентского конфига |
Сетевые настройки ip.json¶
{«ip»: «интернет ip адрес сервера»,«dev»: «интернет сетевой интерфейс, например eth0»}
База данных servers.json¶
Файл содержит базу данных серверов и клиентов, на которую опирается VPNFace Lite. Если вы производите ручную установку для уже имеющихся серверов (Ручная установка), вам требуется при установке сформировать этот файл вручную по следующему формату:
В качестве примера используется сервер S1 с подсетью 10.1.0.1/24, и содержит полный пример конфига, а сервер S2 настроен в минимальном для работы режиме, для примера установки на уже имеющийся сервер, с подготовленной вручную структурой файлов и директорий.
Поля, помеченые * используются только во время создания сервера
{«S1»: {«code»: «S1»,«name»: «Имя сервера для панели управления»,«desc»: «Описание для панели управления»,«logs»: true/false, //* ведёт ли сервер логи«friends»: true/false, //* видят ли клиенты друг-друга«maxclients»: 100, //* максимальное количество соединений«type»: «root», //тип сервера«network»: {«host»: «0.0.0.0», //* на каком хосте запускать openvpn сервер«remote»: «интернет ip сервера», //*«intranet»: «10.1.0.0/24», //* vpn подсеть«port»: 1194, //* на каком порту vpn сервер ожидает клиентов«mport»: 2294, //* порт управления vpn сервером«proto»: «udp», //* протокол соединения«dev»: «tun0», //сетевой интерфейс vpn сервера на сервере},«cert»: { //* параметры сертификата для файла S1_ca/vars«country»: «US»,«province»: «CA»,«city»: «City»,«org»: «Organisation»,«email»: «email@domain.zone»,«ou»: «Organization Unit»},«intranet»: { //* сетевые данные vpn подсети, генерируются при создании«networkAddress»: «10.1.0.0»,«firstAddress»: «10.1.0.1»,«lastAddress»: «10.1.0.254»,«broadcastAddress»: «10.1.0.255»,«subnetMask»: «255.255.255.0»,«subnetMaskLength»: 24,«numHosts»: 254,«length»: 256},«clients»: [ // массив клиентов.{«code»: «client1_code», // код ключа«blocked»: true/false, // состояние блокировки«server»: «S1» // код сервера, для удобства},{«code»: «client2_code», // код ключа«blocked»: true/false, // состояние блокировки«server»: «S1» // код сервера, для удобства}]},«S2»: {«code»: «S2»,«name»: «Имя сервера для панели управления»,«desc»: «Описание для панели управления»,«maxclients»: 100, //* максимальное количество соединений, отображается в панели«type»: «public», //тип сервера«clients»: [ // массив клиентов.{«code»: «client1_code», // код ключа«blocked»: true/false, // состояние блокировки«server»: «S1» // код сервера, для удобства},{«code»: «client2_code», // код ключа«blocked»: true/false, // состояние блокировки«server»: «S1» // код сервера, для удобства}]},«<S3>»: { … }«<S4>»: { … }}
Серверная структура /etc/openvpn/¶
В директории /etc/openvpn/
хранятся конфигурации и ключи рабочих серверов. Для каждого сервера VPNFace Lite создаёт директорию <S>
в которуй хранятся файлы ключей, криптографии и блокировок, и файл <S>.conf
серверной конфигурации, который создаётся по шаблону vpnface_lite/tpl/server.conf
#LOCALport #PORTproto #PROTOdev #DEVca #CA_CRTcert #SERVER_CRTkey #SERVER_KEYdh #DH_PEM#INTRANETifconfig-pool-persist /var/log/openvpn/ipp-#SERVER.txt#GW#FRIENDSkeepalive 10 120tls-auth #TA_KEY 0key-direction 0cipher AES-256-CBCauth SHA256crl-verify #SERVER_CRLmanagement 127.0.0.1 #MANAGEMENT_PORTmax-clients #MAX_CLIENTSuser nobodygroup nogrouppersist-keypersist-tun#LOGverb 3explicit-exit-notify 1
таблица ключей
ключ | значение |
---|---|
#LOCAL | значение <conf.network.host> если не 0.0.0.0 |
#PORT | порт клиентских соединений |
#DEV | сетевой интерфейс |
#CA_CRT | <S>/ca.crt |
#SERVER_CRT | <S>/<S>.crt |
#DH_PEM | <S>/dh2048.pem |
#INTRANET | „server <conf.intranet.*>“ |
#GW | push route/DNS в зависимости от <conf.type> |
#FRIENDS | „client-to-client“ если <conf.firends == true> |
#SERVER_CRL | <S>/crl.pem |
#MANAGEMENT_PORT | „127.0.0.1 <conf.network.mport>“ |
#MAX_CLIENTS | <conf.maxclients> |
#LOG | log-status и log-append в зависимости от <conf.logs> |
CONF.TYPE настройка¶
Параметр type
в конфигурации оказывает влияние на опции создания OpenVPN серверов и иконку в панели администрирования.
В будущем это будет оказывать влияние на настройки iptables
но в версии Lite файрвол конфигурируется по предустановленым значениям, так что на iptables влияния нет.
Таблица возможных значений
значение | iptables | server.conf | cli.conf | иконка в панели |
---|---|---|---|---|
public | в интернет | GoogleDNS | – | прозрачное облако |
root | на сервер | – | no-push | перечёркнутое облако |
dark | в тор | TOR DNS | – | облако в закрашеном круге |
Файл конфигурации conf.js¶
Файл располагается по пути vpnface_lite/conf.js
и содержит настройки необходимые для постоянной работы, и установки в формате javascript.
В случае запуска VPNFace Lite на работающих серверах без встроенной установки (Установка панели управления на работающий сервер), файл должен содержать два параметра: порт апи, и путь к директории данных.
По умолчанию файл так же содержит конфигурации сертификата и серверов для Простая установка (по умолчанию). В режиме Установка с настройкой сертификатов или путей этот файл можно отконфигурировать под требуемые значения.
Структура файла:
module.exports = {dir: „/opt/vpnface_ca“,port: 8808,cert: CERT_CONFIG<Общий сертификат «по умолчанию»>,servers: {adm: SERVER_CONFIG<Админ VPN>,inet: SERVER_CONFIG<Интернет VPN>,dark: SERVER_CONFIG<TOR VPN>,}}
Полный пример можно посмотреть в файле по умолчанию
Сервис vpnface_lite¶
VPNFace Lite по умолчанию устанавливается в виде системного сервиса с названием vpnface_lite
пакетом forever_service
. Сервис ведёт логи в /var/log/vpnface_lite.log
Iptables¶
iptables - linux файрвол. При автоматической установке выполняется следующий набор комманд, для установки правил:
На старте установки:
iptables -P INPUT ACCEPTiptables -P FORWARD ACCEPTiptables -P OUTPUT ACCEPTiptables -t nat -Fiptables -t mangle -Fiptables -t nat -Xiptables -t mangle -Xiptables -Fiptables -Xecho «net.ipv4.ip_forward=1» > /etc/sysctl.confecho «net.ipv6.conf.all.disable_ipv6 = 1» >> /etc/sysctl.confecho «net.ipv6.conf.default.disable_ipv6 = 1» >> /etc/sysctl.confecho «net.ipv6.conf.lo.disable_ipv6 = 1» >> /etc/sysctl.confsysctl -p
На завершении:
iptables -A INPUT -i lo -j ACCEPTiptables -A INPUT -m conntrack –ctstate ESTABLISHED,RELATED -j ACCEPTiptables -A INPUT -p udp –dport 1194 -j ACCEPTiptables -A INPUT -p udp –dport 1195 -j ACCEPTiptables -A INPUT -p udp –dport 1196 -j ACCEPTiptables -A INPUT -s 10.1.0.0/24 -j ACCEPTiptables -A INPUT -s 10.2.0.0/24 -d 10.2.0.1 -j ACCEPTiptables -A INPUT -s 10.3.0.0/24 -d 10.3.0.1 -j ACCEPTiptables -t nat -A POSTROUTING -s 10.3.0.0/24 -o <IP.JSON:DEV> -j MASQUERADEiptables -t nat -A PREROUTING -i tun1 -p udp –dport 53 -j REDIRECT –to-ports 5300iptables -t nat -A PREROUTING -i tun1 -p tcp –syn -j REDIRECT –to-ports 9040iptables -A INPUT -j DROP
Обратите внимание, на опции, устанавливаемые в /etc/sysctl.conf
net.ipv4.ip_forward = 1net.ipv6.conf.all.disable_ipv6 = 1net.ipv6.conf.default.disable_ipv6 = 1net.ipv6.conf.lo.disable_ipv6 = 1
для возможности роутинга трафика и отключения ip v6.
NodeJS¶
Для установки nodejs v10 используется node version manager
https://github.com/creationix/nvm
После установки скприт install.sh
создаёт линк на 10 версию ноды в общесистемный путь
ln -s `whitch node` /usr/sbin