Как стать автором
Обновить

Строим карту IP коннектов домашних девайсов, без регистрации и смс

Уровень сложностиСредний
Время на прочтение3 мин
Количество просмотров18K

Вы никогда не задумывались, а куда вообще коннектится все то что у вас дома в сети ? Все эти Windows, MacOS, iOS и прочие проприетарные и умные утюги ? А это не сложно посмотреть. Сегодня в нашем кружке 'Оч.умелые ручки' мы будем следить за теми, кто следит за нами.

Наша цель - построить карту и графики того куда коннектится все то что сидит в сети дома. И не по трафику, понятно что какая-то там условная Амедиатека будет в топе, а именно про то, куда устанавливаются соединения. Готовить будем на Mikrotik, Grafana и Victoria Logs. В результаты мы получим что-то вроде вот этого:

Для изготовления 'блюда' нам понадобится всего 4 ингредиента:

  1. Mikrotik

  2. Linux или MacOS

  3. Docker (вместе с его другом, composerом)

  4. Немного умения консольных команд

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. Готовим микросервисы

Дальше все еще проще

  1. Ставим на машину git, docker и docker compose если у вас Linux и git, orbstack и docker compose если у вас MacOS

  2. Клонируем себе заранее приготовленную репку https://github.com/sergeygalkin/habr.git

  3. Виртуозно исполняем всего пару команд

cd habr/mikrotik-victorialogs-mapip
docker compose up -d

В результате которых должно:

  1. Cтартануть 3 сервиса

  2. Появится два docker volume (для графаны и victoria logs)

  3. Собраться один имидж тупенького сервиса на питоне, который по запросу графаны лезет в victoria logs, запрашивает статистику за последний день, конвертит адреса в города, страны и координаты и отдает в виде json

  4. Запустится графана с одной дашбордой 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 должна появится дашборда как на первом скриншоте

Особенности 'блюда'

  1. Секурность у описанного сетапа близка к нулю, пароль только на графане, http вместо https, порты торчат наружу, так что не надо это разворачивать на виртуалке в интернете, но для дома вполне сойдет.

  2. Самописный сервис на питоне не зря пишет при старте `WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead` он именно такой, исключительно для домашней нагрузки

  3. Надо понимать что запись в логе микротика new-connection говорит о том что что-то внутри пыталось установить соединение, но это не значит что это сделать удалось

  4. ICMP не учитывается

  5. Название поля ip (в отличие от time) номинально, ничего не мешает туда вписать номер порта вместо ip

Бон аппетит.

Теги:
Хабы:
Всего голосов 16: ↑16 и ↓0+19
Комментарии19

Публикации

Работа

DevOps инженер
30 вакансий

Ближайшие события