แม้ว่าโดยทั่วไปแล้วไฟร์วอลล์จะเป็นเครื่องมือที่ยอดเยี่ยมสำหรับการกำหนดค่าไฟร์วอลล์บนกล่อง Linux แต่สำหรับกรณีการใช้งานเฉพาะนี้ -- การส่งต่อทราฟฟิกสำหรับโฮสต์อื่น -- การใช้งานนั้นค่อนข้างลำบาก ฉันขอแนะนำให้ปิดเซิร์ฟเวอร์ของคุณและใช้ iptables (หรือ nftables) โดยตรง
หากคุณต้องการใช้ไฟร์วอลล์จริง ๆ ให้ลองทำสิ่งนี้ (ในฐานะรูท):
1. สร้างโซนที่กำหนดเองสำหรับอินเทอร์เฟซ WireGuard ของคุณที่ยอมรับการรับส่งข้อมูลทั้งหมด:
ไฟร์วอลล์ cmd --permanent --new-zone = mywg
ไฟร์วอลล์ cmd --permanent --zone=mywg --set-target=ACCEPT
ไฟร์วอลล์ cmd --reload
2. เพิ่มกฎ "สมบูรณ์" ลงในโซนเพื่อปฏิเสธการเชื่อมต่อขาเข้าจาก WireGuard ไปยังเซิร์ฟเวอร์:
firewall-cmd --zone=mywg --add-rich-rule='rule family="ipv4" ลำดับความสำคัญ="30001" ค่าโปรโตคอล="tcp" ปฏิเสธ'
firewall-cmd --zone=mywg --add-rich-rule='rule family="ipv4" ลำดับความสำคัญ="30002" ค่าโปรโตคอล="udp" ปฏิเสธ'
firewall-cmd --zone=mywg --add-rich-rule='rule family="ipv6" ลำดับความสำคัญ="30003" ค่าโปรโตคอล="tcp" ปฏิเสธ'
firewall-cmd --zone=mywg --add-rich-rule='rule family="ipv6" ลำดับความสำคัญ="30004" ค่าโปรโตคอล="udp" ปฏิเสธ'
3. เพิ่มกฎ "โดยตรง" เพื่ออนุญาตการส่งต่อการเชื่อมต่อ IPv4 SSH ระหว่างโฮสต์ WireGuard อื่น ๆ และปฏิเสธสิ่งอื่นทั้งหมด:
firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i wg0 -m state --state ESTABLISHED,RELATED -j ACCEPT
firewall-cmd --direct --add-rule ตัวกรอง ipv4 FORWARD 1 -i wg0 -o wg0 -m state --state NEW -p tcp --dport 22 -j ACCEPT
firewall-cmd --direct --add-rule ตัวกรอง ipv4 FORWARD 2 -i wg0 -j REJECT
firewall-cmd --direct --add-rule ตัวกรอง ipv6 FORWARD 0 -i wg0 -j REJECT
4. ผูกโซนกับอินเทอร์เฟซ WireGuard ของคุณและบันทึกการเปลี่ยนแปลงของคุณ:
ไฟร์วอลล์ cmd --zone=mywg --add-interface=wg0
firewall-cmd --runtime-to-permanent
คุณสามารถเพิ่มกฎโดยตรงของ IPv4 ระหว่าง 0 ถึง 2 (กำหนดหมายเลขใหม่ ปฏิเสธ
กฎสุดท้าย) หากคุณต้องการอนุญาตการรับส่งข้อมูลประเภทอื่นระหว่างโฮสต์ WireGuard ของคุณ (หรือเพียงแค่แทนที่กฎ 0 และ 1 ด้วยกฎเดียวเช่น -i wg0 -o wg0 -J ยอมรับ
หากคุณต้องการอนุญาตให้เซิร์ฟเวอร์ส่งต่อการรับส่งข้อมูลระหว่างโฮสต์ WireGuard ของคุณ)
ดูส่วน Hub and Spoke ของสิ่งนี้ วิธีใช้ WireGuard กับ Firewalld บทความสำหรับคำอธิบายทั้งหมด (Host C คือเซิร์ฟเวอร์ของคุณในบทความนี้)