Anda mengedit peraturan, memuat semula set peraturan, dan terowong berkelakuan sama seperti sebelum ini. Hasil itu mempunyai dua punca lazim, dan kedua-duanya memerlukan ujian berbeza. Sama ada peraturan baharu terletak selepas peraturan terdahulu yang sudah menerima paket itu, atau pertukaran yang anda perhatikan ialah sambungan yang dijejaki yang tidak pernah dinilai semula oleh perubahan itu. Peraturan dalam fail menyatakan niat; yang menentukan paket ialah laluan aktif yang ditemuinya. Lakukan pemeriksaan di bawah mengikut urutan, dan simpan jalan pulang semasa melakukannya.

Urutan peraturan dan status sambungan ialah kerosakan berbeza

Rantaian tersusun dinilai dari atas ke bawah, dan peraturan pertama yang mencapai keputusan muktamad menamatkan perjalanan melalui rantaian itu. Letakkan kebenaran luas di atas peraturan penguncian yang ditulis dengan teliti, dan peraturan penguncian itu menjadi dokumentasi: ia ada dalam set peraturan, kauntnya sifar, dan tiada paket akan mencapainya. Teks yang sama digunakan pada rantaian lain juga tidak membuktikan apa-apa. Dalam nftables, rantaian asas dipasang pada cangkuk mengikut keutamaan, jadi kebenaran dalam satu rantaian tidak menghalang rantaian lain pada cangkuk atau keutamaan berbeza daripada melihat paket yang sama.

Penjejakan sambungan menghasilkan gejala kedua, dan dari luar ia kelihatan sama. Sebaik sahaja aliran berada dalam jadual keadaan, kebenaran untuk established-or-related berhampiran puncak rantaian kembali sebelum peraturan baharu anda dirujuk. Pemetaan NAT mempunyai sifat yang sama: terjemahan ditetapkan apabila aliran bermula, jadi peraturan postrouting yang diedit tidak menulis semula sesi yang sudah berjalan. Itulah sebabnya perubahan kelihatan berkesan pada 09:00 untuk sambungan baharu dan kelihatan tidak melakukan apa-apa untuk sesi yang dibuka seseorang pada 08:55.

Kumpulan keselamatan awan menambah model ketiga yang menangkap orang yang belajar pada iptables. Peraturan masuknya ialah senarai kebenaran yang dinilai sebagai set dan bukan perjalanan padanan pertama, ia bersifat stateful, dan membuang peraturan kebenaran tidak menamatkan aliran yang sudah dijejaki. Menganggap semantik padanan pertama pada platform yang tidak memilikinya membawa kepada kesimpulan yang yakin tetapi salah.

Baca set peraturan aktif, bukan fail yang anda edit

Mulakan dengan apa yang sedang dikuatkuasakan oleh kernel sekarang. Konfigurasi tersimpan yang tidak pernah digunakan menjelaskan banyak tingkah laku yang tidak berubah, dan mengecualikannya hanya memerlukan satu arahan:

nft list ruleset
iptables-save

Kemudian tanya sama ada peraturan anda dicapai sama sekali. Kaunter paket menjawabnya secara langsung, dan menjawabnya lebih baik daripada sebarang penaakulan tentang niat:

iptables -L FORWARD -v -n --line-numbers
nft list chain inet filter forward

Peraturan penguncian dengan sifar paket selepas percubaan ujian sebenar bukan masalah dasar, ia masalah kedudukan. Memindahkannya ialah perubahan satu baris, dan sintaksnya ialah tepat apa yang menyebabkan pepijat asal. Dengan iptables, -I menyisip dan -A menambah di hujung; dengan nftables, insert meletakkan peraturan pada permulaan rantaian manakala add menambah di hujung. Apabila sesuatu peraturan mesti menang, nyatakannya secara jelas dan bukan bergantung pada urutan yang dimuatkan secara kebetulan.

Buktikan sama ada aliran dijejaki

Sebelum menyalahkan peraturan, periksa sama ada trafik itu memang sambungan yang dijejaki. Tanya jadual keadaan tentang aliran tertentu dan bukan mencurahkan keseluruhannya:

