Satu klien pada pelayan OpenVPN anda mesti kehilangan akses LAN sementara semua terowong lain kekal hidup. Jika anda mencarinya, jawapan teratas biasanya berkata daemon tidak boleh melakukannya, yang hanya separuh benar: OpenVPN tiada firewall bagi setiap klien, tetapi hos yang menamatkan terowong itu sudah menapis paket. Dua keputusan yang penting ialah identiti yang anda sekat dan kedudukan peraturan. Lakukan kedua-duanya dengan betul dan perubahan itu menjadi satu baris yang boleh anda uji dan buang.

Pinkan klien sebelum menulis peraturan

OpenVPN menyewakan alamat terowong daripada kumpulan, jadi 10.8.0.6 ialah tempat duduk, bukan orang. Apabila sesi tamat, pajakan kembali dan boleh diberikan kepada sambungan seterusnya, bermakna peraturan yang ditulis terhadap alamat itu mengikut tempat duduk, bukan pengguna. Jadi tentukan dahulu apa yang sebenarnya anda sekat: alamat untuk eksperimen pendek, atau sijil untuk seseorang yang anda mahu kekalkan di luar.

Untuk mengikat alamat pada sijil, cipta fail dalam direktori yang dinamakan oleh client-config-dir dan beri fail itu common name sijil dengan tepat. Letakkan satu arahan di dalamnya, ifconfig-push 10.8.0.6 255.255.255.0, dan klien itu mengekalkan alamat terowong yang sama merentas sambungan semula. Dua tetapan mesti wujud untuk ini berkesan: client-config-dir mesti diisytiharkan dalam konfigurasi pelayan, dan alamat yang ditolak mesti berada dalam subnet yang boleh dihalakan oleh pelayan. Jika satu hilang, fail itu diabaikan tanpa ralat, yang menjadikan ujian firewall seterusnya mengelirukan.

Sekatan sementara boleh menggunakan alamat kumpulan, asalkan tiket merekodkan sesi mana yang memegangnya pada masa itu.

Urutan menentukan sama ada buangan itu berjalan

Pada get laluan Linux yang memajukan antara terowong dan LAN, paket merentas rantaian FORWARD. Baca arahan di bawah sebagai ayat: sisipkan di kepala FORWARD, padankan trafik yang masuk dari tun0, dari hos tunggal itu, dialamatkan ke subnet LAN, dan buangkannya.

iptables -I FORWARD -i tun0 -s 10.8.0.6/32 -d 192.168.1.0/24 -j DROP

-I ialah apa yang menjalankan peraturan itu. Ditambah dengan -A, ia mendarat di bawah mana-mana penerimaan luas untuk subnet terowong dan tidak pernah melihat paket. Sahkan kedudukan dengan iptables -vnL FORWARD --line-numbers, dan baca pembilangnya juga: buangan di atas yang tidak mengira apa-apa bermakna trafik datang melalui laluan lain.

Alamat LAN get laluan itu sendiri ialah laluan lain. Paket yang dihantar ke kotak itu sendiri pergi ke INPUT, bukan FORWARD, jadi klien boleh kehilangan hos LAN dan masih membuka halaman admin penghala. Tambah peraturan INPUT yang sepadan apabila itu penting.

Apa yang penapis tidak dapat lihat

Penapisan berlaku apabila paket dinilai, jadi sesi TCP yang telah terbentuk boleh berterusan sehingga ditutup atau ditetapkan semula. Jika sekatan mesti bertindak serta-merta, bersihkan aliran yang dijejaki bagi sumber itu dengan conntrack -D -s 10.8.0.6 selepas peraturan dimasukkan. Jika beberapa saat pertindihan boleh diterima, catat pilihan itu daripada membiarkannya tersirat. Bagaimanapun, orang seterusnya perlu tahu sama ada peraturan itu menghentikan trafik hidup atau hanya sambungan baharu.

Trafik antara rakan setara tidak pernah menyentuh firewall hos. Dengan client-to-client diaktifkan, OpenVPN memajukan paket itu di dalam daemon, jadi FORWARD mahupun INPUT tidak melihatnya. Satu-satunya pembaikan ialah mematikan client-to-client atau menerima bahawa rakan setara boleh saling mencapai; peraturan iptables tidak akan melihat trafik itu.

IPv6, firmware dan kelangsungan selepas but semula

Peraturan IPv4 tidak berkata apa-apa tentang IPv6. Jika terowong dan LAN membawa kedua-dua keluarga, peraturan setara mesti wujud dalam ip6tables, atau dalam set peraturan nftables yang memiliki dasar pada hos itu. Firmware penghala sering menyembunyikan netfilter di sebalik abstraksinya sendiri, jadi sintaks dan nama jadual yang disalin dari forum mungkin tidak terpakai.

Pada OpenWrt, laluan yang didokumenkan ialah entri konfigurasi firewall dan bukan baris iptables tulisan tangan, dan baris tulisan tangan boleh hilang apabila firewall dimuat semula. Pengedaran lain memulihkan peraturan melalui netfilter-persistent, unit but atau stor vendor, dan mekanisme itu tidak boleh ditukar ganti. Buktikan yang anda pilih dengan but semula, kerana muat semula melatih laluan yang berbeza.

Sahkan mengikut laluan, kemudian gulung balik dengan bersih

Uji setiap laluan secara berasingan, kerana satu pemeriksaan yang berjaya menyembunyikan yang lain. Klien yang disekat masih harus mencapai internet melalui terowong tetapi gagal terhadap hos LAN, klien kedua harus mencapai hos yang sama, dan alamat get laluan serta laluan rakan setara masing-masing memerlukan pemerhatian sendiri. Tulis hasilnya di sebelah peraturan supaya perubahan seterusnya mempunyai garis dasar. Jadual di bawah ialah set yang wajar disimpan dalam tiket.

LaluanDijangka dengan peraturanApabila ia gagal
Klien disekat ke hos LANTiada jawapanPeraturan berada di bawah penerimaan, atau sumber tidak sepadan
Klien disekat ke internetBerfungsi melalui tun0Peraturan terlalu luas, tanpa padanan destinasi
Klien kedua ke hos LAN yang samaBerfungsiPeraturan sepadan dengan lebih daripada hos yang dimaksudkan
Klien disekat ke alamat LAN get laluanDisekat hanya dengan peraturan INPUT yang sepadanPeraturan INPUT tiada
Klien disekat ke alamat terowong rakan setaraMasih berfungsiclient-to-client diaktifkan dan di luar jangkauan firewall

Gulung balik ialah pemadaman mengikut spesifikasi, bukan flush: iptables -D FORWARD -i tun0 -s 10.8.0.6/32 -d 192.168.1.0/24 -j DROP membuang tepat entri itu dan membiarkan seluruh rantaian yang lain utuh. Buang baris yang sama daripada mana-mana fail yang memulihkan peraturan semasa but, muat semula, dan sahkan klien mencapai hos LAN semula. Flush FORWARD juga akan membatalkan peraturan yang tidak anda tulis, yang menjadikan gulung balik sebagai insiden kedua.

Sebelum menutup tiket, sahkan tiga perkara: alamat yang dipinkan sepadan dengan sijil, peraturan berada di atas penerimaan dengan pembilang bukan sifar, dan fail kegigihan mengandungi peraturan yang sama yang anda uji. Jika salah satu tiada, sekatan itu ialah ilusi dalam sesi shell.

Artikel berkaitan