Apa cara kanonik untuk menyimpan aturan iptables

8

iptables, firewall Linux standar, tidak menyimpan aturan antar reboot. Anda harus mengurus ini sendiri. Ada banyak cara untuk melakukan ini. Apa cara kanonik untuk melakukan ini? Apa praktik terbaik?

Saya akan menjawab dengan solusi saya sendiri, tetapi saya tertarik pada solusi lain / lebih baik.

amarillion
sumber
Sangat mirip juga serverfault.com/questions/4934/...
Zoredache

Jawaban:

6

Berikut ini beberapa contoh aturan. Simpan ke /etc/iptables.rules

# Generated by iptables-save v1.3.6 on Wed Oct 24 17:07:29 2007
*filter
:INPUT ACCEPT [89458:132056082]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [263904:15667452]
-A INPUT -i lo -j ACCEPT 
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT 
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7 
-A INPUT -j DROP 
COMMIT
# Completed on Wed Oct 24 17:07:29 2007

tambahkan baris ini di akhir / etc / network / interfaces

pre-up iptables-restore < /etc/iptables.rules
amarillion
sumber
1
Saya akan menunjukkan bahwa ini adalah Ubuntu-spesifik. Untuk varian Red Hat dan Fedora, Anda akan melihat / etc / sysconfig / iptables.
esm
Maksud Anda alih-alih /etc/iptables.rules? Itu tidak ditentukan oleh Ubuntu, saya memilih itu sendiri.
amarillion
4
Saya merujuk pada penambahan ke / etc / network / interfaces; permintaan maaf saya, saya seharusnya lebih jelas. Fedora dan RHEL memiliki skrip init (dinamai "iptables";) yang, jika diaktifkan, pada dasarnya melakukan iptables-restore / etc / sysconfig / iptables.
esm
3

Kami menggunakan banyak aturan iptables , jadi untuk memudahkan administrasi kami melakukan hal berikut:

  • Semua aturan dipanggil dari skrip - skrip dipanggil dari /etc/init.d/firewall (skrip khusus)
  • File nama server / nama jaringan (variabel alamat ip) disimpan, dan dimasukkan dalam setiap skrip iptables untuk konsistensi.
  • skrip terpisah disimpan untuk setiap subnet (mis. pribadi / DMZ / VPN, dll) untuk mempermudah pencarian. Aturan yang termasuk dalam 2 skrip (seperti yang membatasi komunikasi antara pribadi dan DMZ) dimasukkan ke dalam skrip jaringan yang lebih "aman"
  • jika memungkinkan, loop dan loop bersarang digunakan untuk menjaga skrip sesingkat mungkin.
  • setiap aturan atau perubahan baru didokumentasikan dengan komentar sebelum bagian skrip yang sesuai.

Saya tidak tahu apakah ini cara terbaik untuk melakukan ini, tetapi ini telah bekerja dengan baik untuk kami.

Brent
sumber
3

Memang benar ini tergantung lingkungan dan platform, saya telah melihat dua pendekatan yang baik, tergantung pada platform:

  • RHEL / CentOS: menyimpan semua aturan dalam satu file / etc / sysconfig / iptables yang dibaca oleh skrip startup iptables.

  • Debian / Ubuntu: menyimpan semua aturan dalam file khusus layanan terpisah di direktori /etc/iptables.d/. Sebagai contoh, /etc/iptables.d/port_http, /etc/iptables.d/port_dns, di mana port_service memetakan nama layanan di / etc / services.

Dalam kedua kasus, file atau file dikelola oleh alat konfigurasi seperti Chef atau Puppet, dan dibaca oleh skrip startup 'master' untuk iptables yang berjalan saat boot.

jtimberman
sumber
2
Saya akan sangat berhati-hati dengan penamaan Anda dalam contoh Debian / Ubuntu Anda. Ini adalah jenis tempat di mana Anda ingin awalan nama aturan Anda dengan 00, 04, 22, dll. Ada banyak aturan iptables yang bergantung pada pesanan, dan jika Anda memuatnya dalam urutan yang salah, Anda akan memiliki barang rusak. Saya sarankan menyimpannya dalam satu file kecuali Anda benar-benar tahu apa yang Anda lakukan.
Christopher Cashell
1

Selain iptables-save(dan iptables-restore), skema firewall yang rumit lebih baik ditangani dengan program khusus. Misalnya, kami telah menggunakan shorewall("iptables menjadi mudah") untuk mengonfigurasi iptables.

Alat yang lebih sederhana juga tersedia, seperti firestarter dan kmyfirewall .

