Пишем Телеграм-бота для отслеживания попадания IP или домена в реестр РКН

Думает, что помогает
Регистрация
20 Дек 2017
Сообщения
6
#1
В свете последних событий, легко можно пропустить момент, когда Ваш IP или домен попадёт под блокировку. Если блокировку домена еще можно предположить и предотвратить (удаление материала), то блокировку IP можно легко пропустить. Сейчас блокируются целые подсети, а в случае использования CloudFlare или DDoS-Guard, то не уследить когда Ваши соседи по IP «накосячат» и попадут в блок, проще простого.

check-rkn.png

Поэтому сейчас сделаем личного бота, который будет чекать сайт(ы) и сообщать Нам «неприятные новости», хотя как «неприятные», лучше же в первые минуты всё узнать и предпринять действия для решения, чем через неделю, когда сайт придется уже «реанимировать».

Вот и весь бот (index.js):
JavaScript:
const rkn      = require('check-rkn');
const Telegraf = require('telegraf');
const bot      = new Telegraf('ВАШ_ТОКЕН');   // Получаете у @BotFather
const id       = 'ВАШ_ID';                    // Получаете у @userinfobot
const domains  = 'ВАШИ_ДОМЕНЫ,ЧЕРЕЗ_ЗАПЯТУЮ'; // google.com,linkedin.com
bot.start((ctx) => {
    bot.telegram.sendMessage(parseInt(id),'? Принял в работу: ' + domains);
    setInterval(() => {
        rkn(domains.split(','), (err, res) => {
            res.forEach(r => {
                if (r.block || !!(r.ips.filter(i => i.block)).length) {
                    bot.telegram.sendMessage(parseInt(id),
                        'Джонни, у нас проблемы❗️\n' +
                        (r.block ? '❌ ' : '?? ') + r.domain + '\n' +
                        ((r.ips.filter(i => i.block)).map(i =>
                            (i.block ? '❌ ' : '?? ') + i.ip)).join('\n')
                    )
                }
            })
        })
    }, 1000*60*60) // Проверять в реестре каждые 60 мин
});
bot.startPolling();
  1. Стучимся к @BotFather, жмакаем /newbot и получаем токен
  2. Стучимся к @userinfobot и узнаём свой ID Telegram
  3. Подключаемся по SSH и создаем папку mkdir /home/bot
  4. Заходим cd /home/bot и исполняем npm init -y
  5. Устанавливаем Telegraf и Check-RKN npm i telegraf check-rkn --save
  6. Устанавливаем PM2 npm install pm2 -g && pm2 startup
  7. Копируйте код, вводите nano index.js, вставляете Shift+Insert, сохраняете Ctrl+X, y, Enter
  8. Запускаем бота pm2 start index.js && pm2 save
  9. Находите Вашего бота по названию в поиске и жмёте START
 
Помогает думать :)
Енот
Регистрация
17 Мар 2018
Сообщения
222
#2
Вам также пригодится :)

1. https://reestr.rublacklist.net/ - ручной мониторинг по реестру РКН
2. https://antizapret.info/ - ручной и бесплатный автоматический мониторинг (раздел Кабинет) по реестру РКН
3. https://uptimerobot.com/ - бесплатный мониторинг доступности сайта с проверкой каждые 5 минут от старого доброго робота с уведомлениям в Email и Telegram

А автора предложенного решения стоит поблагодарить за хорошую работу! (y)
 
Последнее редактирование:
Новичек
Регистрация
5 Дек 2018
Сообщения
42
#5
это все еще актуально или уже можно смело использовать CloudFlare?
 
