Saya menginstal versi CentOS 7 minimal pada server pengembangan untuk memvirtualisasikan beberapa tamu linux dengan kvm / qemu.
Untuk menggunakan iptables alih-alih firewalld
saya instal iptables-service
dan 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-file
Penampilan 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/iptables
aturan 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.service
daripada menggunakan systemctl enable iptables
tampaknya 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 -L
tidak 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.
service stop|mask firewalld
)Jawaban:
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
sumber
Pastikan Anda telah menginstal paket layanan iptables:
Jika tidak menginstalnya:
Anda kemudian dapat menggunakan perintah layanan untuk mengontrolnya seperti dengan versi CentOS sebelumnya:
The
save
,stop
,start
,restart
perintah akan semua pekerjaan dan harus memuat boot.sumber
rpm -aq
dengan sendirinya akan mencantumkan semua paket yang diinstal pada sistem dan versinya.rpm -aq <package>
akan mencetak informasi tentang paket yang ditentukan jika diinstal. Jikarpm -aq iptables-services
tidak mengembalikan apa pun, itu artinya paket 'iptables-services' tidak diinstal.iptables-services
tersedia dalam repositori CentOS 7 standar.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.
sumber
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-daemon
kemungkinan merupakan titik awal yang baik).Namun saya tidak tahu apakah fakta itu tampaknya menimpa aturan Anda adalah bug atau fitur. RedHat tampaknya cukup terfokus
firewalld
sebagai solusi firewall di RHEL (dan ini langsung ke CentOS tidak berubah juga) dan mereka mungkin tidak mendukung operasi yang benar dari solusi virtualisasi mereka denganfirewalld
alternatif.sumber
Coba ini:
jalankan aturan iptables Anda di sini sekarang
sumber