Jalankan pemeriksaan port yang sama dari talian pejabat dan dari pintu keluar VPN, dan kedua-dua jawapan boleh bertelagah tentang alamat yang tiada siapa ubah. Jurang itu datang dari laluan dan dari hos mana yang menjawab, bukan dari perkhidmatan hidup atau mati. Tiga soalan memisahkan penjelasan itu: apa yang benar-benar ditanya oleh probe, hos mana yang menjawabnya, dan apa yang dicatat oleh pelayan anda sendiri. Lalui ketiga-tiganya dalam urutan itu dan tulis setiap jawapan sebelum beralih ke yang seterusnya.

Betulkan probe sebelum membandingkan dua larian

Satu perkataan keadaan hanya boleh dibandingkan dengan perkataan keadaan lain apabila kedua-duanya datang daripada eksperimen yang sama. Lima medan menetapkannya: alamat sumber yang dilihat oleh sisi jauh, destinasi yang diselesaikan, port, jenis imbasan dan masa. Tukar mana-mana satu daripadanya dan anda telah menjalankan eksperimen kedua dan bukan mengukur yang pertama dua kali.

Periksa sumber sebelum apa-apa lagi, kerana klien VPN boleh hidup sementara trafik masih keluar melalui antara muka fizikal. Tanya sisi jauh apa yang dilihatnya, kemudian tanya kernel antara muka mana yang dipilihnya:

curl -s https://ifconfig.me
ip route get 203.0.113.20

Dua alamat pada rangkaian berbeza bermakna penjelasan sudah ada di tangan, dan baki pemeriksaan ini hanya akan mengesahkannya. Apabila kedua-duanya bersetuju, rakam probe dengan bendera sebab dihidupkan, supaya keadaan kembali terikat pada penjelasan dan bukan berdiri sendiri sebagai perkataan kosong. Jenis imbasan juga tergolong dalam rekod itu, kerana ia menerangkan apa yang ditanya dan bukan apa yang kembali. Keadaan tanpa sumber, tanpa kaedah dan tanpa cap masa tidak boleh dibandingkan dengan apa-apa:

nmap -sT -p 443,8443 --reason 203.0.113.20

Simpan output itu di sebelah rekod dan bukan dalam penimbal tatal yang tidak dapat dilihat oleh orang seterusnya. Dua imbasan jujur yang bertelagah hanyalah perdebatan apabila tiada siapa menulis syaratnya. Setelah syarat ditetapkan, sama ada hasilnya sepadan dan soalan itu tertutup, atau kedua-duanya berbeza dan perbezaannya ialah fakta tentang laluan.

Ketahui hos mana yang menamatkan jabat tangan

Jabat tangan yang selesai membuktikan bahawa sesuatu hos menyelesaikannya, dan hos itu belum tentu proses yang ada dalam fikiran anda. Penyeimbang beban, proksi songsang atau proksi SYN boleh menjawab sebelum pelayan sebenar terlibat, yang merupakan reka bentuk biasa dan bukan gejala. Sijil yang sah untuk nama yang dijangka juga tidak menyempitkannya, kerana sijil menerangkan hubungan perkhidmatan dan tidak mengatakan apa-apa tentang mesin mana yang menamatkan sambungan.

Rujukan keadaan port Nmap menganggap ini asas: keadaan merekodkan apa yang dapat diperhatikan oleh probe dari tempat ia dihantar, bukan sifat port. Baca perkataan keadaan begitu dan dua larian yang bertelagah mula kelihatan konsisten dan bukan bercanggah, sementara soalan beralih daripada sama ada port terbuka kepada siapa yang berdiri di hadapannya.

Jawab soalan kedua di backend dan bukan dari luar. Frontend yang menerima sambungan dan kemudian gagal mencapai huluannya menghasilkan tepat gambaran luar perkhidmatan sihat dengan aplikasi yang perlahan. Hanya rekod huluan itu sendiri memisahkan kedua-dua kes:

tail -n 5 /var/log/nginx/access.log
ss -ltnp 'sport = :443'

