反向代理

“反向代理 JumpServer 要求说明”

  1. - rdp 协议复制粘贴需要部署可信任的 ssl 证书。
  2. - 通过 https 协议访问就能在 rdp 资产里面使用复制粘贴。
  3. - 遵循 [Mozilla SSL Configuration Generator](https://ssl-config.mozilla.org/){:target="_blank"} 建议。

1 Nginx SSL 部署

“请准备好 ssl 证书 (注意需要使用 pem 格式证书)”

  1. - 将证书放到 /opt/jumpserver/config/nginx/cert 里面。
  2. - 修改配置文件前需要先关闭 JumpServer 服务。
  1. ```sh
  2. # 关闭 JumpServer 服务
  3. ./jmsctl.sh stop
  4. ```
  5. ```sh
  6. # 编辑 JumpServer 主配置文件
  7. vi /opt/jumpserver/config/config.txt
  8. ```
  9. ```vim
  10. ...
  11. ## Nginx 配置
  12. HTTP_PORT=80
  13. SSH_PORT=2222
  14. RDP_PORT=3389
  15. ## HTTPS 配置
  16. HTTPS_PORT=443 # 对外 https 端口, 默认 443
  17. SERVER_NAME=www.domain.com # 你的 https 域名
  18. SSL_CERTIFICATE=xxx.pem # /opt/jumpserver/config/nginx/cert 目录下你的证书文件
  19. SSL_CERTIFICATE_KEY=xxx.key # /opt/jumpserver/config/nginx/cert 目录下你的 key 文件
  20. ```
  21. ```sh
  22. # 启动 JumpServer 服务
  23. ./jmsctl.sh start
  24. ```

“如果需要自定义 Nginx 配置文件, 可以参考此处”

  1. ```sh
  2. vi /opt/jumpserver/config/nginx/lb_http_server.conf
  3. ```
  4. ```nginx hl_lines="10 16 18-19 25 29"
  5. # Todo: May be can auto discovery
  6. upstream http_server {
  7. sticky name=jms_route;
  8. server web:80;
  9. # server HOST2:80; # 多节点
  10. }
  1. server {
  2. listen 80;
  3. server_name demo.jumpserver.org; # 自行修改成你自己的域名
  4. return 301 https://$server_name$request_uri;
  5. }
  6. server {
  7. listen 443 ssl http2;
  8. server_name demo.jumpserver.org; # 自行修改成你自己的域名
  9. server_tokens off;
  10. ssl_certificate cert/server.crt; # 修改 server.crt 为你的证书 (pem, crt 格式均可), 不要改路径 certs/
  11. ssl_certificate_key cert/server.key; # 修改 server.crt 为你的证书密钥文件, 不要改路径 certs/
  12. ssl_session_timeout 1d;
  13. ssl_session_cache shared:MozSSL:10m;
  14. ssl_session_tickets off;
  15. ssl_protocols TLSv1.1 TLSv1.2;
  16. ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
  17. ssl_prefer_server_ciphers off;
  18. add_header Strict-Transport-Security "max-age=63072000" always;
  19. client_max_body_size 5000m; # 上传文件大小限制
  20. location / {
  21. proxy_pass http://http_server;
  22. proxy_buffering off;
  23. proxy_request_buffering off;
  24. proxy_http_version 1.1;
  25. proxy_set_header Host $host;
  26. proxy_set_header Upgrade $http_upgrade;
  27. proxy_set_header Connection $http_connection;
  28. proxy_set_header X-Forwarded-For $remote_addr;
  29. proxy_ignore_client_abort on;
  30. proxy_connect_timeout 600;
  31. proxy_send_timeout 600;
  32. proxy_read_timeout 600;
  33. send_timeout 6000;
  34. }
  35. }
  36. ```

2 多层 Nginx 反向代理

“提示”

  1. - 适合上层还有统一对外出口的反向代理服务器
  2. - 属于多层 nginx 反向代理
  3. - 每一层都需要设置 websocket 长连接
  1. ```sh
  2. # 编辑配置文件
  3. vi /etc/nginx/conf.d/jumpserver.conf
  4. ```
  5. ```vim hl_lines="4 6 10"
  6. server {
  7. listen 80;
  8. server_name demo.jumpserver.org; # 自行修改成你的域名
  9. client_max_body_size 4096m; # 上传文件大小限制
  10. location / {
  11. # 这里的 ip 是后端 JumpServer nginx 的 ip
  12. proxy_pass http://192.168.244.144;
  13. proxy_http_version 1.1;
  14. proxy_buffering off;
  15. proxy_request_buffering off;
  16. proxy_set_header Upgrade $http_upgrade;
  17. proxy_set_header Connection "upgrade";
  18. proxy_set_header Host $host;
  19. proxy_set_header X-Forwarded-For $remote_addr;
  20. }
  21. }
  22. ```

“推荐部署 ssl 使用更安全的 https 协议访问”

  1. - 遵循 [Mozilla SSL Configuration Generator](https://ssl-config.mozilla.org/) 建议。
  1. ```vim hl_lines="3 8-10 13 18 21"
  2. server {
  3. listen 80;
  4. server_name demo.jumpserver.org; # 自行修改成你的域名
  5. return 301 https://$server_name$request_uri;
  6. }
  7. server {
  8. listen 443 ssl http2;
  9. server_name demo.jumpserver.org; # 自行修改成你的域名
  10. ssl_certificate sslkey/1_jumpserver.org_bundle.crt; # 自行设置证书
  11. ssl_certificate_key sslkey/2_jumpserver.org_bundle.key; # 自行设置证书
  12. ssl_session_timeout 1d;
  13. ssl_session_cache shared:MozSSL:10m;
  14. ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
  15. ssl_prefer_server_ciphers off;
  16. ssl_protocols TLSv1.1 TLSv1.2;
  17. add_header Strict-Transport-Security "max-age=63072000" always;
  18. client_max_body_size 4096m; # 录像及文件上传大小限制
  19. location / {
  20. # 这里的 ip 是后端 JumpServer nginx 的 ip
  21. proxy_pass http://192.168.244.144;
  22. proxy_http_version 1.1;
  23. proxy_buffering off;
  24. proxy_request_buffering off;
  25. proxy_set_header Upgrade $http_upgrade;
  26. proxy_set_header Connection "upgrade";
  27. proxy_set_header Host $host;
  28. proxy_set_header X-Forwarded-For $remote_addr;
  29. }
  30. }
  31. ```

3 其他 SLB

“提示”

  1. - 需要注意 websocket 长连接设置即可。
  2. - 需要注意 session 问题。