Information Security
Instant Messaging Systems
System administration
Network technologies
Lifehacks for geeks
Comments 47
0
Поясните пожалуйста насчёт амазона; не имел дел ранее, как выходят затраты в 0, и как вообще начать (может есть хорошая статейка для чайничков))?
+2
docker pull telegrammessenger/proxy

зря-зря. забейте на статистику и пользуйтесь образом от nineseconds в dd-режиме.
0
Предустановленный контейнер с Kali? С козыря зашли. А почему не просто Debian Buster?
0
что-то слишком много платного в бесплатной схеме. доллар за AWS, сколько-то там еще за образ…
0
п.37. Kali Linux (VPC от Amazon 1$/год, который возвращается через месяца2)
Источник

Образ — Free.

Смена учетки/карты через год даёт еще один год бесплатного пользования VPC и тд.
+2

Тоже хотел задать этот вопрос — зачем все носятся с докером, если приложение компилируется в один бинарник размером в 521 КБ (!), и для запуска нужен 1 конфиг и 1 юнит systemd?

0
Потому и задал вопрос. Сам использую Python-версию (там можно включить dd-only режим), заводится ещё проще, без сборки и загрузки зависимостей. Но нет, надо стильно-модно, с доскером и кубернетесом.
+1
питон хуже параллелится (помним про GIL), более ресурсоемок (скрипт, jit со всеми вытекающими). поэтому — нет, простите, но не питон.
docker решает вопрос развертывания и обеспечения жизненного цикла нескольких инстансов на одном хосте, плюс, по необходимости — ограничения ресурсов.
а еще не нужно помнить, куда ты по папкам распихал какие деплойменты — это всегда контекст контейнера.

это очень приятные плюшечки, когда на твоих проксях висит несколько тысяч сессий, и внеплановый отстрел роскомнадзором или падение делает им больно.
0
Я не агитировал за питон, что Вы. Мой прокси для пяти с половиной юзеров, и мне важнее сохранить его работоспособность и затруднить детектирование, чем повысить производительность, поэтому питон.

Несколько инстансов на одном хосте можно запустить и без доскера — достаточно запустить их на разных портах и с разными конфигами.
+2
Мой прокси для пяти с половиной юзеров, и мне важнее сохранить его работоспособность и затруднить детектирование

Так это решается dd-режимом вне зависимости от реализации.

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

Что проще — накропать несколько разных конфигов, или выполнить пять раз одну и ту же команду с двумя разными параметрами?
Я вам даже больше скажу — автоматизировать запуск docker-контейнеров несколько проще чем генерацию конфигов и последующий запуск непосредственно бинарников с хоста.

ну и в случае миграции на другой хост — опять же быстрее и проще.
+2
Ну, в некоторых случаях ещё проще сделать образ сервера и раскатывать его, меняя айпишник ;) А так-то можно тупо ставить копипастой. Бинарник вообще можно скомпилить один раз.

Для Ubuntu 18.04 у меня выглядит так (думаю, что в Debian будет практически то же самое)
Сборка:
Пулл-реквест для принудительного random padding, ключ -R. Если не нужен, то fetch и checkout можно пропустить.
sudo su
apt install git curl build-essential libssl-dev zlib1g-dev
git clone https://github.com/TelegramMessenger/MTProxy.git
cd MTProxy/
git fetch origin pull/248/head:forcerandompadding
git checkout forcerandompadding
make && cd objs/bin
mkdir /opt/mtproxy/
cp mtproto-proxy /opt/mtproxy/

Ключ для пользователей mtproxy:
head -c 16 /dev/urandom | xxd -ps
Получится что-то вроде 72d118bf6102c70d330a7a1058450f1d, это нужно вставить после ключа -S, всего можно до 16: -S 111111111111111111111111111111111 -S 22222222222222222222222222222222…
Конфиги:
Тут я соврал, их на самом деле 2 — с секретом и со списком серверов
cd /opt/mtproxy/
curl -s https://core.telegram.org/getProxySecret -o proxy-secret
curl -s https://core.telegram.org/getProxyConfig -o /opt/mtproxy/proxy-multi.conf
Последнее кладём в крон (судя по всему, контейнер рекомендовали перезапускать по этой причине):
crontab -e
0 0 * * * curl -s https://core.telegram.org/getProxyConfig -o /opt/mtproxy/proxy-multi.conf

Логи (если надо, ключ -l):
touch /var/log/mtproxy.log
chown nobody:nogroup /var/log/mtproxy.log

Юнит:
vim /etc/systemd/system/mtproxy.service
[Unit]
Description=MTProxy
After=network.target

