Серёга Маркевич

Блог айтишника, спекулянта, авантюриста. Обо всем том, что волнует лично меня. ИТ, защита информации, радио и музыка, инвестиции и бизнес, покер и прочая годнота.

параллель

Сравнение технологий VPN по энергопотреблению

Задался вопросом, какой же тип VPN подключения меньше сажает батарею и менее ресурсоёмко.
Провести тесты с оставлением гаджета на долгое время от 100% до 0% не было возможности, но я постарался сделать это более простым способом, результаты никоем образом не считаю эталонными, но относительное понимание дает.

И так, как замерялось:
Xiaomi Android 8.1, гаджету 6 месяцев, подключение через LTE.

Этап 1

  1. Включен VPN
  2. Удалено все из памяти кроме Youtube и приложения VPN, включал видео подряд в 720p на 30 минут
  3. Экран постоянно включен, гаджет стоит на месте
    И так на каждый тип подключения.

Этап 2
Заряжался аппарат до 100%, с утра включался VPN и не отключался до конца, пока заряд батареи не упадет до 10%, фиксировалось дата снятия с зарядки и сигнала о разряде до 10%.

Режим использования:

  1. Звонки в день сотовая сеть до 10-15 минут;
  2. Серфинг браузера 20 минут;
  3. Мессендежры 60-90 минут;
  4. Инстаграмм и пр. соц.сети 60 минут;
  5. Музыка Spotify 30-60 минут;

Итоги в таблице

Колонка 1 — Усредненное место в рейтинге, выше — лучше
Колонка 2 — Тип подключения и если нужно софт
Колонка 3 — Проигрывание видео с Youtube 720p, 30 минут теста, сколько ушло заряда в %
Колонка 4 — Замер работы аккума при обычном использовании телефона со 100% заряда до 10%, продолжительность в часах и минутах

Технология Youtube 30 в % Время работы 100%-10%
1 WireGuard 10 14ч.29мин
2 StrongSwan (IPSec IKEv2) 11 12ч.53мин
3 ShadowSocks (v2ray) 12 10ч.36мин
4 OpenVPN 14 9ч.57мин
5 AnyConnect* 17 9ч.07мин

*Перепроверил еще раз AnyConnect это провал дважды, при смене сети или плохой связи он не переподключался, пробовал, выдавал ошибку даже когда принужденно выставлял в настройках самого Android постоянное подключение к VPN, и все, связь не восстанавливал иногда телефон оказывался без подключенного VPN. Каждый раз его переподключал вручную. Для мобильного интернета не рекомендую, но для чистоты эксперимента замеры провел.

Итоги ожидаемы: по комфортности работы все приложения и типы подключений, кроме AnyConnect отлично справляются. По ресурсозатратности самые ловкие это безусловный лидер — WireGuard и на втором месте IPSec IKEv2.

По пробиваемости любых ограничений лидер ShadowSocks (v2ray) если проксировать с 443 порта через nginx, при необходимости можно пользоваться именно им, не оглядываясь на работу батареи если есть в этом необходимость.

Лично мое предпочтение это StrongSwan (IPSec IKEv2) в моих личных реалиях именно он пробивает пока все сети, в которых приходится работать.

Streisand vs. Algo VPN подробное сравнение

Всем привет товарищи комрады, попробовал я и то и другое. Сейчас будет собственное имхо и небольшая таблица, что бы как-то структурировать то, что есть в голове.

Давайте начнем с того, что поясню, что это за звери такие, тем кто в танке.
Это готовые скрипты для разворачивания собственного сервера VPN, они делают за 15 минут то, что опытный сисадмин будет ковырять неделю.

Streisand

https://github.com/StreisandEffect/streisand

Основной, но далеко не единственный инструмент из его арсенала построения тунеля это OpenVPN. Порты на которых висят сервисы хорошо подобраны, используется DPI во благо, что бы на 443 порт повесить максимум вариантов подключений.
Саму таблицу сравнения я напишу ниже, сейчас только самые плюсы и минусы:

Плюсы:

  1. Много вариантов подключения, оптимизация выбора портов из коробки для максимальной доступности сервера из любой сети. В таблице укажу список, того что имеется сразу на борту;
  2. Shadowsocks в последней редакции наконец заменили simply obfs на v2ray из коробки;
  3. Генерация инструкций в формате html прям на веб-сервере, генерирует под каждого пользователя, которых можно создать до 20 с рандомными именами, но все в одном месте. То есть даете общий пароль от веб-морды, будут доступны сразу все пользаки и сертификаты. Но тут понятно, давать его вы будете только друзьям, родственникам называя конкретный логин, плюшка оч прикольная;
  4. Аудит проходил независимый https://github.com/StreisandEffect/streisand/blob/master/documentation/audits/2018.otf.includesec.audit.pdf;
  5. Создает копию дистрибутивов клиентов выкачивая их при установке и размещая на микро сайте вашего сервера п.3. на случай недоступности сайтов клиентов.
  6. В качесвте файрвола используется ufw (личное предпочтение)

Минусы:

  1. Установка. Он требует генерацию ключей для подключения по ssh, без ключей закрытого и открытого устанавливаться не будет. Другими словами, если хотите просто дальше заходить по паролю на сервер то не получится, только ключами. А ключи генерятся на локальной машине и переносятся на удаленную (ну или есть другие варианты тут танцы опять таки). Тут дело привычки, если у вас линукс, мак то ок, если винда придется поплясать с бубном. Ну реально не тривиально, или я тупой;
    Даже при локальной установке он проверяет наличие в папке с ключами наличие ключа, а то, что вам он не нужен ему пох, можно сгеренить на сервере и забыть, но я как то сгенерил, а потом попасть на сервер не смог. В общем с опытом работы с ключами у меня есть недоработка, видимо в этом причина;
  2. Shadowsocks хоть и устанавливается с плагином v2ray но маскирует трафик под http, висит на порту с которого обновляется Windows, WSUS короче, а маскируется под github ну бред. Тут считаю недоработкой. Можно было бы куда интереснее сделать маскировку;
  3. OpenVPN часто троттлят или блокируют. И вообще он прожорлив к ресурсам как сервера так и клиента, тратит много энергии гаджетов, но есть и другие способы подключения, так что это так к слову. И нужно устанавливать доп. софт для подключения, сам клиент;
  4. Не блокирует рекламу и трекеры на стороне сервера;
  5. Более тяжеловесен для сервера, ставит много чего лишнего при установке.
  6. Допускает возможность слабого шифрования, в отличии от Algo.

