Score:1

ย้อนกลับพร็อกซี SSH โดยใช้ NGINX (โดเมนย่อยไปยังคอนเทนเนอร์ Docker ที่ใช้ SSH)

ธง jp

ทีดีแอลอาร์: x.a.se:22 และ y.a.se:22 ควรยอมรับและนำไปสู่เครื่อง x และเครื่อง y ตามลำดับ NGINX เพียงประสานการรับส่งข้อมูลโดยการย้อนกลับพร็อกซี

สวัสดี ชุมชนที่ยอดเยี่ยม ออสการ์จากสวีเดนอยู่ที่นี่

การตั้งค่าปัจจุบัน

ฉันมีเครื่องโฮสต์ที่ยอมรับ เช่นเรียกโฮสต์กันเถอะ เครื่อง ก. ดังนั้น ssh [email protected] นำไปสู่การ สสส- บริการที่ท่าเรือ 22 บน เครื่อง ก. เครื่อง ก วิ่ง คอนเทนเนอร์นักเทียบท่าส: เครื่อง B และเครื่องจักรอื่น ๆ ให้มุ่งเน้นไปที่ทีละคอนเทนเนอร์

การใช้งานที่ต้องการ

ฉันต้องการให้สิ่งนี้เกิดขึ้น:

  1. ผู้ใช้งาน บ๊อบ ปฏิบัติการ เครื่อง B ไม่สามารถเข้าถึง เครื่อง ก เนื่องจากผู้ใช้ไม่ได้รับความไว้วางใจ
  2. ผู้ใช้ บ๊อบ เชื่อมต่อกับ เบส:22 ด้วย SSH และได้รับเชลล์ที่ เครื่อง B.

ปัญหา

ฉันไม่รู้วิธีกำหนดค่านี้ ฉันคิดว่าฉันกำลังมองหา reverse proxy ของ SSH จุดสิ้นสุดอื่นๆ ทั้งหมดของฉันถูกกลับรายการโดยใช้พร็อกซีโดยใช้ NGINX เนื่องจากนั่นคือสิ่งที่ฉันทำได้ดีที่สุด ดังนั้นฉันจึงพิจารณา ngx_stream_proxy_module ซึ่งโดยพื้นฐานแล้วสามารถย้อนกลับพร็อกซีการเชื่อมต่อ TCP ใดๆ ได้ ประเด็นคือฉันไม่สามารถคาดคะเนได้ว่าพร็อกซีสตรีม NGINX ควรจะแยกแยะระหว่างอย่างไร เช่น, ฐาน และสมมติว่า n.a.se ที่ไหน เป็นสตริงใดๆ

หากคุณมีคำถามใดๆ เกี่ยวกับการตั้งค่าของฉันหรือตัวคำถามเอง โปรดเพิ่มความคิดเห็น แล้วฉันจะเพิ่มการแก้ไขให้กับคำถามนี้ ขอบคุณล่วงหน้า ความช่วยเหลือและข้อมูลเชิงลึกใด ๆ ที่ชื่นชมมาก

หมายเหตุ: เครื่องโฮสต์ใช้ Debian 11 และฉันมีสิทธิ์เข้าถึงแบบเต็ม ฉันชอบ Docker เป็นผู้จัดการคอนเทนเนอร์และ NGINX เพื่อกำหนดเส้นทางการรับส่งข้อมูลเครือข่าย

หมายเหตุ: ฉันได้เพิ่มลิงก์ไปยังแหล่งข้อมูลพื้นฐานบางส่วนแล้ว นี่ไม่ใช่การเยาะเย้ยผู้ที่อาจเป็นผู้ช่วยเหลือ แต่เป็นการช่วยเหลือผู้อื่นที่อ่านหัวข้อนี้ในอนาคตโดยถามคำถามเดียวกันกับที่ฉันทำในตอนนี้

us flag
นั่นเป็นไปไม่ได้ SSH ไม่มีแนวคิดเกี่ยวกับโฮสต์เสมือนที่จำเป็นสำหรับการทำงานนี้ SSH เชื่อมต่อเฉพาะกับที่อยู่ IP หลังจากแก้ไขชื่อโดเมนเป็นที่อยู่ IP แล้ว
djdomi avatar
za flag
หากคุณไม่ขี้เกียจติดตั้ง guacamole ผ่านนักเทียบท่า มันจะใกล้เคียงกัน :) อย่างอื่น คุณอาจลองสิ่งที่คล้ายกันที่จะใช้กับ smtp https://docs.nginx.com/nginx/admin-guide/mail- พร็อกซี/เมลพร็อกซี/
Oscar Andersson avatar
jp flag
สวัสดี @djdomi คุณหมายถึง Apache Guacamole หรือเปล่า นั่นไม่ได้ผลสำหรับฉัน ฉันไม่สนใจเดสก์ท็อประยะไกล ฉันต้องการเชลล์ระยะไกลที่เข้ารหัส พร็อกซีอีเมลจะไม่ทำงานเนื่องจากรองรับเฉพาะ POP3, IMAP และ SMTP ขอบคุณ.
Oscar Andersson avatar
jp flag
ขอบคุณ @TeroKilkanen :) คุณคิดวิธีอื่นได้ไหม บางทีฉันสามารถกำหนดเส้นทาง [email protected] ไปยัง docker container B ผ่านกฎใน sshd ได้ไหม
djdomi avatar
za flag
@OscarAndersson ....... คุณควรคิดถึงการกล่าวถึง ส่วนสตรีมจะเหมือนกันสำหรับพร็อกซีทุกประเภทที่คุณต้องการใช้
Oscar Andersson avatar
jp flag
@djdomi คุณช่วยอธิบายเพิ่มเติมได้ไหม ฉันยังไม่ค่อยเข้าใจ โมดูลสตรีมและการตั้งค่าพร็อกซีของโมดูลอีเมลใช้แทนกันได้หรือไม่
Score:1
ธง us

