«SimpleX – первый мессенджер без идентификаторов пользователей, настройка сервера на Debian 12» и «Настройка сервера IKEv2 VPN с StrongSwan в Ubuntu 20.04»: разница между страницами

Материал из Шпаргалка знаний
(Различия между страницами)
Перейти к навигации Перейти к поиску
Нет описания правки
 
(Новая страница: «Ручная пошаговая настройка сервера описана в статье: '''https://www.digitalocean.com/community/tutorials/how-to-set-up-an-ikev2-vpn-server-with-strongswan-on-ubuntu-20-04-ru''' Мы же все действия произведем с помощью скрипта. Видео по установки и настройки скрипта: '''https://www.youtube.com/watch?v=93oJ5fF1mE0''' Хостинг европ...»)
 
Строка 1: Строка 1:
'''Что такое SimpleX'''  
Ручная пошаговая настройка сервера описана в статье: '''https://www.digitalocean.com/community/tutorials/how-to-set-up-an-ikev2-vpn-server-with-strongswan-on-ubuntu-20-04-ru'''


'''​​SimpleX''' – не только один из немногих мессенджеров, который не собирает данные пользователей, но и единственный на сегодняшний день мессенджер, который не использует идентификаторы для профилей пользователей, даже случайные числа.
Мы же все действия произведем с помощью скрипта.


Для доставки сообщений вместо идентификаторов пользователей SimpleX имеет идентификаторы очередей сообщений, отдельные для каждого из контактов. В текущей версии приложения каждая очередь используется до тех пор, пока контакт не будет удален или пока адрес получения сообщений не будет изменен пользователем вручную. Позже команда проекта планирует автоматизировать этот процесс, а также добавить ротацию очередей в клиентский протокол, чтобы даже разговоры не имели долгосрочных идентификаторов, видимых в сети. Такая конструкция предотвращает утечку метаданных пользователей на уровне приложения.
Видео по установки и настройки скрипта: '''https://www.youtube.com/watch?v=93oJ5fF1mE0'''


Вы, как пользователь мессенджера, можете самостоятельно определить, какой сервер(ы) использовать для получения сообщений, а ваши контакты – серверы, которые вы используете для отправки им сообщений. Это означает, что в каждом разговоре, будут использоваться два разных сервера – по одному для каждого направления сообщений.
Хостинг европейских серверов из России:


Только клиентские устройства хранят профили пользователей, контакты, группы и сообщения, отправленные с двухуровневым сквозным шифрованием.
'''https://timeweb.cloud/?i=104329'''


Итак, разработчики SimpleX создали свой протокол для передачи сообщений:  
'''https://bit.ly/3urB78d'''


* SimpleX Messaging Protocol (SMP) – это протокол для отправки сообщений в одном направлении получателю, используя промежуточный сервер. Сообщения доставляются через однонаправленные очереди, создаваемые получателями.
Не российский хостинг (Эстония) с очень большой географией серверов и возможностью пополнения с российской карты. При оплате за год еще 3 месяца дают бесплатно:


* SMP работает через транспортный протокол, который обеспечивает целостность, аутентификацию сервера, конфиденциальность и привязку транспортного канала.
'''https://bit.ly/3rOqvPE'''


* Сервер SimpleX – это один из таких серверов.
== Подготовка сервера. ==
 
* Сеть SimpleX – это термин, используемый для обозначения группы серверов SimpleX, которые способствуют работе SMP.
 
* Библиотеки SimpleX Client говорят на языке SMP с SimpleX Servers и предоставляют низкоуровневый API, не предназначенный для использования приложениями.
 
С помощью функции '''Netzwerk & Server SimpleX''' можно настроить мессенджер таким образом, чтобы все коммуникации направлялись через сеть '''Tor'''. В сочетании с отсутствующим (уникальным) идентификатором и протоколом '''Simplex Messaging Protocol (SMP)''' возможно анонимное использование, что затрудняет или делает невозможным определить, кто с кем контактирует по метаданным. И еще: в отличие от Briar, например, контакт или устройство не обязательно должны быть постоянно онлайн, чтобы иметь возможность получить сообщение. Они временно хранятся на серверах ретрансляции SimpleX до тех пор, пока не будут получены.
 
 
'''Как работает сеть SimpleX'''
 
Сеть SimpleX по своей структуре напоминает P2P–сети, но в отличие от большинства P2P–сетей она состоит из клиентов и серверов, не зависящих от какого–либо централизованного компонента. По сравнению с более традиционными приложениями для обмена сообщениями (например, WhatsApp, Signal, Telegram) ключевыми отличиями сети SimpleX являются:
 
