Peraturan ubah suai semua port boleh menelan listener WireGuard anda
Peraturan ubah suai yang luas boleh menelan listener WireGuard dan SSH milik gateway itu sendiri. Pilih peraturan sempit atau alamat awam berasingan, kemudian uji laluan kawalan.
Sebuah gateway awam sudah menjalankan WireGuard pada UDP 51820, SSH pada 22 dan satu aplikasi yang perlu dicapai dari internet. Peraturan yang menggiurkan mengubah suai setiap port ke peer dan mengisytiharkan kerja selesai. Pada gateway WireGuard, peraturan itu boleh menangkap pengangkutan terowong itu sendiri dan mengunci anda keluar dari mesin yang menterminasikannya. Penerbitan ialah keputusan penghalaan dengan pengecualian satah kawalan, bukan satu baris DNAT.
Pintu masuk awam atau pintu masuk terowong: pilih satu
Menerbitkan sesuatu perkhidmatan mencipta titik masuk baharu di internet. Ia tidak sama dengan memberi keahlian VPN kepada peer, kerana pelawat tidak pernah masuk ke terowong dan gateway menjadi wajah awam backend. Perbezaan itu menentukan khalayak peraturan dan sijilnya.
Antara muka pentadbiran jarang sesuai di kedudukan itu. Halaman pentadbir yang dicapai oleh klien VPN yang diberi kuasa menyimpan permukaan serangan di dalam terowong dan mengelakkan pendedahan borang log masuk kepada pengimbasan sewenang-wenangnya. Titik akhir aplikasi awam masih memerlukan sijil TLS sendiri, pengesahan dan had kadar; lompatan WireGuard yang disulitkan tidak melindungi bahagian pelawat sehingga ke gateway.
Jika perkhidmatan itu benar-benar perlu bersifat awam, catat nama hos, sijil yang meliputinya dan julat pelawat yang sepatutnya mencapainya. Ketiga-tiga fakta itu kemudiannya menentukan bentuk peraturan dan dasar penapisan. Apa-apa di luarnya ialah pengembangan skop pada listener awam.
Satu port masuk, satu backend keluar
Gunakan satu port awam dan satu perkhidmatan backend. Dalam contoh ini eth0 membawa alamat awam 198.51.100.20, alamat terowong gateway ialah 10.200.0.1, dan peer menjalankan aplikasi pada 10.200.0.7. TCP awam 9443 dipetakan kepada TCP 8443 peer:
iptables -t nat -A PREROUTING -i eth0 -d 198.51.100.20 -p tcp --dport 9443 -j DNAT --to-destination 10.200.0.7:8443
iptables -t nat -A POSTROUTING -o wg0 -d 10.200.0.7 -p tcp --dport 8443 -m conntrack --ctorigdst 198.51.100.20 --ctorigdstport 9443 -j SNAT --to-source 10.200.0.1Peraturan SNAT sepadan dengan backend yang telah diterjemah dan destinasi awam asal, jadi sambungan lain ke perkhidmatan backend yang sama kekal di luar pemetaan ini. Ia juga menyembunyikan alamat pelawat daripada peer, dan itulah pertukaran yang menjadikan laluan balik berpenghala yang mengekalkan sumber sebagai reka bentuk berasingan. Rujukan sambungan iptables mendokumenkan kedua-dua sasaran dan pilihan padanannya.
Pengubahan suai masih perlu dihidupkan, dan rantaian penapis memerlukan kebenaran untuk destinasi dan port yang diterjemah serta balasan yang telah ditetapkan. Rantaian FORWARD melihat destinasi yang diterjemah selepas DNAT, jadi peraturan yang ditulis terhadap alamat awam tidak sepadan dengan paket yang diubah suai. Tulis kebenaran terhadap tuple backend, bukan tuple awam.
Peer mesti menerima sambungan perkhidmatan dari alamat terowong gateway dan menghantar balasan kembali melalui terowong. AllowedIPs-nya mesti memberi kuasa kepada sumber yang benar-benar diterimanya, yang di bawah terjemahan sumber ialah alamat terowong gateway, dan entri 0.0.0.0/0 yang luas pada setiap peer tidak diperlukan untuk reka bentuk ini. Yang menggugurkan trafik balik ialah peer yang senarainya tertinggal alamat itu, atau reka bentuk yang mengekalkan sumber yang sebaliknya mengubah suai alamat pelawat, jadi periksa sumber yang benar-benar dilihat peer, bukan yang ada dalam peraturan anda.
Jauhkan listener gateway sendiri daripada peraturan
Tukar padanan port kepada peraturan yang meliputi setiap destinasi TCP dan UDP, dan soket WireGuard gateway sendiri termasuk di dalamnya. Terjemahan destinasi berlaku sebelum mesin memutuskan bahawa paket itu setempat, jadi UDP 51820 boleh berakhir di peer dan bukannya di proses yang memegang setiap sambungan peer. Peraturan dimuatkan dengan jayanya dan terowong mati, iaitu kegagalan yang sukar dibaca dari sisi peer.
SSH, agen pemantauan dan mana-mana perkhidmatan lain yang dihoskan pada gateway mempunyai pendedahan yang sama. Peraturan yang mengubah suai segala-galanya tidak membezakan satah kawalan daripada aplikasi yang diterbitkan, dan but semula pertama selepas perubahan ialah saat penguncian menjadi jelas. Peraturan yang menangkap segala-galanya tidak memberi amaran tentang perkhidmatan yang diambil alihnya secara senyap. Anda menemuinya apabila sambungan seterusnya gagal.
Jika pengubahan suai luas benar-benar diperlukan, tempahkan port kawalan sebelum peraturan yang menangkap segala-galanya atau gunakan alamat awam berasingan untuk penerbitan. Pilihan kedua lebih bersih kerana alamat kawalan mengekalkan dasarnya sendiri, tetapi penyedia mesti menyediakan alamat itu; menambah rekod DNS tidak memperuntukkan satu.
Pengubahan suai TCP dan UDP yang luas juga bukan semua protokol. ICMP, IPv6, maklum balas path-MTU dan pengangkutan VPN luar memerlukan dasar sendiri, dan peraturan yang meliputi TCP dan UDP meninggalkan kes itu kepada rantaian lalai.
Pilih model sebelum menulis peraturan
Empat bentuk meliputi kebanyakan penerbitan dari gateway, dan pilihan bergantung pada bilangan perkhidmatan yang anda jalankan dan berapa banyak risiko satah kawalan yang anda mampu tanggung. Jadual di bawah menyusunnya dari yang paling sempit ke yang paling luas.
| Model | What it protects | Cost | Use when |
|---|---|---|---|
| Narrow port forward | Every other listener, including the VPN | One rule per service | Few services, stable ports |
| Catch-all with reserved ports | Ports named in the exception list | Rule order becomes critical | Many services and disciplined review |
| Separate public address | Control address fully isolated | Provider must supply the address | High-value publication |
| VPN-only access | No public entry at all | Visitors need the tunnel | Admin interfaces and internal tools |
Mulakan dengan model sempit walaupun anda menjangka lebih banyak perkhidmatan kemudian. Ia paling mudah diaudit, dan menukar satu set peraturan sempit kepada peraturan menangkap segala-galanya yang telah disemak adalah lebih mudah daripada mengetahui listener mana yang ditangkap oleh peraturan luas. Apa pun model yang anda pilih, simpan peraturan itu pada pemilik firewall. Menggunakan baris iptables di sebelah konfigurasi UFW atau nftables yang juga mengurus rantaian yang sama menghasilkan dasar yang berubah mengikut susunan but.
Buktikan penerbitan dan laluan kawalan
Uji dari klien luar yang diberi kuasa menggunakan nama hos yang diluluskan dan sijil yang sah untuknya. Sahkan backend mana yang menjawab, kemudian periksa bahawa port awam yang tidak berkaitan kekal ditolak. Semakan sijil yang dilumpuhkan bukanlah ujian HTTPS yang lulus, dan sambungan yang sampai ke backend yang salah lebih teruk daripada yang gagal.
Selepas itu sahkan gateway itu sendiri: sambungkan peer WireGuard, buka sesi SSH dan sahkan bahawa pemantauan masih melaporkan. Perkhidmatan yang diterbitkan boleh berfungsi sementara satah kawalan rosak, jadi kedua-dua semakan tergolong dalam tetingkap perubahan yang sama. But semula sekali untuk membuktikan peraturan digunakan semula dalam susunan yang dijangka, kemudian tarik balik penerbitan dan sahkan bahawa penarikan itu benar-benar sepadan dengan penambahan. Satu set besar penambahan semasa but dengan pembersihan yang tidak lengkap ialah cara ujian sementara menjadi pembukaan kekal.