Saat menggunakan aturan firewall iptables, mengapa menegaskan status BARU di semua port yang diizinkan?

23

Saya sering melihat iptables dikonfigurasi untuk memungkinkan semua pakets untuk koneksi TERKAIT, dan port layanan khusus untuk koneksi BARU.

Apa alasan untuk menyatakan BARU? Jika koneksi bukan BARU, itu TERKAIT saya kira, jadi aturan port spesifik tidak akan mengeksekusi. Jadi mengapa secara eksplisit menentukan port layanan dengan BARU dan bukan hanya nomor protocoll dan port?

dronus
sumber

Jawaban:

21

Aturan dalam firewall netfilter (iptables) diperiksa secara berurutan dan nasib paket (ACCEPT, DROP, REJECT, dll.) Ditentukan berdasarkan pertandingan pertama.

Dengan membuat firewall statefull dan aturan pertama tipikal -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPTsebagian besar lalu lintas yang sah ke server Anda diterima setelah hanya melewati aturan tunggal itu. Lalu lintas itu tidak perlu melintasi aturan lain.

Tergantung ukuran basis aturan Anda yang bisa berarti perbedaan signifikan dalam kinerja firewall Anda.

Satu-satunya lalu lintas yang sekarang perlu divalidasi oleh firewall adalah koneksi baru secara eksplisit.

Yaitu membandingkan firewall untuk server web publik dengan akses untuk beberapa webmaster dari stasiun kerja mereka:

-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp -m multiport --dports 80,443 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -m iprange --src-range 10.9.8.7-10.9.8.10 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited

Sekitar 99% dari paket yang sah akan menjadi milik koneksi yang sudah mapan, hanya melanggar aturan pertama. Dari paket-paket yang tidak cocok dengan aturan itu, mayoritas harus koneksi baru ke situs web Anda, modul multiport dapat memberikan akses ke HTTP atau HTTPS dalam satu aturan. Webmaster masuk dari sejumlah workstation dengan alamat tetap menggunakan ssh dan sftp dan yang lainnya ditolak.

Firewall tempat aturan dipesan secara logis oleh port TCP:

-A INPUT -p tcp  -m tcp --dport 22  --source 10.9.8.7 -j ACCEPT
-A INPUT -p tcp  -m tcp --dport 22  --source 10.9.8.8 -j ACCEPT
-A INPUT -p tcp  -m tcp --dport 22  --source 10.9.8.9 -j ACCEPT
-A INPUT -p tcp  -m tcp --dport 22  --source 10.9.8.10 -j ACCEPT
-A INPUT -p tcp  -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp  -m tcp --dport 443 -j ACCEPT

Di sini setiap paket ke server web HTTP Anda perlu diperiksa berdasarkan 5 aturan sebelum akses diberikan. Dan dengan lebih banyak layanan yang berjalan di server yang dapat dengan mudah menjadi 50 aturan atau lebih ketika Anda misalnya akan menggunakan fail2ban atau produk serupa.

HBruijn
sumber
1
Jawaban yang sangat bagus (+1 dari saya!) Kecuali Anda mengatakan " akses diizinkan berdasarkan pertandingan pertama ". Jika pertandingan pertama adalah DROP atau REJECT, ini tidak akan mengizinkan akses; jika itu LOG ​​maka Anda harus terus menemukan kecocokan selanjutnya; dan jika rantai kustom terlibat, hal-hal bisa menjadi sangat barok. Saya lebih suka mengatakan bahwa " nasib paket ditentukan berdasarkan kecocokan first-dispositive-match ".
MadHatter mendukung Monica
5
Bisakah Anda merenungkan kasus di mana related/establishedgaris hadir tetapi aturan selanjutnya tidak menegaskan NEW?
Daniel Widrick
13

NEW berarti paket telah memulai koneksi baru.

Ini ditangani oleh modul kernel yang disebut ip_conntrack_*yang membuat Firewall Anda stateful . Firewall stateful dapat menonton arus lalu lintas.

Jika Anda hanya menentukan protokol dan nomor port, Firewall Anda tidak stateful tetapi stateless. Berarti itu hanya membatasi atau memblokir paket. Jenis firewall ini tidak mengetahui aliran data.

Contoh yang baik adalah FTP: FTP aktif menggunakan port 21 untuk saluran kontrol tetapi kemudian menggunakan port 20 untuk saluran data. Dalam kasus Firewall stateful, Anda tidak perlu membuka port 20 secara eksplisit karena terkait dengan koneksi yang baru dibuat sebelumnya pada port 21.

Berikut adalah ekstrak iptableshalaman manual:

BARU - artinya paket telah memulai koneksi baru, atau terkait dengan koneksi yang belum melihat paket di kedua arah.

ESTABLISHED - artinya paket dikaitkan dengan koneksi yang telah melihat paket di kedua arah.

TERKAIT - artinya paket memulai koneksi baru, tetapi dikaitkan dengan koneksi yang ada, seperti transfer data FTP, atau kesalahan ICMP.

KRFFR
sumber
1
Mekanisme apa yang akan 'mengasosiasikan' port 20 dengan port 21? Bisakah koneksi IP yang dibuka ditransfer ke port lain?
Dronus
nf_conntrack_ftp.ko
mateusza
7
-A INPUT -m tcp -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -DROP

Set aturan di atas akan membiarkan paket-paket ke port TCP 22 dengan status INVALIDthroughACCEPT

Tidak Valid : Jika tidak satu pun dari status sebelumnya yang berlaku, paket tersebut dalam status INVALID. Ini bisa disebabkan oleh berbagai jenis probe jaringan tersembunyi, atau itu bisa berarti Anda kehabisan entri CONNTRACK (yang juga harus Anda lihat dinyatakan dalam log). Atau mungkin hanya sepenuhnya jinak.

/unix/57423/how-to-understand-why-the-packet-was-considered-invalid-by-the-iptables


Menegaskan STATE NEWmemastikan bahwa paket-paket INVALID tidak secara keliru diterima.

Dan untuk memperjelas artinya:

  • BARU : Ini adalah Koneksi baru
  • ESTABLISHED : Ini adalah paket yang terlibat dalam koneksi saat ini
  • TERKAIT : Ini adalah koneksi baru, tetapi telah diprediksikan oleh koneksi yang ada
  • INVALID : Tidak satu pun dari yang berlaku di atas.
Daniel Widrick
sumber