Категория > Новости > Господин Микротиков. Автоматизируем сбор и обработку данных с оборудования MikroTik - «Новости»

Господин Микротиков. Автоматизируем сбор и обработку данных с оборудования MikroTik - «Новости»


12-09-2021, 00:00. Автор: Elmers
ци­таты с «Баша» о прог­раммис­те, который авто­мати­зиро­вал все, что занима­ло у него боль­ше 90 секунд, напишем скрипт, что­бы он выпол­нял всю эту работу. По дороге поуп­ражня­емся в адми­нис­три­рова­нии сетей на осно­ве MikroTik.

Как ты пом­нишь, пер­вый этап любой кибера­таки — это раз­ведка. От нее‑то мы и будем защищать­ся. На неко­ем гра­нич­ном мар­шру­тиза­торе MikroTik у нас нас­тро­ены пра­вила Firewall про­тив стан­дар­тно­го ска­на пор­тов (нап­ример, все­ми ува­жаемым ска­нером Nmap).


Пра­вила Firewall про­тив ска­на пор­тов

Все пра­вила нас­тро­ены в таб­лице Raw для обра­бот­ки тра­фика до попада­ния в Connection Tracking и мень­шей наг­рузки на про­цес­сор. В пра­вилах задей­ство­вана цепоч­ка Prerouting, логика работы пра­вил осно­вана на фла­гах TCP (tcp-flags). Если нам с одно­го IP-адре­са пооче­ред­но на раз­ные пор­ты мар­шру­тиза­тора при­лета­ет нес­коль­ко пакетов TCP с фла­гами SYN (полу­откры­тые соеди­нения), то мож­но сде­лать вывод, что работа­ет ска­нер пор­тов. Добав­ляем IP-адрес в Address List и в кон­це дела­ем drop все­го лис­та. Эти сиг­натуры не пре­тен­дуют на уни­каль­ность. Так что, как говорит мой началь­ник, «совер­шенс­твуй и улуч­шай».


Эк­спорт пра­вил Firewall про­тив ска­на пор­тов

info


Де­таль­ный раз­бор этих пра­вил выходит за рам­ки статьи. Что­бы вник­нуть под­робнее, читай цикл ста­тей «Сте­на огня» и изу­чай, как работа­ют ска­неры пор­тов.



Господин Микротиков. Автоматизируем сбор и обработку данных с оборудования MikroTik - «Новости»
Спи­сок адре­сов с наз­вани­ем port scanners 

Первый этап оптимизации жизнедеятельности сисадмина


Итак, нам нуж­но вес­ти учет количес­тва IP-адре­сов, которые ска­ниру­ют сеть, и ежед­невно отправ­лять Address List в отдел безопас­ности пред­при­ятия для даль­нейше­го ана­лиза и пре­дот­вра­щения атак. Как извес­тно, сис­темный адми­нис­тра­тор сущес­тво ле­нивое занятое, и каж­дый день заходить на мар­шру­тиза­тор и ски­дывать файл с адре­сами для него нерен­табель­но. Начал я с того, что написал скрипт для RouterOS, который ежед­невно сох­ранял Address List в файл и отправ­лял пись­мо на элек­трон­ную поч­ту.


При­мер локаль­ного скрип­та на мар­шру­тиза­торе MikroTik RouterOS
:local sysdate [/system clock get date];:local d [:pick $sysdate begin=4 end=6];:local m [:pick $sysdate begin=0 end=3];:local y [:pick $sysdate begin=7 end=11];########SAVE_ADDRESS_LIST_TO_FILE#############/ip firewall address-list print from=[find where list=port_scanners]file="$sysname_$d$m$y_port_scanners_list.txt";:delay 3s;########SEND_ADDRESS_LIST_TO_MAIL############/tool e-mail send to=tester025@protonmail.com from=tester075@protonmail.com subject=([/system identity get name]. " Port_scanners_address_list " . [/system clock get date]) body=("Port scanners address-list of $sysnamenTime and Date stamp: " . [/system clock get time] . " " . [/system clock get date] . "n") file="$sysname_$d$m$y_port_scanners_list.txt";

Скрипт брал основную информа­цию по обо­рудо­ванию, имя устрой­ства, дату, месяц и год, искал соот­ветс­тву­ющий Address List и сох­ранял файл.


Сох­ранен­ный файл

А затем отправ­лял сооб­щение с вло­жен­ным фай­лом на поч­ту.


При­мер получен­ного пись­ма

До­бав­ление это­го скрип­та в Scheduler нем­ного облегчи­ло жизнь, но нуж­но было заходить на поч­ту сох­ранять логи и еже­недель­но под­счи­тывать IP-адре­са.


Пла­ниров­щик и наш скрипт 

Второй этап оптимизации. Учим сервер делать работу за нас


План дей­ствий будет сле­дующий.



  1. Мы напишем на Bash скрипт, который будет заходить на мар­шру­тиза­тор по SSH, сох­ранять файл из Address List и по SCP забирать файл себе.

  2. На­пишем еще один Bash-скрипт, который будет вес­ти еже­недель­ный под­счет IP-адре­сов и отправ­лять безопас­никам эту информа­цию по поч­те, прик­ладывая сам спи­сок.

  3. Вы­пол­ним вся­кие вспо­мога­тель­ные задачи: нас­трой­ку cron и поч­тового кли­ента на сер­вере, генера­цию клю­чей SSH и, конеч­но, нас­трой­ку телег­рам‑бота для получе­ния слу­жеб­ных сооб­щений и (при некото­рой доработ­ке) управле­ния работой скрип­та.


