เปิดพอร์ตไฟร์วอลล์บน CentOS 7


339

ฉันใช้ CentOS 7 และฉันต้องแน่ใจว่าพอร์ต 2888 และ 3888 เปิดอยู่

ฉันอ่านบทความนี้แต่สิ่งนี้ไม่ได้ผลเพราะบน CentOS 7 OS ไม่มีiptables saveคำสั่ง

มีคนบอกฉันว่า URL ดังกล่าวข้างต้นไม่ถูกต้องสำหรับ CentOS 7. และฉันควรทำตามนี้ แต่บทความนี้ยังไม่ชัดเจนสำหรับฉันในสิ่งที่คำสั่งที่ฉันต้องดำเนินการ

ฉันก็พบว่า

firewall-cmd --zone=public --add-port=2888/tcp 

แต่สิ่งนี้จะไม่สามารถรีบูตได้

ดังนั้นฉันจะเปิดพอร์ตและทำให้มันอยู่รอดได้เรียบรีบูต?


Stack Overflow เป็นเว็บไซต์สำหรับคำถามการเขียนโปรแกรมและการพัฒนา คำถามนี้ดูเหมือนจะไม่ได้อยู่ที่หัวข้อเพราะมันไม่เกี่ยวกับการเขียนโปรแกรมหรือการพัฒนา ดูหัวข้อใดบ้างที่ฉันสามารถถามเกี่ยวกับที่นี่ในศูนย์ช่วยเหลือ บางทีผู้ใช้ระดับสูงหรือUnix & Linux Stack Exchangeอาจเป็นสถานที่ที่ดีกว่าที่จะถาม
jww

คำตอบ:


653

ใช้คำสั่งนี้เพื่อค้นหาโซนที่ใช้งานของคุณ:

firewall-cmd --get-active-zones

มันจะบอกว่าสาธารณะ dmz หรืออย่างอื่น คุณควรใช้กับโซนที่จำเป็นเท่านั้น

ในกรณีที่มีการพยายามสาธารณะ:

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

จากนั้นอย่าลืมโหลดไฟร์วอลล์ซ้ำเพื่อให้การเปลี่ยนแปลงมีผล

firewall-cmd --reload

มิฉะนั้นให้แทนที่สาธารณะสำหรับโซนของคุณตัวอย่างเช่นหากโซนของคุณคือ dmz:

firewall-cmd --zone=dmz --add-port=2888/tcp --permanent

29
ฉันใช้คำสั่งนี้ แต่มันไม่ได้ผลสำหรับฉันสิ่งที่เปลี่ยน--zone=dmzไป--zone=public
Tom Hall

2
ใช่มันมีประโยชน์ที่จะใช้สาธารณะเช่นกัน โปรดตรวจสอบคำสั่งด้านล่างโดย Sotsir สำหรับการแก้ไขด้วย
ganeshragav

23
ทั้งสองคำตอบที่นี่ไม่มีคำอธิบายใด ๆ จริง ๆ--permanentพวกเขาแค่บอกว่าจะทำ ทั้งคู่จะเป็นคำตอบที่สมบูรณ์และมีประโยชน์มากขึ้นหากมีการอธิบายว่าคำตอบนั้นทำงานอย่างไร จากแหล่งข้อมูลหนึ่งของ OP: "กฎสามารถทำได้อย่างถาวรโดยการเพิ่มตัวเลือก --permanent [... ] ถ้ากฎไม่ได้ทำอย่างถาวรพวกเขาจะต้องนำไปใช้ทุกครั้งหลังจากได้รับการเริ่มต้นเริ่มต้นใหม่หรือโหลดข้อความ จาก firewalld โดยใช้ D-BUS "
dKen

9
อย่าเพิ่งเปิดใช้งานพอร์ตในทุกโซนอย่างสุ่มสี่สุ่มห้า ใช้firewall-cmd --get-active-zonesเพื่อค้นหาโซนที่ใช้ในระบบของคุณ นอกจากนี้ผู้ชาย firewall-cmd
พื้นฐาน 6

