Centos 7 บันทึกการตั้งค่า iptables


58

ปัญหา: iptables รีเซ็ตการตั้งค่าเริ่มต้นหลังจากรีบูตเซิร์ฟเวอร์

ฉันพยายามตั้งกฎเช่นนี้

iptables -I INPUT -p tcp --dport 3000 -j ACCEPT

หลังจากนั้นฉันก็:

service iptables save

และมันเขียนอะไรทำนองนี้กลับมา

iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]

และหลังจากนี้ฉันเพิ่งวิ่งไป (สิ่งนี้ทำครั้งเดียว):

chkconfig iptables on (ฉันได้อ่านแล้วว่าต้องทำสิ่งนี้เพื่อเรียกคืนการตั้งค่าหลังจากรีบูต)

หลังจากนั้นฉันรีบูตและเรียกใช้คำสั่งนี้:

systemctl list-unit-files | grep iptables

และฉันเห็นว่า iptables.service เปิดใช้งานอยู่อย่างไรก็ตามกฎ (เพื่อเปิดพอร์ต 3000) ไม่ทำงานอีกต่อไป

ฉันจะยืนยันการตั้งค่าเหล่านี้ได้อย่างไร


ทำไมคุณไม่ใช้ firewalld ล่ะ? มันอาจยังทำงานอยู่
Michael Hampton

อาจเป็นเพราะไฟร์วอลไม่เหมาะกับสภาพแวดล้อมเซิร์ฟเวอร์ ...
34490 Juan

คำตอบ:


67

CentOS 7 กำลังใช้งานFirewallDตอนนี้!

ตัวอย่าง:

firewall-cmd --zone=public --add-port=3000/tcp --permanent

กฎการโหลดซ้ำ:

firewall-cmd --reload

2
ความคิดใด ๆ ว่าทำไม centos7 image จาก AWS AMI ไม่มี firewallD
Saad Masood

5
หรือคุณสามารถปิดการใช้งานและติดตั้ง firewalld "iptables บริการแพ็กเกจ" เพื่อให้เกิดการทำงานร่วมกันใกล้ iptables พื้นเมือง :)
vagarwal

1
ฉันพยายามกำหนดค่าการส่งต่อพอร์ต 80 -> 8180 สำหรับ lo ( --zone=trusted) ด้วย firewalld-cmd แต่มันไม่ทำงาน (ใช้งานได้--zone=public) การทำเช่นนั้นกับ iptables sudo /sbin/iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8180 ; sudo /sbin/iptables -t nat -I OUTPUT -o lo -p tcp --dport 80 -j REDIRECT --to-port 8180ทำงานได้ (แต่แต่ละอันก็firewalld --reloadเลิกทำสิ่งนี้)
djb

@saad: เพราะ aws ได้ให้บริการไฟร์วอลล์อยู่แล้วดังนั้น ami จึงสามารถรักษาขนาดเล็กไว้ได้
roothahn

มันไม่ใช่! ฉันได้สั่ง Centos 7 VPS และมันมี iptables เป็นค่าเริ่มต้น! เวอร์ชั่นของระบบปฏิบัติการ: 7.5.1804 (Core)
codezombie

66

ปิดใช้งาน firewalld โดยคำสั่งต่อไปนี้:

systemctl disable firewalld

จากนั้นติดตั้ง iptables-service โดยใช้คำสั่งต่อไปนี้:

yum install iptables-services

จากนั้นเปิดใช้งาน iptables เป็นบริการ:

systemctl enable iptables

ตอนนี้คุณสามารถบันทึกกฎ iptable ของคุณโดยใช้คำสั่งต่อไปนี้:

service iptables save

22

บน CentOS 7 ขั้นต่ำคุณอาจต้องติดตั้งiptables-servicesแพ็กเกจ (ขอบคุณ@RichieACCสำหรับคำแนะนำ ):

sudo yum install -y iptables-services

จากนั้นเปิดใช้งานบริการโดยใช้systemd:

