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.


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

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.


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.


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 .


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/


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.

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.

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.