Роскомнадзор и Телеграм боты через прокси
Лучшей рекламы для прекрасного мессенджера и придумать невозможно — “несгибаемый Дуров держит оборону и стоит за конфиденциальность своих клиентов, как за свою жизнь”. Но суть данного поста не в маркетинговой составляющей блокировки Telegram на территории России. Если ваш Telegram бот перестал работать и вам нужно эту работу срочно восстановить, добро пожаловать под кат.
Вчера вечером мы столкнулись с проблемой, с которой было ожидаемо столкновение. API сервер одного нашего клиента располагался в Heroku. Вчера недовольный клиент мне пишет (в Telegram, разумеется), что на сайте информация рандомно то появляется, то нет. Сам сайт (приложение на NodeJS) уже был заранее перенесен на Московский сервер для уменьшения пинга.
Спустя полчаса изучения проблемы был получен простой вывод: Роскомнадзор заблокировал часть адресов heroku. Ротация серверов heroku происходит на уровне DNS и DNS иногда отдавал рабочий IP, иногда — нет. К слову, выяснять причину проблемы было довольно таки непросто — когда тестировали мы с разработчиками — проблемы не было. Когда тестировал клиент — были. Уже появлялись мысли ответить клиенту великую фразу разработчика “у меня на компе все работает”.
Решение было довольно простым — мы перенесли API сервер приложения на Питерский сервер клиента и там его спокойно развернули. Все заработало отлично, кроме, конечно же, интеграции с Telegram. Поскольку отказаться от этой интеграции не является возможным, т.к. нет достойной альтернативы, мы начали искать решение данной проблемы. С родным клиентом Telegram все просто — в него уже встроено взаимодействие с proxy сервером и его настройка отнимает несколько секунд. С Bot API все немного по другому. Приложение взаимодействует с https://api.telegram.org/ для каждого действия Telegram бота, а этот адрес, разумеется, заблокирован РКН.
В качестве экспресс-решения проблемы сразу пришло в голову подключить API сервер клиента к нашей OpenVPN сети для обхода этой блокировки. Решение было сразу же отвергнуто, т.к. скорость ответа оставляла желать лучшего. Гугл и Яндекс не смогли поделиться со мной полезной информацией по решению этого вопроса.
В результате пришла в голову простая и очевидная мысль — поднять самостоятельно простейший прокси сервер для соединения в телеграм. Разумеется, сервер поднимаем за пределами РФ, чтобы прокси был рабочий
Ниже предоставлен конфиг nginx который сейчас уже отлично справляется со своей задачей
Как обойти блокировку Telegram с помощью Telegram Proxy Bot
Сегодня я уже рассказывал про то, как обойти возможную блокировку Telegram с помощью встроенной возможности подключиться через прокси-сервер. Оказывается, что можно ещё больше упросить обход блокировки, воспользовавшись ботом Telegram Proxy Bot.
Как обойти блокировку Telegram с помощью Telegram Proxy Bot
2. Нажмите Запустить.
3. Выберите язык.

4. Нажмите на ссылку, которую прислал бот.
5. Примите настройки бота.

Подробнее читайте здесь
Telegram
Последние




Рубрики

[…] ЧИТАЙТЕ ТАКЖЕ: Как обойти блокировку Telegram с помощью Telegram Proxy Bot […]

[…] 2. Как обойти блокировку Telegram с помощью Telegram Proxy Bot […]

[…] с обходом блокировки Telegram уже все разобрались (раз, два, три), но что делать с тем, что Роскомнадзор может […]

[…] блокировки Telegram не нужно никаких веб-сервисов и ботов. Просто запустите Tor и настройте в мессенджере способ […]
СЧЕТЧИКИ
РЕКЛАМА И ДОНАТЫ
Социальные сети
©2016-2022 Блог Евгения Левашова. Самое интересное и полезное из мира ИТ. Windows 10, Linux, Android и iOS. Обзоры программ и веб-сервисов. Статьи о мотивации и продуктивности.
Использование материалов разрешается с активной ссылкой на levashove.ru. alt=»Лицензия Creative Commons» width=»» />
Данный блог является личным дневником, содержащим частные мнения автора. В соответствии со статьей 29 Конституции РФ, каждый человек может иметь собственную точку зрения относительно его текстового, графического, аудио и видео наполнения, равно как и высказывать ее в любом формате. Блог не имеет лицензии Министерства культуры и массовых коммуникаций РФ и не является СМИ, а, следовательно, автор не гарантирует предоставления достоверной, не предвзятой и осмысленной информации. Сведения, содержащиеся в этом блоге не имеют никакого юридического смысла и не могут быть использованы в процессе судебного разбирательства. Автор блога не несёт ответственности за содержание комментариев к его записям.
TELEGRAM bot. ОБХОД БЛОКИРОВКИ API TELEGRAM