Algo VPN

https://github.com/trailofbits/algo

Основной вид подключения IPSec IKEv2 изначально позиционируется как сконфигурированный с максимальной силой защиты скрипт для всех сервисов, а их всего два из коробки IPSec IKEv2 и WireGuard, которые висят на стандартных портах для них. Более ничего.
Вся конфигурация, добавление новых пользователей, которых можно создать 250 штук делается в консоле, но имена можете генерить свои, тут нет рандома и навязывания имен.

Плюсы:

  1. Вместо OpenVPN тут IPSec IKEv2 на моем опыте всегда был открыт к коннекту, работает в разы быстрее OpenVPN и ест меньше ресурсов, но так же троттлят скорость как и OpenVPN часто;
  2. Тащит за собой минимум барахла;
  3. Отлично работает с iOS и Mac и Windows не нужны дополнительные программы, все поддерживается в самих системах в стандартных настройках;
  4. С локальной установкой сложностей нет;
  5. Умеет блокировать рекламу и трекеры сам по черному списку через DNS, реально удобно;
  6. Работает dnscrypt и днс берется из локального адреса сервера внутри тунеля исключая DNS-Leak и подмену провайдером DNS адресов, а сервер можно настроить на использования конкретных DNS серверов, например 9.9.9.9 или любой другой на ваш вкус в конфиге.
  7. Из коробки настроен только на максимально сильные виды шифрования.

Минусы:

  1. Нацелен на защиту передачи данных, то есть ПРИВАТНОСТЬ, поэтому мало вариантов подключения и используются стандартные порты.
  2. Нет генерации html инструкций как в сопернике, все конфиги просто складываются в папку по типу подключения, а уже руками вы рассылаете их кому нужно и говорите как устанавливать, если люди не особо шарят придется помогать.
  3. Dnscrypt и в минусы у меня попал, нюанс, иногда новый запрошенный сайт резольвиться чуть дольше обычного, но может быть это только моя локальная проблема.
  4. В качестве файрвола используется iptables (личное предпочтение ufw)

Доработать из коробки возможно так, установить shadowsocks + v2ray на 443 порту.

WireGuard клиенты по красоте в плане эстетики вообще унылое г, но может скоро и сделают красоту.

Варианты подключений из коробки:

Algo VPN Streisand
OpenVPN +
OpenVPN через stunnel +
IPSec IKEv2 +
OpenConnect / Cisco AnyConnect +
Shadowsocks + v2ray +
SSH + +
Tor relay +
WireGuard + +

В сухом остатке Streisand, штука очень крутая, но если:

  1. настроить Shadowsocks на v2ray обфускацию в режиме TLS, а не просто HTTP и повесить на 443 порт
  2. добавить IPSec IKEv2 для полного набора
  3. добавить блокировщик рекламы на уровне DNS

То вообще вопросов бы не было и я бы использовал именно Streisand. И только его.

Даже закрыл глаза на геморойную установку с ключами ради того, что бы иметь МАКСИМУМ возмножных вриантов подключений, но по заявлению самих разрабов, они не используют IPSec IKEv2 якобы он был когда-то скомпромитирован, но тут у меня вопрос, да был скомпроментирован IKEv1 — 1 версия, а не IKEv2, ко 2 вообще вопросов нет.
Еще вопрос у них риторический, почему и винда и мак из коробки дают возможность устанавливать IPSec соединение, ну и код исходный закрыт так как это детище Cisco и MS, считают это заговором и типо если дают, значит могут слушать тут уже конечно признаки фобии, но вот здоровой ли или нет — тут вопрос, и действительно есть над чем подумать.

Таблица типов подключений и троттлинга провайдерами по скорости, на примере МТС
Скорость без VPN была ~66M\s аппарат лежал на одном и том, же месте. Связь стабильная в этой точке всегда.

Технология Троттлинг Скорость
OpenVPN +++ 8,1
OpenVPN через stunnel ++ 17,3
IPSec IKEv2 + 27
OpenConnect / Cisco AnyConnect ++ 20,2
Shadowsocks + v2ray 61,5
Shadowsocks 60.1
WireGuard ++ 14,8

Как видно по замерам очень сильно троттлят голый OpenVPN. IPSec троттлят в 2 раза от максимальной скорости.
Лучше всего показывает себя Shadowsocks даже без обфускации. Подобная картина возможна на большинстве федеральных провайдеров, удивило то, что даже WireGuard научились распознавать.

Баланс из этого всего это IPSec IKEv2, скорости с учетом троттлинга хватает для всех нужд через LTE, а для ускорения Shadowsocks.

Установка и настройка Matrix Synapse + Riot-web на Ubuntu 18.04

В наше время стало не приятно вести переписки в обычных мессенджерах, такие как Whatsapp, Viber и пр. им просто нет доверия, ведь если они до сих пор работают, значит никому не мешают и сливают данные для рекламы вам же товаров и услуг.
Раньше была только 1 альтернатива это Jabber. Следующая статья будет посвещена ему в 2019 году, когда решены проблемы с передачей файлов и замороченной конфигурацией.

Сегодня будем ставить альтернативу, которая из коробки по этой инструкции позволит совершать видео конференции, видео звонки, аудио звонки и поддерживает шифрование E2E по алгоритму подобному в мессенжере Signal и работающей федерацией для связи с другими пользователями matrix на других серверах. Отличное решение для android и веб, постоянно развивается и допиливается, но у меня возникли проблемы с клиентами для iOS где я не смог сделать видео звонок и создать коференцию. Именно по этой причине я отказался это этого решения, так как у многих моих iPhone. Плюс сам по себе клиент не такой красивый и удобный как например Conversations для android под jabber. Но сама по себе сеть очень перспективная, и клиенты скоро смогут стать более юзабельными.