sudo systemctl enable iptables.service

และเรียกใช้ initscript เพื่อบันทึกกฎไฟร์วอลล์ของคุณ:

sudo /usr/libexec/iptables/iptables.init save

2

บางทีสคริปต์แบบนี้น่าจะมีประโยชน์กับใครบ้าง?

ระวังว่าคุณจะหลวมสิ่งที่กำหนดค่าในปัจจุบันเพราะมันจะลบ firewalld และล้างกฎปัจจุบันใด ๆ ในตาราง INPUT :

yum remove firewalld && yum install iptables-services

iptables --flush INPUT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT            # Any packages related to an existing connection are OK
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT   # ssh is OK
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 3000 -j ACCEPT   # Port 3000 for IPv4 is OK
iptables -A INPUT -j REJECT # any other traffic is not welcome - this should be the last line
service iptables save       # Save IPv4 IPTABLES rules van memory naar disk
systemctl enable iptables   # To make sure the IPv4 rules are reloaded at system startup

ฉันเดาว่าคุณต้องการเหมือนกันในกรณีที่ระบบของคุณอาจเข้าถึง (ตอนนี้หรือทุกเวลาภายหลัง) จากปริมาณการใช้งาน IPv6:

ip6tables --flush INPUT
ip6tables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT            # Any packages related to an existing connection are OK
ip6tables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT   # ssh is OK
ip6tables -A INPUT -m state --state NEW -m tcp -p tcp --dport 3000 -j ACCEPT   # Port 3000 for IPv6 is OK
ip6tables -A INPUT -j REJECT # any other traffic is not welcome - this should be the last line
service ip6tables save       # Save IPv6 IPTABLES rules van memory naar disk
systemctl enable ip6tables   # To make sure the IPv6 rules are reloaded at system startup

1

คุณสามารถแก้ไขไฟล์ / etc / sysconfig / iptables ได้โดยตรง โหลดบริการ iptables เพื่อโหลดกฎจากไฟล์นั้นอีกครั้ง แต่อย่างที่คุณบอกไปแล้ว firewalld เป็นระบบไฟร์วอลล์เริ่มต้นใหม่สำหรับ Centos และนี่เป็นโอกาสที่ดีในการเรียนรู้วิธีใช้งานคุณไม่คิดอย่างนั้นหรือ


7
ใน CentOS7 ไม่มีไฟล์ / etc / sysconfig / iptables อีกต่อไป
roothahn

1
ขออภัย @roothahn แต่มีอยู่แน่นอน ... เว้นแต่คุณจะพลาดแพ็คเกจบางอย่าง จาก /usr/lib/systemd/system/iptables.service คุณจะเห็นว่าสิ่งที่เปิดตัวจริงคือ "/usr/libexec/iptables/iptables.init start" ซึ่งเป็นสคริปต์เก่าและเก่าที่กำลังมองหาไฟล์คอนฟิกูเรชันเก่าตามปกติ ใน / etc / sysconfig
เมา

1
ใช่/etc/sysconfig/iptablesไม่มีอยู่สำหรับฉันเช่นกัน อย่างไรก็ตาม/etc/sysconfig/iptables-configมีอยู่จริง แต่มันไม่ได้มีกฎไฟร์วอลล์อยู่ในนั้นอย่างที่มันiptablesเคยเป็นมาก่อน
Kentgrav

2
ฉันพบว่าไฟล์ไม่ได้มีอยู่ในค่าเริ่มต้นติดตั้งน้อยที่สุดอย่างใดอย่างหนึ่ง CentOS 7 ไม่ได้ติดตั้ง iptables.service ตามค่าเริ่มต้นดูเหมือนว่า "yum install -y iptables.service" ติดตั้งบริการและสร้างค่าเริ่มต้น / etc / sysconfig / iptables สำหรับฉัน
RichieACC

3
นั่นควรเป็น "yum install iptables-services"
qris
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.