iptables: benarkan klien VPN mencapai satu hos sahaja
Peraturan yang anda perlukan ada dalam FORWARD, bukan INPUT. Benarkan satu destinasi untuk kumpulan VPN, tolak yang lain, kemudian buktikannya dengan pembilang dan arahan gulung balik.
Dua tiket sokongan yang kelihatan tidak berkaitan rupa-rupanya berkongsi satu punca. Dalam yang pertama, pentadbir mahu pelayan hanya menerima sambungan dari terowong; dalam yang kedua, pengguna VPN sepatutnya mencapai satu hos dalaman dan tidak lebih. Kedua-dua dasar terletak dalam FORWARD, dan kedua-duanya biasanya dicuba dalam INPUT. Hasilnya kelihatan seperti tembok api dan berkelakuan seperti pemegang tempat.
Rantai mana yang menjawab soalan anda
Paket yang dihantar oleh klien VPN ke hos dalam LAN, atau seterusnya ke internet, diteruskan oleh kernel dan dinilai dalam FORWARD. INPUT dan OUTPUT hanya melihat trafik yang berakhir pada pelayan itu sendiri atau yang berasal daripadanya. Oleh itu penolakan bagi apa-apa yang tidak tiba melalui tun0 melindungi pendengar pelayan itu sendiri, dan ia juga akan menamatkan sesi SSH anda melainkan aliran yang telah ditetapkan dibenarkan dahulu. Ia tidak mengubah apa-apa tentang ke mana klien dibenarkan pergi.
Namakan soalan itu dahulu: siapa yang boleh mencapai pelayan, atau ke mana klien boleh pergi. Kebanyakan rangkaian memerlukan kedua-dua jawapan, dalam rantai yang berbeza.
Dahulu keadaan, kemudian kebenaran, kemudian penolakan
Senarai benaran hanya berfungsi jika kebenaran khusus berada di atas penolakan umum dan jika trafik balasan dibenarkan di atas kedua-duanya. Masukkan peraturan pada kedudukan yang jelas, kemudian buang rantai dengan iptables -S FORWARD supaya susunannya kelihatan dan bukan diandaikan.
POOL=10.99.0.0/24
iptables -I FORWARD 1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -I FORWARD 2 -s "$POOL" -d 172.31.20.15 -p tcp -m multiport --dports 443,3389 -j ACCEPT
iptables -I FORWARD 3 -s "$POOL" -j REJECTDua butiran menentukan sama ada ini bertahan apabila berhadapan dengan trafik sebenar. Tanpa peraturan keadaan, balasan kepada sambungan yang baru anda benarkan akan dinilai sendiri terhadap penolakan dan digugurkan. Peraturan LOG tanpa had boleh memenuhi partition kecil pada imbasan pertama, jadi tambah -m limit --limit 10/min sebelum anda meneruskan pengelogan. REJECT memulangkan ralat serta-merta, yang lebih mesra semasa anda melaras senarai; DROP membuang secara senyap, jadi setiap kesilapan muncul sebagai tamat masa. Pilih satu dengan sengaja dan tulis pilihan itu dalam rekod perubahan.
Penerusan dan NAT mesti sudah berfungsi
Penapisan tidak dapat membuktikan bahawa laluan wujud. Sahkan dahulu bahawa kernel meneruskan sama sekali, dan jadikan tetapan itu kekal dan bukan arahan shell sekali sahaja. Penapis ialah lapisan terakhir, bukan yang pertama.
sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -s "$POOL" -o eth0 -j MASQUERADEDi mana penyamaran terletak bergantung pada dari mana klien keluar. Jika mereka keluar menuju rangkaian jauh melalui terowong, peraturan NAT diletakkan pada antara muka itu dan bukan antara muka WAN. Kemudian perhatikan pembilang: jika pembilang POSTROUTING tidak pernah bergerak sementara bilangan penerimaan dalam FORWARD meningkat, laluan balik rosak dan penapisnya baik. Bacaan itu menjimatkan sebelah petang untuk menulis semula peraturan yang tidak pernah menjadi masalah.
Blok mel terletak satu rantai lebih jauh
Menyekat port 25 dalam INPUT hanya menghentikan mel yang dialamatkan kepada pelayan VPN. Klien yang telah diceroboh dan menghantar mel melalui terowong akan diteruskan, jadi blok itu mesti berada dalam FORWARD di sebelah 465 dan 587. Jika satu aplikasi menyampaikan mel secara sah, letakkan destinasi dan portnya di atas peraturan itu.
iptables -I FORWARD 2 -s "$POOL" -p tcp -m multiport --dports 25,465,587 -j REJECTBiarkan pembilang penolakan berjalan seminggu sebelum anda mengeraskan apa-apa lagi. Nombor yang berhenti menaik ialah aliran sah yang baru anda pecahkan.
Baca semula, kemudian buktikan dari klien
Baca set peraturan seperti yang dilaporkan oleh kernel, bukan seperti yang skrip anda tulis. Mulakan dengan iptables -S FORWARD, kemudian jadual NAT dengan iptables -t nat -L POSTROUTING -n -v, kemudian entri conntrack bagi aliran yang anda uji. Simpan arahan gulung balik atau pembersihan berjadual selagi kerja berlangsung. Setiap panggilan memerlukan -w, jika tidak dua pentadbir akan berlanggar pada kunci xtables. Tiada satu pun daripada itu pilihan dalam tetingkap perubahan.
Akhiri dengan menguji dari klien di dalam kumpulan dan dari satu di luarnya. Peraturan yang hanya berfungsi dari mesin tempat anda menaipnya bukan dasar.