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
McLarge Besar
sumber

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.

s.co.tt
sumber
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.

Nathan C
sumber
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