В целом, DNS оказал положительное влияние на домашнюю сеть: добавил скорость, устойчивость и управляемость.
Ниже приведена диаграмма, которая вызвала вопросы и необходимость разбираться в происходящем. В результатах уже отфильтрованы известные и рабочие запросы к серверам доменных имён.
По какой причине каждый день опрашиваются 60 непонятных доменов во время, когда все ещё спят?
Каждый день опрашиваются 440 неизвестных доменов в активное время. Кто это такие и что они делают?
Среднее количество запросов в день по часам
WITH CLS AS ( /* prepare unique requests */
SELECT
DISTINCT DATE_NK,
STRFTIME( '%s', SUBSTR(DATE_NK,8,4) || '-' ||
CASE SUBSTR(DATE_NK,4,3)
WHEN 'Jan' THEN '01' WHEN 'Feb' THEN '02' WHEN 'Mar' THEN '03' WHEN 'Apr' THEN '04' WHEN 'May' THEN '05' WHEN 'Jun' THEN '06'
WHEN 'Jul' THEN '07' WHEN 'Aug' THEN '08' WHEN 'Sep' THEN '09' WHEN 'Oct' THEN '10' WHEN 'Nov' THEN '11'
ELSE '12' END || '-' || SUBSTR(DATE_NK,1,2) || ' ' || SUBSTR(TIME_NK,1,8) ) AS EVENT_DT,
REQUEST_NK, DOMAIN
FROM STG_BIND9_LOG )
SELECT
1 as 'Line: DNS Requests per Day for Hours',
strftime('%H:00', datetime(EVENT_DT, 'unixepoch')) AS 'Day',
ROUND(1.0*SUM(1)/COUNT(DISTINCT strftime('%d.%m', datetime(EVENT_DT, 'unixepoch'))), 1) AS 'Requests per Day'
FROM CLS
WHERE DOMAIN NOT IN ('in-addr.arpa', 'IN-ADDR.ARPA', 'local', 'dyndns', 'nas', 'ntp.org')
AND datetime(EVENT_DT, 'unixepoch') > date('now', '-20 days')
GROUP BY /* hour aggregate */
strftime('%H:00', datetime(EVENT_DT, 'unixepoch'))
ORDER BY strftime('%H:00', datetime(EVENT_DT, 'unixepoch'))
В ночное время беспроводный доступ отключается и активность устройст ожидаема, т.е. нет опроса непонятных доменов. Значит, наибольшая активность исходит от устройств с такими операционными системами, как Android, iOS и Blackberry OS.
Выведем домены, которые интенсивно опрашиваются. Интенсивность будут определять такие параметры, как количество запросов в день, количество дней активности и в скольких часах дня были замечены.
В списке оказались все ожидаемые подозреваемые.
Интенсивно опрашиваемые домены
WITH CLS AS ( /* prepare unique requests */
SELECT
DISTINCT DATE_NK,
STRFTIME( '%s', SUBSTR(DATE_NK,8,4) || '-' ||
CASE SUBSTR(DATE_NK,4,3)
WHEN 'Jan' THEN '01' WHEN 'Feb' THEN '02' WHEN 'Mar' THEN '03' WHEN 'Apr' THEN '04' WHEN 'May' THEN '05' WHEN 'Jun' THEN '06'
WHEN 'Jul' THEN '07' WHEN 'Aug' THEN '08' WHEN 'Sep' THEN '09' WHEN 'Oct' THEN '10' WHEN 'Nov' THEN '11'
ELSE '12' END || '-' || SUBSTR(DATE_NK,1,2) || ' ' || SUBSTR(TIME_NK,1,8) ) AS EVENT_DT,
REQUEST_NK, DOMAIN
FROM STG_BIND9_LOG )
SELECT
1 as 'Table: Havy DNS Requests',
REQUEST_NK AS 'Request',
DOMAIN AS 'Domain',
REQ AS 'Requests per Day',
DH AS 'Hours per Day',
DAYS AS 'Active Days'
FROM (
SELECT
REQUEST_NK, MAX(DOMAIN) AS DOMAIN,
COUNT(DISTINCT REQUEST_NK) AS SUBD,
COUNT(DISTINCT strftime('%d.%m', datetime(EVENT_DT, 'unixepoch'))) AS DAYS,
ROUND(1.0*SUM(1)/COUNT(DISTINCT strftime('%d.%m', datetime(EVENT_DT, 'unixepoch'))), 1) AS REQ,
ROUND(1.0*COUNT(DISTINCT strftime('%d.%m %H', datetime(EVENT_DT, 'unixepoch')))/COUNT(DISTINCT strftime('%d.%m', datetime(EVENT_DT, 'unixepoch'))), 1) AS DH
FROM CLS
WHERE DOMAIN NOT IN ('in-addr.arpa', 'IN-ADDR.ARPA', 'local', 'dyndns', 'nas', 'ntp.org')
AND datetime(EVENT_DT, 'unixepoch') > date('now', '-20 days')
GROUP BY REQUEST_NK )
WHERE DAYS > 9 -- long period
ORDER BY 4 DESC, 5 DESC
LIMIT 20
Блокируем iсс.blackberry.com и iceberg.blackberry.com, которые производитель обоснует соображениями безопасности. Результат: при попытке подключения к WLAN, показывает страницу логина и больше никогда никуда не подключается. Разблокируем.
detectportal.firefox.com — это такой же механизм, только реализован в браузере Firefox. В случае необходимости логиниться в сеть WLAN, покажет сначала страницу логина. Не совсем понятно, зачем так часто пинговать адрес, но механизм доступно описан у производителя.
skype. Действия этой программы похожи на червя: скрывается и не даёт просто себя убить в панеле задач, в сети генерирует много трафика, каждые 10 минут пингует 4 домена. При видео-звонке постоянно мобит интернет-соединение, когда оно уже лучше не может быть. Пока является необходимым, поэтому остаётся.
upload.fp.measure.office.com — относится к Office 365, приличного описания не нашёл.
browser.pipe.aria.microsoft.com — приличного описания не нашёл.
Оба блокируем.
connect.facebook.net — чат-приложение facebook. Остаётся.
mediator.mail.ru Анализ всех запросов домена mail.ru показал наличие огромного количества рекламных ресурсов и сборщиков статистики, что вызывает недоверие. Домен mail.ru отправляется целиком в чёрный список.
google-analytics.com — на функциональность устройств не влияет, поэтому блокируем.
doubleclick.net — считает рекламные нажатия. Блокируем.
Много запросов идёт к googleapis.com. Блокирование привело к радостному отключению коротких сообщений в планшете, которые мне кажутся дурацкими. Но перестал работать playstore, поэтому разблокируем.
cloudflare.com — пишут, что любят открытый код и, вообще, много о себе пишут. Не совсем понятна интенсивность опроса домена, которая часто сильно выше самой активности в интернете. Пока оставим.
Таким образом, интенсивность запросов часто связана с необходимой функциональностью устройств. Но были обнаружены и те, кто перестарался с активностью.
Самые первые
В момент включения беспроводного интернета все ещё спят и есть возможность увидеть, какие запросы первыми отправляются в сеть. Итак, в 6:50 включается интернет и в первый десятиминутный промежуток времени ежедневно опрашиваются 60 доменов:
WITH CLS AS ( /* prepare unique requests */
SELECT
DISTINCT DATE_NK,
STRFTIME( '%s', SUBSTR(DATE_NK,8,4) || '-' ||
CASE SUBSTR(DATE_NK,4,3)
WHEN 'Jan' THEN '01' WHEN 'Feb' THEN '02' WHEN 'Mar' THEN '03' WHEN 'Apr' THEN '04' WHEN 'May' THEN '05' WHEN 'Jun' THEN '06'
WHEN 'Jul' THEN '07' WHEN 'Aug' THEN '08' WHEN 'Sep' THEN '09' WHEN 'Oct' THEN '10' WHEN 'Nov' THEN '11'
ELSE '12' END || '-' || SUBSTR(DATE_NK,1,2) || ' ' || SUBSTR(TIME_NK,1,8) ) AS EVENT_DT,
REQUEST_NK, DOMAIN
FROM STG_BIND9_LOG )
SELECT
1 as 'Table: First DNS Requests at 06:00',
REQUEST_NK AS 'Request',
DOMAIN AS 'Domain',
REQ AS 'Requests',
DAYS AS 'Active Days',
strftime('%H:%M', datetime(MIN_DT, 'unixepoch')) AS 'First Ping',
strftime('%H:%M', datetime(MAX_DT, 'unixepoch')) AS 'Last Ping'
FROM (
SELECT
REQUEST_NK, MAX(DOMAIN) AS DOMAIN,
MIN(EVENT_DT) AS MIN_DT,
MAX(EVENT_DT) AS MAX_DT,
COUNT(DISTINCT strftime('%d.%m', datetime(EVENT_DT, 'unixepoch'))) AS DAYS,
ROUND(1.0*SUM(1)/COUNT(DISTINCT strftime('%d.%m', datetime(EVENT_DT, 'unixepoch'))), 1) AS REQ
FROM CLS
WHERE DOMAIN NOT IN ('in-addr.arpa', 'IN-ADDR.ARPA', 'local', 'dyndns', 'nas', 'ntp.org')
AND datetime(EVENT_DT, 'unixepoch') > date('now', '-20 days')
AND strftime('%H', datetime(EVENT_DT, 'unixepoch')) = strftime('%H', '2019-08-01 06:50:00')
GROUP BY REQUEST_NK
)
WHERE DAYS > 3 -- at least 4 days activity
ORDER BY 5 DESC, 4 DESC
Firefox проверяет WLAN соединение на наличие страницы с логином.
Citrix пингует свой сервер, хотя приложение активно не запущено.
Symantec проверяет сертификаты.
Mozilla проверяет обновления, хотя в настройках просил не делать этого.
mmo.de — игровой сервис. Скорее всего запрос инициирует чат facebook. Блокируем.
Apple активирует все свои сервисы. api-glb-fra.smoot.apple.com — судя по описанию, сюда отправляется каждое нажатие кнопки в целях поисковой оптимизации. Сильно подозрительно, но связано с функциональностью. Оставляем.
Далее идёт длинный список обращений к microsoft.com. Все домены, начиная с третьего уровня, блокируем.
Количество поддоменов самых первых
Итак, первые 10 минут включения беспроводного интернета.
Больше всего поддоменов опрашивает iOS — 32. За ним следует Android — 24, далее Windows — 15 и последний Blackberry — 9.
Одно только приложение facebook опрашивает 10 доменов, skype опрашивает 9 доменов.
Источник информации
Источником для анализа послужил лог файл локального сервера bind9, который содержит следующий формат:
01-Aug-2019 20:03:30.996 client 192.168.0.2#40693 (api.aps.skype.com): query: api.aps.skype.com IN A + (192.168.0.102)
Файл был импортирован в базу данных sqlite и проанализирован с помощью SQL запросов.
Сервер выполняет функцию кэша, запросы приходят с роутера, поэтому клиент запроса всегда один. Достаточно упрощённой структуры таблицы, т.е. для отчёта необходимо время запроса, сам запрос и домен второго уровня для группировки.
CREATE TABLE STG_BIND9_LOG (
LINE_NK INTEGER NOT NULL DEFAULT 1,
DATE_NK TEXT NOT NULL DEFAULT 'n.a.',
TIME_NK TEXT NOT NULL DEFAULT 'n.a.',
CLI TEXT, -- client
IP TEXT,
REQUEST_NK TEXT NOT NULL DEFAULT 'n.a.', -- requested domain
DOMAIN TEXT NOT NULL DEFAULT 'n.a.', -- domain second level
QUERY TEXT,
UNIQUE (LINE_NK, DATE_NK, TIME_NK, REQUEST_NK)
);
Вывод
Таким образом, в результате анализа лога сервера доменных имён более 50 записей были подвергнуты цензуре и помещены в список для блокировки.
Необходимость некоторых запросов хорошо описана производителями программного обеспечения и внушает доверие. Однако, большая часть активности необоснована и вызывает сомнение.
Комментарии (16)
slavius
16.08.2019 15:22+2Через cloudflare.com работает защита от DDoS у многих сайтов, и CDN у них…
office.com — а не подписка-ли это на Office365?;) А то при такой блокировке он поработает месяц, а потом не будете знать, почему он просит активацию и не может активироваться.
А рекламные… Ublock нужен, но в браузеры телевизора его не поставить :(
Так и кто стучится в и-нет ночью — выяснили?am-habr Автор
16.08.2019 15:56С Office365 Вы правы. Будет включён снова.
Ночью по LAN ходят стандартные: ntp, local, nas, dyndns и т.п. В 6:50 утра весь народ в доме спит, включается WLAN. В первый 10ти минутный период опрашиваются около 60 доменов из списка «Самые первые».
Часть их составляют ...data.microsoft.com, windowsupdate.microsoft.com, googleapis, accounts.google и т.п.
Но большая часть самых первых является функциональной.
Tangeman
16.08.2019 16:23+1Вы же, я думаю, догадываетесь, что если если (к примеру) Microsoft потребуется реально украсть у вас данные — то они просто используют любой из незаблоченных доменов/адресов?
А так… да, рекламку и надоедливости прибить помогает, но не более того.
mikes
16.08.2019 17:08видимо много дюже свободного времени у вас, разбирать каждый запрос dns.
почему бы не использовать adguard dns в качестве апстрима.am-habr Автор
16.08.2019 17:34Готовых решений DNS много, pihole подошёл бы тоже. Целью было получение опыта работы с сервером и его логом, результат был бонусом. Исследование запросов дало информацию о тенденциях в интернете, в полном объёме разбор повторять не буду.
ABATAPA
16.08.2019 17:46+1Отключите в Android автозапуск и запуск при смене сети для приложений, которым это не нужно — и число запросов несколько уменьшится.
nekt
16.08.2019 23:24+1Если бы я хотел красть данные, я бы старался обходиться без днс — слишком очевидное взаиодействие.
UksusoFF
17.08.2019 09:47+1Тоже был удивлен что ночью телевизор Samsung включается без включения экрана и прется проверять обновления. И как это выключить не понятно (просто потому что кроме бесполезных приложений на главном экране Smart Hub ничего не обновляется).
HardWrMan
18.08.2019 10:02+2Статья реальная. Тоже имею свой домашний FreeBSD сервер. Поставил его когда появился лимитированный ADSL интернет для контроля расхода и дополнительных сервисов. Начинал с FreeBSD5.х. Сейчас у меня безлимитный GPON, но сервер остался, просто некоторые сервисы я убрал за ненадобностью, а некоторые наоборот добавились. Это предыстория.
Итак, когда я решил поставить себе шлюз для контроля расхода, я пасся на разных сайтах, в частности LOR и у Лисяры. Через trafd я каптурил проходящий траффик и сохранял в мускула. А потом был просмотрщик данных, который показывал в разных разрезах куда уходил интернет. Было очень занятно изучать эту информацию.
Это было время ADSL и даже позже, когда отменили лимиты, я оставлял сей сервис вплоть до последнего, когда скорость была уже 8Мбит. База набивалась быстрее, приходилось её чистить. А сейчас весь инструмент остался, я просто не включаю его, т.к. на 500Мбитах я столько нагенерирую данных, что всё упадёт. Шлюз то на атоме у меня, ради энергосбережения.
С чего начинал
am-habr Автор
18.08.2019 12:12Спасибо за ссылку на trafd. Железяка для контроля используется немного меньшей производительности из-за меньших масштабов сети — raspberry pi. И тоже из соображений энергопотребления.
железякаHardWrMan
18.08.2019 12:54+1Вот кстати да, для небольших скоростей при использовании в качестве шлюза или для домашнего сервера в принципе (особенно для тех, кто программирует и/или верстает странички) хватает именно Pi. Ну или подобные одноплатники, вроде банана или FriendlyARM. Но вот в моём случае может помочь только x86/x64. Более того, мне в прошлом году пришлось отказаться от natd и перейти на ядерный NAT что в IPFW именно из-за того, что производительность сети упиралась в производительность процессора, где natd крутился на одном только ядре и в общем интернет был около 120Мбит/с. Сейчас же мои 500Мбит выжимаются примерно с 70% нагрузкой на процессор всеми 4мя ядрами и при этом количество соединений хватает на всех клиентов локальной сети без заметной потери производительности. Даже при использовании торентов на одном из клиентов.
Кстати, раньше rtorrent жил у меня на сервере, т.к. скорость была малая а рабочий мощный комп гонять не хотелось + несимметричность ADSL требовала раздавать дольше, чем скачивалось (а я всегда стараюсь на каждый скаченный торент выдать рейтинг более 1). Сейчас я его тоже отключил, т.к. скорость позволяет всё это делать за разумное время.
KorP
вашему внутреннему параноику стало спаться лучше?
am-habr Автор
Да, полегчало и даже дало ожидаемые результаты.
Теперь, при желании послушать музыку в youtube, выдаёт не «жили у бабуси два весёлых гуся», а более нейтральный список.
И рекламы стало сильно поменьше. Больше не показывают мне диван, который я уже купил.
KorP
А я верно понимаю, что вы из дома не выходите вообще?
am-habr Автор
Полагаю, Вы намекаете на то, что вне дома всё равно всё трекается и блокировки операторов активны, реклама доставляется в полном объёме и не стоит, вообще, париться. И Вы правы и я не парился.
Вытекающих причин для паранои много, но основная причина, всё-таки, реклама, она просто надоедает и раздражает. Нахождение дома можно ведь сделать комфортнее.