Енот
Новичек
Регистрация
26 Авг 2018
Сообщения
116
#7
бота создал, но после его запуска ничего не произошло, бот не откликнулся, не было этого сообщения от бота :(
JavaScript:
bot.start((ctx) => {
    bot.telegram.sendMessage(parseInt(id),'? Принял в работу: ' + domains);
 
Енот
Новичек
Регистрация
26 Авг 2018
Сообщения
116
#8
на 4 шаге выбрасывает
root@elsa:/home/bot# npm init -y
Wrote to /home/bot/package.json:

{
"name": "bot",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"check-rkn": "^1.0.2",
"telegraf": "^3.29.0"
},
"devDependencies": {},
"description": ""
}
 
Енот
Новичек
Регистрация
26 Авг 2018
Сообщения
116
#11
но бот то при запуске не откликается :(, почему это может быть?
 
Енот
Новичек
Регистрация
26 Авг 2018
Сообщения
116
#14
2019-04-25T13:55:52: PM2 log: App [index:2] starting in -fork mode-
2019-04-25T13:55:52: PM2 log: App [index:2] online
2019-04-25T13:55:57: PM2 log: App [index:2] exited with code [0] via signal [SIGINT]
2019-04-25T13:55:57: PM2 log: App [index:2] starting in -fork mode-
2019-04-25T13:55:57: PM2 log: App [index:2] online
2019-04-25T13:56:03: PM2 log: App [index:2] exited with code [0] via signal [SIGINT]
2019-04-25T13:56:03: PM2 log: App [index:2] starting in -fork mode-
2019-04-25T13:56:03: PM2 log: App [index:2] online
2019-04-25T13:56:08: PM2 log: App [index:2] exited with code [0] via signal [SIGINT]
2019-04-25T13:56:08: PM2 log: App [index:2] starting in -fork mode-
2019-04-25T13:56:08: PM2 log: App [index:2] online
2019-04-25T13:56:13: PM2 log: App [index:2] exited with code [0] via signal [SIGINT]
2019-04-25T13:56:13: PM2 log: App [index:2] starting in -fork mode-
2019-04-25T13:56:13: PM2 log: App [index:2] online
2019-04-25T13:56:18: PM2 log: App [index:2] exited with code [0] via signal [SIGINT]
2019-04-25T13:56:18: PM2 log: App [index:2] starting in -fork mode-
2019-04-25T13:56:18: PM2 log: App [index:2] online
2019-04-25T13:56:23: PM2 log: App [index:2] exited with code [0] via signal [SIGINT]
2019-04-25T13:56:23: PM2 log: App [index:2] starting in -fork mode-
2019-04-25T13:56:23: PM2 log: App [index:2] online
2019-04-25T13:56:28: PM2 log: App [index:2] exited with code [0] via signal [SIGINT]
2019-04-25T13:56:28: PM2 log: App [index:2] starting in -fork mode-
2019-04-25T13:56:28: PM2 log: App [index:2] online
2019-04-25T13:56:34: PM2 log: App [index:2] exited with code [0] via signal [SIGINT]
2019-04-25T13:56:34: PM2 log: App [index:2] starting in -fork mode-
2019-04-25T13:56:34: PM2 log: App [index:2] online
2019-04-25T13:56:39: PM2 log: App [index:2] exited with code [0] via signal [SIGINT]
2019-04-25T13:56:39: PM2 log: App [index:2] starting in -fork mode-
2019-04-25T13:56:39: PM2 log: App [index:2] online
2019-04-25T13:56:44: PM2 log: App [index:2] exited with code [0] via signal [SIGINT]
2019-04-25T13:56:44: PM2 log: App [index:2] starting in -fork mode-
2019-04-25T13:56:44: PM2 log: App [index:2] online
2019-04-25T13:56:49: PM2 log: App [index:2] exited with code [0] via signal [SIGINT]
2019-04-25T13:56:49: PM2 log: App [index:2] starting in -fork mode-
2019-04-25T13:56:49: PM2 log: App [index:2] online
2019-04-25T13:56:54: PM2 log: App [index:2] exited with code [0] via signal [SIGINT]
2019-04-25T13:56:54: PM2 log: App [index:2] starting in -fork mode-
2019-04-25T13:56:54: PM2 log: App [index:2] online
2019-04-25T13:57:00: PM2 log: App [index:2] exited with code [0] via signal [SIGINT]
2019-04-25T13:57:00: PM2 log: App [index:2] starting in -fork mode-
2019-04-25T13:57:00: PM2 log: App [index:2] online
2019-04-25T13:57:05: PM2 log: App [index:2] exited with code [0] via signal [SIGINT]
2019-04-25T13:57:05: PM2 log: App [index:2] starting in -fork mode-
2019-04-25T13:57:05: PM2 log: App [index:2] online
2019-04-25T13:57:10: PM2 log: App [index:2] exited with code [0] via signal [SIGINT]
2019-04-25T13:57:10: PM2 log: App [index:2] starting in -fork mode-
2019-04-25T13:57:10: PM2 log: App [index:2] online
2019-04-25T13:57:15: PM2 log: App [index:2] exited with code [0] via signal [SIGINT]
2019-04-25T13:57:15: PM2 log: App [index:2] starting in -fork mode-
2019-04-25T13:57:15: PM2 log: App [index:2] online
2019-04-25T13:57:20: PM2 log: App [index:2] exited with code [0] via signal [SIGINT]
2019-04-25T13:57:20: PM2 log: App [index:2] starting in -fork mode-
2019-04-25T13:57:20: PM2 log: App [index:2] online
2019-04-25T13:57:26: PM2 log: App [index:2] exited with code [0] via signal [SIGINT]
2019-04-25T13:57:26: PM2 log: App [index:2] starting in -fork mode-
2019-04-25T13:57:26: PM2 log: App [index:2] online
2019-04-25T13:57:31: PM2 log: App [index:2] exited with code [0] via signal [SIGINT]
2019-04-25T13:57:31: PM2 log: App [index:2] starting in -fork mode-
2019-04-25T13:57:31: PM2 log: App [index:2] online
2019-04-25T13:57:36: PM2 log: App [index:2] exited with code [0] via signal [SIGINT]
2019-04-25T13:57:36: PM2 log: App [index:2] starting in -fork mode-
2019-04-25T13:57:36: PM2 log: App [index:2] online
2019-04-25T13:57:41: PM2 log: App [index:2] exited with code [0] via signal [SIGINT]
2019-04-25T13:57:41: PM2 log: App [index:2] starting in -fork mode-
2019-04-25T13:57:41: PM2 log: App [index:2] online
2019-04-25T13:57:46: PM2 log: App [index:2] exited with code [0] via signal [SIGINT]
2019-04-25T13:57:46: PM2 log: App [index:2] starting in -fork mode-
2019-04-25T13:57:46: PM2 log: App [index:2] online
2019-04-25T13:57:52: PM2 log: App [index:2] exited with code [0] via signal [SIGINT]
2019-04-25T13:57:52: PM2 log: App [index:2] starting in -fork mode-
2019-04-25T13:57:52: PM2 log: App [index:2] online
2019-04-25T13:57:57: PM2 log: App [index:2] exited with code [0] via signal [SIGINT]
2019-04-25T13:57:57: PM2 log: App [index:2] starting in -fork mode-
2019-04-25T13:57:57: PM2 log: App [index:2] online
2019-04-25T13:58:02: PM2 log: App [index:2] exited with code [0] via signal [SIGINT]
2019-04-25T13:58:02: PM2 log: App [index:2] starting in -fork mode-
2019-04-25T13:58:02: PM2 log: App [index:2] online
2019-04-25T13:58:07: PM2 log: App [index:2] exited with code [0] via signal [SIGINT]
2019-04-25T13:58:07: PM2 log: App [index:2] starting in -fork mode-
2019-04-25T13:58:07: PM2 log: App [index:2] online
2019-04-25T13:58:12: PM2 log: App [index:2] exited with code [0] via signal [SIGINT]
2019-04-25T13:58:12: PM2 log: App [index:2] starting in -fork mode-
2019-04-25T13:58:12: PM2 log: App [index:2] online
2019-04-25T13:58:17: PM2 log: App [index:2] exited with code [0] via signal [SIGINT]
2019-04-25T13:58:17: PM2 log: App [index:2] starting in -fork mode-
2019-04-25T13:58:17: PM2 log: App [index:2] online
 
Новичек
Регистрация
29 Сен 2019
Сообщения
151
#18
Бот не откликается
PM2 | 2019-11-14T17:13:42: PM2 log: App [index:1] online

PM2 | 2019-11-14T17:13:42: PM2 log: App [index:1] exited with code [1] via signal [SIGINT]

PM2 | 2019-11-14T17:13:42: PM2 log: App [index:1] starting in -fork mode-

PM2 | 2019-11-14T17:13:42: PM2 log: App [index:1] online

PM2 | 2019-11-14T17:13:43: PM2 log: App [index:1] exited with code [1] via signal [SIGINT]

PM2 | 2019-11-14T17:13:43: PM2 log: App [index:1] starting in -fork mode-

PM2 | 2019-11-14T17:13:43: PM2 log: App [index:1] online

PM2 | 2019-11-14T17:13:44: PM2 log: App [index:1] exited with code [1] via signal [SIGINT]

PM2 | 2019-11-14T17:13:44: PM2 log: App [index:1] starting in -fork mode-

PM2 | 2019-11-14T17:13:44: PM2 log: App [index:1] online

PM2 | 2019-11-14T17:13:44: PM2 log: App [index:1] exited with code [1] via signal [SIGINT]

PM2 | 2019-11-14T17:13:44: PM2 log: App [index:1] starting in -fork mode-

PM2 | 2019-11-14T17:13:44: PM2 log: App [index:1] online

PM2 | 2019-11-14T17:13:45: PM2 log: App [index:1] exited with code [1] via signal [SIGINT]

PM2 | 2019-11-14T17:13:45: PM2 log: Script /home/bot/index.js had too many unstable restarts (16). Stopped. "errored"
 
Думает, что помогает
Регистрация
15 Дек 2017
Сообщения
2,171
#19
Так как контейнер Docker после каждого обновления удаляется, лучше чтобы бот не был в нем, а был на сервере.

Устанавливаете NodeJS на сервере.

Для Debian/Ubuntu:
curl -sL https://deb.nodesource.com/setup_12.x | bash -
apt-get install -y nodejs

Для CentOS 7:
sudo yum -y update
curl -sL https://rpm.nodesource.com/setup_12.x | sudo bash -
sudo yum clean all && sudo yum makecache fast
sudo yum install -y gcc-c++ make
sudo yum install -y nodejs

Дальше всё как в инструкции.
 
Новичек
Регистрация
29 Сен 2019
Сообщения
151
#20
Так как контейнер Docker после каждого обновления удаляется, лучше чтобы бот не был в нем, а был на сервере.

Устанавливаете NodeJS на сервере.

Для Debian/Ubuntu:
curl -sL https://deb.nodesource.com/setup_12.x | bash -
apt-get install -y nodejs

Для CentOS 7:
sudo yum -y update
curl -sL https://rpm.nodesource.com/setup_12.x | sudo bash -
sudo yum clean all && sudo yum makecache fast
sudo yum install -y gcc-c++ make
sudo yum install -y nodejs

Дальше всё как в инструкции.
Как тогда ранее установленные модули удалить?