Участникам не нужно иметь глобально уникальные адреса для общения, вместо этого они используют избыточные однонаправленные (симплексные) очереди обмена сообщениями, с отдельным набором очередей для каждого контакта.
 
Запросы на соединение передаются вне сети, не обязательно защищая обмен ключами от атаки MITM (человек посередине).
 
Простые очереди сообщений, предоставляемые серверами сети, используются клиентами для создания более сложных сценариев коммуникации, таких как дуплексное общение один на один, передача файлов, групповая коммуникация без центральных серверов, каналы контент/коммуникации.
 
Серверы не хранят никакой пользовательской информации (ни профилей пользователей, ни контактов, ни сообщений после их доставки), и в основном используют персистентность в памяти.
 
Пользователи могут менять серверы с минимальными перебоями – даже после исчезновения используемого сервера, просто изменив конфигурацию, на каких серверах создаются новые очереди.
 
[[File:simplex_01.png|link=]]
 
 
'''Особенности SimpleX'''
 
* Сквозное шифрование в каждой очереди сообщений с использованием NaCl cryptobox. Это добавлено для обеспечения избыточности в будущем (прохождение каждого сообщения через несколько серверов), чтобы избежать наличия одного и того же шифротекста в разных очередях (который будет виден злоумышленнику только в случае компрометации TLS). Ключи шифрования, используемые для этого шифрования, не вращаются, вместо этого мы планируем вращать очереди. Для согласования ключей используются ключи Curve25519.
 
* Начиная с версии 2 протокола SMP (текущая версия – v4) все метаданные сообщения, включая время получения сообщения сервером (с округлением до секунды), отправляются получателям в зашифрованном виде
 
* Для соединений клиент–сервер разрешены только TLS 1.2/1.3, ограниченные криптографические алгоритмы: CHACHA20POLY1305_SHA256, Ed25519/Ed448, Curve25519/Curve448.
 
* Для защиты от атак повторного воспроизведения серверы SimpleX требуют привязки канала tlsunique в качестве идентификатора сессии в каждой клиентской команде, подписанной эфемерным ключом per–queue.
 
* Для защиты вашего IP–адреса все клиенты SimpleX Chat поддерживают доступ к серверам обмена сообщениями через Tor.
 
* Шифрование локальной базы данных с помощью парольной фразы – ваши контакты, группы и все отправленные и полученные сообщения хранятся в зашифрованном виде. Если вы использовали SimpleX Chat до версии 4.0, вам необходимо включить шифрование в настройках приложения.
 
== Развертываем сервер SimpleX-Chat на Debian 12 ==
После установки на сервер Debian 12 (Minimal) (x86_64) 2Gb RAM, 2 CPU, 20Gb SSD, приступаем к подготовке сервера.
 
[[File:simplex_02.png|link=]]
 
=== Установка ===
Официальный репозиторий SimpleX-chat: '''https://github.com/simplex-chat/simplexmq'''
 
Официальный сайт: '''https://simplex.chat/docs/server.html'''
 
Задаем права пользователю Debian:
<pre>
<pre>
su
sudo apt update && sudo apt upgrade -y
apt install sudo
su - root
adduser username sudo
reboot
</pre>
</pre>
''* где '''username''' имя пользователя под которым зашли в систему.''


<pre>
Скрипт находится по данной ссылке: '''https://github.com/AdelKudryashev/Strongswan-installation-script'''
sudo apt-get update
sudo apt-get upgrade
</pre>


==== Устанавливаем Docker. на Debian 12 ====
=== Установка. ===
Перед запуском скрипта узнайте свой сетевой интерфейс, используя команду
<pre>
<pre>
# Add Docker's official GPG key:
ip route show default
 
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
</pre>
</pre>
 
После применения команды вы увидите вывод вида
<pre>
<pre>
# Add the repository to Apt sources:
Output
 
default via your_server_ip dev eth0  proto static
echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
</pre>
</pre>
 
После '''dev''' будет нужный интерфейc, в данном случае это '''eth0'''. Вставьте в скрипте ваш интерфейс, используйте поиск для этого. Замените в скрипте все '''eth0''' на ваш сетевой интерфейс.
<pre>
<pre>
# Install docker from repo (~450MB,2Min)
sudo wget https://github.com/AdelKudryashev/Strongswan-installation-script/blob/master/startswan.sh
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo apt install docker.io docker-compose
</pre>
</pre>
 