Из инс­тру­мен­тов нам понадо­бит­ся Unix-образная сис­тема (я тес­тировал на Ubuntu, Armbian и Manjaro), пря­мые руки и баноч­ка пива (опци­ональ­но). Прис­тупа­ем к работе!


Сна­чала соз­даем дирек­торию для хра­нения наших скрип­тов и слу­жеб­ных фай­лов:


mkdir/home/user/.scripts/cyber

И еще одну — для хра­нения спис­ка адре­сов, с которых про­исхо­дило ска­ниро­вание:


mkdir/home/user/.scripts/cyber/port_scanners

Так­же нуж­но на сер­вере сге­нери­ровать клю­чи SSH:


ssh-keygen

И вруч­ную най­ти пуб­личный ключ (id_rsa.pub) в катало­ге ~/.ssh. На мар­шру­тиза­торе соз­даем поль­зовате­ля (нап­ример, uServer) и кла­дем пуб­личный ключ SSH (id_rsa.pub) в дирек­торию Files. Далее откры­ваем вклад­ку System → Users → SSH Keys и выбира­ем пуб­личный ключ SSH (id_rsa.pub) для соз­данно­го поль­зовате­ля.


Соз­дание нового поль­зовате­ля

info


Не забывай, что пос­ле того, как мы положи­ли ключ для поль­зовате­ля, нуж­но пер­вый раз зай­ти на мар­шру­тиза­тор под этим поль­зовате­лем по про­токо­лу SSH.



Для монито­рин­га работы скрип­тов мы будем исполь­зовать телег­рам‑бота. Его код я здесь при­водить не буду, но смас­терить его нес­ложно — ищи бота BotFather и дер­зай.



info


Под­робнее о том, как писать ботов для Telegram, читай в статье «Те­лег­рафиру­ет робот. Пишем бота для Telegram на Python».



Даль­ше соз­даем груп­пу или канал, даем ей соот­ветс­тву­ющее наз­вание (нап­ример, MikrotControl). Добав­ляем бота в груп­пу и даем ему пра­ва для пуб­ликации сооб­щений.


Даль­ше узна­ем chat id нашей груп­пы. Для это­го откры­ваем спе­циаль­ный URL:


https://api.telegram.org/bot<ваш_токен_телеграм_бота>/getUpdates

В отве­те нас инте­ресу­ет параметр messagechatid, в нем хра­нит­ся уни­каль­ный иден­тифика­тор чата груп­пы с нашим ботом.


Вы­вод в фор­мате JSON:


"chat":{
"id":-1524684857943,
"title":"MikrotControl",
"type":"supergroup"
},

Те­перь отпра­вим тес­товое сооб­щение от бота в груп­пу или канал. Для это­го есть спе­циаль­ный URL:


https://api.telegram.org/bot<ваш_токен_телеграм_бота>/sendMessage?chat_id=<ідентифікатор_групи>&text=test123

В нашем слу­чае chat ID -1524684857943. Имен­но так, со зна­ком минус.


В груп­пе мы дол­жны получить сооб­щение от бота с тек­стом test123. Даль­ше нуж­но нас­тро­ить бота на сер­вере. Я возь­му за осно­ву готовый скрипт monit2telegram.


Ус­танав­лива­ем кли­ент Git:


sudo pacman -S git

Пе­рехо­дим в дирек­торию /usr/src:


cd/usr/src

Заг­ружа­ем необ­ходимые ресур­сы с GitHub и перехо­дим в заг­ружен­ную дирек­торию:


sudo git clone https://github.com/matriphe/monit2telegram.git
cd monit2telegram

За­тем необ­ходимо ско­пиро­вать файл кон­фигура­ции и скрип­ты в соот­ветс­тву­ющие дирек­тории фай­ловой сис­темы и дать скрип­там пра­ва на исполне­ние:


sudo cp telegramrc /etc/telegramrc
sudo cp sendtelegram.sh /usr/local/bin/sendtelegram
sudo chmod+x /usr/local/bin/sendtelegram
sudo cp monit2telegram.sh /usr/local/bin/monit2telegram
sudo chmod+x /usr/local/bin/monit2telegram

Ус­тановить необ­ходимые зависи­мос­ти (jq):


cd/usr/src
sudo wget https://github.com/stedolan/jq/releases/download/jq-1.6/jq-linux64
sudo ln -s/usr/src/jq-linux64 /usr/bin/jq

В пер­воначаль­ном кон­фиге /etc/telegramrc нуж­но ука­зать уни­каль­ный TOKEN бота и CHATID нашей груп­пы:


TOKEN='...'
CHATID='...'

Про­верить, при­ходят ли сооб­щения, мож­но так:


sendtelegram -m "test message from server"

В нашей груп­пе мы дол­жны получить сооб­щение от бота с ука­зан­ным тек­стом.


Ну и наконец, пишем наш скрипт.



Перейти обратно к новости