Penjejakan sambungan adalah asas kepada banyak aplikasi web. Contohnya, Perkhidmatan Kubernetes, sidecar ServiceMesh, pengimbang beban empat lapisan perisian LVS/IPVS, rangkaian Docker, OVS, firewall hos iptables, dll., semuanya bergantung pada fungsi penjejakan sambungan. Penjejakan sambungan, seperti namanya, adalah untuk menjejak (dan merekod) status sambungan. Sebagai contoh, Rajah 1.1 ialah mesin Linux dengan alamat IP 10.1.1.2 Kita dapat melihat bahawa terdapat tiga sambungan pada mesin ini:
Sambungan untuk mesin mengakses perkhidmatan HTTP luaran (destinasi. port 80)
Sambungan luaran untuk mengakses perkhidmatan FTP dalam mesin (port destinasi 21)
Sambungan dari mesin untuk mengakses perkhidmatan DNS luaran (port destinasi 53)
Apa yang dilakukan oleh penjejakan sambungan ialah mencari dan Mengesan status sambungan ini termasuk:
Ekstrak maklumat tuple daripada paket data, kenal pasti aliran data (aliran) dan sambungan (sambungan) yang sepadan.
Kekalkan pangkalan data status (jadual sambung) untuk semua sambungan, seperti masa penciptaan sambungan, bilangan paket dihantar, bilangan bait dihantar, dsb.
Kitar semula sambungan yang telah tamat tempoh (GC).
Menyediakan perkhidmatan untuk fungsi peringkat lebih tinggi (seperti NAT).
Perlu diingatkan bahawa konsep "sambungan" dalam penjejakan sambungan tidak betul-betul sama dengan "berorientasikan sambungan" dalam protokol TCP/IP Secara ringkasnya:
. protokol TCP/IP, sambungan ialah konsep Layer 4. TCP adalah berorientasikan sambungan, dan semua paket yang dihantar memerlukan respons (ACK) daripada rakan sebaya, dan terdapat mekanisme penghantaran semula. UDP adalah tanpa sambungan, dan paket yang dihantar tidak memerlukan respons daripada rakan sebaya, dan tiada mekanisme penghantaran semula. Dalam
conntrack(CT), aliran data (aliran) yang ditakrifkan oleh tupel (tuple) mewakili sambungan (sambungan). Kita akan lihat kemudian bahawa protokol tiga lapisan seperti UDP dan juga ICMP juga mempunyai rekod sambungan dalam CT, tetapi tidak semua protokol akan disambungkan. Penjejakan sambungan Linux dilaksanakan dalam Netfilter.
Netfilter ialah rangka kerja dalam kernel Linux untuk mengawal, mengubah suai dan menapis paket data (manipulasi dan penapisan). Ia menetapkan beberapa titik cangkuk dalam timbunan protokol kernel untuk memintas, menapis atau memproses paket data.Sekarang apabila penjejakan sambungan (conntrack) disebut, Netfilter mungkin pertama kali terlintas di fikiran Netfilter hanyalah pelaksanaan penjejakan sambungan dalam kernel Linux. Dengan kata lain, selagi anda mempunyai keupayaan cangkuk dan boleh memintas setiap paket yang masuk dan keluar dari hos, anda boleh melaksanakan satu set penjejakan sambungan sendiri berdasarkan ini. Penyelesaian rangkaian asli awan Cilium telah melaksanakan penjejakan sambungan bebas dan mekanisme NAT sedemikian dalam versi 1.7.4+ (fungsi lengkap memerlukan Kernel 4.19+). Prinsip asasnya ialah:
Laksanakan fungsi pemintasan paket berdasarkan cangkuk BPF (bersamaan dengan mekanisme cangkuk dalam penapis bersih)
Berdasarkan cangkuk BPF, laksanakan set conntrack dan NAT baharu jika Netfilter dinyahpasang, ia tidak akan menjejaskan sokongan Cilium untuk fungsi seperti Kubernetes ClusterIP, NodePort, ExternalIPs dan LoadBalancer. Memandangkan mekanisme penjejakan sambungan ini bebas daripada Netfilter, maklumat sambungnya dan NAT tidak disimpan dalam jadual sambung kernel (iaitu, Netfilter) dan jadual NAT.Oleh itu, conntrack/netstats/ss/lsof biasa dan alatan lain tidak boleh dilihat Anda perlu menggunakan arahan Cilium, seperti:
$ cilium bpf nat list$ cilium bpf ct list global
Iptables
Iptables ialah alat penapisan pengguna Netfilter untuk menapis. fungsi. Netfilter ialah rangka kerja keselamatan sebenar firewall, dan netfilter terletak dalam ruang kernel. iptables sebenarnya adalah alat baris arahan yang terletak di ruang pengguna Kami menggunakan alat ini untuk mengendalikan rangka kerja sebenar. Iptable memproses paket data mengikut kaedah yang ditakrifkan oleh peraturan, seperti terima, tolak, lepas, dsb. Sebagai contoh, apabila pelanggan mengakses perkhidmatan web pelayan, pelanggan menghantar mesej kepada kad rangkaian, dan susunan protokol tcp/ip adalah sebahagian daripada kernel Oleh itu, maklumat pelanggan akan dihantar kepada pengguna ruang melalui protokol TCP kernel Dalam perkhidmatan web, pada masa ini, titik akhir sasaran mesej klien ialah soket (IP:Port) yang dipantau oleh perkhidmatan web Apabila perkhidmatan web perlu bertindak balas kepada permintaan pelanggan, mesej tindak balas yang dihantar oleh perkhidmatan web Titik akhir sasaran ialah klien Pada masa ini, IP dan port yang dipantau oleh perkhidmatan web menjadi asal , jika kita mahu firewall untuk Untuk mencapai tujuan "pencegahan kebakaran", anda perlu menyediakan pusat pemeriksaan dalam kernel Semua mesej masuk dan keluar mesti melalui pusat pemeriksaan ini, hanya mereka yang memenuhi syarat pelepasan boleh dikeluarkan, dan yang memenuhi syarat penyekatan perlu disekat. iptables mengandungi 4 meja dan 5 rantai. Jadual dibezakan mengikut operasi pada paket data (penapisan, NAT, dll.), dan rantaian dibezakan mengikut mata Cangkuk yang berbeza Jadual dan rantai sebenarnya adalah dua dimensi penapis bersih.Empat jadual iptables ialah penapis, mangle, nat dan mentah Jadual lalai ialah penapis.
jadual penapis: digunakan untuk menapis paket data Keperluan peraturan khusus menentukan cara memproses paket data.
nat table: Terutamanya digunakan untuk mengubah suai alamat IP dan maklumat nombor port bagi paket data.
jadual mangle: Terutamanya digunakan untuk mengubah suai jenis perkhidmatan dan kitaran hayat paket data, menetapkan tag untuk paket data, melaksanakan pembentukan trafik, penghalaan dasar, dsb.
jadual mentah: Digunakan terutamanya untuk memutuskan sama ada hendak melaksanakan penjejakan status pada paket data.
Lima rantai iptables ialah PREROUTING, INPUT, FORWARD, OUTPUT, dan POSTROUTING.
Rantaian input: Apabila paket yang mengakses alamat setempat diterima, peraturan dalam rantaian ini akan digunakan.
rantai keluaran: Apabila mesin menghantar paket keluar, peraturan dalam rantaian ini akan digunakan.
rantai ke hadapan: Apabila menerima paket data yang perlu dimajukan ke alamat lain, peraturan dalam rantaian ini akan digunakan Ambil perhatian bahawa jika anda perlu melaksanakan pemajuan ke hadapan, anda perlu mendayakan fungsi ip_forward kernel Linux.
rantaian pra laluan: Peraturan dalam rantaian ini akan digunakan sebelum menghalakan paket.
postrouting chain: Selepas menghalakan paket, peraturan dalam rantaian ini akan digunakan.
Hubungan sepadan antara jadual dan rantai ditunjukkan dalam rajah di bawah: Kita boleh bayangkan aliran mesej dalam beberapa senario biasa:
pada proses tertentu mesin tempatan : PREROUTING –>
Mesej yang dimajukan oleh mesin ini: PREROUTING –>
Mesej (biasanya mesej respons) dihantar melalui proses pada mesin tempatan: OUTPUT –>
Kita boleh meringkaskan proses paket data yang melalui tembok api seperti rajah berikut:
Peraturan Pertanyaan
Nama jadual -n: Lakukan tidak menyelesaikan alamat IP
-v: Akan memaparkan maklumat kaunter, nombor dan saiz paket
-x: Pilihan menunjukkan untuk memaparkan nilai tepat kaunter
--nombor-baris: Nombor siri peraturan paparan (disingkatkan sebagai --line)
🎜🎜🎜 Di samping itu, semasa mencari akaun awam Linux, beginilah anda harus belajar membalas "monyet" di latar belakang untuk mendapatkan pakej hadiah kejutan.
BARU: Paket pertama dalam sambungan, keadaan adalah BARU, kami Boleh difahami bahawa status paket pertama sambungan baharu adalah BARU.
DITUBUHKAN: Kita boleh memahami status paket selepas paket status BARU seperti DITUBUHKAN, menunjukkan bahawa sambungan telah diwujudkan.
BERKAITAN: Difahamkan secara literal, BERKAITAN diterjemahkan sebagai hubungan, tetapi ini masih tidak mudah untuk difahami. Sebagai contoh, dalam perkhidmatan FTP, pelayan FTP akan mencipta dua proses, satu proses arahan dan satu proses data. Proses arahan bertanggungjawab untuk penghantaran arahan antara pelayan dan klien (kita boleh memahami proses penghantaran ini sebagai apa yang dipanggil "sambungan" dalam keadaan, sementara dipanggil "sambungan arahan"). Proses data bertanggungjawab untuk penghantaran data antara pelayan dan klien (kami panggil sementara proses ini "sambungan data"). Walau bagaimanapun, data khusus yang akan dihantar dikawal oleh arahan Oleh itu, mesej dalam "sambungan data" adalah "berkaitan" dengan "sambungan arahan". Kemudian, paket dalam "sambungan data" mungkin dalam keadaan BERKAITAN, kerana paket ini berkaitan dengan paket dalam "sambungan arahan". (Nota: Jika anda ingin melakukan penjejakan sambungan untuk ftp, anda perlu memuatkan modul kernel yang sepadan nf_conntrack_ftp secara berasingan. Jika anda ingin memuatkannya secara automatik, anda boleh mengkonfigurasi fail /etc/sysconfig/iptables-config)
TIDAK SAH: Jika pakej Tiada cara untuk mengenal pastinya, atau paket itu tidak mempunyai sebarang status, maka status paket ini adalah TIDAK SAH Kami boleh menyekat paket dengan status TIDAK SAH. .
刚才举例中的问题即可使用 state 扩展模块解决,我们只要放行状态为 ESTABLISHED 的报文即可,因为如果报文的状态为 ESTABLISHED,那么报文肯定是之前发出的报文的回应,这样,就表示只有回应我们的报文能够通过防火墙,如果是别人主动发送过来的新的报文,则无法通过防火墙:
iptables -t filter -I INPUT -m state --state ESTABLISHED -j ACCEPT
Apabila terdapat terlalu banyak peraturan dalam rantaian lalai, adalah menyusahkan kami untuk menguruskannya. Bayangkan jika terdapat 200 peraturan yang disimpan dalam rantaian INPUT Sebahagian daripada 200 peraturan ini adalah untuk perkhidmatan httpd, ada yang untuk perkhidmatan sshd, ada yang untuk IP rangkaian peribadi, dan ada yang untuk IP rangkaian awam Jika kita tiba-tiba ingin mengubah suai peraturan yang berkaitan dengan perkhidmatan httpd, adakah kita perlu membaca 200 peraturan ini dari awal untuk mengetahui peraturan yang khusus untuk httpd? Ini jelas tidak munasabah. Jadi, dalam iptables, anda boleh menyesuaikan rantai, dan masalah di atas boleh diselesaikan dengan menyesuaikan rantai. Katakan kita memperibadikan rantaian bernama IN_WEB Kita boleh menulis semua peraturan masuk untuk port 80 ke dalam rantaian tersuai ini Apabila kita ingin mengubah suai peraturan masuk untuk perkhidmatan web pada masa hadapan, kita hanya boleh mengubah suai peraturan dalam rangkaian IN_WEB jika terdapat lebih banyak peraturan dalam rantaian lalai, kami tidak akan takut, kerana kami tahu bahawa semua peraturan masuk untuk port 80 disimpan dalam rantaian IN_WEB.
Atas ialah kandungan terperinci Tidak tahu cara menggunakan perisian tembok api Linux IPtables! Apakah jenis orang operasi dan penyelenggaraan anda?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!
Kenyataan:
Artikel ini dikembalikan pada:Linux中文社区. Jika ada pelanggaran, sila hubungi admin@php.cn Padam