В итоге получим:
Сервер Synapse + Веб-клиент на этом же сервере + работающие звонки видео и аудио p2p и конференции на основе jitsi, который встроен в клиенты, а так же работающую федерацию + весь трафик даже до федераций проксируется через Nginx оборачивая то все в TLS шифрованный слой.

Все сделано на Ubuntu 18.04

Обновляем порты

sudo apt update && sudo apt upgrade && reboot

Ставим БД (нужна, что бы вы смогли находить пользователей в БД своей лишь напечатав 2 символа первых его логина, без БД не будет это работать ну и производительность будет ниже).

sudo apt-get install postgresql postgresql-contrib

В конфиге ставим слушать только 127.0.0.1

nano /etc/postgresql/10/main/postgresql.conf
listen_addresses = '127.0.0.1'

Делаем пользака для БД:

su - postgres
createuser --pwprompt synapse_user

Создаем БД

su - postgres
psql

Втыкаем команды ему:

CREATE DATABASE synapse
 ENCODING 'UTF8'
 LC_COLLATE='C'
 LC_CTYPE='C'
 template=template0
 OWNER synapse_user;

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

Добавляем репозиторий matrix

wget -qO - https://matrix.org/packages/debian/repo-key.asc | sudo apt-key add -
sudo add-apt-repository https://matrix.org/packages/debian/

Ставим сервер:

sudo apt install matrix-synapse -y
sudo systemctl start matrix-synapse
sudo systemctl enable matrix-synapse

Проверяем слушает ли 8008 порт

netstat -plntu

Генерируем секретый код:

cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1

Получаем сохраняем его себе в блокнот, скоро пригодится для конфига matrix-synapse

Правим конфиг сервера:

nano /etc/matrix-synapse/homeserver.yaml

Находим поиском по строке каждый параметр если он закоментин втыкам в том месте, что бы не потерять, там есть мануалы по каждому.

- port: 8008
    tls: false
    bind_addresses: ['127.0.0.1']
    type: http
    x_forwarded: true

   resources:
      - names: [client, webclient]
        compress: false

  - port: 8449
    tls: false
    bind_addresses: ['127.0.0.1']
    type: http
    x_forwarded: true

    resources:
      - names: [federation]
        compress: false

enable_registration: False
registration_shared_secret: "ВАШ КОД"
max_upload_size: 4194304000
web_client_location: "/var/www/html/"
public_baseurl: https://Ваш домен
user_directory:
   enabled: true
   search_all_users: true
email:
   riot_base_url: "https://ваш домен"
   trust_identity_server_for_password_resets: true
   validation_token_lifetime: 1h

database:
    name: psycopg2
    args:
        user: synapse_user
        password: Пароль
        database: synapse
        host: 127.0.0.1
        cp_min: 5
        cp_max: 10

SSL
Ставим сертификаты:

sudo apt install letsencrypt -y
certbot certonly --rsa-key-size 2048 --standalone --agree-tos --no-eff-email --email вашемайл -d ваш домен

Ставим Nginx

sudo apt install nginx -y
sudo systemctl start nginx
sudo systemctl enable nginx

Правим конфиг Nginx

cd /etc/nginx/
nano sites-available/matrix
server {
       listen 80;
       server_name ваш домен;
       return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl;
    server_name ваш домен;

    ssl_certificate /etc/letsencrypt/live/ваш домен/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/ваш домен/privkey.pem;

    # If you don't wanna serve a site, comment this out
    root /var/www/html;
    index index.php index.html index.htm;
     location /_matrix {
      proxy_pass http://127.0.0.1:8008;
      proxy_set_header X-Forwarded-For $remote_addr;

    }
}

server {
    listen 8448 ssl;
    server_name ваш домен;

    ssl_certificate /etc/letsencrypt/live/ваш домен/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/ваш домен/privkey.pem;

    location / {
        proxy_pass http://127.0.0.1:8449;
        proxy_set_header X-Forwarded-For $remote_addr;
    }
}

Делаем симлинк на конфигурацию виртуального домена

ln -s /etc/nginx/sites-available/matrix /etc/nginx/sites-enabled/
nginx -t

Прописываем в Nginx размер максимальный файлов, которые можно передавать.

nano /etc/nginx/nginx.conf

В раздел http добавляем:

client_max_body_size 5000m;

Рестарт nginx

service nginx restart

Уставим TURN, что бы у клиентов из-за NAT не было проблем с конференциями видео и аудио.

apt install coturn pwgen

Геренируем секретный ключ

pwgen -s 64 1

сохранить код в блокнот.

Правим конфиг

nano /etc/turnserver.conf

Втыкаем

use-auth-secret
static-auth-secret=ВАШ КОД который нагерели шаг назад
realm=ваш домен

# VoIP traffic is all UDP. There is no reason to let users connect to arbitrary TCP endpoints via the relay.
no-tcp-relay

# don't let the relay ever try to connect to private IP address ranges within your network (if any)
# given the turn server is likely behind your firewall, remember to include any privileged public IPs too.
denied-peer-ip=10.0.0.0-10.255.255.255
denied-peer-ip=192.168.0.0-192.168.255.255
denied-peer-ip=172.16.0.0-172.31.255.255

# special case the turn server itself so that client->TURN->TURN->client flows work
allowed-peer-ip=10.0.0.1

# consider whether you want to limit the quota of relayed streams per user (or total) to avoid risk of DoS.
user-quota=12 # 4 streams per video call, so 12 streams = 3 simultaneous relayed calls per user.
total-quota=1200

Включаем TURN

nano /etc/default/coturn

Раскоментируйте

TURNSERVER_ENABLED=1

Рестарт

/etc/init.d/coturn restart

Правим конфиг сервера под TURN

nano /etc/matrix-synapse/homeserver.yaml

Втыкаем в конце

