Score:0

Firewalld บล็อก SSH ระหว่างไคลเอนต์บน WireGuard LAN

ธง gb

สิ่งที่ต้องได้รับอนุญาตในไฟร์วอลล์เพื่อให้ไคลเอนต์ WireGuard สามารถเชื่อมต่อกันผ่าน SSH


การตั้งค่า

ฉันมีไคลเอนต์สองเครื่องและเซิร์ฟเวอร์หนึ่งเครื่องบนเครือข่าย WireGuard VPN พวกเขาทั้งหมดใช้ Debian 11

ลูกค้า A -------- เซิร์ฟเวอร์ -------- ลูกค้า B
10.0.1.2 10.0.1.1 10.0.1.3

สิ่งที่สามารถทำได้

  • ฉันสามารถ SSH จากลูกค้าไปยังเซิร์ฟเวอร์
  • ฉันสามารถ SSH จากเซิร์ฟเวอร์ไปยังไคลเอนต์อย่างใดอย่างหนึ่ง

ปัญหา: แต่เมื่อฉันพยายามไคลเอ็นต์ SSH กับไคลเอนต์ ฉันได้รับ "ssh: เชื่อมต่อกับโฮสต์ 10.0.1.2 พอร์ต 22: ไม่มีเส้นทางไปยังโฮสต์"


การแก้ไขปัญหา

  1. ทางเดินระหว่างเครื่องขึ้น เพราะ ping ได้...
    • ไคลเอนต์ไปยังเซิร์ฟเวอร์
    • เซิร์ฟเวอร์ไปยังลูกค้า
    • และลูกค้าต่อลูกค้า
  2. พอร์ตสามารถเข้าถึงได้เพราะฉันสามารถ telnet...
    • จากเซิร์ฟเวอร์ไปยังไคลเอ็นต์บนพอร์ต 22
    • จากไคลเอ็นต์ไปยังเซิร์ฟเวอร์บนพอร์ต 22

ปัญหา: แต่เมื่อฉันพยายามเชื่อมต่อไคลเอนต์ telnet กับไคลเอนต์ ฉันได้รับ "telnet: ไม่สามารถเชื่อมต่อกับรีโมตโฮสต์: ไม่มีเส้นทางไปยังโฮสต์"


สิ่งที่ได้รับการยืนยัน

  • SSH เป็นบริการที่ระบุไว้ใน firewalld: ไฟร์วอลล์ cmd - รายการบริการ ผลตอบแทน จุ๊ๆ
  • ip-foward ถูกตั้งค่าบนเคอร์เนล: sysctl -a ผลตอบแทน net.ipv4.ip_forward = 1
  • การส่งต่อถูกตั้งค่าบน iptables: iptables-บันทึก ผลตอบแทน -A ไปข้างหน้า -i wg0 -o wg0 -j ยอมรับ
  • การปิดใช้งานไฟร์วอลล์บนเซิร์ฟเวอร์จะอนุญาตการเชื่อมต่อ SSH ระหว่างไคลเอ็นต์ WireGuard ทั้งสองเครื่อง

ขอบคุณสำหรับความช่วยเหลือและตัวชี้ของคุณ

fr flag
แสดงเอาต์พุต `ip route show` จากลูกค้า
Score:1
ธง cn

แม้ว่าโดยทั่วไปแล้วไฟร์วอลล์จะเป็นเครื่องมือที่ยอดเยี่ยมสำหรับการกำหนดค่าไฟร์วอลล์บนกล่อง 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 คือเซิร์ฟเวอร์ของคุณในบทความนี้)

user371793 avatar
gb flag
ขอบคุณสำหรับความช่วยเหลือของคุณ @จัสตินลุดวิก

โพสต์คำตอบ

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