CentOS 7 iptables tidak persisten setelah reboot

11

Saya menginstal versi CentOS 7 minimal pada server pengembangan untuk memvirtualisasikan beberapa tamu linux dengan kvm / qemu.

Untuk menggunakan iptables alih-alih firewalldsaya instal iptables-servicedan lakukan:

systemctl stop firewalld
systemctl mask firewalld
systemctl enable iptables
systemctl start iptables

SELinux dinonaktifkan dengan mengedit /etc/sysconfig/selinux.

Aturan saya untuk iptables adalah sebagai berikut:

iptables -Z
iptables -F
iptables -X
iptables -t nat -Z
iptables -t nat -F
iptables -t nat -X
iptables -t nat -A POSTROUTING -o enp6s0 -j MASQUERADE
iptables -A FORWARD -i enp6s0 -o virbr0 -j ACCEPT

Sekarang saya menyimpan pengaturan saya dengan perintah berikut:

iptables-save > /etc/sysconfig/iptables

iptables-filePenampilan saya :

# Generated by iptables-save v1.4.21 on Thu Aug 20 10:46:40 2015
*mangle
:PREROUTING ACCEPT [16736:10889078]
:INPUT ACCEPT [1063:106860]
:FORWARD ACCEPT [15679:10784186]
:OUTPUT ACCEPT [570:71275]
:POSTROUTING ACCEPT [15728:10809742]
-A POSTROUTING -o virbr0 -p udp -m udp --dport 68 -j CHECKSUM --checksum-fill
COMMIT
# Completed on Thu Aug 20 10:46:40 2015
# Generated by iptables-save v1.4.21 on Thu Aug 20 10:46:40 2015
*filter
:INPUT ACCEPT [868:81772]
:FORWARD ACCEPT [8328:7311589]
:OUTPUT ACCEPT [233:32016]
-A FORWARD -i enp6s0 -o virbr0 -j ACCEPT
COMMIT
# Completed on Thu Aug 20 10:46:40 2015
# Generated by iptables-save v1.4.21 on Thu Aug 20 10:46:40 2015
*nat
:PREROUTING ACCEPT [1308:86998]
:INPUT ACCEPT [77:12475]
:OUTPUT ACCEPT [1:72]
:POSTROUTING ACCEPT [1228:74319]
-A POSTROUTING -o enp6s0 -j MASQUERADE
COMMIT
# Completed on Thu Aug 20 10:46:40 2015

Pemeriksaan cepat untuk melihat apakah aturan saya benar untuk saat ini:

[root@dev1 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination 

Tetapi setelah me-reboot server aturan iptables terlihat seperti:

[root@dev1 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     udp  --  anywhere             anywhere             udp dpt:domain
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:domain
ACCEPT     udp  --  anywhere             anywhere             udp dpt:bootps
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:bootps

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             10.0.1.0/24          ctstate RELATED,ESTABLISHED
ACCEPT     all  --  10.0.1.0/24          anywhere            
ACCEPT     all  --  anywhere             anywhere            
REJECT     all  --  anywhere             anywhere             reject-with icmp-port-unreachable
REJECT     all  --  anywhere             anywhere             reject-with icmp-port-unreachable
ACCEPT     all  --  anywhere             anywhere            

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     udp  --  anywhere             anywhere             udp dpt:bootpc

Saya tidak mengerti dari mana aturan lain berasal.

Saat memanggil iptables-restore -c /etc/sysconfig/iptablesaturan yang diharapkan ditampilkan.

Tampaknya aturan yang disimpan tidak dimuat saat boot atau bahwa aturan "default" tidak memerah atau apa pun.

Apa masalah yang terjadi di sini ??? Saya perlahan mendapatkan rambut abu-abu ...


Terima kasih atas tanggapan cepat Anda :)

Seperti yang disebutkan di atas, iptables-services diinstal oleh saya:

[root@dev1 ~]# rpm -aq iptables-services
iptables-services-1.4.21-13.el7.x86_64

Mengaktifkan layanan dengan systemctl enable iptables.servicedaripada menggunakan systemctl enable iptablestampaknya tidak ada bedanya karena file layanan yang sama ditautkan:

[root@dev1 ~]# systemctl disable iptables
rm '/etc/systemd/system/basic.target.wants/iptables.service'
[root@dev1 ~]# systemctl enable iptables.service
ln -s '/usr/lib/systemd/system/iptables.service' '/etc/systemd/system/basic.target.wants/iptables.service'

Ini adalah konten file iptables setelah menelepon /usr/libexec/iptables/iptables.init save

[root@develcluster1 ~]# cat /etc/sysconfig/iptables
# Generated by iptables-save v1.4.21 on Fri Aug 21 14:34:04 2015
*nat
:PREROUTING ACCEPT [351490:22546787]
:INPUT ACCEPT [15751:2400243]
:OUTPUT ACCEPT [324:21186]
:POSTROUTING ACCEPT [304860:18293418]
-A POSTROUTING -o enp6s0 -j MASQUERADE
COMMIT
# Completed on Fri Aug 21 14:34:04 2015
# Generated by iptables-save v1.4.21 on Fri Aug 21 14:34:04 2015
*filter
:INPUT ACCEPT [505048:69178501]
:FORWARD ACCEPT [55815086:22035726185]
:OUTPUT ACCEPT [325986:56595531]
-A FORWARD -i enp6s0 -o virbr0 -j ACCEPT
COMMIT
# Completed on Fri Aug 21 14:34:04 2015
# Generated by iptables-save v1.4.21 on Fri Aug 21 14:34:04 2015
*mangle
:PREROUTING ACCEPT [109215513:66867793592]
:INPUT ACCEPT [505243:69203589]
:FORWARD ACCEPT [108710264:66798590873]
:OUTPUT ACCEPT [326323:56634790]
:POSTROUTING ACCEPT [109036066:66855179944]
-A POSTROUTING -o virbr0 -p udp -m udp --dport 68 -j CHECKSUM --checksum-fill
COMMIT
# Completed on Fri Aug 21 14:34:04 2015

Setelah reboot panggilan untuk iptables -Ltidak menunjukkan aturan saya yang disimpan:

[root@dev1 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     udp  --  anywhere             anywhere             udp dpt:domain
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:domain
ACCEPT     udp  --  anywhere             anywhere             udp dpt:bootps
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:bootps

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             10.0.1.0/24          ctstate RELATED,ESTABLISHED
ACCEPT     all  --  10.0.1.0/24          anywhere            
ACCEPT     all  --  anywhere             anywhere            
REJECT     all  --  anywhere             anywhere             reject-with icmp-port-unreachable
REJECT     all  --  anywhere             anywhere             reject-with icmp-port-unreachable
ACCEPT     all  --  anywhere             anywhere            

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     udp  --  anywhere             anywhere             udp dpt:bootpc

Mungkin saya melakukan kesalahan mendasar. Tetapi setiap utas yang saya baca melakukan ini dengan cara yang sama dan itu harus bekerja.

Jika Anda membutuhkan informasi lebih lanjut, tolong beri tahu saya.

Sementara itu, saya membantu saya dengan memanggil skrip kecil yang harus saya panggil setiap kali reboot.

#!/bin/sh

iptables -Z
iptables -F
iptables -X
iptables -t nat -Z
iptables -t nat -F
iptables -t nat -X
iptables -t nat -A POSTROUTING -o enp6s0 -j MASQUERADE
iptables -A FORWARD -i enp6s0 -o virbr0 -j ACCEPT

iptables --flush
iptables-restore -c /etc/sysconfig/iptables

Itu tidak seksi tapi berfungsi sejauh ini. Tetapi tidak bisa menjadi solusi akhir.

elpado
sumber
Sudahkah Anda memeriksa firewalld karena CentOS7? Tautan terkait: serverfault.com/questions/626521/... Semoga saya tidak keluar dari subjek. Silakan periksa juga jawaban ini stackoverflow.com/a/24827438/2522966 yang memberitahu Anda untuk menghentikan dan menutup layanan firewalld ( service stop|mask firewalld)
Nico

Jawaban:

13

saya pikir Anda perlu mengaktifkan layanan dengan:

systemctl enable iptables.service

dan Anda perlu menjalankan skrip init iptables untuk menyimpan aturan Anda seperti ini:

/usr/libexec/iptables/iptables.init save

Henrik Pingel
sumber
3

Pastikan Anda telah menginstal paket layanan iptables:

rpm -aq iptables-services

Jika tidak menginstalnya:

yum install iptables-services

Anda kemudian dapat menggunakan perintah layanan untuk mengontrolnya seperti dengan versi CentOS sebelumnya:

service iptables save

The save, stop, start, restartperintah akan semua pekerjaan dan harus memuat boot.

Gene
sumber
saya punya perintah iptables. tetapi `rpm -aq iptables-services` tidak menghasilkan apa-apa. Apa artinya?
Saad Masood
rpm -aqdengan sendirinya akan mencantumkan semua paket yang diinstal pada sistem dan versinya. rpm -aq <package>akan mencetak informasi tentang paket yang ditentukan jika diinstal. Jika rpm -aq iptables-services tidak mengembalikan apa pun, itu artinya paket 'iptables-services' tidak diinstal.
Gene
Jika Anda memiliki pertanyaan khusus untuk CentOS 7 dan AWS maka Anda harus memposting pertanyaan yang sama sekali baru, tidak membuat komentar pada jawaban yang tidak terkait. Saya tidak tahu paket apa yang disimpan Amazon dalam repositori mereka, tetapi saya dapat memberitahu Anda bahwa iptables-servicestersedia dalam repositori CentOS 7 standar.
Gene
1

Saya menyiasati ini dengan menambahkan perintah 'service iptables stop \ iptables --flush' ditambahkan ke bawah /etc/rc.d/rc.local

Lingkungan saya adalah Centos 7 KVM dan masalah saya adalah libvirt akan mengisi ulang iptables pada reboot - memblokir akses ke mesin virtual saya.

3pence
sumber
0

Jika saya ingat benar salah satu layanan virtualisasi (dan Anda tampaknya menjalankannya, dilihat dari nama antarmuka virbr0) menambahkan beberapa aturan firewall sendiri untuk mengakomodasi konfigurasi, jaringan dan antarmuka virtual. Silakan melihat-lihat area ini (dan libvirt-daemonkemungkinan merupakan titik awal yang baik).

Namun saya tidak tahu apakah fakta itu tampaknya menimpa aturan Anda adalah bug atau fitur. RedHat tampaknya cukup terfokus firewalldsebagai solusi firewall di RHEL (dan ini langsung ke CentOS tidak berubah juga) dan mereka mungkin tidak mendukung operasi yang benar dari solusi virtualisasi mereka dengan firewalldalternatif.

Tomek
sumber
0

Coba ini:

systemctl stop firewalld
systemctl disable firewalld
systemctl mask --now firewalld
yum -y remove iptables-services
yum -y install iptables-services
systemctl start iptables
systemctl status iptables

echo '# sample configuration for iptables service
# you can edit this manually or use system-config-firewall
# please do not ask us to add additional ports/services to this default configuration
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT' > /etc/sysconfig/iptables

jalankan aturan iptables Anda di sini sekarang

iptables-save > /etc/sysconfig/iptables
iptables-restore < /etc/sysconfig/iptables
systemctl restart iptables
systemctl restart iptables
systemctl enable iptables.service
David Bohbot
sumber