Saya hosting layanan HTTP dan HTTPS khusus di masing-masing port 8006 dan 8007. Saya menggunakan iptables untuk "mengaktifkan" server; yaitu untuk merutekan port HTTP dan HTTPS yang masuk:
iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 8006 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 8007 -j ACCEPT
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8006
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 8007
iptables -A OUTPUT -t nat -d 127.0.0.1 -p tcp --dport 80 -j REDIRECT --to-ports 8006
iptables -A OUTPUT -t nat -d 127.0.0.1 -p tcp --dport 443 -j REDIRECT --to-ports 8007
Ini bekerja seperti pesona. Namun saya ingin membuat skrip lain yang menonaktifkan server saya lagi; yaitu mengembalikan iptables ke keadaan sebelum menjalankan baris di atas. Namun saya mengalami kesulitan mencari tahu sintaks untuk menghapus aturan-aturan ini. Satu-satunya hal yang tampaknya berhasil adalah flush lengkap:
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
Tapi itu juga akan menghapus aturan iptables lain yang tidak diinginkan.
-I
daripada-A
untukACCEPT
garis. Ini karena biasanya, baris terakhir (untukINPUT
rantai misalnya) adalah aDROP
danREJECT
dan Anda ingin aturan Anda datang sebelum itu.-A
menempatkan aturan baru setelah aturan terakhir, sementara-I
menempatkannya di awal.Jawaban:
Jalankan perintah yang sama tetapi ganti "-A" dengan "-D". Sebagai contoh:
menjadi
sumber
-I
atau-R
, Anda masih dapat menghapusnya dengan-D
.Anda juga dapat menggunakan nomor aturan ( - nomor baris ):
Contoh output:
Jadi, jika Anda ingin menghapus aturan kedua:
Memperbarui
Jika Anda menggunakan (d) tabel tertentu (misalnya nat), Anda harus menambahkannya ke perintah hapus (thx ke @ThorSummoner untuk komentar)
sumber
iptables -L INPUT --line-numbers | grep -oP "([0-9]{1,3}).*tcp.*domain" | cut -d" " -f1
-t nat
sudo iptables -t nat --line-numbers -L
-t nat
sudo iptables -t nat -D PREROUTING 1
Solusi terbaik yang bekerja untuk saya tanpa masalah terlihat seperti ini:
1. Tambahkan aturan sementara dengan beberapa komentar:
2. Ketika aturan ditambahkan dan Anda ingin menghapusnya (atau semuanya dengan komentar ini), lakukan:
Jadi, Anda akan 100% menghapus semua aturan yang cocok dengan $ komentar dan membiarkan baris lain tidak tersentuh. Solusi ini berfungsi selama 2 bulan terakhir dengan sekitar 100 perubahan aturan per hari - tidak ada masalah. Semoga, ini membantu
sumber
iptables -S | grep "${comment}" | sed 's/^-A //' | while read rule; do iptables -D $rule; done
spamhaus
larangan iptables lama , 2) ambil spamhaus.org/drop , 3) grep untuk IP CIDR daniptables -A INPUT -s $ip_cidr -j -m comment --comment "spamhaus"
iptables -S | sed "/$comment/s/-A/iptables -D/e"
;) seperti iniPertama daftar semua aturan iptables dengan perintah ini:
itu daftar seperti:
Kemudian salin baris yang diinginkan, dan ganti
-A
dengan-D
untuk menghapusnya:sumber
iptables: Bad rule (does a matching rule exist in that chain?).
Apa sekarang?nat
dengansudo iptables -S -t nat
dan Anda ingin menghapus salah satu aturan yang dikembalikan, menyalin tidak cukup. Anda harus menambahkan-t nat
, missudo iptables -D ... -t nat
.Gunakan
-D
perintah, ini adalah bagaimanaman
halaman menjelaskannya:Sadarilah perintah ini, seperti semua perintah lainnya (
-A
,-I
) bekerja pada tabel tertentu. Jika Anda tidak bekerja pada tabel (filter
tabel) default , gunakan-t TABLENAME
untuk menentukan tabel target itu.Hapus aturan yang cocok
Catatan: Ini hanya menghapus aturan pertama yang cocok. Jika Anda memiliki banyak aturan yang cocok (ini bisa terjadi di iptables), jalankan beberapa kali.
Hapus aturan yang ditentukan sebagai angka
Selain menghitung angka, Anda dapat mencantumkan nomor baris dengan
--line-number
parameter, misalnya:sumber
iptables -F
Asumsikan bahwa, jika Anda ingin menghapus aturan NAT,
Daftar IPtables yang ditambahkan menggunakan perintah di bawah ini,
Jika Anda ingin menghapus aturan nat dari IPtables, cukup jalankan perintah,
Kemudian, Anda dapat memverifikasi itu,
sumber