การไม่ระบุชื่อ OpenVPN อนุญาตการเข้าถึง SSH ไปยังเซิร์ฟเวอร์ภายใน


10

ฉันใช้ VPN แบบไม่ระบุชื่อ แต่ต้องการให้ SSH เข้าถึงคอมพิวเตอร์ภายใน

ฉันจะเข้าถึงคอมพิวเตอร์ภายในของฉันผ่าน SSH ได้อย่างไร เมื่อฉันทำssh 98.123.45.6การเชื่อมต่อหมดเวลา

  • ที่อยู่ IP จากผู้ให้บริการเคเบิล: 98.123.45.6
  • IP ที่ไม่ระบุตัวตนผ่าน VPN: 50.1.2.3
  • คอมพิวเตอร์ภายใน: 192.168.1.123

เมื่อทำการค้นหาฉันพบคำแนะนำในการตั้งค่ากฎ iptables กฎการกำหนดเส้นทางหรือเพิ่ม ListenAddress ใน sshd_config ข้อใดต่อไปนี้กับกรณีของฉัน

นี่คือเส้นทางของฉัน:

ตารางการกำหนดเส้นทาง IP เคอร์เนล
เกตเวย์ปลายทาง Genmask ตัวชี้วัดการอ้างอิง Ref ใช้ Iface
10.115.81.1 10.115.81.9 255.255.255.255 UGH 0 0 0 tun0
10.115.81.9 * 255.255.255.255 UH 0 0 0 tun0
50.1.2.3-sta ddwrt 255.255.255.255 UGH 0 0 0 eth0
192.168.1.0 * 255.255.255.0 U 202 0 0 eth0
169.254.0.0 * 255.255.0.0 U 204 0 0 vboxnet0
loopback * 255.0.0.0 U 0 0 0 Lo
เริ่มต้น 10.115.81.9 128.0.0.0 UG 0 0 0 tun0
128.0.0.0 10.115.81.9 128.0.0.0 UG 0 0 0 tun0
ค่าเริ่มต้น ddwrt 0.0.0.0 UG 202 0 0 eth0

คำตอบ:


15

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

มีสองสามวิธีในการแก้ไขปัญหานี้ แต่ฉันจะแบ่งปันวิธีที่เหมาะกับฉันในสถานการณ์เดียวกัน นี่คือสิ่งที่เราต้องทำ:

  1. สร้างตารางกฎ IP ใหม่เพื่อจัดการทราฟฟิกที่ไม่ใช่ VPN
  2. เพิ่มกฎ IP เพื่อค้นหาตาราง no-VPN ของเราสำหรับแพ็กเก็ตใด ๆ ที่ทำเครื่องหมายด้วยมาสก์ฟิลเตอร์เฉพาะ
  3. เพิ่มเส้นทาง IP ซึ่งควบคุมการรับส่งข้อมูลทั้งหมดในตาราง no-VPN ของเราเพื่อใช้ส่วนต่อประสานอีเธอร์เน็ตแทนช่องสัญญาณ
  4. เพิ่มกฎ 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 ตารางกฎ) - คำสั่งเหล่านี้จะล้างข้อมูลในครั้งถัดไปที่คุณรีสตาร์ทคอมพิวเตอร์ ทำให้พวกมันถาวรเป็นการออกกำลังกายที่ฉันปล่อยให้คุณ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.