วิธีการใช้ ssh ผ่าน http หรือ https


42

ฉันมีแล็ปท็อปไคลเอนต์ linux fedora21 อยู่หลังไฟร์วอลล์ขององค์กร (ซึ่งอนุญาตผ่านพอร์ต http และ https แต่ไม่ใช่ ssh 22) และฉันมีเซิร์ฟเวอร์ linux fedora21 ที่บ้านหลังเราเตอร์ของฉันเอง การเรียกดูด้วย https ใช้งานได้เมื่อฉันระบุที่อยู่ IP สาธารณะของเซิร์ฟเวอร์ภายในบ้านของฉัน (เพราะฉันกำหนดค่าเราเตอร์ที่บ้านของฉัน)

เป็นไปได้ที่จะ ssh (เปลือกระยะไกล) ไปยังเซิร์ฟเวอร์ที่บ้านของฉันผ่านพอร์ต http / s?

corkscrewผมเห็นเครื่องมือที่เรียกว่า จะช่วยได้ไหม

opensshdและhttpdเรียกใช้บนเซิร์ฟเวอร์ภายในบ้าน อะไรจะต้องมีการกำหนดค่า?


1
วาง sshd ของคุณไว้ที่บ้านเพื่อฟังพอร์ต 443 แต่คุณควรปิดใช้งานพอร์ต 443 บน httpd ที่บ้านของคุณ
taliezin

ฉันไม่สามารถทำได้ ฉันต้องการ httpd (s) สำหรับ git ที่ถูกผลักเช่นกัน ดังนั้นฉันจึงต้องฟัง httpd ที่ 443
MMM

ลอง httptunnel - yum ติดตั้ง httptunnel http://www.nocrew.org/software/httptunnel.htmlหรือตามที่คุณพูดถึงในคำถามของคุณ: corkscrew
taliezin

ไม่ว่าจะด้วยวิธีใด sshd จะฟัง 22 และ httpd ถึง 80/443 และ httptunnel หรือ corkscrew จะส่งต่อการรับส่งข้อมูล httpd ไปยัง sshd หรือไม่
MMM

ใช่. ไม่จำเป็นต้องเปลี่ยนพอร์ตของบริการของคุณ
taliezin

คำตอบ:


42

สิ่งที่เป็นไปได้ขึ้นอยู่กับสิ่งที่ไฟร์วอลล์อนุญาต

หากไฟร์วอลล์อนุญาตการรับส่งข้อมูลโดยพลการบนพอร์ต 443

ไฟร์วอลล์บางตัวใช้วิธีง่าย ๆ และอนุญาตให้ทุกอย่างที่พอร์ต 443 หากเป็นกรณีนี้วิธีที่ง่ายที่สุดในการเข้าถึงเซิร์ฟเวอร์ภายในบ้านของคุณคือการฟังการเชื่อมต่อ SSH ที่พอร์ต 443 หากเครื่องของคุณเชื่อมต่อกับอินเทอร์เน็ตโดยตรงเพียงแค่ เพิ่มPort 443ไป/etc/ssh/sshd_configหรือเพียงแค่ต่ำกว่าเส้นที่ระบุว่า/etc/sshd_config Port 22หากเครื่องของคุณอยู่หลังเราเตอร์ / ไฟร์วอลล์ที่เปลี่ยนเส้นทางการเชื่อมต่อขาเข้าให้ทำการเปลี่ยนเส้นทางการเชื่อมต่อขาเข้าไปยังพอร์ต 443 ไปยังพอร์ต 22 ของเซิร์ฟเวอร์ด้วยสิ่งที่ชอบ

iptables -t nat -I PREROUTING -p tcp -i wan0 --dport 443 -j DNAT --to-destination 10.1.2.3:22

โดยที่wan0WAN อินเตอร์เฟสบนเราเตอร์ของคุณและ 10.1.2.3 เป็นที่อยู่ IP ของเซิร์ฟเวอร์ของคุณในเครือข่ายภายในบ้านของคุณ