Gimel
sumber
6
Saya tidak setuju. Kasus-kasus sederhana dapat dengan mudah ditangani dengan program khusus, tetapi untuk aturan yang kompleks, saya tidak bisa memikirkan hal yang lebih jelas daripada iptables (makna yang lebih jelas tidak ambigu, tidak perlu ramah pemula)
Mikeage
2
Tergantung pada mengapa Anda ingin menyederhanakan aturan. Saya pikir file iptables.rules dapat dibaca dengan sempurna. Penting untuk memanfaatkan argumen komentar untuk memahami semuanya.
spoulson
Saya tidak setuju dengan ketidaksetujuan Anda. Jika Anda fokus membuat perintah iptables Anda dapat dibaca, Anda tidak akan memesannya atau menggunakan rantai sehingga aturannya seefisien mungkin.
Zoredache
1
Zoredache - Saya pikir Mikeage lebih benar daripada salah di sini. Aturan iptables bisa sangat tidak ambigu, meskipun mereka (bagi orang yang kurang terampil seperti saya) sulit dibaca. Saya tidak berpikir Mikeage akan mudah dibaca.
Michael Kohne
1

Ini tergantung pada distribusi yang Anda gunakan. Beberapa distribusi terutama yang didasarkan pada distribusi Red Hat menjaga aturan iptables secara otomatis tetapi di direktori khusus mereka sendiri. Saya paling akrab dengan RHEL dan aturan iptables dapat ditemukan di / etc / sysconfig / iptables. Menjadi terbiasa dengan aturan iptables sintaks bisa rumit pada awalnya tetapi cukup mudah setelah Anda terbiasa.

Situs web netfilter memiliki banyak dokumentasi tentang iptables termasuk beberapa perkenalan. Jika Anda ingin membaca sedikit, Anda dapat menemukan banyak informasi bagus di sini: http://www.netfilter.org/documentation/

TrueDuality
sumber
Pada redhat Anda mungkin juga ingin memperbarui / etc / sysconfig / system-config-securitylevel. Di sinilah sistem-config-securitylevel-tui mendapatkan aturan dari saat startup. Jika Anda tidak memperbarui / etc / sysconfig / system-config-securitylevel, jika seseorang menjalankan sistem-config-securitylevel-tui Anda mungkin kehilangan aturan disimpan di / etc / sysconfig / iptables.
Jason Tan
1

Pertanyaan ini sangat dekat dengan menjadi dup dari 4934 dan ini terkait dengan 397 .

Saya menggunakan firehol yang dikombinasikan dengan antarmuka web yang saya kembangkan untuk mengelola file konfigurasi.

Saya sangat suka firehol, ia menyediakan sintaks yang lebih sederhana kemudian menggunakan iptables secara langsung.

  • Anda dapat menggunakan perintah debug firehol untuk mendapatkan perintah iptables apa yang dihasilkan
  • Jika Anda memiliki kesalahan dalam konfigurasi Anda dan Anda memulai firewall, firehol mendeteksi kesalahan dan kembali ke keadaan sebelumnya.
  • Firehol memiliki perintah 'coba' yang dapat Anda gunakan untuk memulai firewall dari jarak jauh, jika perubahan Anda mematikan koneksi Anda, firehol akan kembali ke keadaan sebelumnya, jika Anda tidak mematikan koneksi Anda maka itu akan meminta Anda untuk mengkonfirmasi perubahan.
  • Firehol memiliki sejumlah besar layanan yang telah ditentukan sebelumnya sehingga Anda tidak harus mengingat dengan tepat port apa yang harus Anda buka port mana untuk beberapa protokol yang tidak jelas.
Sakit kepala
sumber
1

Kami menggunakan skrip init khusus, tentu saja. Saya dapat menggunakan for-loop untuk beralih ke daftar port, parsing file konfigurasi lainnya seperti vpn-users, dll. Luar biasa!

Dan iptables-restore tentu saja merupakan cara paling "kanonik" untuk menyimpannya.

Yang ingin saya tambahkan:

Harap dicatat bahwa versi iptables saat ini akan untuk setiap invokasi meminta kernel untuk mengembalikan daftar lengkap rantai. Maka itu akan membuat satu perubahan yang Anda minta. Kemudian akan mengunggah daftar lagi.

Ini lambat (O (n ^ 2)), bagi kami perlu 5 detik yang terlalu lama ;-)

Jika Anda menggunakan iptables-restore, semuanya berjalan dalam satu operasi cepat.

Kristen
sumber