ฉันต้องการโซลูชันพร็อกซีย้อนกลับสำหรับ SSH


10

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

ฉันไม่ได้มีไฟร์วอลล์ในมือของฉันหรือพอร์ตอื่นที่ไม่ใช่ 22 เปิดและในความเป็นจริงแม้ว่าฉันจะขอให้พวกเขาไม่อนุญาตให้เปิด 2 ครั้ง SSH ไม่ใช่สิ่งที่หัวหน้างานของฉันต้องการ


1
คำถามที่เกี่ยวข้องกับโซลูชันที่ยอดเยี่ยมอีกอย่าง: serverfault.com/questions/361794/…
Kaii


sshpiperd ใช้งานได้ดี!
KirályIstván

คำตอบ:


5

คุณควรเปิดอุโมงค์ SSH จากคอมพิวเตอร์ของคุณไปยังเซิร์ฟเวอร์ในศูนย์ข้อมูล ลองตั้งชื่อนี้เป็น "server1" หากคุณใช้ openssh คุณสามารถเรียกใช้ได้

ssh -L0.0.0.0:8080:localhost:8080 you_username@server1

วิธีนี้จะเปิดการเชื่อมต่อจากคอมพิวเตอร์ของคุณที่พอร์ต 8080 ไปยังเซิร์ฟเวอร์พอร์ต 8080 ข้ามไฟร์วอลล์ระหว่างนั้น สมมติว่าอาปาเช่ของคุณกำลังรับฟังที่พอร์ต 8080 รูปแบบการฟอร์เวิร์ดพอร์ตกำลังรับฟัง IP: พอร์ตท้องถิ่น: ที่อยู่ระยะไกล: พอร์ตระยะไกล แน่นอนสำหรับเซิร์ฟเวอร์เดียวคุณสามารถใช้

ssh -L0.0.0.0:8080:remote_server_address:8080 you_username@server1

โปรดทราบว่า localhost ในพารามิเตอร์ -L สัมพันธ์กับ server1 กล่าวอีกนัยหนึ่งเซิร์ฟเวอร์กำลังมองเห็นการเชื่อมต่อที่มาจาก localhost เมื่อในความเป็นจริงการเชื่อมต่อนั้นมาจากคอมพิวเตอร์ของคุณผ่านการเชื่อมต่อ ssh

คุณต้องการพารามิเตอร์ด้วย

AllowTcpForwarding yes

ในการกำหนดค่า ssh ของเซิร์ฟเวอร์ (โดยทั่วไปคือ / etc / ssh / sshd_config)

หลังจากนี้ผู้อื่นสามารถเชื่อมต่อกับคอมพิวเตอร์ของคุณที่พอร์ต 8080 เพื่อรับการเชื่อมต่อผ่าน Apache Reverse Proxy หากคุณต้องการพร็อกซีทั่วไป (เพื่อให้ผู้ใช้สามารถเลือกที่อยู่ไม่ใช่เฉพาะที่อยู่ในการกำหนดค่า Apache) คุณควรติดตั้ง squid บน server1 และใช้ ssh tunnel เพื่อพอร์ต squid


คุณหมายถึงว่าเมื่อฉันทำssh -L0.0.0.0:8080:localhost:8080 you_username@server1 แล้วถ้าการเชื่อมต่อจะยังคงผ่านพอร์ต 22 ของไฟร์วอลล์ (เพราะถ้านั่นไม่เกิดขึ้นแล้วฉันไม่สามารถทำอะไร) และอุโมงค์ ssh จะถูกจัดตั้งขึ้นระหว่างเครื่องท้องถิ่นและเครื่องระยะไกล ที่พอร์ตที่ระบุ แต่ทราฟฟิกทั้งหมดจะเกิดขึ้น (พอร์ต 22) ที่ไฟร์วอลล์
บอนด์

เมื่อคุณเรียกใช้ ssh tunnel การรับส่งข้อมูลนั้น (จากพอร์ต 8080 ไปยังพอร์ต 8080) จะอยู่ภายในการเชื่อมต่อ ssh โดยใช้พอร์ต 22 ไฟร์วอลล์จะเห็นทราฟฟิกไปยังพอร์ต 22 ไม่ใช่ 8080
Olli

เมื่อคุณให้คำสั่งนี้ ssh -L0.0.0.0:8080:remote_server_address:8080 you_username@server1 ฉันต้องการที่จะรู้ว่าสิ่งที่สามารถวางเป็น remote_server_address คือ IP ของเครื่องภายในที่ฉันต้องการใช้ server1 เป็นสื่อกลางฉันเข้าใจอย่างถูกต้องหรือไม่
บอนด์

บอร์น: ใช่ถูกต้องแล้ว คุณยังสามารถระบุช่องสัญญาณ -L หลายช่อง (ที่มีพอร์ตต้นทางที่แตกต่างกัน) เพื่อเปิดการเชื่อมต่อไปยังเครื่องภายในหลายเครื่อง ตัวอย่างเช่น "-L0.0.0.0: 8080: remote_server1: 80 -L0.0.0.0: 8081: remote_server2: 80 -L0.0.0.0: 8082: remote_server2: 22" (ไม่มีเครื่องหมายคำพูด)
Olli

การสร้าง solid นี้จะต้องตั้งค่าเซิร์ฟเวอร์ที่ทำหน้าที่เหมือนเด้งนอกศูนย์ข้อมูลและอนุญาตทราฟฟิกแน่นอนว่า ssh tunnel นั้นโอเคเป็นวิธีชั่วคราว แต่สำหรับบางสิ่งบางอย่างในการผลิต รีบาวด์และปรับการตั้งค่าไฟร์วอลล์เพื่ออนุญาตการเชื่อมต่อ 8080 จากรีบาวด์นั้นเท่านั้น สิ่งนี้กล่าวว่าฉลาดกว่าที่จะวาง reverse proxy เป็นหนึ่งในเครื่องเสมือนภายใน DC ดังนั้นการเชื่อมต่อจะต้องปลอดภัยด้วย SSL เฉพาะกับเครื่องนี้เท่านั้น
jmary

0

คุณอาจจะสามารถใช้สิ่งบางอย่างเช่นSshMeIn เป็นระบบเว็บ opensource ที่จะสร้าง ssh tunnel ผ่านไฟร์วอลล์คุณไม่จำเป็นต้องเปิดพอร์ต

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