1
ในการอ่านเอกสารของ fedora จะระบุThe --permanent option needs to be the first option for all permanent callsไว้ ฉันไม่ได้รับข้อผิดพลาดจากการใช้ข้างต้น แต่ฉันไม่แน่ใจว่านี่จะทำให้เกิดปัญหากับคนอื่นหรือไม่
Marc

113

คำตอบโดยganeshragavถูกต้อง แต่ก็มีประโยชน์ที่จะรู้ว่าคุณสามารถใช้:

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

แต่ถ้าเป็นบริการที่รู้จักคุณสามารถใช้:

firewall-cmd --permanent --zone=public --add-service=http 

จากนั้นโหลดไฟร์วอลล์อีกครั้ง

firewall-cmd --reload

[คำตอบที่แก้ไขเพื่อสะท้อนความคิดเห็นของ Martin Peter คำตอบดั้งเดิมมี--permanentที่ท้ายบรรทัดคำสั่ง]


8
ฉันจะไม่พึ่งพาการใช้--permanentตัวเลือกเมื่อสิ้นสุดคำสั่ง เอกสารอธิบายอย่างชัดเจนว่าควรเป็นตัวเลือกแรก
Martin Peter

1
@MartinPeter man firewall-cmdไม่มีข้อบ่งชี้บนเครื่องของฉัน (Fedora 21)
Jonathon Reinhart

@ JonathonReinhart ฉันหมายถึงFedora's FirewallD Wiki ที่ระบุ: The --permanent option needs to be the first option for all permanent calls.
Martin Peter

มันทำให้ฉัน firewallD ไม่ทำงาน
Rahul Tathod

50

CentOS (RHEL) 7 ได้เปลี่ยนไฟร์วอลล์เพื่อใช้งานfirewall-cmdซึ่งมีแนวคิดเกี่ยวกับโซนซึ่งเหมือนกับเครือข่ายสาธารณะ, บ้านและส่วนตัวใน Windows คุณควรดูที่นี่เพื่อดูว่าคนไหนที่คุณคิดว่าควรใช้ EL7 ใช้เป็นpublicค่าเริ่มต้นดังนั้นนี่คือตัวอย่างที่ฉันใช้ด้านล่าง

คุณสามารถตรวจสอบซึ่งโซนที่คุณกำลังใช้ด้วยและเปลี่ยนมันด้วยfirewall-cmd --list-allfirewall-cmd --set-default-zone=<zone>

จากนั้นคุณจะรู้ว่าโซนใดบ้างที่อนุญาตให้ใช้บริการ (หรือพอร์ต) ใน:

firewall-cmd --permanent --zone=<zone> --add-service=http

firewall-cmd --permanent --zone=<zone> --add-port=80/tcp

คุณสามารถตรวจสอบว่าพอร์ตนั้นเปิดจริงหรือไม่โดยการเรียกใช้:

firewall-cmd --zone=<zone> --query-port=80/tcp

firewall-cmd --zone=<zone> --query-service=http

อ้างอิงถึงเอกสาร ,

เมื่อทำการเปลี่ยนแปลงการตั้งค่าไฟร์วอลล์ในโหมดถาวรการเลือกของคุณจะมีผลเฉพาะเมื่อคุณโหลดไฟร์วอลล์ซ้ำหรือระบบรีสตาร์ท

firewall-cmd --reloadคุณสามารถโหลดการตั้งค่าไฟร์วอลล์ด้วย:


26

Fedora ทำผ่าน iptables

sudo iptables -I INPUT -p tcp --dport 3030 -j ACCEPT
sudo service iptables save

ดูเหมือนว่าจะทำงาน


23

ในการดูพอร์ตที่เปิดอยู่ให้ใช้คำสั่งต่อไปนี้

firewall-cmd --list-ports

