Saya baru saja membaca buku tentang PF (The Book Of PF, No Starch), tetapi ada satu pertanyaan yang tidak dijawab olehnya.
Jika saya memiliki mesin gateway menggunakan dua antarmuka, $ int_if dan $ ext_if, dan saya NAT paket-paket yang berasal dari $ int_if: net (yang, katakanlah, 10.0.0.0/24) ke $ ext_if menggunakan match
, ketika NAT diterapkan ? Sebelum atau sesudah aturan penyaringan?
Contoh:
match out on $ext_if from 10.0.0.0/24 nat-to ($ext_if)
pass out on $ext_if from 10.0.0.0/24
block drop out on $ext_if from 10.0.0.23
Apakah itu bekerja? Atau mendapatkan IP sumber dari paket yang berasal dari 10.0.0.23 NATed ke alamat $ ext_if sebelum memeriksa apakah dari 10.0.0.23 dievaluasi?
Diagram ini tidak membantu untuk menjawab pertanyaan ini, saya pikir, tetapi tetap menarik: [ http://www.benzedrine.cx/pf_flow.png ]
Jika Anda membaca FAQ PF NAT [ http://www.openbsd.org/faq/pf/nat.html ], terutama bagian "Mengkonfigurasi NAT", Anda akan menemukan kalimat-kalimat ini:
Ketika sebuah paket dipilih oleh aturan kecocokan, parameter (misalnya nat-to) dalam aturan itu diingat dan diterapkan ke paket ketika aturan pass yang cocok dengan paket tersebut tercapai. Ini memungkinkan seluruh kelas paket untuk ditangani oleh aturan pertandingan tunggal dan kemudian keputusan khusus tentang apakah mengizinkan lalu lintas dapat dibuat dengan aturan blok dan lulus.
Saya pikir itu terdengar seperti tidak seperti yang saya nyatakan dalam paragraf di atas, jadi sumber IP akan "diingat" sampai ada keputusan tentang tindakan yang harus dilakukan dengan paket. Jika keputusan dibuat, NATting diterapkan.
Bagaimana menurut anda?
PS: Ini pertanyaan yang cukup teoretis. Jika Anda sedikit pragmatis, Anda akan melakukannya dengan cara ini:
match out on $ext_if from 10.0.0.0/24 nat-to ($ext_if)
block drop from 10.0.0.23
# or, explicitly,
# block drop in on $int_if from 10.0.0.23
Jadi block
aturan sudah diterapkan ketika paket masuk pada $ int_if.
EDIT: Kemungkinan lain, tentu saja, untuk memutuskan sebelum NAT:
pass from 10.0.0.0/24
block drop from 10.0.0.23
match out on $ext_if from 10.0.0.0/24 nat-to ($ext_if)
Jika paket dari .23 tiba, itu pertama kali cocok dengan aturan pertama, kemudian cocok dengan aturan kedua dan "aturan" ketiga. Tetapi karena aturan kedua adalah yang terakhir memutuskan tentang passing / pemblokiran, paket tersebut diblokir. Baik?
quick
kata kunci tetapi saya tidak terlalu menyukainya - Saya selalu mencoba menggunakan urutan evaluasi pf;) Btw, saya menemukan jawabannya di halaman FAQ OpenBSD: "NAT ditentukan sebagai parameter nat-to opsional untuk aturan pass keluar. Seringkali, alih-alih ditetapkan langsung pada aturan pass, aturan pertandingan digunakan. Ketika sebuah paket dipilih oleh aturan pertandingan, parameter (misalnya nat-to) dalam aturan itu diingat dan diterapkan pada paket ketika aturan pass yang cocok dengan paket tercapai. " Jadi aturan saya tidak akan menyebabkan masalah dan dengan benar memblokir