ในการแก้ไขปัญหานี้คุณจะต้องตั้งค่าทั้ง iptables และกฏการจัดเส้นทาง ปัญหาเฉพาะที่คุณพบคือแพ็คเก็ต SSH ขาออกกำลังถูกกำหนดเส้นทางผ่านอินเทอร์เฟซอุโมงค์ VPN แบบไม่ระบุชื่อแทนอินเทอร์เฟซอีเทอร์เน็ต สิ่งนี้เกิดขึ้นเนื่องจากซอฟต์แวร์ VPN ของคุณตั้งค่ากฎการกำหนดเส้นทางเพื่อส่งทราฟฟิกที่ไม่สามารถจัดการได้ทั้งหมดผ่านอินเตอร์เฟสอุโมงค์ เหมาะสำหรับการเปิดเผยข้อมูลเครือข่ายของคุณ ไม่ดีสำหรับการสร้างการเชื่อมต่อ SSH กับคอมพิวเตอร์ของคุณ
มีสองสามวิธีในการแก้ไขปัญหานี้ แต่ฉันจะแบ่งปันวิธีที่เหมาะกับฉันในสถานการณ์เดียวกัน นี่คือสิ่งที่เราต้องทำ:
- สร้างตารางกฎ IP ใหม่เพื่อจัดการทราฟฟิกที่ไม่ใช่ VPN
- เพิ่มกฎ IP เพื่อค้นหาตาราง no-VPN ของเราสำหรับแพ็กเก็ตใด ๆ ที่ทำเครื่องหมายด้วยมาสก์ฟิลเตอร์เฉพาะ
- เพิ่มเส้นทาง IP ซึ่งควบคุมการรับส่งข้อมูลทั้งหมดในตาราง no-VPN ของเราเพื่อใช้ส่วนต่อประสานอีเธอร์เน็ตแทนช่องสัญญาณ
- เพิ่มกฎ iptables เพื่อทำเครื่องหมายปริมาณการใช้งาน SSH ทั้งหมดด้วยหน้ากาก netfilter ที่เรากำหนด
หมายเหตุ: ฉันทำงานกับ Raspbian ในขณะที่ทำสิ่งต่อไปนี้ดังนั้นคุณอาจต้องปรับคำสั่งเล็กน้อยเพื่อให้เหมาะกับ distro ของคุณ
การสร้างตารางกฎ IP ใหม่
เริ่มต้นด้วยการตรวจสอบไฟล์คำจำกัดความตารางของ iproute2 เราต้องการให้แน่ใจว่าเราจะไม่ใช้ชื่อหรือหมายเลขของตารางกฎที่มีอยู่
cat /etc/iproute2/rt_tables
คุณอาจเห็นบางสิ่งบางอย่างตามบรรทัดเหล่านี้:
# reserved values
255 local
254 main
253 default
0 unspec
#
# local
#
#1 inr.ruhep
เลือกหมายเลขและชื่อโดยพลการสำหรับตารางกฎใหม่ของคุณ - สิ่งใด ๆ ที่ไม่ได้ใช้ด้านบน ฉันจะใช้หมายเลข 201 และชื่อnovpn
สำหรับส่วนที่เหลือของคำตอบนี้
ผนวกคำจำกัดความโดยตรงไปยังไฟล์คำจำกัดความหรือแก้ไขในตัวแก้ไขข้อความที่คุณเลือก:
echo "201 novpn" >> /etc/iproute2/rt_tables
เพิ่มกฎ IP ใหม่เพื่อค้นหาตาราง no-VPN
ตรวจสอบกฎ ip ที่มีอยู่ที่จัดการกับมาสก์ netfilter:
ip rule show | grep fwmark
หาก grep ไม่มีอะไรเกิดขึ้นแสดงว่าคุณกำลังอยู่ในความสนใจ หากพิมพ์ออกมาบางบรรทัดให้จดเลขฐานสิบหกไว้ทางด้านขวาของคำfwmark
ในแต่ละบรรทัด คุณจะต้องเลือกหมายเลขที่ไม่ได้ใช้งานในปัจจุบัน เนื่องจากฉันไม่มีกฎ fwmark ที่มีอยู่ฉันจึงเลือกหมายเลข 65
ip rule add fwmark 65 table novpn
สิ่งนี้จะทำให้แพ็คเก็ตใด ๆ ที่มี netfilter mask 65 ค้นหาnovpn
ตารางใหม่ของเราสำหรับคำแนะนำเกี่ยวกับวิธีการจัดเส้นทางแพ็คเก็ต
ควบคุมการรับส่งข้อมูลทั้งหมดในตารางใหม่ของเราเพื่อใช้อีเธอร์เน็ต
ip route add default via YOUR.GATEWAY.IP.HERE dev eth0 table novpn
dev eth0
สิ่งที่สำคัญที่จะต้องทราบที่นี่คือ สิ่งนี้บังคับให้ทราฟฟิกทั้งหมดที่ส่งผ่านnovpn
ตารางเพื่อใช้อินเตอร์เฟสฮาร์ดแวร์อีเทอร์เน็ตแทนอินเทอร์เฟซอุโมงค์เสมือนที่ VPN ของคุณสร้างขึ้น
ตอนนี้เป็นเวลาที่ดีในการล้างแคช iproute ของคุณเพื่อให้แน่ใจว่ากฎและเส้นทางใหม่ของคุณมีผลทันที:
ip route flush cache
แนะนำกฎไฟร์วอลล์เพื่อทำเครื่องหมายปริมาณการใช้งาน SSH ทั้งหมดด้วยหน้ากาก netfilter ที่กำหนด
iptables -t mangle -A OUTPUT -p tcp --sport 22 -j MARK --set-mark 65
มีตัวเลือกมากมายที่นี่สำหรับฉันที่จะอธิบายในเชิงลึกมาก ๆ ฉันขอแนะนำให้คุณอ่านหน้าคู่มือสำหรับ iptables เพื่อรับทราบว่าเกิดอะไรขึ้นที่นี่:
man iptables
โดยสรุป: เรากำลังผนวกกฎการส่งออกไปยังตาราง mangle ของไฟร์วอลล์ (สำหรับการจัดการแพ็คเก็ตเฉพาะ) ที่สั่งให้ทำเครื่องหมายแพ็คเก็ต TCP ใด ๆ ที่มาจากพอร์ตต้นทาง 22 ด้วย netfilter mask 65 ของเรา
อะไรต่อไป
ณ จุดนี้คุณควรพร้อมที่จะทดสอบ SSH หากทุกอย่างเป็นไปด้วยดีคุณควรพบกับคำว่า "ล็อกอินเป็น" ที่มีความสุข
เพื่อความปลอดภัยฉันขอแนะนำให้คุณแนะนำให้ไฟร์วอลล์วางคำขอ SSH ขาเข้าใด ๆ จากอินเทอร์เฟซทันเนล:
iptables -A INPUT -i tun0 -p tcp -m tcp --dport 22 -j DROP
โปรดทราบว่าคำแนะนำทั้งหมดข้างต้นนั้นเป็นแบบชั่วคราว (ยกเว้นการสร้าง ID ตารางกฎ) - คำสั่งเหล่านี้จะล้างข้อมูลในครั้งถัดไปที่คุณรีสตาร์ทคอมพิวเตอร์ ทำให้พวกมันถาวรเป็นการออกกำลังกายที่ฉันปล่อยให้คุณ