Kaip veikia namų internetas ir domenų vardų serverio statistika?

Namų maršrutizatorius (šiuo atveju FritzBox) gali įrašyti daug: kiek kada vyksta srautas, kas kokiu greičiu prisijungęs ir t.t. Domeno vardų serveris (DNS) vietiniame tinkle padėjo man išsiaiškinti, kas slypi už nežinomų gavėjų.

Apskritai DNS turėjo teigiamą poveikį namų tinklui: padidino greitį, stabilumą ir valdomumą.

Žemiau yra diagrama, kuri iškėlė klausimų ir poreikį suprasti, kas vyksta. Rezultatai jau išfiltruoja žinomas ir veikiančias užklausas domeno vardų serveriams.

Kodėl kiekvieną dieną apklausiama 60 neaiškių domenų, kol visi dar miega?

Kasdien aktyviomis valandomis apklausiama 440 nežinomų domenų. Kas jie tokie ir ką jie veikia?

Vidutinis užklausų skaičius per dieną pagal valandą

Kaip veikia namų internetas ir domenų vardų serverio statistika?

SQL ataskaitos užklausa

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'))

Naktį belaidė prieiga išjungta ir numatomas įrenginio aktyvumas, t.y. nežinomų domenų apklausos nėra. Tai reiškia, kad didžiausią aktyvumą sulaukia įrenginiai su tokiomis operacinėmis sistemomis kaip Android, iOS ir Blackberry OS.

Išvardinkime domenus, kurie yra intensyviai apklausiami. Intensyvumą lems tokie parametrai kaip užklausų skaičius per dieną, veiklos dienų skaičius ir per paros valandas, kai jos buvo pastebėtos.

Sąraše buvo visi numatomi įtariamieji.

Intensyviai apklausiami domenai

Kaip veikia namų internetas ir domenų vardų serverio statistika?

SQL ataskaitos užklausa

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

Blokuojame isс.blackberry.com ir iceberg.blackberry.com, ką gamintojas pateisins saugumo sumetimais. Rezultatas: bandant prisijungti prie WLAN, rodomas prisijungimo puslapis ir daugiau niekur neprisijungia. Atblokuokime.

detectportal.firefox.com yra tas pats mechanizmas, tik įdiegtas Firefox naršyklėje. Jei reikia prisijungti prie WLAN tinklo, pirmiausia bus rodomas prisijungimo puslapis. Nėra visiškai aišku, kodėl taip dažnai reikia pingti adresą, tačiau mechanizmas yra aiškiai aprašytas gamintojo.

skype. Šios programos veiksmai panašūs į kirminą: ji slepiasi ir tiesiog nesileidžia užmušti užduočių juostoje, generuoja daug srauto tinkle, kas 10 minučių pinguoja 4 domenus. Atliekant vaizdo skambutį interneto ryšys nuolat nutrūksta, kai negali būti geresnis. Kol kas tai būtina, taip ir lieka.

upload.fp.measure.office.com – nurodo „Office 365“, nepavyko rasti tinkamo aprašymo.
browser.pipe.aria.microsoft.com – nepavyko rasti tinkamo aprašymo.
Užblokuojame abu.

connect.facebook.net – Facebook pokalbių programa. Lieka.

mediator.mail.ru Visų mail.ru domeno užklausų analizė parodė, kad yra daugybė reklamos išteklių ir statistikos rinkėjų, o tai sukelia nepasitikėjimą. Domenas mail.ru visiškai siunčiamas į juodąjį sąrašą.

google-analytics.com – neturi įtakos įrenginių funkcionalumui, todėl jį blokuojame.
doubleclick.net – skaičiuoja reklamos paspaudimus. Mes blokuojame.

Daugelis užklausų siunčiama į googleapis.com. Blokavimas paskatino džiaugsmingą trumpųjų žinučių išjungimą planšetiniame kompiuteryje, o tai man atrodo kvaila. Tačiau žaidimų parduotuvė nustojo veikti, todėl atblokuokime ją.

cloudflare.com – jie rašo, kad mėgsta atvirąjį kodą ir apskritai daug rašo apie save. Domeno apklausos intensyvumas nėra iki galo aiškus, kuris dažnai yra daug didesnis nei faktinis aktyvumas internete. Palikime tai kol kas.

Taigi užklausų intensyvumas dažnai yra susijęs su reikiamu įrenginių funkcionalumu. Tačiau buvo atrasti ir tie, kurie persistengė su aktyvumu.

Pats pirmasis

Įjungus belaidį internetą visi dar miega ir galima matyti, kurios užklausos į tinklą siunčiamos pirmiausia. Taigi 6:50 įsijungia internetas ir per pirmąsias dešimt minučių kasdien apklausiama 60 domenų:

Kaip veikia namų internetas ir domenų vardų serverio statistika?

SQL ataskaitos užklausa

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“ tikrina WLAN ryšį, ar nėra prisijungimo puslapio.
„Citrix“ pinguoja savo serverį, nors programa neveikia.
„Symantec“ tikrina sertifikatus.
„Mozilla“ tikrina, ar nėra naujinimų, nors nustatymuose paprašiau to nedaryti.

mmo.de yra žaidimų paslauga. Greičiausiai prašymą inicijuoja „Facebook“ pokalbis. Mes blokuojame.

„Apple“ suaktyvins visas savo paslaugas. api-glb-fra.smoot.apple.com – sprendžiant iš aprašymo, kiekvienas mygtuko paspaudimas čia siunčiamas optimizavimo paieškos sistemoms tikslais. Labai įtartinas, bet susijęs su funkcionalumu. Paliekame.

Toliau pateikiamas ilgas užklausų microsoft.com sąrašas. Blokuojame visus domenus nuo trečio lygio.

Pirmųjų padomenių skaičius
Kaip veikia namų internetas ir domenų vardų serverio statistika?

Taigi, pirmos 10 minučių įjungus belaidį internetą.
iOS apklausia daugiausiai subdomenų – 32. Po to seka Android – 24, vėliau – Windows – 15 ir galiausiai Blackberry – 9.
Vien facebook aplikacija apklausia 10 domenų, skype – 9 domenus.

Informacijos šaltinis

Analizės šaltinis buvo bind9 vietinio serverio žurnalo failas, kurio formatas yra toks:

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)

Failas buvo importuotas į sqlite duomenų bazę ir analizuojamas naudojant SQL užklausas.
Serveris veikia kaip talpykla; užklausos gaunamos iš maršrutizatoriaus, todėl visada yra vienas užklausų klientas. Pakanka supaprastintos lentelės struktūros, t.y. Ataskaitoje reikalingas užklausos laikas, pati užklausa ir antrojo lygio domenas grupavimui.

DDL lentelės

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)
);

Produkcija

Taigi, atlikus domeno vardų serverio žurnalo analizę, daugiau nei 50 įrašų buvo cenzūruoti ir įtraukti į blokavimo sąrašą.

Kai kurių užklausų būtinybę gerai apibūdina programinės įrangos gamintojai ir tai kelia pasitikėjimą. Tačiau didelė dalis veiklos yra nepagrįsta ir abejotina.

Šaltinis: www.habr.com

Добавить комментарий