Далее заходим в скрипт и меняем в нем все записи '''eth0''' на наш интерфейс.
<pre>
<pre>
# Install SimpleX from Docker Hub (~300MB,30Min)
sudo nano ~/startswan.sh
mkdir -p $HOME/simplex/{xftp,smp}/{config,logs} && mkdir -p $HOME/simplex/xftp/files
git clone https://github.com/simplex-chat/simplexmq
cd simplexmq
git checkout stable
DOCKER_BUILDKIT=1 docker build -t local/smp-server --build-arg APP="smp-server" --build-arg APP_PORT="5223" . # For xmp-server
DOCKER_BUILDKIT=1 docker build -t local/xftp-server --build-arg APP="xftp-server" --build-arg APP_PORT="443" . # For xftp-server
</pre>
</pre>


На этом этапе я ждал примерно 30 минут пока выполнятся 2-е команды выше.
Для запуска скрипта используйте команду
 
Далее запускаем докер с нужными нам настройками
 
<pre>
<pre>
docker run -d \
yes | sudo sh startswan.sh
    --name smp-server \
    --restart always \
    -e "ADDR=smp.putyato.pro" \
    -p 5223:5223 \
    -v $HOME/simplex/smp/config:/etc/opt/simplex:z \
    -v $HOME/simplex/smp/logs:/var/opt/simplex:z \
    simplexchat/smp-server:latest
</pre>
</pre>


''* где '''smp.putyato.pro''' домен нашего SMP, задаем свой.''
Если скрипт не скачался, то вот тело скрипта:


<pre>
<pre>
docker run -d \
#You must change the eth0 interface to your own in this script in /etc/ufw/before.rules in three places
    --name xftp-server \
#Вы должны изменить интерфейс eth0 на свой в этом скрипте в /etc/ufw/before.rules в трех местах
    --restart always \
#!/bin/bash
    -e "ADDR=xftp.putyato.pro" \
apt update
    -e "QUOTA=50gb" \
myip=$(wget -qO - eth0.me)
    -p 443:443 \
apt install strongswan strongswan-pki libcharon-extra-plugins libcharon-extauth-plugins -y
    -v $HOME/simplex/xftp/config:/etc/opt/simplex-xftp:z \
mkdir -p ~/pki/cacerts
    -v $HOME/simplex/xftp/logs:/var/opt/simplex-xftp:z \
mkdir -p ~/pki/certs
    -v $HOME/simplex/xftp/files:/srv/xftp:z \
mkdir -p ~/pki/private
    simplexchat/xftp-server:latest
</pre>
 
''* где '''xftp.putyato.pro''' домен нашего XFTP, задаем свой, 50gb - допустимое место для файлов.''
 
Проверяем как запустились Докеры.
 
<pre>
docker ps
</pre>
Смотрим ID докера и вставляем его в команду ниже:
 
<pre>
#docker exec -it ------ContainerID------ sh -c "smp-server start"
docker exec -it 8077fbd502b4 sh -c "smp-server start"
</pre>


Получаем нужную ссылку SMP-servera для установки в телефон:
chmod 700 ~/pki


<pre>
pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/ca-key.pem
# smp://YnnfZurIMWt0CmEFY8kiZbldDteRA9JWlCHyVYKfo-U=@smp.putyato.pro
</pre>


Повторяем данную операцию для XFTP-servera:
pki --self --ca --lifetime 3650 --in ~/pki/private/ca-key.pem \
--type rsa --dn "CN=VPN root CA" --outform pem > ~/pki/cacerts/ca-cert.pem


Смотрим ID докера и вставляем его в команду ниже:
pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/server-key.pem


<pre>
pki --pub --in ~/pki/private/server-key.pem --type rsa \
#docker exec -it ------ContainerID------ sh -c "smp-server start"
    | pki --issue --lifetime 1825 \
docker exec -it 3598af7c4d35 sh -c "xftp-server start"
        --cacert ~/pki/cacerts/ca-cert.pem \
</pre>
        --cakey ~/pki/private/ca-key.pem \
        --dn "CN=$myip" --san @$myip --san $myip \
        --flag serverAuth --flag ikeIntermediate --outform pem \
    >  ~/pki/certs/server-cert.pem


