Вы никогда не задумывались, а куда вообще коннектится все то что у вас дома в сети ? Все эти 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. Как пользоваться этой шнягой
Если вы все настроили правильно то должно произойти следующее
На адресе http://127.0.0.1:9428/select/vmui у вас должен появится вот такой симпатишный UI, который можно использовать для поиска всякого по ip адресам и портам

Команда`curl http://127.0.0.1:5555/city_data` должна отдавать что-то тако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}]
На урле 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` он именно такой, исключительно для домашней нагрузки
Если вы заметили на дашборде графны нельзя выбрать интервал времени как обычно, интервал в 1 день захардокожен в строке " _time:1d"
Надо понимать что запись в логе микротика
new-connection
говорит о том что что-то внутри пыталось установить соединение, но это не значит что это сделать удалось
Бон аппетит.