turn_uris: [ "turn:вашдомен:3478?transport=udp", "turn:вашдомен:3478?transport=tcp" ]
turn_shared_secret: ваш секретный код который сгенерили шаг назад
turn_user_lifetime: 86400000
turn_allow_guests: True

Рестарт сервера

sudo systemctl restart matrix-synapse

Настраиваем DNS для работы федерации это надо прописать в вашем ДНС сервере в домене создать запись SRV:

_matrix._tcp.вашдомен 3600 IN SRV 10 5 443 вашдомен

После прописания должна быть успешная проверка на

https://matrix.org/federationtester

Впишите свой домен и получить надо УСПЕХ зеленый.

Настраиваем файрвол:

ufw allow ssh
ufw allow http
ufw allow https
ufw allow 3478
ufw allow 8448

Включаем

ufw enable

жмем тут «y»

ufw status

Проверяем.

Регаем первого пользака:

register_new_matrix_user -c /etc/matrix-synapse/homeserver.yaml https://ваш домен:443

Устанавливаем веб-клиента:
https://github.com/vector-im/riot-web/releases
Качать TAR.GZ

wget урл архива актуального

Распаковать в /var/www/html

tar -cvzf riot-v1.xxxxxxxx

Дать права пользаку www-data:

chown -R www-data:www-data /var/www/html

В конфиг веб-клиента записать:

{
    "default_server_config": {
        "m.homeserver": {
            "base_url": "https://ваш домен",
            "server_name": "ваш домен"
        },
        "m.identity_server": {
            "base_url": "https://vector.im"
        }
    },
    "disable_custom_urls": true,
    "disable_guests": true,
    "disable_login_language_selector": false,
    "disable_3pid_login": true,
    "brand": "Matrix",
    "integrations_ui_url": "https://scalar.vector.im/",
    "integrations_rest_url": "https://scalar.vector.im/api",
    "integrations_jitsi_widget_url": "https://scalar.vector.im/api/widgets/jitsi.html",
    "bug_report_endpoint_url": "https://riot.im/bugreports/submit",
    "defaultCountryCode": "RU",
    "showLabsSettings": false,
    "features": {
        "feature_pinning": "labs",
        "feature_custom_status": "labs",
        "feature_custom_tags": "labs",
        "feature_state_counters": "labs",
        "default_federate": true,
        "default_theme": "dark"

    },
    "piwik": false,


    "enable_presence_by_hs_url": {
        "https://ваш домен": false
    }

}

У сервака пока нет в реализации удаления старых файлов, которые были переданы пользаками, они хранятся вечно, но место не резиновое, приходится удалять руками, поэтому сделаем скрипт.

cd /etc/cron.daily/
nano deloldfiles

Втыкаем (удаляеет старее 30 дней)

#!/bin/sh
find /var/lib/matrix-synapse/media/ -type f -mtime +30 -exec rm -v {} \;

Делаем файл исполняемым

chmod +x deloldfiles

Вот собственно и все, можно качать клиенты на мобилы Riot.im и пробовать подключаться.
Веб-морда доступна по адресу вашего домена через браузер.

Настройка и включение шифрования делается каждый раз руками в каждой комнате или чате, автоматом не включается.

P.S. Инструкция не содержит то, как включить открытую регистрацию пользователей на сервере и как подключить защиту от спама при регистрации с помощью гугл капчи, если захотите найдете ее в официальной документации по Synapse в гитхабе.

Установка и настройка Jabber сервера Prosody + IMAP авторизация dovecot + http_upload_external

После эксперементов над Matrix, а так же попыткой из сервера конференций Jitsi превратить его в полноценный jabber сервер для домена (не удачной), Nextcloud Talk (тоже сырой сильно) я все таки вернулся к первоначальной мысли о том, что Jabber пока лучшее open-source решение для безопасного приватного обмена сообщениями на основе своего сервера и обязательным шифрованием e2e на стороне клиентов.

Потратил я на всю настройку и тестирование около недели, так как проблем было очень много это в основном касалось того, что бы сервер на 100% покрывал возможности клиентов, которые на нем будут использоваться.
А так же полностью покрывал или максимально возможно проходил требования xmpp.net и compliance.conversations.im

Для тех, кто хочет поновее что-то есть Matrix но это шлак.

Требования к клиентам:

  • OMEMO шифрование сквозное и один на один и комнат чатов.
  • Приличный современный дизайн и юзабилити, что бы не гики пользовались, а родственники и друзья.
  • Стабильность, что бы все сообщения доходили
  • Работа приложений в фоне и пуши

Начнем с лучших клиентов, под которые я затачивал сервер.

Android — Conversations, Pix-Art Messeger (Pix-Art форк первого, но с небольшой разницей (я заметил, что видеопроигрывать встроен уже, больше инфы о сервере дает), причем я ставил его из маркета, а потом он для России пропал, но apk всегда можно скачать с сайта)
iOS — ChatSecure (без альтернатив, их просто нет с нормально работающим OMEMO шифрованием)
Windows — Gajim, PSI+ (тут вообще все печально с красотой клиентов, ничего с 2010 года не изменилось)
MacOS — Monal, Siskin (Не тестировал еще, но заявлено, что умеют OMEMO на вид ниче такие)

Требования к серверу

  • Стабильность, обновляемость, покрытие XEP для клиентов, модули
  • Простота настройки
  • Наличие мануалов (язык не важен)
  • Ubuntu, Debian
  • Поддержка нескольких виртуальных хостов и простота настройки
  • Аутентификация через IMAP Dovecot сервер.
  • Хранение архива сообщений и всей служебной инфомации в БД
  • Работа на уже установленной VestaCP и отсутствие конфликтов.

Остановился на Prosody, Ejabberd слишком сложен для меня в настройке, несколько раз сталкивался с ним, не зашел.

