Di Linux, kami biasanya menggunakan tabel "filter" untuk melakukan penyaringan umum:
iptables --table filter --append INPUT --source 1.2.3.4 --jump DROP
iptables --table filter --append INPUT --in-interface lo --jump ACCEPT
Menurut diagram alir netfilter di bawah ini, paket pertama kali melakukan perjalanan melalui tabel "raw":
Jadi kita bisa menulis:
iptables --table raw --append PREROUTING --source 1.2.3.4 --jump DROP
iptables --table raw --append PREROUTING --in-interface lo --jump ACCEPT
- paket-paket ditangani lebih cepat, tanpa perlu pergi melalui conntrack + mangle + nat + routing. Jadi lebih sedikit CPU / memori yang digunakan (dan pada gilirannya sedikit dikompensasi oleh fakta modul iptable_raw harus dimuat)
- hanya satu aturan seandainya kotak juga merupakan router (tidak akan ok untuk setiap aturan, jelas) karena tidak perlu menambahkan aturan yang sama untuk filter / forward
Saya hanya melakukan tes cepat, dan ini bekerja dengan sangat baik.
Dokumentasi yang saya temukan selalu menggambarkan tabel mentah untuk digunakan dalam kasus-kasus ketat. Tetapi tidak ada yang memberikan pembenaran sekecil apapun.
Pertanyaan: adakah alasan untuk tidak menggunakan tabel mentah, selain dari yang dogmatis?
Jawaban:
Dari man iptables :
Analisis :
Jadi, tabel RAW adalah sebelum conntrack dan ia dirancang dengan tujuan untuk digunakan untuk menetapkan tanda NOTRACK pada paket yang tidak ingin Anda lacak di netfilter.
Sasaran -j tidak terbatas hanya pada NOTRACK, jadi ya, Anda meng-filter paket di tabel mentah dengan manfaat dari konsumsi CPU / memori yang lebih sedikit.
Paling sering, server tidak perlu melacak semua koneksi. Anda hanya perlu melacak jika Anda perlu memfilter paket di iptables berdasarkan koneksi yang dibuat sebelumnya. Pada server yang hanya melayani tujuan sederhana seperti dengan hanya port 80 (dan mungkin 21) terbuka, tidak memerlukan itu. Dalam hal itu, Anda dapat menonaktifkan pelacakan koneksi.
Namun, jika Anda mencoba menjalankan router NAT, segalanya menjadi sedikit rumit. Untuk melakukan sesuatu NAT, Anda perlu melacak koneksi tersebut sehingga Anda dapat mengirimkan paket dari jaringan luar ke jaringan internal.
Jika seluruh koneksi diatur dengan NOTRACK, maka Anda tidak akan dapat melacak koneksi yang terkait baik, conntrack dan nat helpers tidak akan berfungsi untuk koneksi yang tidak dilacak, demikian pula kesalahan ICMP terkait tidak akan berhasil. Anda harus membuka ini secara manual dengan kata lain. Ketika datang ke protokol kompleks seperti FTP dan SCTP dan lainnya, ini bisa sangat sulit untuk dikelola.
Gunakan kasing :
Salah satu contohnya adalah jika Anda memiliki router yang sangat diperdagangkan sehingga Anda ingin firewall untuk lalu lintas masuk dan keluar, tetapi tidak lalu lintas diarahkan. Kemudian, Anda dapat mengatur tanda NOTRACK untuk mengabaikan lalu lintas yang diteruskan untuk menghemat daya pemrosesan.
Contoh lain ketika NOTRACK dapat digunakan adalah jika Anda memiliki web-server yang sangat diperdagangkan, Anda kemudian dapat menetapkan aturan yang mengubah pelacakan untuk port 80 pada semua alamat IP yang dimiliki secara lokal, atau yang benar-benar melayani lalu lintas web. Anda kemudian dapat menikmati pelacakan stateful pada semua layanan lain, kecuali untuk lalu lintas web yang mungkin menghemat daya pemrosesan pada sistem yang sudah kelebihan beban.
Contoh -> menjalankan-semi-stateless-linux-router-untuk-private-network
Kesimpulan : Tidak ada alasan kuat untuk tidak menggunakan tabel mentah, tetapi ada beberapa alasan untuk berhati-hati saat menggunakan target NOTRACK di tabel mentah.
sumber