Baris log menunjukkan alamat klien yang benar-benar dilihat oleh aplikasi, dan arahan kedua menunjukkan sama ada proses yang memegang port 443 ialah aplikasi anda atau sesuatu di hadapannya. Jika kedua-duanya bertelagah tentang alamat mana yang bersambung, anda sedang melihat dua kaki satu permintaan dan tiket itu sepatutnya mengatakan demikian.

Periksa peraturan anda sendiri sebelum menyalahkan terowong

Dasar yang disengajakan ialah sebab paling biasa sesuatu port menjawab pada satu rangkaian dan tidak pada rangkaian lain, dan ia merupakan penjelasan paling tidak menarik yang tersedia. Peraturan akses wujud untuk membenarkan satu sumber dan membuang yang lain, jadi perubahan egress ialah tepat peristiwa yang menjadi sebab peraturan itu ditulis. Oleh itu keadaan berbeza melalui VPN tidak menunjukkan bahawa penyedia memeriksa trafik. Ia menunjukkan bahawa alamat sumber anda kini berbeza, yang merupakan dakwaan yang jauh lebih kecil.

Peraturan itu boleh dibaca pada pelayan, jadi bacalah dan bukan membuat spekulasi tentang pertengahan rangkaian. Senaraikan peraturan penapis yang menyebut mana-mana satu daripada dua julat alamat, kemudian periksa sama ada sambungan itu sampai kepada daemon:

nft list ruleset | grep -n -e 203.0.113 -e 198.51.100
journalctl -u sshd -n 50 | grep 203.0.113

Hasil kedua yang kosong adalah bermaklumat, kerana tiada apa yang sampai kepada daemon dan soalan itu milik penapis, kumpulan keselamatan atau laluan itu sendiri. Satu hit bermakna perkhidmatan melihat sumber anda dan memilih jawapannya, dan keputusan itu biasanya tertulis dalam peraturan yang boleh anda baca. Tiada satu pun hasil menyokong cerita tentang penyedia, dan kedua-duanya lebih murah diperiksa daripada menangkap paket.

Baca pengangkutan, sijil dan respons secara berasingan

Tiga lapisan menghasilkan tiga pemerhatian, dan probe yang menguji salah satunya tidak dapat melaporkan dua yang lain. Simpan sebagai baris berasingan dalam rekod dan bukan melipatnya menjadi satu keputusan, kerana setiap baris gagal dengan caranya sendiri dan mod kegagalan memberitahu anda di mana perlu melihat seterusnya.

ObservationWhat it settlesWhat it leaves open
Connection completedA host on the path accepted the handshakeWhich host, and whether its upstream is reachable
Certificate valid for the nameThe endpoint holds a credential for that nameWhether the process behind it is the one you meant
Expected response bodyThe application handled the requestAnything about other ports or other paths
Connection refusedA host replied and nothing was listeningWhether a filter sits ahead of the refused port
TimeoutNo reply arrived before the deadlineDrop, blackhole route or an overloaded host

Satu arahan menghasilkan tiga baris pertama terhadap perkhidmatan yang anda kawal. Letakkan outputnya dalam rekod di sebelah imbasan dan bukan dalam mesej sembang:

curl -v --resolve office.example:443:203.0.113.20 https://office.example/

Baca output mengikut urutan: jabat tangan menjawab soalan pengangkutan, subjek sijil menjawab soalan nama, dan badan respons menjawab soalan aplikasi. Apabila baris jabat tangan berjaya dan baris respons tidak, anda mempunyai frontend dengan huluan yang rosak dan bukan port yang disekat. Itu tiket yang berbeza daripada yang anda buka, dan wajar dikatakan dengan jelas.

Akhiri dengan menulis empat fakta dalam tiket: alamat sumber, jenis imbasan, hos yang menjawab, dan masa. Semua yang diperlukan oleh perbandingan kemudian hidup dalam keempat-empat itu, dan sesiapa yang mengambil kes itu seterusnya tidak akan mempunyai sejarah terminal anda. Jika anda tidak dapat mengisi keempat-empatnya, larian itu belum selesai.

Artikel berkaitan