Сложности, которые возникли при настройке и потребовали времени на решение:

  1. Заморочка с сертификатами, какие куда и вообще нужно ли прописывать.
  2. Push уведомления в ChatSecure не доходили, засыпали клиенты и все, сообщения не доходят.
  3. Обмен файлами между виртуальными хостами, сложность была в сертификатах, подсовывал одному хосту другой, решено внедрением http_upload_external
  4. Не отображение аватарок при смене, пропадаение при использовании

Результаты проверок на xmpp.net и compliance.conversations.im в карусели при настройке сервера по данной инструкции. (только на compliance не верно проверяют dns запись, ищут xmpps вместо xmpp)

Все настройка и установка проходила в следующих реалиях:
Ubuntu 18.04, Prosody 0.11.2 с уже установленной VestaCP + https force шаблоном (nginx+apache) + dovecot + mysql + postgress + fastcgi.

Вам не обязательно ставить vestacp, это лишь у меня стоит, но тогда надо будет заморочиться с установкой apache2 для работы external upload модуля файлов, но если у вас хост всего 1 и не планируете добавлять домены новые то можно не париться на тему установки веб сервера и работать со встроенным в prosody и использовать для файлов обычный http_upload, а не http_upload_external.

Открыть порты в файрволе Vestacp

Порты 5222,5223,5269 — обязательны, через них идет связь c2s, s2s.
Порты 5000,5280,5281 — тут не очень уверен в необходимости, 5000 это proxy65, остальные для внутреннего http сервера prosody, который принимает websocket, bosh. Но его я проксирую с nginx поэтому можно закрывать а в конфиге я потом себе поставлю 127.0.0.1 интерфейс на эти штуки, это будущая задача, пока вот в таком виде работает.

Установка Prosody + модули

Добавим репозиторий Prosody

echo deb http://packages.prosody.im/debian $(lsb_release -sc) main | sudo tee -a /etc/apt/sources.list
wget https://prosody.im/files/prosody-debian-packages.key -O- | sudo apt-key add -

Обновим систему и репозитории. В идеале потом ребутнуться.

sudo apt-get update && apt-get upgarde

Теперь можно устанавливать Prosody и пакеты для epol и для работы с БД вы можете выбрать свою, какую хотите, оставить одну. У меня все на PG работает.

sudo apt-get install prosody lua-event lua-dbi-postgresql lua-dbi-mysql

Установим модули в папку /opt скачаем из репозитория свежие:

cd /opt
sudo apt-get install mercurial
hg clone https://hg.prosody.im/prosody-modules/ prosody-modules
chown -R prosody:prosody /opt/prosody-modules

Обновление модулей в будущем делается так:

cd /opt/prosody-modules
hg pull -u

Дальше можно установить mc для удобства и уже через него очистить папку /etc/prosody от старых конфигов и сертификатов, можете забекапить куда-нибудь на всякий случай.

apt-get install mc

Следующий этап это нужно создать сертификаты через VestaCP если она есть если нет, то сами решите как получите сертификаты Letscrypt манов в сети полно. А я буду про весту писать, как чего.

Создали домен в весте, получили на него сертификаты в весте прям внутри. Дальше нужно создать символические ссылки на файлы сертификатов из папки (к примеру пользак у вас в весте admin)
из папки /home/admin/conf/web в папку /etc/prosody/certs делаем сиволическую ссылку, я просто делал через mc а не командами в консоли и на ссылку поставить права на чтение для всех. Это конечно не совсем верное решение, надо бы подумать над тем, что бы prosody добавить в группу пользака admin в будущем, так как это может не заработать, когда обновится сертификат, vesta может переписать права, тут момент спорный не спорю, но пока работает. Дальше бы изменил.

Нюанс как называть символические ссылки из весты в prosody, так как он ищет именно эти названия файлов в своем каталоге с сертификатами:

Vesta Prosody ссылка
ssl.domain.com.pem domain.com.crt
ssl.domain.com.key domain.com.key

Еще для пущей безопасности умные люди советуют
Ключ Диффи-Хеллмана сделать:

cd /etc/prosody/certs/
openssl dhparam -out dh-2048.pem 2048
chown prosody:prosody dh-2048.pem
chmod u=rw,go= dh-2048.pem

Dovecot

Открываем файл /etc/dovecot/conf.d/10-master.conf на редактирование, находим секцию service auth и вписываем в неё:

service auth {
    unix_listener prosody-auth-client {
        mode = 0660
        user = prosody
        group = prosody
    }
}

Альтернативый вариант в файл /etc/dovecot/dovecot.conf это записать до строчки: !include conf.d/*.conf

Пользователь

Создайте в вашем домене почтовый ящик для админа, логин и пароль будут такие же для Jabber как и для почты.

Домен для upload файлов

Что бы нормально работала загрузка файлов, когда у вас несколько виртуальных хостов, то обязательно нужно использовать mod_http_upload_external иначе будут проблемы с сертификатами, и отправка файлов будет работать нормально только на одном из виртуальных хостов, а другие будут ругаться на ошибочный сертификат, заставить работать на встроенном в prosody веб сервере загрузку файлов и привязать к каждому домену свой я так и не смог, просто применил внешний веб сервер и все.

  1. Создайте в VestaCP домен upload.domain.com и получите на него сертификат.
  2. Из папки /opt/prosody-modules/mod_http_upload_external скопируйте файл share_v2.php в папку /home/admin/web/upload.domain.com/public_html/
  3. Создайте папку в любом месте удобном на сервере, но не в папке public_html папку uploads и дайте на него все права пользователю admin что бы в нее складывались загруженные пользователями файлы.
  4. Сделайте владельцем файла share_v2.php в папке веб сервера пользака admin (при условии, что сам домен uploads в vestacp создан под пользователем admin, если вы не используете весту то у вас пользак www-data это касается прав и п. 3) и поставьте права на исполнение.
  5. В файле share_v2.php отредактируйте строки:
/* Change this to a directory that is writable by your web server, but is outside your web root */
$CONFIG_STORE_DIR = '/var/lib/prosody/uploads'; 

/* This must be the same as 'http_upload_external_secret' that you set in Prosody's config file */
$CONFIG_SECRET = 'набор символов большой как пароль для просоди он нужен будет в конфиге просоди';

