Буквально вчера выкатили официальный прокси для
Telegram под названием
mtproto-proxy, там же есть руководство настройки, но все равно продублирую у себя, может кому пригодится.
Где взять прокси написано
ТУТ
Купить дешевый VDS можно у них:
https://aeza.net/?ref=397195
https://firstbyte.ru/?from=30261 от 55₽ в месяц
А теперь сама заметка:
Нам понадобятся средства для сборки
mtproxy из исходников, команда для
debian
apt-get install git build-essential libssl-dev zlib1g-dev curl
Если у вас
ubuntu 16.04 или в системе
OpenSSL версии ниже 1.1.0h, то нужно его установить, или собрать ручками.
Проверить текущую версию openssl можно командой
openssl version
Для сборки
openssl1.1.0h выполним следующие команды
wget https://www.openssl.org/source/openssl-1.1.0h.tar.gz
tar -zxf openssl-1.1.0h.tar.gz
cd openssl-1.1.0h
./config
make
make install
ldconfing /usr/local/lib
echo '/usr/local/lib' > /etc/ld.so.conf.d/local.conf
Теперь собираем mtproxy
Вытащим к себе исходники
git clone https://github.com/TelegramMessenger/MTProxy
cd MTProxy
Если у вас ubuntu 22.04 то надо пропатчить
makefile
curl -o make.patch https://clsv.ru/uploads/68/make.patch
git apply make.patch
В debian 12 тоже необходим
патч
curl -o assert.patch https://clsv.ru/uploads/68/assert.patch
git apply assert.patch
Собираем
<pre>
make
Если все прошло без ошибок, то в каталоге
MTProxy/objs/bin/ должен быть бинарник
mtproto-proxy, копируем его в
/usr/local/bin
cp objs/bin/mtproto-proxy /usr/local/bin
Теперь создадим пользователя, каталог для конфигов и логов(логи почему то у меня не писались, может баг)
adduser --system --no-create-home --disabled-login --group mtproxy
mkdir /etc/mtproxy
mkdir /var/log/mtproxy
chown mtproxy:mtproxy /var/log/mtproxy/
Получим необходимые файлы для функционирования mtproxy
cd /etc/mtproxy
Используйте одну из утилит для получения файлов:
curl
curl -s https://core.telegram.org/getProxySecret -o proxy-secret
curl -s https://core.telegram.org/getProxyConfig -o proxy-multi.conf
wget
wget https://core.telegram.org/getProxySecret -O proxy-secret
wget https://core.telegram.org/getProxyConfig -O proxy-multi.conf
Сгенерируем 16-ричный
secret-key
head -c 16 /dev/urandom | xxd -ps
Создадим сервис
systemd
/etc/systemd/system/mtproxy.service:
[Unit]
Description=mtproto-proxy
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/mtproto-proxy -u mtproxy -p 8888 -6 -H 443 -l /var/log/mtproxy/mtproxy.log -S <secret-key> --aes-pwd /etc/mtproxy/proxy-secret /etc/mtproxy/proxy-multi.conf -M 1
Restart=on-failure
[Install]
WantedBy=multi-user.target
Расшифровка параметров:
-u mtproxy — процесс запускается от пользователя mtproxy
-p 8888 — локальный порт, можно использовать для получения статистики
-6 — включает ipv6
-H 443 — на каком порту ожидать подключение клиентов, 443 подходит идеально, провайдеры и прочие будут думать что это обычный https траффик
-l /var/log/mtproxy/mtproxy.log — лог файл, но как я писал выше, логи почему то не пишутся, может нужно включить verbose или еще чего, разберусь потом
-S <secret-key> — секретный ключ который мы сгенерировали(надеюсь вы поняли что
<secret-key>, нужно заменить на сгенерированную строку, например на
575b04f4b28f72263965d1d371707c06)
--aes-pwd /etc/mtproxy/proxy-secret — конфиг с секретом, что там в нем, черт его знает
/etc/mtproxy/proxy-multi.conf — конфиг файл с ip адресами серверов
-M 1 — количество главных процессов, пишут что хватает одного, если у вас там не супер-пупер нагруженный сервер.
UPD: 12.09.2019
В официальном mtproxy запилили
fake-tls, все описано
здесь
Что бы этим воспользоваться нужно добавить в команду запуск -D и указать домен, пример такой
ExecStart=/usr/local/bin/mtproto-proxy -u mtproxy -p 8888 -6 -H 443 -D www.facebook.com -S <secret-key> --aes-pwd /etc/mtproxy/proxy-secret /etc/mtproxy/proxy-multi.conf -M 1
Но помните у вас отлетит обычное подключение которое с ключом DD и без DD, <secret-key> тоже станет особенный, сгенерировать его можно вот на этом сайте
http://seriyps.ru/mtpgen.html в Fake-TLS domain нужно указать тот же домен который вы указали в -D, в нашем случае
www.facebook.com
Активируем сервис и пробуем его запустить
systemctl enable mtproxy && systemctl start mtproxy
Посмотреть состояние можно командой
systemctl status mtproxy
Если у вас нет
systemd, используйте следующий init.d
/etc/init.d/mtproxy:
#!/bin/sh
### BEGIN INIT INFO
# Provides: mtproto-proxy
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop:
# Short-Description: MTProxy service
### END INIT INFO
set -e
# Must be a valid filename
NAME=mtproto-proxy
PIDFILE=/var/run/$NAME.pid
#This is the command to be run, give the full pathname
DAEMON=/usr/local/bin/mtproto-proxy
DIR=/etc/mtproxy
DAEMON_OPTS="-u mtproxy -p 8888 -6 -H 443 -l /var/log/mtproxy/mtproxy.log -d -S <secret> -P <proxy-tag> --aes-pwd /etc/mtproxy/proxy-secret /etc/mtproxy/proxy-multi.conf -M 1"
USER=mtproxy
export PATH="${PATH:+$PATH:}/usr/sbin:/sbin"
case "$1" in
start)
echo -n "Starting daemon: "$NAME
start-stop-daemon --start --background --pidfile $PIDFILE -d $DIR -m --exec $DAEMON -- $DAEMON_OPTS
echo "."
;;
stop)
echo -n "Stopping daemon: "$NAME
start-stop-daemon --stop --signal TERM --quiet --oknodo --pidfile $PIDFILE
echo "."
sleep 3
;;
restart)
echo -n "Restarting daemon: "$NAME
start-stop-daemon --stop --signal TERM --quiet --oknodo --retry 30 --pidfile $PIDFILE
start-stop-daemon --start --background --pidfile $PIDFILE -d $DIR -m --exec $DAEMON -- $DAEMON_OPTS
echo "."
;;
*)
echo "Usage: "$1" {start|stop|restart}"
exit 1
esac
exit 0
Даем права на запуск скрипта
chmod +x /etc/init.d/mtproxy
Активируем автозапуск
update-rc.d mtproxy defaults
Запускаем службу
/etc/init.d/mtproxy start
Теперь настраивайте ваш
телеграм клиент.
UPD 24.02.2019
Что бы прокси было сложнее обнаружить, в клиенте есть возможность динамически изменять размер пакета, добавьте в начале ключа две буквы dd
Должно получится так
dd575b04f4b28f72263965d1d371707c06
Если примут
коммит то в самом прокси
mtproto можно будет запретить подключение без dd флагом "-R"
Если у вас есть канал, то вы можете его продвинуть благодаря прокси, для этого нужно зарегистрировать ваш прокси у бота
@MTProxybot, бот вам даст
proxy-tag, его нужно будет добавить в запуск сервиса,
ExecStart изменить на
ExecStart=/usr/local/bin/mtproto-proxy -u mtproxy -p 8888 -6 -H 443 -l /var/log/mtproxy/mtproxy.log -S <secret-key> -P <proxy-tag> --aes-pwd /etc/mtproxy/proxy-secret /etc/mtproxy/proxy-multi.conf -M 1
-P <proxy-tag> — <proxy-tag> заменить на то, что вам дал бот
1. Пишем
@MTProxybot /start
1.1 Он запросит адрес нашего прокси в формате host:port
1.2 Потом запросит secret, отправляем ему
1.3 Если все окей выведет сообщение об успехе Success и proxy tag его надо прописать в ExecStart сервиса
-P <proxy-tag>, описывал выше.
2. Добавим канал, пользователи которые будут пользоваться вашим прокси автоматически будут «подписаны» на Promoted канал.
2.1 Командой
/myproxies
запросим список наших прокси(их может быть несколько)
2.2 Выберем необходимый
2.3 И нажмем кнопку
Set promotion
2.4 Введем название канала в формате
@имя_канала
2.5 Все, примерно через час данные
promotion применяться и у пользователей использующих ваши прокси появится ваш канал.
Безопасного общения друзья :-)
Написал тут один человек по поводу защиты от примитивных
DDos атак, да еще и ссылку кинул,
https://javapipe.com/ddos/blog/iptables-ddos-protection/, полистал и решил почему бы и не добавить в статью, в принципе такая защита должна быть на любом публичном сервере, кто его знает, вдруг поможет.
Свод правил из статьи:
### 1: Drop invalid packets ###
/sbin/iptables -t mangle -A PREROUTING -m conntrack --ctstate INVALID -j DROP
### 2: Drop TCP packets that are new and are not SYN ###
/sbin/iptables -t mangle -A PREROUTING -p tcp ! --syn -m conntrack --ctstate NEW -j DROP
### 3: Drop SYN packets with suspicious MSS value ###
/sbin/iptables -t mangle -A PREROUTING -p tcp -m conntrack --ctstate NEW -m tcpmss ! --mss 536:65535 -j DROP
### 4: Block packets with bogus TCP flags ###
/sbin/iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
/sbin/iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,SYN FIN,SYN -j DROP
/sbin/iptables -t mangle -A PREROUTING -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
/sbin/iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,RST FIN,RST -j DROP
/sbin/iptables -t mangle -A PREROUTING -p tcp --tcp-flags FIN,ACK FIN -j DROP
/sbin/iptables -t mangle -A PREROUTING -p tcp --tcp-flags ACK,URG URG -j DROP
/sbin/iptables -t mangle -A PREROUTING -p tcp --tcp-flags ACK,FIN FIN -j DROP
/sbin/iptables -t mangle -A PREROUTING -p tcp --tcp-flags ACK,PSH PSH -j DROP
/sbin/iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL ALL -j DROP
/sbin/iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL NONE -j DROP
/sbin/iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL FIN,PSH,URG -j DROP
/sbin/iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL SYN,FIN,PSH,URG -j DROP
/sbin/iptables -t mangle -A PREROUTING -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
### 5: Block spoofed packets ###
/sbin/iptables -t mangle -A PREROUTING -s 224.0.0.0/3 -j DROP
/sbin/iptables -t mangle -A PREROUTING -s 169.254.0.0/16 -j DROP
/sbin/iptables -t mangle -A PREROUTING -s 172.16.0.0/12 -j DROP
/sbin/iptables -t mangle -A PREROUTING -s 192.0.2.0/24 -j DROP
/sbin/iptables -t mangle -A PREROUTING -s 192.168.0.0/16 -j DROP
/sbin/iptables -t mangle -A PREROUTING -s 10.0.0.0/8 -j DROP
/sbin/iptables -t mangle -A PREROUTING -s 0.0.0.0/8 -j DROP
/sbin/iptables -t mangle -A PREROUTING -s 240.0.0.0/5 -j DROP
/sbin/iptables -t mangle -A PREROUTING -s 127.0.0.0/8 ! -i lo -j DROP
### 6: Drop ICMP (you usually don't need this protocol) ###
#/sbin/iptables -t mangle -A PREROUTING -p icmp -j DROP
### 7: Drop fragments in all chains ###
/sbin/iptables -t mangle -A PREROUTING -f -j DROP
### 8: Limit connections per source IP ###
/sbin/iptables -A INPUT -p tcp -m connlimit --connlimit-above 111 -j REJECT --reject-with tcp-reset
### 9: Limit RST packets ###
/sbin/iptables -A INPUT -p tcp --tcp-flags RST RST -m limit --limit 2/s --limit-burst 2 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --tcp-flags RST RST -j DROP
### 10: Limit new TCP connections per second per source IP ###
/sbin/iptables -A INPUT -p tcp -m conntrack --ctstate NEW -m limit --limit 60/s --limit-burst 20 -j ACCEPT
/sbin/iptables -A INPUT -p tcp -m conntrack --ctstate NEW -j DROP
### 11: Use SYNPROXY on all ports (disables connection limiting rule) ###
# Hidden - unlock content above in "Mitigating SYN Floods With SYNPROXY" section
Закоментировал только правило запрещающающее
icmp, иногда все же нужно кого нибудь пингануть.
нет файла или директории
Точно создал сервис файл?
почему процесс убивается через несколько минут, непонятно почему:
Jun 06 10:12:09 sb572f058 mtproto-proxy[21340]: [21342][2018-06-06 10:12:09.085625 local] main loop
Jun 06 10:20:04 sb572f058 systemd[1]: mtproxy.service: Main process exited, code=killed, status=9/KILL
Jun 06 10:20:04 sb572f058 mtproto-proxy[21340]: [pid 21342] [time 1528269604] SIGTERM handled.
Jun 06 10:20:04 sb572f058 mtproto-proxy[21340]: [21342][2018-06-06 10:20:04.096907 local] Terminated by SIGTERM.
Jun 06 10:20:04 sb572f058 systemd[1]: mtproxy.service: Unit entered failed state.
Jun 06 10:20:04 sb572f058 systemd[1]: mtproxy.service: Failed with result 'signal'.
github.com/dotcypress/mtproxy/issues/3
но походу проблема так и нерешена
Проверяем версию openssl, должна быть не ниже OpenSSL 1.1.0h 27 Mar 2017 иначе работать не будет и будет вылезать вот такая ошибка.
openssl version
Создаем пользователя:
useradd mtproxy
Создадим сервис systemd:
nano /lib/systemd/system/mtproxy.service
Остальное все делаем в точности как написано в этом гайде. (=
З.ы Спасибо большое за годный гайд!
Вопрос только чем mtproxy.service в /etc/systemd/system не угодил?
Просто канал привязывается примерно через час.
/usr/local/bin/mtproto-proxy -u mtproxy -p 8888 -6 -H 443 -l /var/log/mtproxy/mtproxy.log -S 5cbcf5c8535349733ed9c1681b599034 -P 287d86ad5711c60a952f7a73f0ca4dd3 --aes-pwd /etc/mtproxy/proxy-secret /etc/mtproxy/proxy-multi.conf -M 1
Rsocks предоставляет бесплатную прокси для работы с Telegram, которая обеспечит быструю и стабильную работу
⚠️Ссылка на прокси: tg://proxy?server=37.1.192.213&port=443&secret=fe1616435624d4431774386e1e680ede⚠️
Сервер: 37.1.192.213
Порт: 443
-bash: /etc/init.d/mtproxy: Permission denied
после/etc/init.d/mtproxy start
CentOS 6.xchmod +x /etc/init.d/mtproxy
должно помочьВ общем проблема этого флага в том что systemd не сможет управлять службой(запускать/останавливать), поэтому этот флаг лучше не ставить ибо процесс будет уходить в background. А так если запускаешь из командной строки просто добавь -d
Ставил официальный mtproxy, без докера на centos7. Настройки все стандартные, сам прокси работает, но статистику по ссылке: curl localhost:8888/stats не отдаёт. Ошибка: Failed connect to localhost:8888; Connection refused. Смена порта 8888 на др. не помогает. Это проблемы прокси или в системе что посмотреть можно? В сети нашёл много упоминаний про докерную версию, там что-то правят, добавляя потом http-stats. Может кто сталкивался с обычной версией, можно или нет как-то починить вывод статистики?
Как считаете — если сделать получение статистики через оф. бота, предварительно его там зарегистрировав, но ключ не указывать который даст бот — промо канал появится или нет? (не хотелось бы, т.к. это личный сервис, реклама там не нужна). Может ещё какие то костыли есть?
Не должно быть ipv6 в самых параметрах запуска mtproto прокси.
Заменил конфиг на обычный, где без fake tls — после рестарта службы — сразу взлетело. (Т.е. прежний вариант работает). Может что поменяли в командах/ключах.., искал, особо нет инфы в паблике — везде старые версии.
Секретный ключ указываем в обычном формате, без dd, не в hex и не base64 формате
я пытался размещать в конфиге, а надо было в клиенте. Сделал как нужно, сразу всё взлетело.
Единсвенный момент — пока экспериментировал, обратил внимание что домен может быть любой, даже http, без s. Работает в любом виде. Так и должно быть?
или вообще ошибка на не соответствие.
Или когда всё хорошо:
Так что лучше, когда домен соответствует стандарту TLS 1.3 (а так, да, работает в любом виде)
А как быть с режимом DD — выходит он больше «не нужен» (или придётся выбирать между ним и fake-tls)?
Если остановить wireguard и отключить локальный интерфейс wg0 и снова рестартануть mtproxy, он «выберет» нормальный адрес сервера, тот самый 185.х.х.х который «висит» на основном интерфейсе (у меня это eth0).
Почему так происходит, это нормально вообще? В любом случае всё работает — и так, и так (через wg0 и через eth). Может есть способ явно указать интерфейс или ip адрес в mtproxy который следует использовать по умолчанию.
Вопрос конечно ни о чём — просто интересно понять:)
Скрин для наглядности: ibb.co/W6jWQn3
Пытается повесить прокси на указанный в аргументах адрес
Bad binded IP address 185.x.x.x, search in ifconfig
Your proxy has been submitted in list.
پراکسی شما در لیست ثبت شد.
После этого больше ничего не происходит, в чем может быть проблема?