TELEGRAM bot. ОБХОД БЛОКИРОВКИ API TELEGRAM
- Опубликовано Илья Низамов
- Разделы Blog
- Дата 15.09.2019
- Комментарии 9 комментариев
Всем привет, с вами Низамов Илья и сегодня мы будем обходить блокировку 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
Кстати можете посмотреть видео по настройке SSL на web сервере Apache
Настройка nginx
Продолжаем настраивать web сервер. Создадим сниппет, в котором укажем расположение SSL сертификата и ключа
С помощью текстового редактора nano создадим сниппет. Со временем вы можете забыть, что указано в сниппетах, по-этому советую называть их соответственно.
nano /etc/nginx/snippets/self-signed.conf
в конфиге укажем директивы
ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
Выходим и сохраняем данные.
Теперь создадим отдельный сниппет с настройками SSL.
nano /etc/nginx/snippets/ssl-params.conf
Все эти параметры влияют в основном на безопасность и выполняют оптимизацию 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, выполним команду.
nano /etc/nginx/sites-available/telegram.conf
И прописываем конфиг нашего сервера
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
Проверяем настройки сервера командой.
nginx -t
Ругнется на настройки ssl, но это не страшно, а остальное должно быть ОК.
Перезапускаем сервер.
systemctl restart nginx
И настраиваем брандмауэр.
ufw allow 8443
ufw allow 1080
ufw allow 443
Метка:TELEGRAM
9 Комментариев
Сделал все повашему видео. Все отлично. get запрос проходит на ура.
Но вот проблема. как запихнуть сертификаты в телеграм. Точнее я смог скачать их, и даже отправил в телегам, но ему они не нравятся. Пытался через certBot, “Invalid hostname in redirect target, must end in IANA registered TLD” тоже не заходит.
Телеграм пишит:SSL error {error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed}
Скоро будет новое видео, продолжение этого.
здравствуйте Артем, смогли решить проблему?
Решение проблемы обсуждалось в чате https://t.me/forge1s
Сделал практически все по вашей инструкции все получилось, а будет ли урок как теперь обрабатывать то что нам присылает Телеграм.
Да, будет.
Добрый день, а как тоже самое сделать на апаче?
К сожалению не знаю, но там тоже можно сделать редирект.
Мы пробрасываем лиды из ФБ в телегу и гугл таблицы через Webjack. Сервис работает как часы.
Можно получить месяц халявы и бесплатную настройку по промокоду semen21, напишите его в чат техподдержки на сайте