$CONFIG_STORE_DIR — полный путь к папке uploads которую вы сделали в шаге 3.
$CONFIG_SECRET  — Произвольный большой пароль для prosody когда он будет лить файлы

PHP и fcgid

Для загрузки больших файлов и снятия ограничения надо отредактировать файлы конфигов отвечающих за выполнение скриптов

nano /etc/apache2/mods-enabled/fcgid.conf

Добавить:

MaxRequestLen 2000000000

Я не стал париться и сделал ограничение в 2гб на сервере, вы можете сделать меньше, этот объем для сервера prosody будет регулироваться еще и в конфиге.

Так же на всякий случай я сделал следующие изменения в файлах:

/etc/php/7.2/apache2/php.ini
/etc/php/7.2/cgi/php.ini
/etc/php/7.2/cli/php.ini

Установил следующие параметры для загрузки файлов и выполнение скриптов

max_execution_time = 600
max_input_time = 600
post_max_size = 2000M
upload_max_filesize = 2000M
max_file_uploads = 200

В файле /etc/nginx/nginx.conf
Параметр изменить надо тоже, вы можете ставить везде не 2гб как я а скажем 500m как хотите:

client_max_body_size            2000m;

Это сняло ограничение на mod_http_upload_external ну вернее на nginx, который файлы эти закачивал.

Prosody

Я постарался сделать так, что бы лего можно было добавлять новые virtualhost для обслуживания сервером, что бы не париться с сертификатами и работоспособностью загрузки файлов. Для добавления новых хостов, вам нужно будет только создать домен в vestacp, сделать символические ссылки на сертификаты как делали выше по инструкции и добавить новый файл domain.com.cfg.lua в папку /etc/prosody/conf.d/ и он автоматом подключиться и будет работать после рестарта просоди.

Сам конфиг постарался причесать как смог, но в нем есть конечно еще вопросы у меня о необходимости тех или иных модулей в текущем времени, например я не уверен в необходимости подключения proxy65 с учетом того, что вся загрузка практически идет через http. Хз в общем насколько это актуально.

Большой головной болью для меня на целый день стала плохая работа ChatSecure вернее push уведомления не приходили, буквально уже через минуту, как chatsecure уходил в спячку на iPhone, пуши переставали приходить, я долго рыл форумы, пока не нашел причину, при погоне за секурностью сертификатов и отличных результатов на xmpp.net я отключил много вариантов шифрования по рекомендациям на других сайтах, на этом и погорел, ну я так думаю по крайней мере в результате, что бы пуши нормально начали доходить, надо было обязательно добавить следующе вещи в конфиг помимо самого модуля mod_cloud_notify
следующие модули

"filter_chatstates";
 "pinger";
 "throttle_presence";

И добавить в раздел SSL ciphers:

AES256-GCM-SHA384

Ну я так думаю, если бы я не использовал всякие опции для SSL то проблем бы и не было.

Безусловно нужно включить mam, pep и smack и smack_offline это описано в мануалах тут вопросов не было. Но не очевидные вещи я описал выше.

Весь конфиг с моими комментариями НЕ КОПИРУЙТЕ БЕЗДУМНО:

/etc/prosody/prosody.cfg.lua

--конфиг взят с  markevich.ru

admins = { "login@domain.ru" }

---Запрещаем регистрацию---
allow_registration = false
-----------------------------------

----служебное барахло для запуска---
--use_libevent = true -- ОТКЛЮЧЕНО, нельзя было авы поставить на чатсекуре, в логах были ошибки с днс связанные косвенно это изза епула, так нарыл в нете, отключил. Более хорошо стал работать на медленных соединениях это у меня субъективно.
daemonize = true;
pidfile = "/var/run/prosody/prosody.pid";

---------------------------------
default_storage = "sql"

-- POSTGRES SQL driver
---------------------------------

sql = {
    driver = "PostgreSQL";
    database = "prosody";
    host = "localhost";
    port = 5432;
    username = "prosody";
    password = "пароль от бд";
}

--Может ли просоди сам управлять своими таблицами и делать ремонт, рекомендовано.
sql_manage_tables = true

--------------------------------

---TLS для сервера--------------
certificates = "/etc/prosody/certs"

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

ssl = {
options = { "no_sslv3", "no_sslv2", "no_ticket", "no_compression", "cipher_server_preference", "single_dh_use", "single_ecdh_use" };
ciphers="EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH+aRSA+RC4:EECDH:EDH+aRSA:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!RC4:AES256-GCM-SHA384";
protocol = "tlsv1_1+";
dhparam = "/etc/prosody/certs/dh-2048.pem";
}

--требуем от всех и пользаков и серверов шифрование исключение гугл и циска они не хотят такого делать
c2s_require_encryption = true;
s2s_require_encryption = true;
s2s_encryption_exceptions = {
    "cisco.com",
    "gmail.com",
}

s2s_secure_auth = true;

--Для ботов своих или старых клиентов обычно включают старый вариант авторизации на отдельном порту
legacy_ssl_ports = { 5223 }

-------------------------------
-- Prosody Module 
---------------------------------

plugin_paths = { "/opt/prosody-modules/" }

-- Глобальные модули--------------------------

modules_enabled = {
                -- Wichtige Module
                        "roster";
                        "saslauth";
                        "tls";
                        "dialback";
                        "disco";

                -- Empfohlene Module
                        "private";
                        "profile";
                        "offline";
                        "admin_adhoc";
                        "admin_telnet";
                        "http_files";
                        "legacyauth";
                        "version";
                        "uptime";
                        "time";
                        "ping";
                        --"register_web";  регистрация отключена, значит не надо.
                        "register";
                        "posix";
                        "bosh";
                        "announce";
                        "proxy65";
                        "pep";
                        "smacks";
                        "smacks_offline";
                        "carbons";
                        "blocklist";
                        "csi";
                        "csi_battery_saver";
                        "mam";
                        "lastlog";
                        "list_inactive";
                        "cloud_notify";
                        "compat_dialback";
                        "throttle_presence";
                        "log_auth";
                        "server_contact_info";
                        "websocket";
                        "bookmarks";
                        "privacy_lists";
                        "pubsub";
                        "filter_chatstates";
                        "vcard_legacy"; 
                        "pinger";
                        "http_upload_external"; --если нужна загрузка файлов на внешний сервер, вдруг у вас больше 1 домена обслуживается.
                        --"http_upload"; включать вместо пункта выше, все настройки под него так же есть в конфиге.
};
---------------------------------
--
-- Включаем логи, после отладки закоментить все кроме error
----------------------------------

