Làm cách nào để sử dụng ssh qua http hoặc https?


42

Tôi có một máy tính xách tay linux fedora21 phía sau tường lửa của công ty (cho phép qua các cổng http và https nhưng không phải ssh 22) và tôi có một máy chủ linux fedora21 ở phía sau bộ định tuyến của riêng tôi. Duyệt web với https hoạt động khi tôi chỉ định địa chỉ IP công cộng của máy chủ nhà (vì tôi đã định cấu hình bộ định tuyến nhà của mình)

Có thể ssh (shell từ xa) đến máy chủ nhà của tôi qua cổng http / s không?

Tôi thấy một công cụ gọi là corkscrew. Điều đó có giúp được không?

opensshdhttpdchạy trên máy chủ gia đình. Những gì khác sẽ cần cấu hình?


1
đặt sshd của bạn ở nhà để nghe trên cổng 443, nhưng bạn nên tắt cổng 443 trên httpd nhà của bạn.
Taliezin

Tôi không thể hoàn toàn mặc dù điều đó. Tôi cần httpd (s) cho git đẩy là tốt. vì vậy tôi phải nghe httpd trên 443.
MMM

hãy thử omeptunnel - yum cài đặt omeptunnel http://www.nocrew.org/software/httptunnel.html hoặc như bạn đã đề cập trong câu hỏi của mình: corkscrew.
Taliezin

Dù bằng cách nào, sshd sẽ lắng nghe 22, và httpd đến 80/443 và omeptunnel hoặc corkscrew sẽ chuyển tiếp lưu lượng truy cập mà httpd nhận được cho sshd?
MMM

Đúng. Nó không phải thay đổi cổng dịch vụ của bạn.
taliezin

Câu trả lời:


42

Những gì có thể phụ thuộc vào những gì tường lửa cho phép.

Nếu tường lửa cho phép lưu lượng tùy ý trên cổng 443

Một số tường lửa sử dụng cách đơn giản và cho phép mọi thứ trên cổng 443. Nếu đúng như vậy, cách dễ nhất để truy cập máy chủ nhà của bạn là làm cho nó nghe các kết nối SSH trên cổng 443. Nếu máy của bạn được kết nối trực tiếp với Internet, chỉ cần thêm Port 443vào /etc/ssh/sshd_confighoặc /etc/sshd_configngay dưới dòng nói Port 22. Nếu máy của bạn ở phía sau bộ định tuyến / tường lửa chuyển hướng các kết nối đến, hãy làm cho nó chuyển hướng các kết nối đến tới cổng 443 sang cổng 22 của máy chủ của bạn bằng một cái gì đó như

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

nơi wan0là giao diện WAN trên router của bạn và 10.1.2.3 là địa chỉ IP của máy chủ trên mạng gia đình của bạn.

Nếu bạn muốn cho phép máy chủ gia đình nghe cả kết nối HTTPS và kết nối SSH trên cổng 443, có thể dễ dàng phân biệt lưu lượng SSH và HTTPS (trong SSH, máy chủ sẽ nói trước, trong khi ở HTTP và HTTPS, máy khách sẽ nói chuyện Đầu tiên). Xem http://blog.stalkr.net/2012/02/sshhttps-multiplexing-with-sshttp.htmlhttp://wrouesnel.github.io/articles/Setting%20up%20sshttp/ để biết hướng dẫn về cách đặt này với sshttp và cũng có SSH trên cổng 80 hoặc 443 trong khi máy chủ web (nginx) đang chạy trên các cổng này

Nếu bạn có proxy web cho phép tạo đường hầm CONNECT

Một số tường lửa chặn tất cả các kết nối đi, nhưng cho phép duyệt web thông qua proxy cho phép phương thức HTTPCONNECT có thể xuyên thủng lỗ hổng trên tường lửa một cách hiệu quả. Các CONNECTphương pháp có thể được hạn chế đến các cảng nhất định, do đó bạn có thể cần phải kết hợp với lắng nghe trên cổng 443 như trên.

Để làm cho SSH đi qua proxy, bạn có thể sử dụng một công cụ như corkscrew . Trong của bạn ~/.ssh/config, hãy thêm một ProxyCommanddòng như bên dưới, nếu proxy web của bạn là http://web-proxy.work.example.com:3128:

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

Gói SSH trong HTTP (S)

Một số tường lửa không cho phép lưu lượng SSH, ngay cả trên cổng 443. Để đối phó với những điều này, bạn cần ngụy trang hoặc đường hầm SSH vào thứ gì đó mà tường lửa cho phép. Xem http://dag.wiee.rs/howto/ssh-http-tunneling/ để biết hướng dẫn về cách làm này với proxytunnel .


Thủ thuật 443 đã làm được điều đó! Tôi đã ngạc nhiên khi công trình này :) - bất kỳ cảnh sysadmin tại sao điều này dường như là trường hợp với hầu hết các tường lửa?
AK_

@AK_ Bởi vì mặc dù tường lửa có thể phân biệt TLS với SSH, nhưng đây là bước cấu hình bổ sung và chi phí hiệu năng cao hơn, không có lợi ích thực sự khi kết nối đi (vì dù sao mọi thứ cũng có thể được điều chỉnh trong TLS).
Gilles 'SO- ngừng trở nên xấu xa'

@Gilles, thậm chí có máy chủ proxy chặn HTTPS chưa cho phép HTTPS HTTP không?
Pacerier

1
@Pacerier Nhiều người trong số họ. Không phải là proxy chặn HTTPS - một proxy không chặn các kết nối bỏ qua proxy - đó là các kết nối trực tiếp bị chặn, nhưng proxy cho phép CONNECT với bất kỳ lưu lượng nào được cung cấp cho cổng 443. Dù sao đi nữa, không có cách nào thực sự để lọc HTTPS , thiếu gốc của tin tưởng tiêm và viết lại giấy chứng nhận đó là một ý tưởng rất xấu.
Gilles 'SO- ngừng trở nên xấu xa'

Lưu ý rằng bạn cũng có thể sử dụng netcat-openbsd thay vì corkscrew trong proxy comand:ProxyCommand nc -X connect -x __proxy_IP__:__port__ %h %p
Paul Rougieux


1

Bạn có thể sử dụng sslh nếu bạn muốn chạy CẢ HAI máy chủ HTTPS và máy chủ SSHd trên cùng một cổng 443.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.