ipOST CentOS 7 ไม่คงอยู่หลังจากรีบูต


11

ฉันติดตั้ง 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

นั่นไม่เซ็กซี่ แต่ทำงานได้ไกล แต่ไม่สามารถเป็นทางออกสุดท้ายได้


คุณตรวจสอบ firewalld ว่าเป็น CentOS7 หรือไม่ ลิงค์ที่เกี่ยวข้อง: serverfault.com/questions/626521/…หวังว่าฉันจะไม่ออกจากเรื่อง กรุณาตรวจสอบคำตอบนี้stackoverflow.com/a/24827438/2522966ที่บอกให้คุณหยุดและปิดบังบริการ firewalld ( service stop|mask firewalld)
Nico

คำตอบ:


13

ฉันคิดว่าคุณต้องเปิดใช้งานบริการด้วย:

systemctl enable iptables.service

และคุณต้องเรียกใช้สคริปต์ init ของ iptables เพื่อบันทึกกฎของคุณดังนี้:

/usr/libexec/iptables/iptables.init save


3

ตรวจสอบให้แน่ใจว่าคุณได้ติดตั้งแพ็คเกจ iptables-services:

rpm -aq iptables-services

หากไม่ได้ติดตั้ง:

yum install iptables-services

จากนั้นคุณสามารถใช้คำสั่งบริการเพื่อควบคุมเหมือนกับ CentOS เวอร์ชันก่อนหน้า:

service iptables save

save, stop, start, restartคำสั่งจะทำงานและมันควรจะโหลดในการบูต


ฉันมีคำสั่ง iptables แต่ `rpm -aq iptables-services 'ไม่เอาท์พุทอะไรเลย นั่นหมายความว่าอย่างไร?
Saad Masood

rpm -aqโดยตัวมันเองจะแสดงรายการแพ็คเกจทั้งหมดที่ติดตั้งบนระบบและเวอร์ชั่นของมัน rpm -aq <package>จะพิมพ์ข้อมูลเกี่ยวกับแพ็คเกจที่กำหนดหากติดตั้งไว้ หากrpm -aq iptables-services ไม่มีสิ่งใดแสดงว่าไม่มีการติดตั้งแพ็คเกจ 'iptables-services'
ยีน

หากคุณมีคำถามเฉพาะกับ CentOS 7 และ AWS คุณควรโพสต์คำถามใหม่ทั้งหมดอย่าแสดงความคิดเห็นกับคำตอบที่ไม่เกี่ยวข้อง ฉันไม่รู้ว่าแพคเกจใดที่ Amazon เก็บไว้ในที่เก็บของพวกเขา แต่ฉันสามารถบอกคุณได้ว่าiptables-servicesมีอยู่ในที่เก็บ CentOS 7 พื้นฐานที่เป็นมาตรฐาน
ยีน

1

ฉันได้รับสิ่งนี้โดยการเพิ่ม 'service iptables stop \ iptables --flush' คำสั่งต่อท้าย /etc/rc.d/rc.local ด้านล่าง

สภาพแวดล้อมของฉันคือ Centos 7 KVM และปัญหาของฉันคือ libvirt จะเติม iptables อีกครั้งเมื่อรีบูต - บล็อกการเข้าถึงเครื่องเสมือนของฉัน


0

ถ้าฉันจำได้อย่างถูกต้องหนึ่งในบริการการจำลองเสมือน (และดูเหมือนว่าคุณกำลังใช้งานอยู่การตัดสินจากชื่ออินเทอร์เฟซของ virbr0) ได้เพิ่มกฎไฟร์วอลล์บางอย่างเพื่อรองรับการกำหนดค่าเครือข่ายเสมือนจริงและอินเตอร์เฟส โปรดดูที่บริเวณนี้ (และlibvirt-daemonน่าจะเป็นจุดเริ่มต้นที่ดี)

ฉันไม่ทราบว่าหากข้อเท็จจริงที่ว่ามันเขียนทับกฎของคุณเป็นข้อผิดพลาดหรือคุณสมบัติ RedHat ดูเหมือนว่าจะเน้นไปfirewalldที่โซลูชั่นไฟร์วอลล์ใน RHEL (ซึ่งจะเปลี่ยนเป็น CentOS โดยตรงเช่นกัน) และพวกเขาอาจไม่สนับสนุนการทำงานที่ถูกต้องของโซลูชันเวอร์ช่วลไลเซชั่นด้วยfirewalldทางเลือกอื่น


0

ลองสิ่งนี้:

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

ดำเนินการกฎ iptables ของคุณที่นี่ตอนนี้

iptables-save > /etc/sysconfig/iptables
iptables-restore < /etc/sysconfig/iptables
systemctl restart iptables
systemctl restart iptables
systemctl enable iptables.service
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.