[Service]
Type=simple
WorkingDirectory=/opt/mtproxy
ExecStart=/opt/mtproxy/mtproto-proxy -u nobody -p 8888 -H 443 -R -S 72d118bf6102c70d330a7a1058450f1d --aes-pwd proxy-secret proxy-multi.conf -M 1 -l /var/log/mtproxy.log
Restart=on-failure

[Install]
WantedBy=multi-user.target

Файерволл:
Ну, тут у кого как, общих рецептов действительно нет; с другой стороны, правильно настроить файерволл с докером тоже не все умеют.
iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT

У меня обычно стоит iptables-persistent, если на этом сервере больше ничего нет и только IPv4, то:
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
iptables -P INPUT DROP
apt install iptables-persistent
При установке он предложит сохранить, жмём Yes, в дальнейшем после внесения изменений и подтверждения того, что не выстрелили себе в ногу
iptables-save > /etc/iptables/rules.v4

Запускаем:
systemctl daemon-reload
systemctl restart mtproxy.service
systemctl status mtproxy.service

Статистика:
localhost:8888/stats
0
В статистике потерялся curl перед локалхостом, но, думаю, прочитавшие саму статью, догадались.
+1
Выглядит да, но по сути можно обернуть секцию «Юнит» в
cat << EOF >
...
EOF
а редактирование крона как
crontab -l | { cat; echo 0 0 * * * curl -s https://core.telegram.org/getProxyConfig -o /opt/mtproxy/proxy-multi.conf"; } | crontab -
генерацию ключа в переменную, и можно всё запускать как один шелл-скрипт.
0
docker run -d -p 4000:3128 --name=mtgo-proxy-9a7 --restart=unless-stopped -e MTG_SECURE_ONLY=true nineseconds/mtg:latest dd9b3b0b82cd3dff77a266bd4fc5bb37e6

и все.
+2
wget https://gist.githubusercontent.com/aandrusha/b5d9acd56a7b0fb01b98dcbef875daf3/raw/14f4d7f596a12fc3ef5a9140c7bbd8696399d068/deploy-mtproxy.sh && chmod +x deploy-mtproxy.sh && sudo ./deploy-mtproxy.sh
+3

Приятно что моим прокси пользуются. Недавно добавил режим маскировки под tls, как зарелизят хотя бы в одном клиенте, опубликую статью на хабре про это.
С GIL проблему удалось обойти запуском нескольких копий прокси на одном порту, но это мало востребовано — обычно мощности cpu хватает с запасом

+2
Зачем докер — тоже не понял, там и без него все просто делается…
0
Минус докера что нужна поддержка со стороны ядра, соответственно на дешёвых VPS где «своего» ядра нет всё это работать не будет. Амазон free tier по умолчанию даёт сервер в Штатах, что не будет задержки голосовой связи при таком подключении, верится с трудом.
0
7 евро для вас недостаточно дешевый? при этом «со своим ядром», не OpenVZ, а KVM/Xen.
И даже не в штатах.
+1
Если собирать из исходников, будет работать на любой виртуализации, за любые деньги. Делов на git pull && make.
0
1 ядро Xeon E5-2650L v4, 1 ГБ ОЗУ, 20 ГБ на диске, виртуализация VMWare, Ubuntu 18.04 x64, мой сервер в чешском датацентре.
Брал тут в разгар буйства РКН, сейчас уже подняли цены, либо 2,79 в месяц, либо 0,023 в час.
+1

Есть неофициальный MTProxy, написанный на Go: https://github.com/9seconds/mtg


Из особенностей: малый размер Docker образа (примерно 3 MB), требует мало ресурсов (1-3% CPU у mtg против 15-20% у официального прокси)


За это, правда, приходится некоторыми ограничениями (можно использовать только один секрет, например). Но для домашнего использования — самое то.

-3
К вопросу о «непрофессионализме» РКН

Когда Роскомнадзор боролся с Павлом Дуровым и пытался заблокировать «Телеграм», то в какой-то момент ему это удалось, но в результате наше Министерство связи на несколько дней прекратило свою работу. Это был настоящий шок для его сотрудников — ведь они настолько привыкли общаться в мессенджерах, что тогдашний министр Николай Никифоров просто на работу не приезжал. А тут ему пришлось приехать


О цифровых угрозах… говорит Наталья Касперская, глава группы компаний InfoWatch
+3
Удваиваю этот вопрос. Допускаю, что я чего-то не понимаю, потому что не знаю многого, но лично я ни за что не стану использовать докер там, где mtproto-прокси запускается одним бинарником с минимумом обвязки, докер здесь просто лишний, ничем не обоснованный уровень абстракции. Использую virgild (https://github.com/swork9/virgild) уже более года для себя и ещё трёх десятков юзеров, полёт нормальный, установить\настроить сможет даже человек, слабо знакомый с IT.
0
Но ведь насколько мне известно, у бесплатного тира ec2 присутствует ограничение в 15гб трафика, неужели вам его хватает, чтобы не платить вовсе? Или же они убрали его?
0
Да, ограничение в 15Гб/1месяц трафика, всё что выше ~10центов/1Гб.
Для Telegram хватает.

+3
Скоро без докера простите посрать не смогут.
У меня с первого дня крутится mtproxy за океаном, без докеров и прочих извращений, сама обновляется, сама обновляет списки и перезапускается.
+1
Найс. Быстро все по инструкции поднял. Единственное почему то в активных сессиях висит мой айпи, а не прокси.

И я делал не ЮСА, а Францию чтобы пинг меньше был.
0
И я делал не ЮСА, а Францию чтобы пинг меньше был.

Про Amazon free фраза? Вроде бы недавно они стали добавлять инстансы в своей подконтрольной Европейкой части (раньше были ЮСА).
0
и как-то не растет кокос с инструкцией

root@kali:~# systemctl status docker
● docker.service — Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2019-08-01 01:35:36 UTC; 8s ago
Docs: docs.docker.com
Main PID: 3174 (dockerd)
Tasks: 18
Memory: 150.5M
CGroup: /system.slice/docker.service
├─3174 /usr/sbin/dockerd -H fd://
└─3180 docker-containerd --config /var/run/docker/containerd/containerd.toml --log-level info

Aug 01 01:35:35 kali dockerd[3174]: time=«2019-08-01T01:35:35.694335407Z» level=warning msg=«Your kernel does not support swap memory limit»
Aug 01 01:35:35 kali dockerd[3174]: time=«2019-08-01T01:35:35.694630180Z» level=warning msg=«Your kernel does not support cgroup rt period»
Aug 01 01:35:35 kali dockerd[3174]: time=«2019-08-01T01:35:35.694880190Z» level=warning msg=«Your kernel does not support cgroup rt runtime»
Aug 01 01:35:35 kali dockerd[3174]: time=«2019-08-01T01:35:35.695506641Z» level=info msg=«Loading containers: start.»
Aug 01 01:35:35 kali dockerd[3174]: time=«2019-08-01T01:35:35.963170445Z» level=info msg=«Default bridge (docker0) is assigned with an IP address 172.17.0.0/16. Daemon option --bip can be used to set a preferred IP address»
Aug 01 01:35:36 kali dockerd[3174]: time=«2019-08-01T01:35:36.030541388Z» level=info msg=«Loading containers: done.»
Aug 01 01:35:36 kali dockerd[3174]: time=«2019-08-01T01:35:36.140931375Z» level=info msg=«Docker daemon» commit=4c52b90 graphdriver(s)=overlay2 version=18.09.1
Aug 01 01:35:36 kali dockerd[3174]: time=«2019-08-01T01:35:36.141789476Z» level=info msg=«Daemon has completed initialization»
Aug 01 01:35:36 kali systemd[1]: Started Docker Application Container Engine.
Aug 01 01:35:36 kali dockerd[3174]: time=«2019-08-01T01:35:36.162649825Z» level=info msg=«API listen on /var/run/docker.sock»
root@kali:~# sudo su && docker run -d -p443:443 --name=mtproto-proxy --restart=always -v proxy-config:/data telegrammessenger/proxy:latest
root@kali:~# docker logs mtproto-proxy
Error: No such container: mtproto-proxy
root@kali:~#

+1
Тоже пользовался тг прокси на амазоне. После окончания года бесплатного переехал на google cloud. Во первых в europe-north1 в зоне А пинг просто сказка по сравнению даже с самым близким(франкфурт, вроде) у амазона. Около 5-10 по проводу. Если мы говорим от России и конкретно СПб. Плюс Yota вычисляет трафик телеги и режет скорость(картинки начинают долго грузиться в некоторых частях города) причём ни 443 порт не помогает ни ключ dd. Помогло использование openvpn порта 1194. Вдруг кому то будет полезно.
0

Спасибо! Я на yota и всегда на vpn сижу но у друзей мой прокси отваливался

0
Она не вычисляет специально, там походу просто весь непонятный трафик шейпится, а порт OpenVPN они завайтлистили, видимо, по результату многочисленных жалоб.
Only those users with full accounts are able to leave comments. , please.