หากคุณต้องการอนุญาตให้เซิร์ฟเวอร์ภายในบ้านของคุณรับฟังการเชื่อมต่อ HTTPS และการเชื่อมต่อ SSH ที่พอร์ต 443 เป็นไปได้ - ทราฟฟิก SSH และ HTTPS สามารถแยกความแตกต่างได้ง่าย (ใน SSH เซิร์ฟเวอร์จะพูดคุยเป็นอันดับแรกในขณะที่ HTTP และ HTTPS ครั้งแรก) ดูhttp://blog.stalkr.net/2012/02/sshhttps-multiplexing-with-sshttp.htmlและhttp://wrouesnel.github.io/articles/Setting%20up%20sshttp/สำหรับบทเรียนเกี่ยวกับวิธีตั้งค่า ขึ้นกับsshttpและยังมี SSH บนพอร์ต 80 หรือ 443 ในขณะที่เว็บเซิร์ฟเวอร์ (nginx) กำลังทำงานบนพอร์ตเหล่านี้

หากคุณมีเว็บพรอกซีที่อนุญาตให้ทำการเชื่อมต่ออุโมงค์

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

เพื่อให้ SSH ไปผ่านพร็อกซี่, คุณสามารถใช้เครื่องมือเช่นเกลียว ในของคุณ~/.ssh/configเพิ่มProxyCommandบรรทัดเหมือนด้านล่างหากเว็บพร็อกซีของคุณคือhttp://web-proxy.work.example.com:3128:

Host home
HostName mmm.dyndns.example.net
ProxyCommand corkscrew web-proxy.work.example.com 3128 %h %p

การห่อ SSH ใน HTTP (S)

ไฟร์วอลล์บางตัวไม่อนุญาตการรับส่งข้อมูล SSH แม้กระทั่งบนพอร์ต 443 เพื่อรับมือกับสิ่งเหล่านี้คุณต้องปลอมแปลงหรือสร้างช่องสัญญาณ SSH เป็นสิ่งที่ไฟร์วอลล์อนุญาตให้ทำได้ ดูhttp://dag.wiee.rs/howto/ssh-http-tunneling/สำหรับการกวดวิชาในการทำเช่นนี้กับproxytunnel


เคล็ดลับ 443 ทำมัน! ฉันประหลาดใจที่งานนี้ :) - สายตาใด ๆ ดูแลระบบว่าทำไมถึงเป็นเช่นนี้กับไฟร์วอลล์ส่วนใหญ่?
AK_

@AK_ เนื่องจากแม้ว่าจะเป็นไปได้ที่ไฟร์วอลล์จะแยกความแตกต่าง TLS จาก SSH แต่เป็นขั้นตอนการกำหนดค่าเพิ่มเติมและค่าใช้จ่ายที่มีประสิทธิภาพมากขึ้นสำหรับประโยชน์ที่แท้จริงเมื่อมาถึงการเชื่อมต่อขาออก
Gilles 'หยุดความชั่วร้าย'

@Gilles, มีพร็อกซีเซิร์ฟเวอร์ที่บล็อก HTTPS แต่ยังอนุญาต HTTP CONNECT HTTPS หรือไม่
Pacerier

1
@Pierier หลายคน ไม่ใช่ว่าพร็อกซีปิดกั้น HTTPS - พร็อกซีไม่บล็อกการเชื่อมต่อที่ข้ามพร็อกซี - เป็นการเชื่อมต่อโดยตรงที่ถูกบล็อก แต่พร็อกซีอนุญาตให้ CONNECT เชื่อมต่อกับปริมาณการใช้งานใด ๆ ขาดการเชื่อถือของรูตและการเขียนใบรับรองซึ่งเป็นความคิดที่ไม่ดี
Gilles 'หยุดชั่วร้าย'

หมายเหตุคุณยังสามารถใช้ netcat-openbsd แทน corkscrew ใน comand proxy:ProxyCommand nc -X connect -x __proxy_IP__:__port__ %h %p
Paul Rougieux


1

คุณสามารถใช้sslhหากคุณต้องการเรียกใช้ทั้งเซิร์ฟเวอร์ HTTPS และเซิร์ฟเวอร์ SSHd บนพอร์ตเดียวกัน 443

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