iptables: perbedaan antara paket BARU, ESTABLISHED dan TERKAIT

46

Bagian dari firewall di server:

iptables -A INPUT -p tcp --dport 22 -m state NEW --state -m recent --set

iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 100 --hitcount 10 -j DROP

Ketika saya mencari secara online, saya selalu melihat BARU digunakan dalam aturan itu, tetapi saya kesulitan memahami mengapa ESTABLISHED dan RELATED tidak digunakan.

Seperti ini :

iptables -A INPUT -p tcp --dport 22 -m state NEW,ESTABLISHED,RELATED --state -m recent --set

iptables -A INPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED,RELATED -m recent --update --seconds 100 --hitcount 10 -j DROP

Dapatkah seseorang menjelaskan kepada saya kapan tepatnya paket BARU berubah menjadi DIDIRIKAN dan TERKAIT?

Keris
sumber

Jawaban:

46

Pertimbangkan paket BARU panggilan telepon sebelum penerima mengangkat. Paket ESTABLISHED adalah, "Halo." Dan paket yang TERKAIT adalah jika Anda menelepon untuk memberi tahu mereka tentang email yang akan Anda kirimi mereka. (Surel tersebut TERKAIT.)

Jika analogi saya tidak terlalu bagus, saya pikir halaman manual menanganinya dengan baik:

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

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.

iptables (8) - Halaman manual Linux

Aaron Copley
sumber
9
Karena penasaran, apakah Anda tahu cara menentukan paket yang TERKAIT? Apakah ada beberapa mekanisme yang dapat digunakan aplikasi untuk memberi sinyal kepada iptables bahwa suatu koneksi akan menjadi koneksi terkait, atau apakah itu murni bagian dari bagian stateful dari iptables?
Matthew Scharley
9
Ini ditangani oleh serangkaian modul kernel yang disebut ip_conntrack_ *, masing-masing ditulis untuk protokol tertentu yang menggunakan koneksi yang tidak terkait (seperti FTP). Untuk menjawab pertanyaan Anda, saya pikir Anda perlu memuat modul serupa untuk aplikasi Anda.
Kyle Smith
4
Oke terima kasih. Tetapi kembali ke aturan dengan BARU di dalamnya, bukankah mungkin sebuah paket dapat dibuat terlihat seperti itu sudah DIDIRIKAN dan karenanya tidak diblokir oleh aturan?
Kris
2
@ Kris: Cukup sulit untuk memalsukan paket keluar, jadi dengan kata-kata dari halaman manual dalam jawabannya, saya tidak mengerti caranya. Anda benar bahwa itu mungkin untuk memalsukan paket yang sepertinya terikat untuk koneksi terbuka, tetapi bahkan tanpa firewall, TCP stack hanya akan menjatuhkan paket di lantai jika belum tahu tentang koneksi terbuka dari pengirim. Jika ini pada firewall di router, masih mungkin untuk mempertahankan keadaan ini dengan memeriksa paket SYN/ ACK/ RST/ etc saat mereka melewati router, dan saya berharap iptables melakukan ini.
Matthew Scharley
2
@ Kris: Sesuatu yang mirip dengan ini (walaupun secara teknis tidak identik) digunakan oleh Perangkat Lunak VNC seperti TeamViewer untuk melakukan tunnel melalui firewall / router. Proses ini disebut lubang-meninju . Singkatnya, Anda memiliki PC host (yang mungkin berada di belakang firewall yang membatasi) yang ingin Anda sambungkan dari perangkat yang berbeda (melalui internet). Kedua PC membuka koneksi individual ke server terpisah (mis. TeamViewer Server), yang "memediasi" di antara mereka, sehingga terlihat ke firewall mereka seolah-olah paket terkait, dan dengan demikian PC tersebut dapat membuat koneksi terpisah dengan masing-masing lain.
Levite
14

Asumming baik untuk server dan client bersifat restriktif INPUTdan terbuka OUTPUT, yaitu:

iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT

Dan dari iptables-extensions (8) di atas contoh FTP dalam mode aktif:

1. BARU

BARU Paket telah memulai koneksi baru atau dikaitkan dengan koneksi yang belum melihat paket di kedua arah.

Client on port 50000(sembarang port unprivileged acak) terhubung ke server FTP pada port 21, server akan memerlukan setidaknya ini untuk menerima koneksi masuk ini:

iptables -A INPUT --dport 21 -m state --state NEW -j ACCEPT

2. DIDIRIKAN

DIDIRIKAN Paket ini dikaitkan dengan koneksi yang telah melihat paket di kedua arah.

Sekarang di sisi klien, ia membuka koneksi keluar ke server pada port 21menggunakan port lokal 50000dan ia membutuhkan iptables berikut untuk memungkinkan tanggapan datang dari server (21)ke client (50000):

sudo iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT

3. TERKAIT

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

Sekarang setelah koneksi FTP telah dibuat dan koneksi data akan dilakukan, klien akan membuka soket server (ya, dengan klien FTP aktif menjadi server untuk koneksi data) pada port 60000(menurut pemahaman saya klien akan menandai port ini 60000sebagai RELATEDuntuk koneksi lain dari 50000->21) dan akan mengirimkan nomor port ini ke server menggunakan FTP PORTperintah. Kemudian server FTP akan membuka koneksi baru dari port-nya 20ke port 60000pada klien, dan yah, klien sekarang memerlukan yang berikut untuk memungkinkan koneksi baru ini berhasil:

sudo iptables -A INPUT -m state --state RELATED -j ACCEPT

Akhirnya, agar ini berfungsi, Anda perlu mengaktifkan ip_conntrack_ftpmodul kernel untuk memungkinkan sistem menandai koneksi / paket sebagai RELATED(ini adalah pemahaman saya, saya belum menggali terlalu banyak tentang ini):

modprobe ip_conntrack_ftp
Jaime Hablutzel
sumber
didirikan hanya membutuhkan aliran searah yang sebelumnya berasal secara lokal, bukan tcp jabat tangan 3 arah, apakah pemahaman saya benar?
sdaffa23fdsf
Terima kasih atas jawabannya, untuk yang sudah mapan Anda mengatakan "iptables untuk memungkinkan respons datang dari server (21) ke klien (50000)" jika dari server ke klien mengapa INPUT dan bukan OUTPUT?
Medya
@Medya, karena dari perspektif klien, paket yang dikirim dari server (21) ke klien (50000) adalah paket masuk, jadi untuk klien itu adalah INPUT.
Jaime Hablutzel