Apakah menerima RELATED, ESTABLISHED untuk semua sumber di iptables dianggap “terlalu terbuka”?

9

Saya sering melihat aturan -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPTditerapkan. 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 22dari server LAN di subnet 192.168.0.0/16atau apa pun.
  • SuperInsecureApp®memperlihatkan sesuatu pada port 1337, yang saya tambahkan ke INPUTrantai saya .
  • Saya telah menambahkan conntrackaturan untuk menerima ESTABLISHEDdan RELATEDdari 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 conntrackcara 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)?

Dencker
sumber

Jawaban:

8

Saya tidak akan menganggap lalu lintas DIDIRIKAN dan TERKAIT terlalu terbuka. Anda mungkin dapat menghilangkan RELATED, tetapi harus memungkinkan ESTABLISHED. Kedua kategori lalu lintas ini menggunakan status penghubung.

Koneksi ESTABLISHED telah divalidasi oleh aturan lain. Ini membuatnya lebih mudah untuk menerapkan aturan searah. Ini hanya memungkinkan Anda untuk melanjutkan transaksi pada port yang sama.

Menghubungkan terkait juga divalidasi oleh aturan lain. Mereka tidak berlaku untuk banyak protokol. Sekali lagi mereka membuatnya lebih mudah untuk mengkonfigurasi aturan. Mereka juga memastikan urutan koneksi yang tepat di mana mereka berlaku. Ini sebenarnya membuat aturan Anda lebih aman. Meskipun hal ini memungkinkan untuk terhubung pada port yang berbeda, port tersebut hanya boleh menjadi bagian dari proses terkait seperti koneksi data FTP. Port mana yang diizinkan dikontrol oleh modul-modul conntrack spesifik protokol.

Dengan mengizinkan koneksi ESTABLISHED dan TERKAIT, Anda dapat berkonsentrasi pada koneksi baru mana yang Anda inginkan untuk menerima firewall. Itu juga menghindari aturan yang rusak dimaksudkan untuk memungkinkan lalu lintas kembali, tetapi yang memungkinkan koneksi baru.

Karena Anda telah mengklasifikasikan program pada port 1337 sebagai tidak aman, program tersebut harus dimulai menggunakan user-id non-root khusus. Ini akan membatasi kerusakan yang dapat dilakukan seseorang jika mereka berhasil memecahkan aplikasi dan mendapatkan akses yang ditingkatkan.

Sangat tidak mungkin koneksi pada port 1337 dapat digunakan untuk mengakses port 22 dari jarak jauh, tetapi ada kemungkinan bahwa koneksi ke port 1337 dapat digunakan untuk mem-proxy koneksi ke port 22.

Anda mungkin ingin memastikan SSH diamankan secara mendalam:

  • Gunakan hosts.allow untuk membatasi akses selain pembatasan firewall.
  • Cegah akses root, atau paling tidak memerlukan penggunaan kunci dan batasi aksesnya di file Authorized_key.
  • Kegagalan login audit. Pemindai log dapat mengirimi Anda laporan berkala tentang aktivitas yang tidak biasa.
  • Pertimbangkan untuk menggunakan alat seperti fail2ban untuk secara otomatis memblokir akses pada kegagalan akses berulang.
BillThor
sumber
Meskipun ini adalah contoh sewenang-wenang, hal pertama yang saya lakukan pada server baru selalu menonaktifkan akses root dan otentikasi plaintext di sshd - itu tip yang sangat bagus. Juga fail2ban sebenarnya sudah diinstal pada pengaturan kehidupan nyata dari mana contoh itu terinspirasi. "Koneksi ESTABLISHED telah divalidasi oleh aturan lain" adalah hal yang saya tidak yakin tentang dan menjawab pertanyaan saya dengan sempurna. Terima kasih atas jawaban Anda yang sangat jelas!
Dencker
Pertanyaan sampingan: Dari perspektif kinerja, apakah itu mengubah apa pun jika conntrackaturannya ada di awal atau di akhir rantai? Dari bagaimana saya mengerti iptables, itu harus memproses semua aturan pada koneksi yang ada jika itu pada akhirnya, dan hanya aturan tunggal itu jika ditempatkan di awal?
Dencker
@Dencker Anda menginginkan aturan ESTABLISHED, RELATED terlebih dahulu. Ini akan menerima paling banyak lalu lintas. Di luar itu, Anda mungkin ingin memiliki aturan yang menerima lalu lintas terbanyak, meskipun yang terbaik adalah menimbang berat agar mudah dibaca. Aturan saya dikelompokkan, sensitif terhadap latensi, lalu lintas tinggi (dikelompokkan berdasarkan jenis), dan lainnya. Iptables memiliki penghitung yang memungkinkan Anda untuk melihat berapa banyak lalu lintas yang diproses masing-masing aturan. Saya menggunakan Shorewall, yang menambahkan beberapa default yang berguna dan memiliki file aturan yang mudah dibaca untuk membangun firewall saya.
BillThor
2

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 SYNke serverIPaddr:22. Server kembali SYN+ACKke klien. Sekarang giliran klien untuk mengirim ACK. Bagaimana seharusnya aturan penyaringan di server, sehingga hanya "pencocokan" ACKyang diterima? Akan terlihat aturan umum tanpa kewarganegaraan

-A INPUT --proto tcp --port 22 -j ACCEPT

yang lebih liberal daripada aturan stateful yang sesuai. Aturan stateless memungkinkan segmen TCP yang sewenang-wenang, misalnya ACKatau FINtanpa 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.)

countermode
sumber