บริการบางอย่างอาจทำงานอยู่บนเซิร์ฟเวอร์ SLES 15 แต่ยังคงเกิดการหมดเวลา (timeout) สำหรับไคลเอนต์ระยะไกล เนื่องจากไฟร์วอลล์บล็อกการรับส่งข้อมูลขาเข้าใหม่ วิธีแก้ไขโดยทั่วไปคือการระบุโซน firewalld ที่ใช้งานอยู่ และอนุญาตเฉพาะบริการหรือพอร์ตที่แอปพลิเคชันต้องการเท่านั้น เครื่องมือบรรทัดคำสั่ง SLES สำหรับงานนี้คือ `sudo apt- firewall-cmdin`
คู่มือนี้อ้างอิงจากคู่มือความปลอดภัยและการเสริมความแข็งแกร่งของ SLES 15 SP7 และเอกสารอ้างอิงคำสั่ง firewalld ของ SUSE ซึ่งตรวจสอบเมื่อวันที่ 7 ตุลาคม 2026 Service Pack รุ่นก่อนหน้าและระบบ SLES 12 ที่ได้รับการอัปเกรดอาจมีสถานะที่แตกต่างกันหรือมีการกำหนดค่าไฟร์วอลล์แบบเดิม ภาพในเทอร์มินัลแสดงตัวอย่าง ไม่ใช่ผลลัพธ์ที่บันทึกจากเซิร์ฟเวอร์จริง โปรดแทนที่ชื่ออินเทอร์เฟซ โซน และบริการด้วยค่าที่มีในเครื่องของคุณ
1. ตรวจสอบว่า firewalld กำลังทำงานอยู่หรือไม่
เอกสารของ SUSE ระบุว่า firewalld ถูกติดตั้งและเปิดใช้งานโดยค่าเริ่มต้นใน SLES 15 โดยปกติ YaST จะเริ่มต้นใช้งานหลังจากติดตั้งเสร็จและกำหนดอินเทอร์เฟซให้อยู่ในpublicโซนเริ่มต้น อย่างไรก็ตาม ควรตรวจสอบเครื่องจริงแทนที่จะคิดว่าค่าเริ่มต้นไม่ได้เปลี่ยนแปลง เรียกใช้คำสั่งเหล่านี้ด้วยบัญชีที่ได้รับอนุญาตให้ใช้งานsudo:
sudo systemctl status firewalld
sudo firewall-cmd --state
ตัวจัดการบริการควรรายงานว่าบริการนั้นfirewalldทำงานอยู่ และfirewall-cmd --stateควรรายงานสถานะrunningหากติดตั้งบริการแล้วแต่หยุดทำงาน ให้เริ่มบริการและเปิดใช้งานเมื่อบูตเครื่อง:
sudo systemctl enable --now firewalld
หากfirewall-cmdไฟล์ดังกล่าวหายไป ให้ตรวจสอบว่าได้firewalldติดตั้งแพ็กเกจนั้นแล้วและพร้อมใช้งานในที่เก็บซอฟต์แวร์ของ SUSE ที่เปิดใช้งานอยู่หรือไม่ อย่าติดตั้งหรือเปลี่ยนส่วนประกอบไฟร์วอลล์โดยพลการบนเซิร์ฟเวอร์ที่ได้รับการจัดการ
เทอร์มินัลตัวอย่างจะตรวจสอบสถานะของ firewalld และแสดงตัวอย่างโซนสาธารณะที่ใช้งานอยู่โดยใช้ส่วนต่อประสาน eth0
2. ค้นหาโซนที่ปกป้องอินเทอร์เฟซของเซิร์ฟเวอร์
Firewalld จัดกลุ่มกฎต่างๆ ไว้ในโซนซึ่งแสดงถึงระดับความน่าเชื่อถือที่แตกต่างกันpublicโดยทั่วไปแล้ว โซนจะใช้สำหรับเครือข่ายที่ไม่น่าเชื่อถือ บริการที่เปิดใช้งานในโซนหนึ่งจะไม่เปิดใช้งานในทุกโซนโดยอัตโนมัติ ดังนั้นกฎที่ถูกต้องในโซนที่ไม่ถูกต้องอาจทำให้แอปพลิเคชันของคุณไม่สามารถเข้าถึงได้
sudo firewall-cmd --get-active-zones
sudo firewall-cmd --get-default-zone
sudo firewall-cmd --zone=public --list-all
ใช้ผลลัพธ์ของคำสั่ง active-zone เพื่อค้นหาโซนที่เชื่อมต่อกับอินเทอร์เฟซที่รับส่งข้อมูลของไคลเอ็นต์ ชื่ออินเทอร์เฟซอาจเป็นeth0, ens160, หรือชื่ออื่น หากคุณต้องการตรวจสอบอินเทอร์เฟซเดียว ให้รันคำสั่ง:
sudo firewall-cmd --get-zone-of-interface=eth0
แทนที่eth0ด้วยอินเทอร์เฟซจริง อินเทอร์เฟซที่ไม่ได้กำหนดให้กับโซนอย่างชัดเจนจะถูกจัดการโดยโซนเริ่มต้น หลีกเลี่ยงการเปลี่ยนโซนเริ่มต้นโดยพลการ เพราะอาจส่งผลกระทบต่ออินเทอร์เฟซที่ขึ้นอยู่กับโซนนั้น บนเซิร์ฟเวอร์ระยะไกล ให้ระบุโซน SSH หรือโซนการจัดการอื่นๆ และยืนยันกฎการเข้าถึงก่อนที่จะโหลดการตั้งค่าไฟร์วอลล์ใหม่ ควรเตรียมช่องทางการกู้คืนผ่านคอนโซลหรือช่องทางการกู้คืนนอกแบนด์ไว้ให้พร้อมใช้งานหากมีอยู่
รายการโซนแสดงให้เห็นว่าอินเทอร์เฟซและบริการใดบ้างที่เชื่อมโยงกับโซนสาธารณะตัวอย่างก่อนที่จะมีการเปลี่ยนแปลงใดๆ
3. เลือกบริการที่มีชื่อหรือพอร์ตที่เฉพาะเจาะจง
บริการ firewalld คือคำจำกัดความที่มีชื่อ ซึ่งสามารถรวมพอร์ตและโปรโตคอลได้ตั้งแต่หนึ่งรายการขึ้นไป โดยปกติแล้ว การอนุญาตบริการที่รู้จักโดยใช้ชื่อจะง่ายกว่าการจำหมายเลขพอร์ต ตรวจสอบรายการบริการที่ติดตั้งและตรวจสอบคำจำกัดความก่อนใช้งาน:
sudo firewall-cmd --get-services
sudo firewall-cmd --info-service=http
สำหรับเว็บเซิร์ฟเวอร์httpบริการที่กำหนดไว้ล่วงหน้าโดยทั่วไปจะครอบคลุมพอร์ต TCP 80 httpsส่วนบริการสำหรับทราฟฟิกเว็บ TLS จะแยกต่างหาก เอกสารประกอบของ SLES แสดงวิธีการแบบบริการเดียวกันนี้พร้อมตัวอย่างเช่น DHCP ใช้บริการที่แอปพลิเคชันของคุณต้องการจริง และตรวจสอบคำจำกัดความของบริการในเครื่องหากคุณไม่แน่ใจ
หากไม่มีบริการที่กำหนดไว้ล่วงหน้าที่เหมาะสม ให้เปิดเฉพาะพอร์ตและโปรโตคอลที่จำเป็นเท่านั้น ตัวอย่างเช่น แอปพลิเคชันที่รับฟังบนพอร์ต TCP 8443 สามารถอนุญาตได้โดยใช้--add-port=8443/tcpการเปิดพอร์ตในไฟร์วอลล์ไม่ได้เป็นการเริ่มต้นแอปพลิเคชัน ผูกแอปพลิเคชันเข้ากับเครือข่าย หรือทำให้ปลอดภัย โปรดตรวจสอบให้แน่ใจว่าบริการนั้นได้รับการกำหนดค่าให้รับฟังบนที่อยู่ดังกล่าวแล้ว
ทดสอบกฎชั่วคราวก่อน
สำหรับการทดสอบระยะสั้น ให้ใช้กฎกับค่าการกำหนดค่าขณะรันไทม์ การเปลี่ยนแปลงขณะรันไทม์จะมีผลทันที แต่จะหายไปหลังจากรีโหลดไฟร์วอลล์หรือรีสตาร์ทบริการ เว้นแต่คุณจะบันทึกการเปลี่ยนแปลงเหล่านั้นอย่างถาวรด้วย Firewalld รองรับกฎที่มีระยะเวลาจำกัด ซึ่งมีประโยชน์เมื่อคุณต้องการให้การทดสอบหมดอายุโดยอัตโนมัติ:
sudo firewall-cmd --zone=public --add-service=http --timeout=5m
สำหรับการทดสอบพอร์ตแบบครั้งเดียว ให้ใช้--add-port=8443/tcp --timeout=5mแทน--add-service=httpเลือกโซนที่ประกอบด้วยอินเทอร์เฟซของเซิร์ฟเวอร์จริง ๆ อย่าคัดลอกpublicหากโฮสต์ของคุณใช้โซนอื่น
คำสั่งตัวอย่างนี้จะเพิ่มบริการ HTTP ลงในการกำหนดค่าถาวรของโซนสาธารณะ จากนั้นจะรีโหลด firewalld เพื่อนำการตั้งค่าไปใช้
4. บันทึกกฎและรีโหลด firewalld
เมื่อคุณพร้อมที่จะใช้กฎนี้ ให้เพิ่มกฎนั้นลงในการตั้งค่าถาวร ตัวอย่างต่อไปนี้อนุญาตให้ใช้ HTTP ในโซนสาธารณะ:
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --reload
สำหรับ HTTPS ให้ทำซ้ำคำสั่งถาวรด้วย--add-service=https. สำหรับพอร์ตแอปพลิเคชันที่กำหนดเอง ให้ใช้คำสั่งเช่น:
sudo firewall-cmd --permanent --zone=public --add-port=8443/tcp
sudo firewall-cmd --reload
ตัวอย่างเหล่านี้จะแก้ไขการตั้งค่าถาวรก่อน จากนั้นจึงโหลดการตั้งค่าใหม่เพื่อให้กฎใหม่มีผลใช้งาน การโหลดใหม่จะแทนที่การตั้งค่าขณะทำงานด้วยการตั้งค่าถาวร ดังนั้นการเปลี่ยนแปลงใดๆ ที่เกิดขึ้นขณะทำงานเท่านั้นอาจถูกยกเลิก ก่อนที่จะโหลดระบบที่ใช้งานจริงใหม่ โปรดตรวจสอบกฎขณะทำงานและกฎถาวรที่สำคัญ โดยเฉพาะอย่างยิ่งการเข้าถึงการดูแลระบบจากระยะไกล
นอกจากนี้ยังมีเวิร์กโฟลว์แบบรันไทม์เป็นหลัก: ทดสอบกฎในขณะรันไทม์ ยืนยันว่าบริการทำงานได้ จากนั้นเพิ่มกฎเดียวกันนั้น--permanentและโหลดใหม่ หลีกเลี่ยงการใช้--runtime-to-permanentเป็นทางลัดเว้นแต่คุณตั้งใจจะบันทึกกฎรันไทม์ปัจจุบันทั้งหมด รวมถึงการเปลี่ยนแปลงชั่วคราวที่ทำโดยผู้ดูแลระบบหรือซอฟต์แวร์อื่น ๆ
คุณจะตรวจสอบได้อย่างไรว่าการเปลี่ยนแปลงนั้นได้ผล?
ตรวจสอบทั้งกฎรันไทม์ที่ใช้งานอยู่และกฎที่บันทึกไว้ สำหรับบริการ HTTP ในโซนสาธารณะ ให้รันคำสั่ง:
sudo firewall-cmd --zone=public --query-service=http
sudo firewall-cmd --permanent --zone=public --list-services
sudo firewall-cmd --check-config
การค้นหาควรส่งคืนyesค่า รายการบริการถาวรควรมีhttpและการตรวจสอบการกำหนดค่าควรเสร็จสมบูรณ์อย่างประสบความสำเร็จ สำหรับกฎพอร์ต ให้ใช้--query-port=8443/tcpและ--list-portsในคำสั่งที่เทียบเท่ากัน ทดสอบจากไคลเอนต์อื่นที่สามารถเข้าถึงเซิร์ฟเวอร์ได้ด้วย การตรวจสอบไฟร์วอลล์ภายในเครื่องยืนยันว่ากฎมีอยู่จริง ไม่ใช่ว่า DNS การกำหนดเส้นทาง ไฟร์วอลล์ต้นทาง หรือตัวรับฟังแอปพลิเคชันถูกต้อง
คำสั่งตรวจสอบจะตรวจสอบกฎบริการที่ใช้งานอยู่ รายการบริการที่บันทึกไว้ และไวยากรณ์การกำหนดค่าถาวร
ปัญหาที่พบได้ทั่วไปและวิธีแก้ไขที่ปลอดภัย
- กฎดังกล่าวมีอยู่แล้ว แต่การเชื่อมต่อยังคงหมดเวลา:ตรวจสอบให้แน่ใจว่าได้เพิ่มกฎนั้นลงในโซนที่เชื่อมต่อกับอินเทอร์เฟซที่ลูกค้าใช้งานอยู่ จากนั้นตรวจสอบว่าแอปพลิเคชันกำลังรับฟังอยู่ที่ที่อยู่และพอร์ตที่คาดไว้ และตรวจสอบไฟร์วอลล์เครือข่ายต้นทางด้วย
- กฎดังกล่าวใช้งานได้จนกระทั่งโหลดหน้าเว็บใหม่:น่าจะถูกเพิ่มเข้าไปเฉพาะในระหว่างการทำงานเท่านั้น ให้เพิ่มกฎนั้นเข้าไป
--permanentแล้วโหลดหน้าเว็บใหม่ จากนั้นจึงสอบถามการตั้งค่าทั้งสองแบบ
- การเข้าถึง SSH มีความเสี่ยง:ตรวจสอบบริการในโซนที่ใช้งานอยู่และบริการถาวรก่อนทำการรีโหลด หากจำเป็นต้องใช้ SSH และไม่มีอยู่ ให้เพิ่ม
sshบริการลงในโซนที่ถูกต้องอย่างถาวรก่อนทำการรีโหลด อย่าปิดเซสชันระยะไกลปัจจุบันของคุณจนกว่าคุณจะทดสอบการเชื่อมต่อครั้งที่สองแล้ว
- คุณกำลังย้ายระบบจาก SUSE เวอร์ชันเก่ากว่า: SLES 15 ได้แทนที่ SuSEfirewall2 ด้วย firewalld แล้ว SUSE เตือนว่าโปรไฟล์ไฟร์วอลล์แบบเก่ามีความเข้ากันได้กับเวอร์ชันเก่าอย่างจำกัด โปรดตรวจสอบคู่มือการย้ายระบบแทนที่จะคิดว่ากฎเก่าทุกข้อได้รับการแปลงแล้ว
- ดูเหมือนว่ากฎจะขัดแย้งกัน: firewalld มีจุดประสงค์เพื่อจัดการกฎไฟร์วอลล์ของโฮสต์ SUSE เตือนไม่ให้แก้ไขกฎเดียวกันแยกต่างหากด้วยเครื่องมือต่างๆ เช่น
iptablesซึ่งอาจทำให้การกำหนดค่าที่ใช้งานอยู่สับสนได้
หากต้องการลบเซอร์วิสหรือพอร์ตถาวรที่ไม่จำเป็น ให้ใช้ตัวเลือกที่ตรงกัน--remove-serviceหรือ--remove-portตัวเลือกอื่นร่วมกับ--permanentจากนั้นโหลดใหม่และตรวจสอบอีกครั้ง ตัวอย่างเช่น ลบ HTTP ออกจากโซนสาธารณะโดยsudo firewall-cmd --permanent --zone=public --remove-service=httpใช้ ตามsudo firewall-cmd --reloadด้วย
ตรวจสอบตัวเองก่อนเสร็จสิ้น
firewalldโปรแกรมนี้ทำงานอยู่และจะเริ่มต้นเมื่อเซิร์ฟเวอร์บูตเครื่อง
- คุณได้ระบุโซนที่ใช้งานอยู่สำหรับอินเทอร์เฟซที่รับทราฟฟิกแล้ว
- เฉพาะบริการหรือพอร์ตที่แอปพลิเคชันต้องการเท่านั้นที่จะได้รับอนุญาตในโซนนั้น
- การบริหารจัดการจากระยะไกลยังคงได้รับอนุญาตทั้งก่อนและหลังการรีโหลด
- กฎดังกล่าวปรากฏในแบบสอบถามทั้งแบบรันไทม์และแบบถาวร และการตรวจสอบการกำหนดค่าก็ผ่านเกณฑ์
- การทดสอบการเชื่อมต่อจากโฮสต์อื่นยืนยันว่าสามารถเข้าถึงแอปพลิเคชันได้
สำหรับรายละเอียดเฉพาะรุ่น โปรดดูคู่มือไฟร์วอลล์ SUSE SLES 15 SP7 , คู่มือ firewall-cmdและหมายเหตุของ firewalld เกี่ยวกับการกำหนดค่าขณะทำงานและการกำหนดค่าถาวรรวมถึงการเปิดพอร์ตหรือบริการ