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

ขั้นที่ 1: ระบุชื่อที่ UFW รู้จักจริง

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

ufw app list
ufw app info OpenSSH

รายการสั้นในการติดตั้งมาตรฐาน และชื่อไม่ใช่ชื่อแพ็กเกจ โปรไฟล์ชื่อ OpenSSH อาจหายไปทั้งที่แพ็กเกจ openssh-server ติดตั้งอยู่ และกลับกันก็เป็นไปได้ ใช้ชื่อที่ตรงตามที่รายการพิมพ์ออกมา ชื่อโปรไฟล์ VPN หรือตัวเรียกใช้เดสก์ท็อปที่สะกดคล้ายกันไม่ใช่โปรไฟล์แอปของ UFW หากไม่มีชื่อที่ต้องการ นั่นคือสิ่งที่พบ และขั้นต่อไปคือดูว่าอะไรควรจัดหาให้

ขั้นที่ 2: อ่านนิยาม ไม่ใช่ป้ายกำกับ

โปรไฟล์คือไฟล์สไตล์ INI ใต้ /etc/ufw/applications.d มีชื่อ หัวเรื่อง คำอธิบาย และฟิลด์พอร์ต ฟิลด์พอร์ตสามารถระบุพอร์ตและการขนส่งหลายรายการ ป้ายกำกับจึงบอกได้น้อยกว่านิยาม คู่มือ UFW อธิบายฟิลด์เหล่านี้และการดำเนินการอัปเดตแอปพลิเคชัน อ่านไฟล์แทนการสันนิษฐานว่าชื่อหมายถึงพอร์ตที่คุ้นเคยเพียงพอร์ตเดียว

cat /etc/ufw/applications.d/openssh-server
ufw app info OpenSSH

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

ss -ltnp 'sport = :22'

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

ขั้นที่ 3: แยกโปรไฟล์ออกจากบริการที่กำลังทำงาน

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

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

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

ขั้นที่ 4: เก็บทางกลับก่อนโหลดไฟร์วอลล์ใหม่

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

ufw status verbose
ufw allow 22/tcp
ufw app update OpenSSH

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

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

บทความที่เกี่ยวข้อง