Mengapa layanan Iptables tidak bertahan menyimpan perubahan saya?

18

Saya mengikuti tutorial ini untuk mengatur aturan IP di ubuntu 12.04. Semuanya bekerja dengan baik pada pengaturan - tapi sekarang saya telah membuat perubahan pada firewall yang tidak bertahan saat reboot. Saya tidak mengerti mengapa itu terjadi. Berikut ini adalah demonstrasi bagaimana saya menggunakan iptables-persistent. Apa yang saya lakukan salah?

$ sudo service iptables-persistent start
 * Loading iptables rules...                                                                                             *  IPv4...                                                                                                              *  IPv6...   

$ sudo iptables -L   //shows a certain rule
$ iptables -D INPUT ... //command successfully drops the rule
$ sudo iptables -L   //shows rule has been deleted

 $ sudo service iptables-persistent restart
 * Loading iptables rules...                                                                                             *  IPv4...                                                                                                              *  IPv6...                                                                                                      [ OK ] 
 $ sudo iptables -L  //rule is back
bernie2436
sumber
Saya perhatikan iptables -D INPUTaturannya tidak masuk sudo, Anda yakin ini benar-benar melaporkan kesuksesan? Apakah perilaku berubah jika Anda menjalankannya di dalam sudo?
Bratchley

Jawaban:

41

iptables-persistenttidak bekerja seperti itu. Restart iptables-persistent"layanan" tidak menangkap kondisi saat ini dari iptables dan menyimpannya; semua yang dilakukannya adalah mengembalikan aturan iptables yang disimpan ketika paket terakhir dikonfigurasi.

Untuk mengonfigurasi iptables-persistent, Anda perlu memberi tahu tentang aturan dasar iptables Anda saat ini.

Salah satu cara untuk mencapai itu adalah sebagai berikut:

iptables-save >/etc/iptables/rules.v4
ip6tables-save >/etc/iptables/rules.v6

Atau, yang setara, iptables-persistentpaket ini juga menyediakan yang berikut:

dpkg-reconfigure iptables-persistent

(Anda harus menjawab ya untuk pertanyaan tentang apakah akan menyimpan aturan.)

Setelah itu, waktu berikutnya iptables-persistentdimulai / direstart, aturan iptables yang Anda harapkan akan dimuat.

Steven Monday
sumber
9

Cara yang sangat sederhana untuk menyimpan aturan iptables saat ini adalah dengan menggunakan perintah:

sudo service netfilter-persistent save

Menggunakan hal di atas, yang berfungsi setidaknya di Ubuntu setelah menginstal paket netfilter-persistent(dan iptables-persistent), tidak perlu menjalankan secara manual perintah iptables atau mengkonfigurasi ulang paket (seperti yang disarankan oleh jawaban yang diterima di atas).

OpenITeX
sumber
Apakah itu sudo service netfilter-persistent saveatau sudo service netfilter-persistent save .? (Dot di akhir.)
Terima kasih telah mencatat itu, perintah yang benar adalah tanpa titik di akhir baris. Koreksi Jawaban sesuai.
OpenITeX
3
$ iptables ... DROP //command successfully drops the rule
$ sudo iptables -L   //shows rule has been deleted

Bukan itu yang DROPberarti atau tidak. Dari man iptables:

... nilai khusus MENERIMA, MENGURANGI, ANTRIAN , atau PENGEMBALIAN. ACCEPT berarti membiarkan paket lewat. DROP artinya menjatuhkan paket di lantai. QUEUE berarti ...

Jadi yang Anda lakukan adalah menambahkan aturan baru. Ini mungkin secara efektif menggantikan sejumlah aturan lain, tetapi aturan itu masih ada.

Saat memeriksa hal-hal seperti ini ( iptables -Loutput Anda ), saya akan memberinya makan grep "string unique to this rule"daripada menggunakan mata Anda. Lebih mudah dan lebih cepat untuk dilakukan, dan lebih sedikit rawan kesalahan.

iptables -L | grep "some unique string"

Jika Anda ingin menghapus aturan, gunakan -Dsakelar; halaman manual menjelaskan dua bentuk ini:

-D, --hapus aturan-spesifikasi rantai

-D, --delete chain ruleenum

Hapus satu atau lebih aturan dari rantai yang dipilih. Ada dua versi dari perintah ini: aturan dapat ditentukan sebagai angka dalam rantai (mulai dari 1 untuk aturan pertama) atau aturan yang cocok.

goldilocks
sumber
maaf itu tidak jelas. Saya menggunakan opsi -D untuk DROP aturan. Lihat perubahan di atas
bernie2436
3
-Dsingkatan dari "delete" not "DROP" Menggunakan istilah "DROP" berarti apa pun selain target lompatan ketika berbicara tentang iptablesmembingungkan membingungkan.
Bratchley
1

Seperti yang dijelaskan oleh @ steven-monday , Anda dapat menyimpan aturan yang Anda tentukan sendiri di direktori yang benar (yaitu:) /etc/iptables/rules.v{4,6}.

Namun, @OpenITeX benar: memanggil savetindakan service netfilter-persistentlebih baik.

Sampai hari ini (di 18,10), iptables-save builtin, tetapi iptables-persistentini tidak diinstal. Karenanya, direktori plugin yang dipanggil oleh service netfilter-persistentkosong, dan layanan mencetak bahwa ruleset disimpan, padahal sebenarnya tidak.

TLDR: instal iptables-persistentdan periksa apakah direktori /usr/share/netfilter-persistent/plugins.dplugin berisi plugin.


Inilah cara saya mengetahuinya:

$ cat /etc/init.d/netfilter-persistent 
...
case "$1" in
...
save)
    log_action_begin_msg "Saving netfilter rules"
    /usr/sbin/netfilter-persistent save
    log_action_end_msg $?
    ;;

Kemudian periksa /usr/sbin/netfilter-persistentskrip, perhatikan skrip eksternal yang dipanggil:

$ cat /usr/sbin/netfilter-persistent
...
PLUGINS=/usr/share/netfilter-persistent/plugins.d
...
run_plugins () {
    if [ -d ${PLUGINS} ]; then
        run-parts -v -a ${1} ${PLUGINS}
    fi
}

case $1 in
start|save|flush)
    run_plugins ${1}
    ;;

Kemudian saya perhatikan bahwa /usr/share/netfilter-persistent/plugins.ditu kosong.

Aif
sumber
1

Instal iptables-persistent:

sudo apt install iptables-persistent

simpan aturan setelah melakukan perubahan yang diinginkan:

sudo netfilter-persistent save
Zack A
sumber