conntrack -L -p tcp --dport 1194
conntrack -E -p tcp --dport 1194

Penyenaraian menunjukkan keadaan dan baki tamat masa, dan begitulah cara anda membezakan sesi yang mantap daripada percubaan baharu; mod peristiwa mencetak kemas kini apabila ia berlaku, yang berguna semasa anda menyambung semula klien. Jika aliran hadir dengan keadaan mantap sebelum anda menyentuh apa-apa, tiada suntingan pada peraturan penapis akan mengubah nasibnya. Itu bukan pepijat dalam firewall, itu kontrak penapisan stateful.

Bertahanlah daripada jalan pintas mengosongkan seluruh jadual pada get laluan pengeluaran. conntrack -F tersedia, dan ia juga memusnahkan setiap aliran yang dijejaki pada mesin itu, termasuk sesi pengurusan yang anda gunakan dan terowong yang membawa shell anda. Entri individu boleh dipadam apabila benar-benar perlu, tetapi aliran baharu daripada port sumber baharu biasanya eksperimen yang lebih bersih.

Sesetengah laluan tidak dijejaki, dan ia berkelakuan sebaliknya. Trafik yang ditandakan notrack dalam jadual raw, sesetengah terowong yang memintas cangkuk biasa, dan penghalaan tidak simetri yang memecahkan aliran antara dua get laluan semuanya menghasilkan paket yang dinilai satu demi satu, atau keadaan yang tidak pernah dicipta di kedua-dua hujung. Jika kaunter bergerak bagi setiap paket, syak wasangka laluan sebegitu sebelum mengesyaki urutan.

Uji daripada aliran baharu dengan jalan pulang

Sebelum menguji peraturan yang boleh memutuskan akses jauh, sediakan jalan pemulihan: konsol penyedia, konsol bersiri, alamat pengurusan luar jalur, atau antara muka kedua yang tidak dapat dipadankan oleh peraturan itu. Pemasa gulung semula ialah teman yang wajar, kerana ia akan memulihkan set peraturan sebelumnya walaupun sesi anda mati di tengah-tengah ujian.

Kemudian uji dengan pertukaran yang belum mungkin diliputi oleh keadaan. Putuskan dan sambung semula klien supaya lima tuple baharu dicipta, dan perhatikan kedua-dua hujung semasa ia berlaku:

tcpdump -ni eth0 'tcp port 1194'
journalctl -k -n 50 --no-pager

Jalankan ujian dalam kedua-dua arah. Peraturan yang menyekat jabat tangan masuk baharu masih boleh membenarkan laluan balasan, atau sebaliknya, dan keputusan satu hala ialah sebab biasa sesuatu penguncian hanya berfungsi separuh. Sambung semula sekali selepas ujian untuk mengesahkan keadaan mantap, dan periksa sama ada akses pengurusan yang sah terselamat; peraturan yang ditulis untuk satu port mempunyai tabiat memadankan julat yang lebih luas daripada yang dimaksudkan.

Catat tujuan dan kedudukan bersama peraturan

Peraturan tanpa tujuan yang dicatat ialah peraturan yang tiada siapa berani membuang. Di sebelah setiap entri penguncian, simpan aliran yang dilindunginya, rantaian dan cangkuk tempat ia hidup, kedudukan yang mesti dipegangnya berbanding kebenaran yang lebih luas, dan ujian yang membuktikannya. Apabila seseorang mengedit set peraturan di sekelilingnya enam bulan kemudian, catatan itu ialah satu-satunya amaran bahawa kedudukan itu memang disengajakan.

Sebelum menutup perubahan, sahkan empat perkara: set peraturan yang berjalan sepadan dengan fail, peraturan baharu mempunyai kaunter bukan sifar selepas percubaan baharu, arah balikan dan akses pengurusan masih berfungsi, dan anda telah menyambung semula sekali untuk membuktikan keadaan mantap dan bukan keadaan sesi yang lebih tua daripada perubahan itu. Jika mana-mana daripadanya belum disahkan, perubahan itu belum selesai, apa pun yang dilakukan oleh terowong.

Artikel berkaitan