Saya sering melihat aturan -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
diterapkan. Meskipun saya bukan seorang ahli, kalimat itu menjadi perhatian saya. Sudah cukup jelas bahwa aturan tersebut mengizinkan semua lalu lintas dengan satu-satunya pengecualian bahwa koneksi harus dibuat atau terkait dengan koneksi yang ada.
Skenario
- Saya akan mengizinkan koneksi ke port SSH default
22
dari server LAN di subnet192.168.0.0/16
atau apa pun. SuperInsecureApp®
memperlihatkan sesuatu pada port1337
, yang saya tambahkan keINPUT
rantai saya .- Saya telah menambahkan
conntrack
aturan untuk menerimaESTABLISHED
danRELATED
dari semua sumber - Kebijakan rantai adalah
DROP
Jadi pada dasarnya konfigurasi itu harus memungkinkan koneksi SSH dari LAN saja, sementara memungkinkan lalu lintas masuk pada port 1337 dari dunia.
Di sinilah kebingungan saya mekar. Akankah dengan conntrack
cara apa pun memaparkan kelemahan keamanan yang akan memungkinkan seseorang untuk mendapatkan koneksi yang terjalin pada 1337 (karena dunia terbuka), dan kemudian memanfaatkan koneksi itu untuk mendapatkan akses ke port SSH (atau port lain dalam hal ini)?
conntrack
aturannya ada di awal atau di akhir rantai? Dari bagaimana saya mengertiiptables
, itu harus memproses semua aturan pada koneksi yang ada jika itu pada akhirnya, dan hanya aturan tunggal itu jika ditempatkan di awal?ESTABLISHED dan RELATED adalah fitur dari penyaringan paket "stateful", di mana penyaringan tidak hanya tergantung pada set aturan statis tetapi juga pada konteks, di mana paket dipertimbangkan. Anda perlu DIDIRIKAN agar koneksi berfungsi, dan Anda perlu TERKAIT untuk pesan ICMP yang relevan. Pemfilteran stateful memungkinkan untuk memfilter lebih tepat dibandingkan dengan aturan stateless "stateless".
Mari kita lihat dulu DIDIRIKAN. Sebagai contoh, pertimbangkan TCP pada port 22. Inisiator (klien) mengirim
SYN
keserverIPaddr:22
. Server kembaliSYN+ACK
ke klien. Sekarang giliran klien untuk mengirimACK
. Bagaimana seharusnya aturan penyaringan di server, sehingga hanya "pencocokan"ACK
yang diterima? Akan terlihat aturan umum tanpa kewarganegaraanyang lebih liberal daripada aturan stateful yang sesuai. Aturan stateless memungkinkan segmen TCP yang sewenang-wenang, misalnya
ACK
atauFIN
tanpa membuat koneksi terlebih dahulu. Port scanner dapat memanfaatkan perilaku semacam ini untuk sidik jari OS.Sekarang mari kita lihat terkait. Ini digunakan untuk pesan ICMP, sebagian besar pesan kesalahan. Misalnya, jika sebuah paket dari server ke klien dijatuhkan, maka pesan kesalahan dikirim ke server. Pesan kesalahan ini "terkait" dengan koneksi yang dibuat sebelumnya. Tanpa aturan RELATED, orang perlu membolehkan pesan kesalahan yang masuk secara umum (tanpa konteks), atau, seperti kebiasaan untuk banyak situs, lepaskan ICMP sama sekali dan tunggu waktu habis pada lapisan transport. (Perhatikan bahwa ini adalah ide yang buruk untuk IPv6; ICMPv6 memainkan peran yang lebih penting untuk IPv6 daripada ICMP untuk warisan IP.)
sumber