Вы никогда не задумывались, а куда вообще коннектится все то что у вас дома в сети ? Все эти Windows, MacOS, iOS и прочие проприетарные и умные утюги ? А это не сложно посмотреть. Сегодня в нашем кружке ‘Оч.умелые ручки’ мы будем следить за теми, кто следит за нами.
Наша цель — построить карту и графики того куда коннектится все то что сидит в сети дома. И не по трафику, понятно что какая-то там условная Амедиатека будет в топе, а именно про то, куда устанавливаются соединения. Готовить будем на Mikrotik, Grafana и Victoria Logs. В результаты мы получим что-то вроде вот этого:

Для изготовления ‘блюда’ нам понадобится всего 4 ингредиента:
-
Mikrotik
-
Linux или MacOS
-
Docker (вместе с его другом, composerом)
-
Немного умения консольных команд
1. Mikrotik это просто
Для начала зальём в mikrotik вот примерно такой конфиг, который будет следить за всеми новыми коннектами и вероломно сливать их нам по UDP syslog протоколу в victoria logs. Не забываем заменить x.x.x.x на адрес машины где будет поднята victoria logs, а y.y.y.y на внутренний адрес роутера
Скрытый текст
/system logging action set 3 remote=x.x.x.x remote-port=5514 src-address=y.y.y.y syslog-facility=local0 /system logging add action=remote prefix=:Firewall topics=firewall /ip firewall filter add action=passthrough chain=forward comment="all new connections" connection-state=new log=yes log-prefix=new-connection
2. Готовим микросервисы
Дальше все еще проще
-
Ставим на машину git, docker и docker compose если у вас Linux и git, orbstack и docker compose если у вас MacOS
-
Клонируем себе заранее приготовленную репку https://github.com/sergeygalkin/habr.git
-
Виртуозно исполняем всего пару команд
cd habr/mikrotik-victorialogs-mapip docker compose up -d
В результате которых должно:
-
Cтартануть 3 сервиса
-
Появится два docker volume (для графаны и victoria logs)
-
Собраться один имидж тупенького сервиса на питоне, который по запросу графаны лезет в victoria logs, запрашивает статистику за последний день, конвертит адреса в города, страны и координаты и отдает в виде json
-
Запустится графана с одной дашбордой IP Map и datasource настроенный на сервис из пункта 3
3. Как пользоваться этой шнягой
Если вы все настроили правильно то должно произойти следующее
1. На адресе http://127.0.0.1:9428/select/vmui у вас должен появится вот такой симпатишный UI, который можно использовать для поиска всякого по ip адресам и портам

2. Команда`curl ‘http://10.115.0.50:5555/city_data?ip=*&time=1h‘` должна отдавать что-то такоe:
Скрытый текст
[{«city»:»Moscow»,»count»:19},{«city»:»Paris»,»count»:3},{«city»:»Falkenstein»,»count»:2},{«city»:»Engel’s»,»count»:6},{«city»:»Frankfurt am Main»,»count»:32},{«city»:»Dublin»,»count»:19},{«city»:»San Jose»,»count»:1},{«city»:»Stockholm»,»count»:19},{«city»:»Victoria»,»count»:1},{«city»:»Khasavyurt»,»count»:1},{«city»:»Boardman»,»count»:3},{«city»:»Helsinki»,»count»:6},{«city»:»Amsterdam»,»count»:7},{«city»:»Los Angeles»,»count»:2},{«city»:»M\u00fcnchwilen»,»count»:1},{«city»:»San Francisco»,»count»:6},{«city»:»Marseille»,»count»:1},{«city»:»Hangzhou»,»count»:1},{«city»:»London»,»count»:2},{«city»:»Newark»,»count»:1},{«city»:»Kansas City»,»count»:7},{«city»:»Perm»,»count»:1},{«city»:»Ashburn»,»count»:32},{«city»:»Kista»,»count»:6},{«city»:»Warsaw»,»count»:7},{«city»:»Sassenburg»,»count»:1},{«city»:»Bucharest»,»count»:6},{«city»:»Mountain View»,»count»:1},{«city»:»Tokyo»,»count»:3},{«city»:»Phoenix»,»count»:1},{«city»:»D\u00fcsseldorf»,»count»:3},{«city»:»Montreal»,»count»:2},{«city»:»Edison»,»count»:1},{«city»:»Groningen»,»count»:2},{«city»:»Boydton»,»count»:5},{«city»:»Lappeenranta»,»count»:3},{«city»:»B\u00f6nen»,»count»:1},{«city»:»Chicago»,»count»:1}]
4. На урле http://127.0.0.1:3000/d/geiop/ после ввода логина и пароля admin/SuperSecret должна появится дашборда как на первом скриншоте
Особенности ‘блюда’
-
Секурность у описанного сетапа близка к нулю, пароль только на графане, http вместо https, порты торчат наружу, так что не надо это разворачивать на виртуалке в интернете, но для дома вполне сойдет.
-
Самописный сервис на питоне не зря пишет при старте `WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead` он именно такой, исключительно для домашней нагрузки
-
Надо понимать что запись в логе микротика
new-connectionговорит о том что что-то внутри пыталось установить соединение, но это не значит что это сделать удалось -
ICMP не учитывается
-
Название поля ip (в отличие от time) номинально, ничего не мешает туда вписать номер порта вместо ip
Бон аппетит.
ссылка на оригинал статьи https://habr.com/ru/articles/882770/
Добавить комментарий