log = {
    debug = "/var/log/prosody/debug.log";
    info = "/var/log/prosody/info.log";
    warn = "/var/log/prosody/warn.log";
    error = "/var/log/prosody/error.log";
}

------------------------------------
--
-- MAM settings
----------------------------
default_archive_policy = true;
archive_expires_after = "4w";

---------------------------
-- HTTP Upload settings НЕ УВЕРЕН В НЕОБХОДИМОСТИ ЭТОЙ ХРЕНИ в связи с подключением external если что уберу или попробуйте сами убрать
----------------------------
http_max_content_size = 524288000;
http_upload_file_size_limit = 524288000;
http_upload_path = "/var/lib/prosody/http_upload";
http_max_content_size = 7000000000
http_upload_expire_after = 2592000
https_ports = { 5281 }
http_ports = { 5280 }
--------------------------------------

---EXTERNAL HTTP UPLOAD - работающее решение сейчас
--Путь до файла share_v2 URL должен быть обязательно с / на конце!
http_upload_external_base_url = "https://upload.domain.ru/share_v2.php/"
http_upload_external_secret = "тот самый пароль большой из share_v2.php"
http_upload_external_file_size_limit = 2147483648
http_upload_external_protocol = "v2";
--------------------------------

-- Websocket нужен для того, что бы через веб-клиенты можно было подключаться
consider_websocket_secure = true;

------------------------------------
--
-- Bosh config та же песня для веб херни
----------------------------------
cross_domain_bosh = true;
consider_bosh_secure = true;

---------------------------------
--
-- SMACK settings помогает на мобилах не засыпать и пуши сраные что бы работали
----------------------------------

smacks_enabled_s2s = true
smacks_hibernation_time = 86400
smacks_max_unacked_stanzas = 0
smacks_max_ack_delay = 5
smacks_max_hibernated_sessions = 20
smacks_max_old_sessions = 20

--
-- Push fix for ChatSecure настройка пушей, что бы не отправлял на сервер пушей текст, один хрен он шифрованный, а показывал лишь юхав масаж. что бы данные не летали на сервак пушей

push_notification_important_body = "You have new message"
push_notification_with_body = false
push_notification_with_sender = false

-----PINGER переодически опрашиваем серваки и клиенты на жив ли ты бро, в будущем думаю отключить, если не повлияет на пуши и доставку сообщений на мобилы.

c2s_idle_timeout = 30
c2s_ping_timeout = 30

----
--- Contact info - для красоты проверки комплаинсом
---------------------------------
contact_info = {
  abuse         = { "mailto:abuse@domain.com", "xmpp:abuse@domain.com.ru" };
  admin         = { "mailto:abuse@domain.com.ru", "xmpp:abuse@domain.com.ru" };
  feedback      = { "mailto:abuse@domain.com.ru", "xmpp:abuse@domain.com.ru" };
  sales         = { "mailto:abuse@domain.com.ru", "xmpp:abuse@domain.com.ru" };
  security      = { "mailto:abuse@domain.com.ru", "xmpp:abuse@domain.com.ru" };
  support       = { "mailto:abuse@domain.com.ru", "xmpp:abuse@domain.com.ru" };
};

---ПОДГРУЖАЕМ КОНФИГ ДОМЕНОВ---
Include "conf.d/*.cfg.lua"

Конфиг virtualhost

/etc/prosody/conf.d/domain.ru

plugin_paths = { "/opt/prosody-modules/" }

VirtualHost "domain.ru"
http_host = "domain.ru"

        authentication = "dovecot"
        dovecot_auth_socket = "/var/run/dovecot/prosody-auth-client"
        auth_append_host = true
       

modules_enabled = {
       -- "groups"; если нужен то раскоментить подробности ниже.
}

--файл со списком пользаков, которые добавляются в этом виртуал хосте по умолчанию,
-- это полезно когда делаете виртуал хост для ограниченого числа людей, компании, семью и тп, может быть себя
--во все ростеры хотите включить или поддержку или бота. если надо раскоментите и формат файла такой
--посмотреть на https://prosody.im/doc/modules/mod_groups
--groups_file = "/etc/prosody/share.txt" 

Component "conference.domain.ru" "muc"
        name = "domain.ru Chatrooms"
        restrict_room_creation = "local"
        muc_room_default_public = false
        muc_room_default_members_only = true
        muc_room_default_language = "ru"
        max_history_messages = 500
                modules_enabled = {
                        "muc_mam",
                        "vcard_muc",
                        "muc_cloud_notify";
                }
                muc_log_by_default = true

Component "pubsub.domain.ru" "pubsub"

disco_items = {
    { "conference.domain.ru", "The domain.ru MUC" };
}
proxy65_acl = { "domain.ru" }

Дальше собственно рестартуем prosody

/etc/init.d/prosody restart

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

Шаги за рамками данного мануала:

  1. Настройка проксирования nginx на bosh и websocket
  2. Настройка meta файлов для альтернативного подключения через nginx
  3. настройка DNS

Даже без этих шагов все и так хорошо, но ДНС бы прописать, что бы получить результаты проверки красоты на комплайнс конференс.

