Kurangi aturan firewall hingga setengah - aturan iptables untuk tcp dan udp


12

Saya memiliki sejumlah aturan iptables di firewall saya yang terlihat seperti ini:

iptables -A zone_lan_forward -p tcp -d 1.2.3.0/24 -j ACCEPT
iptables -A zone_lan_forward -p udp -d 1.2.3.0/24 -j ACCEPT

Apakah ada jalan pintas untuk memiliki dua aturan - satu untuk tcp dan satu untuk udp - untuk setiap alamat? Maksud saya, bisakah saya melakukan sesuatu seperti ini:

iptables -A zone_lan_forward -p tcp,udp -d 1.2.3.0/24 -j ACCEPT

Jawaban:


22

Buat rantai baru yang akan menerima paket TCP dan UDP, dan lompat ke rantai itu dari aturan permisif IP / port individual:

iptables -N ACCEPT_TCP_UDP
iptables -A ACCEPT_TCP_UDP -p tcp -j ACCEPT
iptables -A ACCEPT_TCP_UDP -p udp -j ACCEPT

iptables -A zone_lan_forward -d 1.2.3.0/24 -j ACCEPT_TCP_UDP

Ini menambahkan overhead dari beberapa baris tambahan, tetapi membagi dua jumlah aturan TCP / UDP.

Saya tidak akan menghilangkan -pargumen, karena Anda tidak hanya membuka firewall untuk ICMP, tetapi juga protokol lainnya. Dari halaman manual iptables di -p:

Protokol yang ditentukan dapat berupa salah satu dari tcp, udp, icmp, atau semua, atau dapat berupa nilai numerik, mewakili salah satu dari protokol ini atau yang berbeda. Nama protokol dari / etc / protocols juga diperbolehkan.

Anda mungkin tidak mendengarkan protokol apa pun kecuali untuk TCP, UDP, dan ICMP sekarang , tetapi siapa yang tahu apa yang mungkin terjadi di masa depan. Akan menjadi praktik yang buruk untuk membiarkan firewall terbuka tanpa perlu.

Penafian: Perintah iptables berada di atas kepala saya; Saya tidak memiliki akses ke kotak untuk menguji ATM mereka.


Ini adalah solusi yang sangat elegan yang tidak membuat firewall tidak perlu terbuka.
— Big McLarge Besar

4
Tetapi metode membuat rantai baru ini akan gagal jika penyaringan dilakukan melalui nomor port tujuan. Adakah yang bisa menyarankan cara mengatasi dari masalah yang disebutkan di atas?
— Amor

@Amor Dalam contoh ini jika Anda menggunakan -p allsemua --dportaturan pada zone_lan_forwardrantai, itu mungkin mencapai apa yang Anda cari. Saya tentu saja mengasumsikan tidak ada cara lain untuk masuk ke rantai itu dengan protokol non-TCP / UDP karena ACCEPT_TCP_UDPrantai tersebut. Jelas ini adalah strategi berisiko jika banyak orang memiliki akses untuk mengubah aturan dan seseorang datang serta mengedit aturan Anda tanpa memahami kehalusan ini.
— Samuel Harmer

Ups. Tidak memperhatikan urutan rantai. Anda perlu mengganti urutan rantai dalam contoh ini juga untuk apa yang saya katakan berfungsi dengan baik. Jadi ACCEPT_TCP_UDPmelompat ke zone_lan_forwardyang kemudian melompat ke ACCEPT.
— Samuel Harmer

2

Jika Anda benar-benar tidak peduli tentang lalu lintas ICMP (yang dapat Anda blokir secara global dengan suatu aturan), Anda bisa menghilangkan flag -p dan itu akan mencakup semua protokol.


Haruskah saya peduli dengan lalu lintas ICMP? Saya sebagian besar peduli dengan akses HTTP.
— Big McLargeHuge

Tidak juga. Anda dapat memblokir ICMP (ping) jika Anda mau tetapi karena melayani lalu lintas HTTP, tidak ada gunanya.
— Nathan C

@NathanC, saya pikir saran untuk membuka SEMUA port ketika OP bertanya bagaimana membagi dua aturannya dapat menyebabkan masalah, sekarang atau di masa depan.
— Jed Daniels

@JedDaniels, -p switch menentukan protokol dan bukan port. Jawaban di bawah ini memiliki alternatif jika mereka ingin mengunci apa pun selain tcp & udp.
— Nathan C

@NathanC Ya, dan menghapus -p berarti "membuka semua protokol, bukan hanya tcp atau udp", yang ceroboh jika tidak berbahaya.
— Jed Daniels
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.