Получаем нужную ссылку XFTP-servera для установки в телефон:
cp -r ~/pki/* /etc/ipsec.d/


<pre>
mv /etc/ipsec.conf{,.original} #Создаем резервную копию файла настроек
# xftp://DZfGTKj-dfJTPLF7MJUvO-EFFE4Vncz9v2eXjbIxKGE=@xftp.putyato.pro
</pre>


Делаем чтобы докеры после перезапуска сервера автоматически поднимались.
cat << EOF > /etc/ipsec.conf
config setup
    charondebug="ike 1, knl 1, cfg 0"
    uniqueids=no


<pre>
conn ikev2-vpn
systemctl enable docker
    auto=add
</pre>
    compress=no
    type=tunnel
    keyexchange=ikev2
    fragmentation=yes
    forceencaps=yes
    dpdaction=clear
    dpddelay=300s
    rekey=no
    left=%any
    leftid=$myip
    leftcert=server-cert.pem
    leftsendcert=always
    leftsubnet=0.0.0.0/0
    right=%any
    rightid=%any
    rightauth=eap-mschapv2
    rightsourceip=10.10.10.0/24
    rightdns=8.8.8.8,8.8.4.4
    rightsendcert=never
    eap_identity=%identity
    ike=chacha20poly1305-sha512-curve25519-prfsha512,aes256gcm16-sha384-prfsha384-ecp384,aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024,aes256-sha256-modp2048!
    esp=chacha20poly1305-sha512,aes256gcm16-ecp384,aes256-sha256,aes256-sha1,3des-sha1!
EOF


=== WebRTC ICE в SimpleX Chat Развертывание сервера STUN/TURN ===
cat << EOF > /etc/ipsec.secrets
Установите '''coturn''' пакет из основного репозитория.
: RSA "server-key.pem"
<pre>
# your_username : EAP "your_password" - use this format for create new user
apt update && apt install coturn
# sudo systemctl restart strongswan-starter - for the changes to take effect, after adding a new user, close the file and restart the server with this command
</pre>
EOF
Раскомментировать TURNSERVER_ENABLED=1 из /etc/default/coturn:
<pre>
sed -i '/TURN/s/^#//g' /etc/default/coturn
</pre>
Настроить coturnв /etc/turnserver.conf:
<pre>
# Also listen to 443 port for tls
alt-tls-listening-port=443


listening-port=3478
tls-listening-port=5349


# Use fingerprints in the TURN messages
ufw allow OpenSSH
fingerprint
ufw enable
# Use long-term credentials mechanism
ufw allow 500,4500/udp
lt-cred-mech
# Your credentials
user=$YOUR_LOGIN:$YOUR_PASSWORD
# Your server domain
server-name=turn.putyato.pro
# The default realm to be used for the users when no explicit origin/realm relationship was found
realm=turn.putyato.pro
# Path to your certificates. Make sure they're readable by cotun process user/group
cert=/etc/letsencrypt/live/turn.putyato.pro/cert.pem
pkey=/etc/letsencrypt/live/turn.putyato.pro/privkey.pem
cipher-list="ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384"
# Use 2066 bits predefined DH TLS key
dh2066
# Log to journalctl
syslog
# User/group which will be running coturn service
proc-user=turnserver
proc-group=turnserver


no-loopback-peers
cat << EOF > /etc/ufw/before.rules
no-multicast-peers
*nat
#change eth0 interface to yours
-A POSTROUTING -s 10.10.10.0/24 -o eth0 -m policy --pol ipsec --dir out -j ACCEPT
-A POSTROUTING -s 10.10.10.0/24 -o eth0 -j MASQUERADE                           
COMMIT


# Disable weak encryption
*mangle
no-tlsv1
#change eth0 interface to yours
no-tlsv1_1
-A FORWARD --match policy --pol ipsec --dir in -s 10.10.10.0/24 -o eth0 -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1360
no-tlsv1_2
COMMIT
</pre>
#
''* '''user=$YOUR_LOGIN:$YOUR_PASSWORD''' - вписываем логин и пароль без кавычек и без $. '''turn.putyato.pro''' -это наш сервер.''
# rules.before
#
# Rules that should be run before the ufw command line added rules. Custom
# rules should be added to one of these chains:
#  ufw-before-input
#  ufw-before-output
#  ufw-before-forward
#


Запустите и включите coturnслужбу:
# Don't delete these required lines, otherwise there will be errors
<pre>
*filter
systemctl enable coturn && systemctl start coturn
:ufw-before-input - [0:0]
</pre>
:ufw-before-output - [0:0]
Зарегистрируйте сертификаты Let’s Encrypt.
:ufw-before-forward - [0:0]
:ufw-not-local - [0:0]
# End required lines
-A ufw-before-forward --match policy --pol ipsec --dir in --proto esp -s 10.10.10.0/24 -j ACCEPT
-A ufw-before-forward --match policy --pol ipsec --dir out --proto esp -d 10.10.10.0/24 -j ACCEPT


Мы будем использовать certbot от EFF для сертификатов Let's Encrypt.
# allow all on loopback
<pre>
-A ufw-before-input -i lo -j ACCEPT
apt-get install snapd
-A ufw-before-output -o lo -j ACCEPT
snap install --classic certbot
ln -s /snap/bin/certbot /usr/bin/certbot
</pre>
Установив certbot, вы можете создать свой сертификат.
<pre>
certbot certonly --standalone --rsa-key-size 4096 -m admin@putyato.pro -d turn.putyato.pro
</pre>
За 30 (и 7) дней до истечения срока действия сертификатов вы получите электронное письмо на адрес admin@putyato.pro .


При необходимости откройте соответствующие порты:
# quickly process packets for which we already have a connection
<pre>
-A ufw-before-input -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
sudo apt-get install ufw
-A ufw-before-output -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
sudo ufw allow 3478 && \
-A ufw-before-forward -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
sudo ufw allow 443 && \
sudo ufw allow 5349 && \
sudo ufw allow 49152:65535/tcp && \
sudo ufw allow 49152:65535/udp
</pre>


=== Настройка мобильных приложений ===
# drop INVALID packets (logs these in loglevel medium and higher)
Чтобы настроить мобильное приложение для использования вашего сервера:
-A ufw-before-input -m conntrack --ctstate INVALID -j ufw-logging-deny
-A ufw-before-input -m conntrack --ctstate INVALID -j DROP


Откройте Settings / Network & Servers / WebRTC ICE serversи переключите переключатель Configure ICE servers.
# ok icmp codes for INPUT
-A ufw-before-input -p icmp --icmp-type destination-unreachable -j ACCEPT
-A ufw-before-input -p icmp --icmp-type time-exceeded -j ACCEPT
-A ufw-before-input -p icmp --icmp-type parameter-problem -j ACCEPT
-A ufw-before-input -p icmp --icmp-type echo-request -j ACCEPT


Введите в поле все адреса серверов, по одному в строке, например, если ваши серверы находятся на порту 5349:
# ok icmp code for FORWARD
 
-A ufw-before-forward -p icmp --icmp-type destination-unreachable -j ACCEPT
<pre>
-A ufw-before-forward -p icmp --icmp-type time-exceeded -j ACCEPT
stun:stun.putyato.pro:3478
-A ufw-before-forward -p icmp --icmp-type parameter-problem -j ACCEPT
turn:username:password@turn.putyato.pro:3478
-A ufw-before-forward -p icmp --icmp-type echo-request -j ACCEPT
</pre>
или
<pre>
stun:stun.putyato.pro:5349
turn:username:password@turn.putyato.pro:5349
</pre>
Вот и все: теперь вы можете совершать аудио- и видеозвонки через свой собственный сервер, не передавая какие-либо данные нашим серверам (кроме обмена ключами с вашим контактом в зашифрованных сообщениях E2E).


# allow dhcp client to work
-A ufw-before-input -p udp --sport 67 --dport 68 -j ACCEPT


'''Проверка подключения STUN/TURN :'''
#
# ufw-not-local
#
-A ufw-before-input -j ufw-not-local


Зайдите в IceTest . '''https://icetest.info/'''
# if LOCAL, RETURN
-A ufw-not-local -m addrtype --dst-type LOCAL -j RETURN


В разделе «Создание списка серверов ICE» добавьте:
# if MULTICAST, RETURN
-A ufw-not-local -m addrtype --dst-type MULTICAST -j RETURN


[[File:simplex_03.png|link=]]
# if BROADCAST, RETURN
-A ufw-not-local -m addrtype --dst-type BROADCAST -j RETURN


STUN: stun:<your_ip_or_domain>:<port>и ударилAdd STUN
# all other non-local packets are dropped
TURN: turn:<your_ip_or_domain>:<port>, Username: <your_login>, Credential: <your_pass>и ударилAdd TURN
-A ufw-not-local -m limit --limit 3/min --limit-burst 10 -j ufw-logging-deny
-A ufw-not-local -j DROP


=== Настройка записей DNS ===
# allow MULTICAST mDNS for service discovery (be sure the MULTICAST line above
Настойку делаем у доменного провайдера. NIC.RU
# is uncommented)
<pre>
-A ufw-before-input -p udp -d 224.0.0.251 --dport 5353 -j ACCEPT
turn.example.com. 14400 IN A    37.226.5.44
turn.example.com. 14400 IN AAAA 2001:db8:1234::1
stun.example.com. 14400 IN A   37.226.5.44
stun.example.com. 14400 IN AAAA 2001:db8:1234::1


@ IN NAPTR 10 0 "s" "RELAY:turn.udp" "" _turn._udp.example.com
# allow MULTICAST UPnP for service discovery (be sure the MULTICAST line above
# is uncommented)
-A ufw-before-input -p udp -d 239.255.255.250 --dport 1900 -j ACCEPT


_stun._udp.example.com.  14400 IN SRV  5 0 3478 turn.example.com
# don't delete the 'COMMIT' line or these rules won't be processed
_stun._tcp.example.com.  14400 IN SRV  5 0 3478 turn.example.com
COMMIT
_stuns._tcp.example.com. 14400 IN SRV  5 0 5349 turn.example.com
EOF


_turn._udp.example.com.  14400 IN SRV  5 0 3478 turn.example.com
cat << EOF >> /etc/ufw/sysctl.conf
_turn._tcp.example.com.  14400 IN SRV  5 0 3478 turn.example.com
net/ipv4/ip_forward=1
_turns._tcp.example.com.  14400 IN SRV  5 0 5349 turn.example.com
net/ipv4/conf/all/accept_redirects=0
net/ipv4/conf/all/send_redirects=0
net/ipv4/ip_no_pmtu_disc=1
EOF
</pre>
</pre>


 
=== Использование. ===
== Установка Тора ==
Вам нужно будет добавить логин и пароль пользователя. Отредактируйте файл
smp-сервер также можно развернуть для обслуживания из сети Tor . Выполните следующие команды от имени rootпользователя.
 
=== Установить Тор: ===
 
Мы предполагаем, что вы используете дистрибутивы на основе Ubuntu/Debian. Если нет, обратитесь к официальной документации Tor или к руководству по распространению.
 
Настройте официальный репозиторий Tor PPA:
 
<pre>
<pre>
CODENAME="$(lsb_release -c | awk '{print $2}')"
sudo nano /etc/ipsec.secrets
echo "deb [signed-by=/usr/share/keyrings/tor-archive-keyring.gpg] https://deb.torproject.org/torproject.org ${CODENAME} main
deb-src [signed-by=/usr/share/keyrings/tor-archive-keyring.gpg] https://deb.torproject.org/torproject.org ${CODENAME} main" > /etc/apt/sources.list.d/tor.list
</pre>
</pre>
Импортировать ключ репозитория:
Внутри файла есть шаблон как добавлять нового пользователя.
 
Пример:
<pre>
<pre>
curl --proto '=https' --tlsv1.2 -sSf https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc | gpg --dearmor | tee /usr/share/keyrings/tor-archive-keyring.gpg >/dev/null
User1 : EAP "Qwerty"
</pre>
</pre>
Обновить индекс репозитория:
'''* где '''User1''' - это логин, а '''Qwerty''' - это пароль.'''
<pre>
 
apt update
'''Для каждого пользователя или устройства свой логин и пароль!'''
</pre>
Установить torпакет:
<pre>
apt install -y tor deb.torproject.org-keyring
</pre>
=== Настройте тор: ===


Конфигурация файла:


Откройте конфигурацию Tor в выбранном вами редакторе ( nano, vim, emacsи т. д.):
После сохранения файла перезагрузите Strongswan используя команду
<pre>
<pre>
nano /etc/tor/torrc
sudo systemctl restart strongswan-starter
</pre>
</pre>
И вставьте следующие строки в конец конфигурации. Обратите внимание на строки, начинающиеся с #: это комментарии к каждой отдельной опции.
 
=== Получение сертификата. ===
Получить сертификат можно с помощью команды:
<pre>
<pre>
# Enable log (otherwise, tor doesn't seemd to deploy onion address)
sudo cat /etc/ipsec.d/cacerts/ca-cert.pem
Log notice file /var/log/tor/notices.log
# Enable single hop routing (2 options below are dependencies of third). Will reduce latency in exchange of anonimity (since tor runs alongside smp-server and onion address will be displayed in clients, this is totally fine)
SOCKSPort 0
HiddenServiceNonAnonymousMode 1
HiddenServiceSingleHopMode 1
# smp-server hidden service host directory and port mappings
HiddenServiceDir /var/lib/tor/simplex-smp/
HiddenServicePort 5223 localhost:5223
</pre>
</pre>
Создайте каталоги:
Сохраните текст, заключенный между
<pre>
<pre>
mkdir /var/lib/tor/simplex-smp/ && chown debian-tor:debian-tor /var/lib/tor/simplex-smp/ && chmod 700 /var/lib/tor/simplex-smp/
-----BEGIN CERTIFICATE----- и -----END CERTIFICATE-----
</pre>
</pre>
=== Запустить тор: ===
на локальный компьютер включая эти две строки в файл с расширением '''.pem'''
 
Включите systemdсервис и запустите Tor. Offical torнемного ненадежен при первом запуске и может не создать луковый адрес хоста, поэтому на всякий случай перезапускаем его.
<pre>
<pre>
systemctl enable tor && systemctl start tor && systemctl restart tor
sert.pem
</pre>
</pre>
Отображение лукового хоста:


Выполните следующую команду, чтобы отобразить адрес вашего лукового хоста:
Все! Сервер поднят!
<pre>
cat /var/lib/tor/simplex-smp/hostname
</pre>

Версия от 20:14, 22 марта 2024

Ручная пошаговая настройка сервера описана в статье: https://www.digitalocean.com/community/tutorials/how-to-set-up-an-ikev2-vpn-server-with-strongswan-on-ubuntu-20-04-ru

Мы же все действия произведем с помощью скрипта.

Видео по установки и настройки скрипта: https://www.youtube.com/watch?v=93oJ5fF1mE0

Хостинг европейских серверов из России:

https://timeweb.cloud/?i=104329

https://bit.ly/3urB78d

Не российский хостинг (Эстония) с очень большой географией серверов и возможностью пополнения с российской карты. При оплате за год еще 3 месяца дают бесплатно:

https://bit.ly/3rOqvPE

Подготовка сервера.

sudo apt update && sudo apt upgrade -y

Скрипт находится по данной ссылке: https://github.com/AdelKudryashev/Strongswan-installation-script

Установка.

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

ip route show default

После применения команды вы увидите вывод вида

Output
default via your_server_ip dev eth0  proto static

После dev будет нужный интерфейc, в данном случае это eth0. Вставьте в скрипте ваш интерфейс, используйте поиск для этого. Замените в скрипте все eth0 на ваш сетевой интерфейс.

sudo wget https://github.com/AdelKudryashev/Strongswan-installation-script/blob/master/startswan.sh

Далее заходим в скрипт и меняем в нем все записи eth0 на наш интерфейс.

sudo nano ~/startswan.sh

Для запуска скрипта используйте команду

yes | sudo sh startswan.sh

Если скрипт не скачался, то вот тело скрипта:

#You must change the eth0 interface to your own in this script in /etc/ufw/before.rules in three places
#Вы должны изменить интерфейс eth0 на свой в этом скрипте в /etc/ufw/before.rules в трех местах
#!/bin/bash
apt update
myip=$(wget -qO - eth0.me)
apt install strongswan strongswan-pki libcharon-extra-plugins libcharon-extauth-plugins -y
mkdir -p ~/pki/cacerts
mkdir -p ~/pki/certs
mkdir -p ~/pki/private

chmod 700 ~/pki

pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/ca-key.pem

pki --self --ca --lifetime 3650 --in ~/pki/private/ca-key.pem \
--type rsa --dn "CN=VPN root CA" --outform pem > ~/pki/cacerts/ca-cert.pem

pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/server-key.pem

pki --pub --in ~/pki/private/server-key.pem --type rsa \
    | pki --issue --lifetime 1825 \
        --cacert ~/pki/cacerts/ca-cert.pem \
        --cakey ~/pki/private/ca-key.pem \
        --dn "CN=$myip" --san @$myip --san $myip \
        --flag serverAuth --flag ikeIntermediate --outform pem \
    >  ~/pki/certs/server-cert.pem

cp -r ~/pki/* /etc/ipsec.d/

mv /etc/ipsec.conf{,.original} #Создаем резервную копию файла настроек

cat << EOF > /etc/ipsec.conf
config setup
    charondebug="ike 1, knl 1, cfg 0"
    uniqueids=no

conn ikev2-vpn
    auto=add
    compress=no
    type=tunnel
    keyexchange=ikev2
    fragmentation=yes
    forceencaps=yes
    dpdaction=clear
    dpddelay=300s
    rekey=no
    left=%any
    leftid=$myip
    leftcert=server-cert.pem
    leftsendcert=always
    leftsubnet=0.0.0.0/0
    right=%any
    rightid=%any
    rightauth=eap-mschapv2
    rightsourceip=10.10.10.0/24
    rightdns=8.8.8.8,8.8.4.4
    rightsendcert=never
    eap_identity=%identity
    ike=chacha20poly1305-sha512-curve25519-prfsha512,aes256gcm16-sha384-prfsha384-ecp384,aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024,aes256-sha256-modp2048!
    esp=chacha20poly1305-sha512,aes256gcm16-ecp384,aes256-sha256,aes256-sha1,3des-sha1!
EOF

cat << EOF > /etc/ipsec.secrets
: RSA "server-key.pem"
# your_username : EAP "your_password" - use this format for create new user
# sudo systemctl restart strongswan-starter - for the changes to take effect, after adding a new user, close the file and restart the server with this command
EOF


ufw allow OpenSSH
ufw enable
ufw allow 500,4500/udp

cat << EOF > /etc/ufw/before.rules
*nat
#change eth0 interface to yours
-A POSTROUTING -s 10.10.10.0/24 -o eth0 -m policy --pol ipsec --dir out -j ACCEPT
-A POSTROUTING -s 10.10.10.0/24 -o eth0 -j MASQUERADE                             
COMMIT

*mangle
#change eth0 interface to yours
-A FORWARD --match policy --pol ipsec --dir in -s 10.10.10.0/24 -o eth0 -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1360
COMMIT
#
# rules.before
#
# Rules that should be run before the ufw command line added rules. Custom
# rules should be added to one of these chains:
#   ufw-before-input
#   ufw-before-output
#   ufw-before-forward
#

# Don't delete these required lines, otherwise there will be errors
*filter
:ufw-before-input - [0:0]
:ufw-before-output - [0:0]
:ufw-before-forward - [0:0]
:ufw-not-local - [0:0]
# End required lines
-A ufw-before-forward --match policy --pol ipsec --dir in --proto esp -s 10.10.10.0/24 -j ACCEPT
-A ufw-before-forward --match policy --pol ipsec --dir out --proto esp -d 10.10.10.0/24 -j ACCEPT

# allow all on loopback
-A ufw-before-input -i lo -j ACCEPT
-A ufw-before-output -o lo -j ACCEPT

# quickly process packets for which we already have a connection
-A ufw-before-input -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A ufw-before-output -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A ufw-before-forward -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

# drop INVALID packets (logs these in loglevel medium and higher)
-A ufw-before-input -m conntrack --ctstate INVALID -j ufw-logging-deny
-A ufw-before-input -m conntrack --ctstate INVALID -j DROP

# ok icmp codes for INPUT
-A ufw-before-input -p icmp --icmp-type destination-unreachable -j ACCEPT
-A ufw-before-input -p icmp --icmp-type time-exceeded -j ACCEPT
-A ufw-before-input -p icmp --icmp-type parameter-problem -j ACCEPT
-A ufw-before-input -p icmp --icmp-type echo-request -j ACCEPT

# ok icmp code for FORWARD
-A ufw-before-forward -p icmp --icmp-type destination-unreachable -j ACCEPT
-A ufw-before-forward -p icmp --icmp-type time-exceeded -j ACCEPT
-A ufw-before-forward -p icmp --icmp-type parameter-problem -j ACCEPT
-A ufw-before-forward -p icmp --icmp-type echo-request -j ACCEPT

# allow dhcp client to work
-A ufw-before-input -p udp --sport 67 --dport 68 -j ACCEPT

#
# ufw-not-local
#
-A ufw-before-input -j ufw-not-local

# if LOCAL, RETURN
-A ufw-not-local -m addrtype --dst-type LOCAL -j RETURN

# if MULTICAST, RETURN
-A ufw-not-local -m addrtype --dst-type MULTICAST -j RETURN

# if BROADCAST, RETURN
-A ufw-not-local -m addrtype --dst-type BROADCAST -j RETURN

# all other non-local packets are dropped
-A ufw-not-local -m limit --limit 3/min --limit-burst 10 -j ufw-logging-deny
-A ufw-not-local -j DROP

# allow MULTICAST mDNS for service discovery (be sure the MULTICAST line above
# is uncommented)
-A ufw-before-input -p udp -d 224.0.0.251 --dport 5353 -j ACCEPT

# allow MULTICAST UPnP for service discovery (be sure the MULTICAST line above
# is uncommented)
-A ufw-before-input -p udp -d 239.255.255.250 --dport 1900 -j ACCEPT

# don't delete the 'COMMIT' line or these rules won't be processed
COMMIT
EOF

cat << EOF >> /etc/ufw/sysctl.conf
net/ipv4/ip_forward=1
net/ipv4/conf/all/accept_redirects=0
net/ipv4/conf/all/send_redirects=0
net/ipv4/ip_no_pmtu_disc=1
EOF

Использование.

Вам нужно будет добавить логин и пароль пользователя. Отредактируйте файл

sudo nano /etc/ipsec.secrets

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

Пример:

User1 : EAP "Qwerty"

* где User1 - это логин, а Qwerty - это пароль.

Для каждого пользователя или устройства свой логин и пароль!


После сохранения файла перезагрузите Strongswan используя команду

sudo systemctl restart strongswan-starter

Получение сертификата.

Получить сертификат можно с помощью команды:

sudo cat /etc/ipsec.d/cacerts/ca-cert.pem

Сохраните текст, заключенный между

-----BEGIN CERTIFICATE----- и -----END CERTIFICATE-----

на локальный компьютер включая эти две строки в файл с расширением .pem

sert.pem

Все! Сервер поднят!