9 признаков, по которым покер похож на бизнес

  1. Ты должен играть с картами, которые тебе сдали, и с тем количеством фишек, которые перед тобой на столе. Бизнес надо начинать с того, что есть.
  1. Выигрыш зависит в первую очередь не от того, какие карты на руках у тебя — а от того, какие карты у других. Дело не в том, хорошая ли у тебя идея, а насколько она конкурентноспособна.
  1. Чтобы продолжать играть — надо продолжать делать ставки. Расходы это или инвестиции в выигрыш — будет понятно только в конце игры.
  1. Даже с двумя тузами на префлопе можно проиграть, выигрышная комбинация собирается из двух карт на руках и пяти карт на столе. Нельзя надеяться на то, что начальная идея супервыигрышна, ее обязательно надо дополнять или изменять.
  1. Ты никогда не знаешь наверняка, что на руках и в голове у других игроков. Планы конкурентов неизвестны, но ты их должен учитывать.
  1. Случайно повезти может любому, системно выигрывают только опытные игроки. Успех в бизнесе — это опыт, умение считать и стальные яйца.
  1. Выигрывают не на одной раздаче, а в игре. Есть пословица «не рассказывай мне, с какой рукой ты выиграл — расскажи, какую руку ты сбросил». Нужно уметь вовремя отказаться от неудачной идеи, сбросить карты и пойти на следующий круг.
  1. Выиграть много денег можно только в том случае, если у других игроков хорошие карты, на которые они ставят — а у тебя еще лучше. Когда карты у всех плохие — денег в банке не будет. Заработать много денег в бизнесе можно только на конкурентном рынке.
  1. Покер — это не игра в карты, а игра в фишки. Карты — это только средство потерять их или выиграть. Любой бизнес — это финансовый механизм по вложению и возврату фишек. Продукт — это то, что нарисовано на игральных картах.

Темная Сторона

Sit&Go >> 9max Turbo SNG

Поиграв спины в легкий минус, поняв, что десперсия просто дикая, а чаще всего ты получишь максимум х2 от байина, перехожу на привычные 9max турбо снг. Ибо режим пиханины вводит в тильт очень быстро, когда фишам с KJo часто доезжает. Буду не дергаться, а играть одну привычную дисциплину.

Бэдбиты

Уже которую неделю у меня даунстрик, раздают мусор, а если придет во фо флоп не попадаю или получаю бэдбит на ривере, когда опу доезжает сет с 33 на руках а тащил он их по все мои рейзы и беты с размером в банк, у меня КК карманки были. Треш. =)

Отрывок из статьи Майка Каро, который врезался мне в память, гласит примерно следующее: если вы сталкиваетесь с большим количеством бэдбитов в игре — это хороший знак, и значит, что вы играете хорошо. Как это так? Но, если задуматься, то в этом есть смысл. Бэдбит — это когда ты доминируешь и все деньги идут на стол. Если ты постоянно оказываешься в ситуации с лучшей рукой, ставя все свои фишки в центр стола, ты играешь в правильный покер.

Заставить своих оппонентов тянуться за чудо-картой каждый раз, чтобы обыграть тебя — вот твоя цель на дистанции. Ты должен стремиться поставить все свои фишки на кон против оппонента, тянущего дро, как можно чаще. Да, это может служить лишь слабым утешением, когда ты попадаешь под *надцатый переезд кряду, попытайся мыслить объективно и понять, что ты всё равно сыграл правильно. Не меняй свою стратегию, основываясь на краткосрочных результатах.

Подождём...и тащим дальше.

Система маятников

Телевизор — чтобы всегда жить в страхе.
Алкоголь — чтобы убежать от реальности.
Работа — чтобы не было времени думать.
Потребление — чтобы заглушить совесть.
Прививки — чтобы разрушить иммунитет.
Мясо — чтобы труп гнил 3 дня в кишечнике.
Кредиты — чтобы быть нищим в рабстве.
Беспорядочный секс — чтобы терять свою энергию.
Таблетки — чтобы загонять болезнь ещё глубже.
Пенсия — чтобы дети не заботились о родителях.
Религия — чтобы быть вечной жертвой.
Зрелища — чтобы чувствовать себя в стаде.
Табак — чтобы оплачивать своё уничтожение.
Школа — чтобы потом стать винтиком в Системе.
Президент — чтобы была иллюзия выбора.
Войны — чтобы управлять людьми через патриотизм.

Возобновил игру на старзах

Сегодня начал снова играть на старзах, эх тряхнул стариной занес 5 турниров. После отмены нормальной системы рейкбека много регуляров сбежало из рума. А когда придумали spin&go набежало много рыбы.
Они себя безопаснее чувствуют, когда опы выбираются рандомно. Не подсядешь просто так, только рандом.

Покатал сейчас и получил сумасшедшие ROI в 25% в легкий приятный плюс. Это конечно забавно, просто маленькая дистанция, дай бог их катать в 4-5% да и вспомнить надо много чего.

Вот как они работают: участвуют три игрока, бай-ин от $0.25 до $1000, структура гипер-турбо (турнир обычно занимает около 5-7 минут), победитель забирает все.
Перед началом турнира призовой фонд определяется случайным образом — от х2 до х10000 бай-ина.
Например: если играть на лимите $1, максимальный призовой фонд составит $10000

Очень важно интуитивно понимать стадию пуш фолд и тренить ее не поддаваясь эмоциям.
Посмотрим через неделю как пойдет, обязательно выложу скрин со статами.

Цель: с $18 накатать банкролл до $100 и перейти на лимит $1 по времени не загадываю +- 1 месяц.

Жалко, что времени катастрофически мало сейчас на игру.
А еще зеленый мерзкий банк не дал пополнить банкролл со своих карт, блокирует платежи. Красный хороший банк вполне дал.

Катал под отличный плейлист:

Трансерфинг реальности #3

Позвольте себе роскошь воспринимать жизнь как праздник. Теперь у вас появилось не иллюзорное, а реальное основание для праздника — надежда обрести свободу. Вы будете испытывать тихую радость от сознания того, что вы двигаетесь к своей цели, поэтому праздник будет всегда с вами. Эту тихую радость не смогут вам омрачить даже равновесные силы. В соответствии с принципом координации, если вы будете воспринимать жизнь как праздник несмотря ни на что, значит, так оно и будет.

Вадим Зеланд

Ранее Ctrl + ↓