ฉันติดตั้ง CentOS 7 เวอร์ชันขั้นต่ำบนเซิร์ฟเวอร์การพัฒนาเพื่อจำลองเสมือนแขกของ linux ด้วย kvm / qemu
หากต้องการใช้ iptables แทนที่จะfirewalld
ติดตั้งiptables-service
และทำ:
systemctl stop firewalld
systemctl mask firewalld
systemctl enable iptables
systemctl start iptables
SELinux /etc/sysconfig/selinux
ถูกปิดใช้งานโดยการแก้ไข
กฎของฉันสำหรับ iptables มีดังต่อไปนี้:
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-save > /etc/sysconfig/iptables
iptables-file
หน้าตาของฉัน:
# 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
ตรวจสอบอย่างรวดเร็วเพื่อดูว่ากฎของฉันถูกต้องในตอนนี้:
[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
แต่หลังจากรีบูตเซิร์ฟเวอร์กฎ iptables จะมีลักษณะดังนี้:
[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
ฉันไม่เข้าใจว่ากฎอื่นมาจากไหน
เมื่อเรียกiptables-restore -c /etc/sysconfig/iptables
กฎที่คาดหวังจะปรากฏขึ้น
ดูเหมือนว่ากฎที่บันทึกไว้จะไม่ถูกโหลดในเวลาบูตหรือว่า "ค่าเริ่มต้น" - กฎจะไม่ถูกล้างออกหรืออะไรก็ตาม
มีปัญหาอะไรที่นี่ ??? ฉันค่อยๆได้รับผมหงอก ...
ขอบคุณสำหรับการตอบกลับอย่างรวดเร็ว :)
ตามที่กล่าวไว้ข้างต้น iptables-services ได้รับการติดตั้งโดยฉัน:
[root@dev1 ~]# rpm -aq iptables-services
iptables-services-1.4.21-13.el7.x86_64
การเปิดใช้งานบริการด้วยsystemctl enable iptables.service
แทนที่จะใช้systemctl enable iptables
ดูเหมือนว่าจะไม่สร้างความแตกต่างเนื่องจากมีการเชื่อมโยงไฟล์บริการเดียวกัน:
[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'
นี่คือเนื้อหาของไฟล์ iptables หลังจากโทร
/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
หลังจากรีบูตสายเพื่อiptables -L
ไม่แสดงกฎที่บันทึกไว้ของฉัน:
[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
บางทีฉันอาจจะทำอะไรผิดขั้นพื้นฐาน แต่ทุกเธรดที่ฉันอ่านทำเช่นเดียวกันและควรจะได้ผล
หากคุณต้องการข้อมูลเพิ่มเติมโปรดบอกฉัน
ในขณะเดียวกันฉันช่วยฉันด้วยการเรียกสคริปต์เล็ก ๆ ที่ฉันต้องเรียกหลังจากรีบูตแต่ละครั้ง
#!/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
นั่นไม่เซ็กซี่ แต่ทำงานได้ไกล แต่ไม่สามารถเป็นทางออกสุดท้ายได้
service stop|mask firewalld
)