Proč se výsledky skenování portů mění za výstupem VPN?
Změňte výstup a port může odpovědět jinak, aniž by se služba pohnula. Oddělte pozorování cesty od inventáře, který skutečně potřebujete.
Spusťte stejnou kontrolu portu z kancelářské linky a z výstupu VPN a obě odpovědi se mohou rozejít ohledně adresy, kterou nikdo nezměnil. Ta mezera pochází z trasy a z toho, který hostitel odpověděl, ne z toho, zda služba běží. Tři otázky tyto výklady oddělují: na co se sonda vlastně ptala, který hostitel odpověděl a co zaznamenal váš vlastní server. Projděte je v tomto pořadí a každou odpověď zapište, než přejdete k další.
Opravte sondu, než porovnáte dva běhy
Slovo stavu lze srovnávat s jiným slovem stavu jen tehdy, když obě vzešla ze stejného experimentu. Pět polí to fixuje: zdrojová adresa, kterou vzdálená strana viděla, přeložený cíl, port, typ skenování a čas. Změňte kterékoli z nich a provedli jste druhý experiment, místo abyste první měřili dvakrát.
Zkontrolujte zdroj dřív než cokoli jiného, protože klient VPN může běžet, zatímco provoz stále odchází přes fyzické rozhraní. Zeptejte se vzdálené strany, co vidí, a potom se zeptejte jádra, které rozhraní zvolilo:
curl -s https://ifconfig.me
ip route get 203.0.113.20Dvě adresy v různých sítích znamenají, že vysvětlení už máte v ruce, a zbytek těchto kontrol ho jen potvrdí. Když se shodují, zachyťte sondu se zapnutým příznakem důvodu, aby se stav vrátil připojený k vysvětlení, místo aby stál sám jako holé slovo. Typ skenování patří do toho záznamu také, protože popisuje, na co se ptalo, ne co se vrátilo. Stav bez zdroje, bez metody a bez časového razítka nelze s ničím srovnat:
nmap -sT -p 443,8443 --reason 203.0.113.20Uchovejte tento výstup vedle záznamu, ne v bufferu posouvání, který další člověk neuvidí. Dvě poctivá skenování, která se rozcházejí, jsou sporem jen tehdy, když nikdo nezapsal podmínky. Když jsou podmínky pevné, buď se výsledky shodují a otázka je uzavřená, nebo se liší a rozdíl je faktem o cestě.
Zjistěte, který hostitel dokončil navázání spojení
Dokončené navázání spojení dokazuje, že je dokončil nějaký hostitel, a tím hostitelem nemusí být proces, který máte na mysli. Nástroj pro vyvažování zátěže, reverzní proxy nebo SYN proxy mohou odpovědět dřív, než se skutečný server vůbec zapojí, což je běžný design, ne symptom. Platný certifikát pro očekávané jméno to také nezužuje, protože certifikát popisuje vztah služby a nic neříká o tom, který stroj spojení ukončil.
Referenční příručka Nmap ke stavům portů to považuje za základní: stav zaznamenává, co sonda mohla pozorovat z místa, odkud byla odeslána, ne vlastnost portu. Čtěte slovo stavu takto a dva běhy, které se rozcházely, začnou vypadat shodně, ne protikladně, zatímco otázka se posouvá od toho, zda je port otevřený, k tomu, kdo před ním stál.
Odpovězte na druhou otázku na backendu, ne zvenčí. Frontend, který přijímá spojení a potom nedosáhne svého upstreamu, vytváří přesně vnější obraz zdravé služby s pomalou aplikací. Jen vlastní záznam upstreamu odděluje oba případy:
tail -n 5 /var/log/nginx/access.log
ss -ltnp 'sport = :443'Řádek v logu ukazuje adresu klienta, kterou aplikace skutečně viděla, a druhý příkaz ukazuje, zda proces držící port 443 je vaše aplikace, nebo něco před ní. Pokud se ty dva rozcházejí v tom, která adresa se připojila, díváte se na dvě nohy jednoho požadavku a tiket by to měl říct.
Zkontrolujte vlastní pravidla, než obviníte tunel
Záměrná politika je nejčastějším důvodem, proč port odpovídá v jedné síti a v jiné ne, a je to nejméně zajímavé dostupné vysvětlení. Přístupová pravidla existují proto, aby povolila jeden zdroj a ostatní zahodila, takže změna výstupu je přesně tou událostí, pro kterou byla napsána. Jiný stav přes VPN tedy neukazuje, že poskytovatel zkoumá provoz. Ukazuje, že vaše zdrojová adresa je nyní jiná, což je mnohem menší tvrzení.
Tato pravidla lze na serveru přečíst, tak si je přečtěte, místo abyste spekulovali o středu sítě. Vypište pravidla filtru, která zmiňují kterýkoli ze dvou rozsahů adres, a potom zkontrolujte, zda se spojení vůbec dostalo k daemonu:
nft list ruleset | grep -n -e 203.0.113 -e 198.51.100
journalctl -u sshd -n 50 | grep 203.0.113Prázdný druhý výsledek je informativní, protože k daemonu nic nedorazilo a otázka patří filtru, bezpečnostní skupině nebo samotné cestě. Zásah znamená, že služba viděla váš zdroj a zvolila svou odpověď, a to rozhodnutí je obvykle zapsáno v pravidle, které si můžete přečíst. Ani jeden výsledek nepodporuje příběh o poskytovateli a oba se kontrolují levněji než zachytávání paketů.
Čtěte transport, certifikát a odpověď odděleně
Tři vrstvy vytvářejí tři pozorování a sonda, která testuje jedno z nich, nemůže referovat o ostatních dvou. Uchovejte je jako samostatné řádky v záznamu, místo abyste je složili do jediného verdiktu, protože každý řádek selhává po svém a režim selhání vám říká, kam se příště podívat.
| Observation | What it settles | What it leaves open |
|---|---|---|
| Connection completed | A host on the path accepted the handshake | Which host, and whether its upstream is reachable |
| Certificate valid for the name | The endpoint holds a credential for that name | Whether the process behind it is the one you meant |
| Expected response body | The application handled the request | Anything about other ports or other paths |
| Connection refused | A host replied and nothing was listening | Whether a filter sits ahead of the refused port |
| Timeout | No reply arrived before the deadline | Drop, blackhole route or an overloaded host |
Jeden příkaz vytvoří první tři řádky proti službě, kterou ovládáte. Dejte jeho výstup do záznamu vedle skenování, ne do chatové zprávy:
curl -v --resolve office.example:443:203.0.113.20 https://office.example/Čtěte výstup po řadě: navázání spojení odpovídá na otázku transportu, subjekt certifikátu na otázku jména a tělo odpovědi na otázku aplikace. Když řádek navázání spojení uspěje a řádek odpovědi ne, máte frontend s rozbitým upstreamem, ne blokovaný port. To je jiný tiket než ten, který jste otevřeli, a stojí za to to říct přímo.
Skončete zápisem čtyř faktů do tiketu: zdrojová adresa, typ skenování, hostitel, který odpověděl, a čas. Všechno, co pozdější srovnání potřebuje, žije v těchto čtyřech, a kdo případ převezme po vás, nebude mít historii vašeho terminálu. Pokud nedokážete vyplnit všechny čtyři, běh není dokončen.