ด้วย SSH เท่านั้น: ย้อนกลับอุโมงค์เว็บผ่านพร็อกซี ssh SOCKS


15

นาน ๆ ครั้งฉันต้องเชื่อมต่อกับเซิร์ฟเวอร์ที่การเข้าถึงถูก จำกัด อย่างมาก
SSH ขาเข้าเท่านั้นที่ได้รับอนุญาตจากไฟร์วอลล์ DMZ
การเชื่อมต่อ HTTP ขาออกถูกบล็อก

ฉันกำลังมองหาวิธีง่าย ๆ ในการเข้าถึงเว็บผ่านทางเซสชัน SSH ของฉันดังนั้นฉันสามารถติดตั้งการอัปเดตและซอฟต์แวร์ผ่าน yum / apt-get เป็นการดีที่ฉันต้องการหลีกเลี่ยงการติดตั้งซอฟต์แวร์ / บริการเพิ่มเติมในพื้นที่ที่ได้รับการป้องกัน

คุณทำอะไรในสถานการณ์เช่นนี้?

SSH มี-D <port>ตัวเลือกพร็อกซี SOCKS แต่น่าเสียดายที่มันเป็นเพียงทางเดียวจากลูกค้าไปยังเซิร์ฟเวอร์และไม่มีตัวเลือกย้อนกลับ

คำตอบ:


26

ในที่สุดฉันก็สามารถจัดการสิ่งนี้ให้สำเร็จได้ด้วยssh:

  1. เริ่มต้นพร็อกซี SOCKS ในเครื่องของคุณ (โดยใช้ssh -D)
  2. เชื่อมต่อกับเซิร์ฟเวอร์ระยะไกลและตั้งค่าการส่งต่อพอร์ตย้อนกลับ ( ssh -R) ไปยังพร็อกซี SOCKS ในพื้นที่ของคุณ
  3. กำหนดค่าซอฟต์แวร์เซิร์ฟเวอร์เพื่อใช้พร็อกซีที่ส่งต่อ

1. เริ่มต้นพร็อกซีถุงเท้าท้องถิ่นในพื้นหลัง

เชื่อมต่อ localhost ผ่าน SSH และเปิด SOCKS proxy ที่พอร์ต 54321

$ ssh -f -N -D 54321 localhost

-f รัน SSH ในพื้นหลัง

หมายเหตุ: ถ้าคุณปิดเทอร์มินัลที่คุณเริ่มต้นคำสั่งกระบวนการพร็อกซีจะถูกฆ่า อย่าลืมล้างข้อมูลด้วยตัวเองโดยปิดหน้าต่างเทอร์มินัลเมื่อคุณทำเสร็จหรือฆ่ากระบวนการด้วยตัวเอง!

2. เชื่อมต่อกับเซิร์ฟเวอร์ระยะไกลและตั้งค่าการส่งต่อพอร์ตย้อนกลับ

ผูกพอร์ตระยะไกล 6666 ไปยังพอร์ตโลคัล 54321 สิ่งนี้ทำให้พร็อกซีถุงเท้าโลคัลของคุณพร้อมใช้งานกับไซต์ระยะไกลบนพอร์ต 6666

$ ssh root@target -R6666:localhost:54321

3. กำหนดค่าซอฟต์แวร์เซิร์ฟเวอร์เพื่อใช้พร็อกซีที่ส่งต่อ

เพียงแค่กำหนดค่า yum, ฉลาด, ขด wget หรือเครื่องมืออื่น ๆ 127.0.0.1:6666ที่สนับสนุนถุงเท้าจะใช้พร็อกซี่

Voila! Happy tunneling!


4. ทางเลือก: กำหนดค่าซอฟต์แวร์เซิร์ฟเวอร์เพื่อใช้พร็อกซีที่ส่งต่อ

ฉันพบว่าการติดตั้งproxychainsบนเซิร์ฟเวอร์เป้าหมายทำให้สิ่งต่าง ๆ ง่ายขึ้นมาก

ช่วยให้ซอฟต์แวร์ใด ๆ ที่ใช้พร็อกซี SOCKS (คู่telnet) โดยใช้LD_PRELOADเคล็ดลับในการเปลี่ยนเส้นทางคำขอ TCP และ DNS จากคำสั่งโดยพลการไปยังพร็อกซี

การตั้งค่า/etc/proxychains.confเพื่อใช้พร็อกซีของถุงเท้าที่ส่งต่อ:

[ProxyList]
# SSH reverse proxy
socks5  127.0.0.1 6666

เครื่องมือโดยพลการ Tunnel (ที่ใช้ TCP) ด้วยproxychains:

$ proxychains telnet google.com 80
$ proxychains yum update
$ proxychains apt-get update

3

รุ่นใหม่ของ SSH ssh-R <[bind_address:]port>อนุญาตให้มีการใช้ตัวเลือกที่ง่ายมากของ ใช้เฉพาะพอร์ตบนโฮสต์และอาจเป็นที่อยู่ผูก แต่ไม่ได้ระบุพอร์ตฝั่งไคลเอ็นต์จะสร้างพร็อกซี SOCKS ย้อนกลับ

นี่ยังระบุไว้ใน man pages ของ SSH เวอร์ชั่นที่ใหม่กว่า:

[... ] หากไม่ได้ระบุปลายทางอย่างชัดเจน ssh จะทำหน้าที่เป็นพร็อกซี SOCKS 4/5 และส่งต่อการเชื่อมต่อไปยังปลายทางที่ร้องขอโดยไคลเอนต์ SOCKS ระยะไกล

คุณสามารถทดสอบนี้กับการเชื่อมต่อกับขดง่าย "ให้ฉัน IP ของฉัน" -API เช่นhttp://ifconfig.io

$ curl ifconfig.io

VS

$ curl --socks5 localhost:<PORT> ifconfig.io


2
มันจะมีประโยชน์ในการพูดถึงว่าหมายเลขรุ่นที่มีการแนะนำคุณสมบัติ
kasperd

ง่ายกว่ามาก!
Kaii

1
@kasperd: OpenSSH 7.6 , เผยแพร่เมื่อ 2017-10-03 ตรวจสอบสัญลักษณ์แสดงหัวข้อ 3 ภายใต้คุณสมบัติใหม่
MestreLion
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.