เราใช้สิ่งต่อไปนี้เพื่อดูบริการที่พอร์ตเปิดอยู่

firewall-cmd --list-services

เราใช้สิ่งต่อไปนี้เพื่อดูบริการที่พอร์ตเปิดอยู่และดูพอร์ตเปิด

firewall-cmd --list-all

ในการเพิ่มบริการให้กับไฟร์วอลล์เราใช้คำสั่งต่อไปนี้ซึ่งในกรณีนี้บริการจะใช้พอร์ตใด ๆ เพื่อเปิดในไฟร์วอลล์

firewall-cmd --add-services=ntp 

เพื่อให้บริการนี้เปิดอย่างถาวรเราใช้คำสั่งต่อไปนี้

firewall-cmd —add-service=ntp --permanent 

ในการเพิ่มพอร์ตให้ใช้คำสั่งต่อไปนี้

firewall-cmd --add-port=132/tcp  --permanent

ในการเรียกใช้ไฟร์วอลล์จะต้องโหลดซ้ำโดยใช้คำสั่งต่อไปนี้

firewall-cmd --reload

ยาอาลี


ด้านบน "firewall-cmd -add-service = ntp --permanent" ควรเปลี่ยนเป็น "firewall-cmd --add-service = ntp --permanent"
Maduranga Siriwardena

14

ในขณะที่ganeshragavและSotsirให้แนวทางที่ถูกต้องและสามารถนำไปใช้ได้โดยตรงมันมีประโยชน์ที่จะต้องทราบว่าคุณสามารถเพิ่มบริการของคุณเอง/etc/firewalld/servicesได้ สำหรับแรงบันดาลใจให้ดูที่บริการ/usr/lib/firewalld/services/ที่กำหนดไว้ล่วงหน้าของ firewalld

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

ตัวอย่างเช่นคุณสามารถสร้าง/etc/firewalld/services/foobar.xml:

<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>FooBar</short>
  <description>
    This option allows you to create FooBar connections between
    your computer and mobile device. You need to have FooBar
    installed on both sides for this option to be useful.
  </description>
  <port protocol="tcp" port="2888"/>
  <port protocol="tcp" port="3888"/>
</service>

(สำหรับข้อมูลเกี่ยวกับไวยากรณ์ให้ทำman firewalld.service)

เมื่อไฟล์นี้ถูกสร้างขึ้นคุณสามารถfirewall-cmd --reloadทำให้ไฟล์นั้นพร้อมใช้งานและจากนั้นเพิ่มไฟล์ลงในบางโซนด้วย

firewall-cmd --permanent --zone=<zone> --add-service=foobar

ตามด้วยfirewall-cmd --reloadเพื่อให้ใช้งานได้ทันที


6

ในการดูพอร์ตที่เปิดอยู่ให้ใช้คำสั่งต่อไปนี้:

firewall-cmd --list-ports

เราใช้สิ่งต่อไปนี้เพื่อดูบริการที่เปิดพอร์ต:

firewall-cmd --list-services

เราใช้สิ่งต่อไปนี้เพื่อดูบริการที่พอร์ตเปิดอยู่และดูพอร์ตที่เปิดอยู่:

firewall-cmd --list-all

ในการเพิ่มบริการให้กับไฟร์วอลล์เราใช้คำสั่งต่อไปนี้ซึ่งในกรณีนี้บริการจะใช้พอร์ตใด ๆ เพื่อเปิดในไฟร์วอลล์:

firewall-cmd --add-services=ntp 

เพื่อให้บริการนี้เปิดอย่างถาวรเราใช้คำสั่งต่อไปนี้:

firewall-cmd -add-service=ntp --permanent 

ในการเพิ่มพอร์ตให้ใช้คำสั่งต่อไปนี้:

firewall-cmd --add-port=132/tcp  --permanent

4