สามารถเชื่อมต่อกับคอนเทนเนอร์โดยใช้โฮสต์ A เป็นโฮสต์กระโดด อย่างไรก็ตาม จำเป็นต้องมีบัญชีผู้ใช้บนโฮสต์ A เพื่อจุดประสงค์นี้

เราสามารถจำกัดบัญชีโฮสต์ของ Jump เพื่อไม่ให้เข้าถึงเซิร์ฟเวอร์ได้

ข้อจำกัดสามารถทำได้ในโฮสต์ A sshd_config.

จับคู่ผู้ใช้บ๊อบ
    X11หมายเลขการส่งต่อ
    อนุญาตการส่งต่อ Tcp
    ForceCommand ssh bob@<คอนเทนเนอร์>

หลังจากตั้งค่าแล้ว คุณสามารถ:

  1. ssh [email protected]
  2. ให้รหัสผ่านระบบโฮสต์
  3. SSH daemon จะบังคับให้รันคำสั่ง SSH ไปยังคอนเทนเนอร์
  4. ให้รหัสผ่านคอนเทนเนอร์

เราสามารถสร้างคู่กุญแจบนโฮสต์ได้ด้วย บ๊อบ บัญชีที่จะใช้สำหรับตรวจสอบความถูกต้องกับคอนเทนเนอร์ จึงไม่จำเป็นต้องใช้รหัสผ่านที่สอง

Oscar Andersson avatar
jp flag
ขอบคุณเทโร! นี่คือสิ่งที่ฉันกำลังมองหา ฉันจะทำการเปลี่ยนแปลงใน `sshd_config` ความหมายด้านความปลอดภัยของสิ่งนี้คืออะไร `ForceCommand` ทำงานบนไคลเอนต์หรือบนบริการ SSH หรือไม่ ผู้ใช้สามารถข้ามสิ่งนี้ได้หรือไม่? แน่นอนฉันจะใช้มาตรการรักษาความปลอดภัยเพื่อที่ว่าแม้ว่าจะเกิดขึ้นก็จะไม่เกิดความเสียหาย คู่กุญแจนี้บนโฮสต์ทำงานอย่างไร ฉันไม่เข้าใจว่ามันจะรับรองความถูกต้องบนคอนเทนเนอร์ได้อย่างไร ขอบคุณ. :)
us flag
`ForceCommand` ทำงานบนเซิร์ฟเวอร์ SSH และ SSH daemon ป้องกันไม่ให้ผู้ใช้เรียกใช้คำสั่งอื่นใด
Oscar Andersson avatar
jp flag
คุณคือเทพเทโรแห่งฟินแลนด์! ขอบคุณมากจากอีกด้านหนึ่งของทะเลสาบใหญ่ คุณคิดอย่างไรเกี่ยวกับปัญหาเมื่อผู้ใช้ออกจากคอนเทนเนอร์นักเทียบท่า พวกเขาจะถูกโยนกลับเข้าไปในโฮสต์ใช่ไหม ฉันสามารถแก้ไขได้ด้วย `ForceCommand sh -c "sudo docker exec -ti user-container0 /bin/bash"; exit` เพื่อให้เซสชัน SSH ออกโดยอัตโนมัติเมื่อผู้ใช้ออกจากเชลล์ (`/bin/bash`) ในคอนเทนเนอร์
us flag
หากคุณใช้คำสั่ง `ssh` ด้านบน จะเชื่อมต่อกับ SSH daemon ของคอนเทนเนอร์ Docker เมื่อผู้ใช้ปิดเชลล์ที่เรียกใช้โดย SSH daemon จะปิดการเชื่อมต่อและ SSH โฮสต์จะปิดการเชื่อมต่อด้วย ฉันไม่รู้ว่าการเข้าถึงผ่านคำสั่ง `docker` ทำงานอย่างไร
Oscar Andersson avatar
jp flag
โอ้โห สุดยอดจริงๆ! ฉันไม่ได้ตระหนักว่าฉันคิดว่าคำสั่งของคุณเป็นเพียงตัวยึด ไร้เดียงสาของฉัน ขอบคุณมาก!

โพสต์คำตอบ

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