Всем привет, с вами Низамов Илья и сегодня мы будем обходить блокировку Telegram по IP адресу при работе через webhook. Если ваш провайдер применяет именно такую блокировку Telegram, то обойти ее поможет прокси сервер на nginx установленный на виртуальном сервере в другой стране.
Если вам нужно только отлаживать чат бот Telegram то советую не заморачиваться, а использовать сервис ngrok. Если же у вас рабочий бот и вы не можете получать входящие запросы от webhook Telegram, то посмотрев данное видео вы сможете обойти это ограничение. Главное условие, чтобы ваш http сервис 1С был опубликован на web сервере и имел белый статичный IP адрес.
Очень много информации я вынес из статьи пользователя PlugFox, советую пройти и почитать ее полностью.
Аренда VDS
Для начала я арендовал сервер VDS хостера. Сервер расположен в Цюрихе, Швейцария.
Доступ к нему мы получим по протоколу SSH с помощью утилиты Putty.
Настройка VDS
apt update && apt upgrade
apt install ufw
Ставим web сервер nginx
apt install nginx
Проверяем по адресу http://91.245.225.114 что web сервер работает
Так как Telegram работает только по https, то для нашего сервера надо генерировать самоподписанный сертификат и настроить наш web сервер для работы с ним.
Генерация сертификата SSL для Telegram bot
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt
При использовании OpenSSL нужно также создать ключи Диффи-Хеллмана, которые нужны для поддержки PFS (совершенной прямой секретности). Подробнее читаем в википедии.
openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Настройка nginx
Продолжаем настраивать web сервер. Создадим сниппет, в котором укажем расположение SSL сертификата и ключа
С помощью текстового редактора nano создадим сниппет. Со временем вы можете забыть, что указано в сниппетах, по-этому советую называть их соответственно.
в конфиге укажем директивы
ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
Выходим и сохраняем данные.
Теперь создадим отдельный сниппет с настройками SSL.
Все эти параметры влияют в основном на безопасность и выполняют оптимизацию HTTPS-сервера
Подробнее о каждом параметре вы можете почитать в русскоязычной документации по web серверу nginx в разделе Настройка HTTPS-серверов
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers «EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH»;
ssl_ecdh_curve secp384r1;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
add_header Strict-Transport-Security «max-age=63072000; includeSubdomains; preload»;
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
Выходим и сохраняем данные.
Создадим конфиг нового сайта, он должен располагаться в определенной папке, название у него будет telegram, выполним команду.
И прописываем конфиг нашего сервера
server <
listen 8443 ssl http2 default_server;
listen [::]:8443 ssl http2 default_server;
server_name 91.245.225.114;
include snippets/self-signed.conf;
include snippets/ssl-params.conf;
location / <
proxy_pass http://100.102.171.125/tl/hs/tg;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
client_max_body_size 100M;
>
>
Директива listen указывает на то какие порты мы будем прослушивать. На текущий момент отправка обновлений через вебхуки доступна только на порты: 443, 80, 88, 8443. По-этому я указываю порт 8443.
Параметр ssl указывает на то, что все соединения, принимаемые на данном порту, должны работать в режиме SSL.
Параметр http2 позволяет принимать на этом порту HTTP/2 соединения, подробнее вы можете почитать в wikipedia.
Параметр default_server указывает на то, что данный сервером будет сервером по умолчанию для указанной пары адрес:порт.
Вторая строка listen настраивает все тоже самое, только для протокола IPv6
Директива server_name – задаёт имя нашего виртуального сервера, так как мы не покупали хостинг, то здесь указываем IP адрес нашего сервера VDS.
Директива include – включает в конфигурацию другой файл с директивами. Ранее мы описали там подключение сертификатов и ключей SSL, а так же настройки протокола.
Директива location – устанавливает конфигурацию в зависимости от URI запроса. В нашем случае запросы к https://91.245.225.114:8443 будут обрабатываться по правилам в следующем блоке.
Следующий блок <> описывает перенаправление запросов на наш сервер.
Директива proxy_pass – задаёт протокол и адрес проксируемого сервера. В нашем случае это протокол http, далее IP адрес и потом адрес нашего http сервиса в 1С http://10.240.150.46/tl/hs/tg/
Директива proxy_set_header – позволяет переопределять или добавлять поля заголовка запроса, передаваемые нашему серверу.
proxy_set_header Host $http_host — передаем поле заголовка запроса
proxy_set_header X-Real-IP $remote_addr — передаем IP адрес запрашивающего в заголовке X-Real-IP (иначе в логах Apache будут адреса Nginx сервера, а не реальных клиентов)
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for — передаем IP клиента и список IP всех прокси-серверов, через которых прошёл запрос, разделённые запятыми. Подробнее читать тут.
proxy_set_header X-Forwarded-Proto $scheme – нужно для определения исходного протокола (например HTTPS или HTTP)
Директива client_max_body_size – задаёт максимально допустимый размер тела запроса клиента
Сохраняем конфиг и выходим.
Для активизации сайта надо создать символическую ссылку с помощью команды ниже.
ln -s /etc/nginx/sites-available/telegram.conf /etc/nginx/sites-enabled/telegram.conf
Проверяем настройки сервера командой.
Ругнется на настройки ssl, но это не страшно, а остальное должно быть ОК.