คำตอบยอดนิยมที่นี่ใช้ได้ แต่ฉันพบบางสิ่งที่หรูหรากว่าในคำตอบของ Michael Hamptonสำหรับคำถามที่เกี่ยวข้อง ตัวเลือก "ใหม่" (firewalld-0.3.9-11 +) --runtime-to-permanentเพื่อfirewall-cmdให้คุณสร้างกฎรันไทม์และทดสอบกฎเหล่านั้นก่อนที่จะทำให้ถาวร:

$ firewall-cmd --zone=<zone> --add-port=2888/tcp
<Test it out>
$ firewall-cmd --runtime-to-permanent

หรือเพื่อย้อนกลับการเปลี่ยนแปลงแบบรันไทม์เท่านั้น:

$ firewall-cmd --reload

ดูความคิดเห็นของ Antony Nguyenด้วย Apparently firewall-cmd - โหลดอาจทำงานไม่ถูกต้องในบางกรณีที่กฎถูกลบไปแล้ว ในกรณีดังกล่าวเขาแนะนำให้เริ่มบริการไฟร์วอลล์อีกครั้ง:

$ systemctl restart firewalld

1

หากคุณมีหลายพอร์ตที่อนุญาตใน Centos 7 FIrewalld เราสามารถใช้คำสั่งต่อไปนี้

#firewall-cmd --add-port={port number/tcp,port number/tcp} --permanent

#firewall-cmd --reload


And check the Port opened or not after reloading the firewall.


#firewall-cmd --list-port


For other configuration [Linuxwindo.com][1]

0

หากคุณคุ้นเคยกับบริการ iptables เช่นใน centos 6 หรือก่อนหน้านี้คุณยังสามารถใช้บริการ iptables โดยการติดตั้งด้วยตนเอง:

ขั้นตอนที่ 1 => ติดตั้ง epel repo

ยำติดตั้ง epel-release

ขั้นตอนที่ 2 => ติดตั้งบริการ iptables

ยำติดตั้งบริการ iptables

ขั้นตอนที่ 3 => หยุดบริการ firewalld

systemctl หยุดการไฟร์วอลล์

ขั้นตอนที่ 4 => ปิดใช้งานบริการ firewalld เมื่อเริ่มต้น

systemctl ปิดการใช้งาน firewalld

ขั้นตอนที่ 5 => เริ่มบริการ iptables

systemctl เริ่มต้น iptables

ขั้นตอนที่ 6 => เปิดใช้งาน iptables เมื่อเริ่มต้น

systemctl เปิดใช้งาน iptables

ในที่สุดคุณก็สามารถแก้ไขการตั้งค่า iptables ได้ที่ / etc / sysconfig / iptables

ดังนั้น -> แก้ไขกฎ -> โหลด / รีสตาร์ท

ทำ centos ที่เก่ากว่าด้วยฟังก์ชันเดียวกันเช่น firewalld


0

Firewalld เป็นบิตที่ไม่ใช้งานง่ายสำหรับทหารผ่านศึก iptables สำหรับผู้ที่ต้องการไฟร์วอลล์ที่ขับเคลื่อนด้วย iptables ด้วยไวยากรณ์เหมือน iptables ในแผนผังที่กำหนดค่าได้ง่ายลองเปลี่ยน firewalld ด้วย fwtree: https://www.linuxglobal.com/fwtree-flexible-linux-tree-based-firewall/ จากนั้น ทำดังต่อไปนี้:

 echo '-p tcp --dport 80 -m conntrack --cstate NEW -j ACCEPT' > /etc/fwtree.d/filter/INPUT/80-allow.rule
 systemctl reload fwtree 

0

สวัสดีใน Centos 7 firewall-cmd ใช่ถูกต้องหากคุณใช้ firewall-cmd --zone = public --add-port = 2888 / tcp แต่ถ้าคุณโหลด firewal firewall-cmd ใหม่ - โหลด

การกำหนดค่าของคุณจะไม่ถูกบันทึก

คุณต้องเพิ่มรหัส

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

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