解决公司运维网络限制的两种办法

在当今的企业环境中,出于安全和管理的考虑,很多公司的IT部门对内网进行了严格的限制。这些限制通常包括禁止直接从公司网络访问外部的SSH连接、封锁常用的远程桌面协议如RDP和VNC流量,以及禁用了如TeamViewer、AnyDesk、ToDesk等流行的远程控制软件。这种做法虽然能有效防止潜在的安全威胁,但同时也给需要远程访问工作资源的员工带来了不便。本文将介绍几种绕过这些限制的方法,以便在不影响公司网络安全的前提下,提高工作效率和灵活性。

方案一:使用Ocserv或AnyLink部署远程网关

方案介绍

Ocserv(OpenConnect Server)和AnyLink都是可以部署在服务器上的软件,它们能够创建一个VPN服务,让用户能够通过VPN安全地连接到公司的内网。这种方式需要为特定IP配置路由,以确保只有访问公司资源时才通过VPN,不影响正常的互联网访问。

部署文档地址

好处和缺点

好处:

  • 提供安全的远程访问内网资源的能力。
  • 可以细粒度控制访问权限,增强安全性。

缺点:

  • 配置和维护相对复杂,需要一定的网络知识。
  • 可能与其他会修改路由的软件冲突,如公司内网会推送路由也可能会引起问题。
  • 在macOS上,如果连接了Cisco AnyConnect,通过数据线连接的iPhone 15可能会断开连接,导致调试工作受阻。iPhone 13和iPhone X未发现此现象。

效果展示

方案二:使用Guacamole部署Web服务作为跳板机

方案介绍

Apache Guacamole是一个客户端无需安装任何插件或软件即可运行的远程桌面网关。用户通过Web浏览器就能访问远程的桌面环境,它支持标准的协议如VNC、RDP和SSH。

部署文档地址

好处和缺点

好处:

  • 无需在客户端安装额外软件,通过浏览器即可访问远程桌面,方便快捷。
  • 支持多种远程协议,灵活性高。
  • 部署有OTP二次验证,增强安全性。

缺点:

  • 需要额外的服务器资源来部署和运行Guacamole服务。
  • 对于网络延迟较高的环境,用户体验可能受到影响。

推荐 docker 部署

docker-compose.yml

-> # cat /data/guacamole/docker-compose.yml
services:
  guacamole:
    image: jwetzell/guacamole:latest
    container_name: guacamole
    volumes:
      - ./postgres:/config
    environment:
      - EXTENSIONS=auth-totp
    ports:
      - 8181:8080
volumes:
  postgres:
    driver: local

nginx 反向代理

> # cat /etc/nginx/conf.d/guacamole.vanjay.cn.conf
server {
    listen 127.0.0.2:80;
    server_name guacamole.ddns.vanjay.cn;
    return 301 https://$host$request_uri;
}

server {
    listen 127.0.0.2:443 ssl;
    server_name guacamole.ddns.vanjay.cn;

    ssl_certificate /etc/nginx/ssl/guacamole.ddns.vanjay.cn_ecc/guacamole.ddns.vanjay.cn.cer;
    ssl_certificate_key /etc/nginx/ssl/guacamole.ddns.vanjay.cn_ecc/guacamole.ddns.vanjay.cn.key;

    include /etc/nginx/conf.d/common/ssl_common.conf;
    include /etc/nginx/conf.d/common/add_header_fileserver.conf;
    include /etc/nginx/conf.d/common/fileserver.conf;

    location / {
        # 不缓存,支持流式输出
        proxy_cache off;  # 关闭缓存
        proxy_buffering off;  # 关闭代理缓冲
        chunked_transfer_encoding on;  # 开启分块传输编码
        tcp_nopush on;  # 开启TCP NOPUSH选项,禁止Nagle算法
        tcp_nodelay on;  # 开启TCP NODELAY选项,禁止延迟ACK算法
        keepalive_timeout 300;  # 设定keep-alive超时时间为65秒

        proxy_pass http://127.0.0.1:8181/;
        include /etc/nginx/conf.d/common/proxy_http.conf;
    }
}#
root@pve-ubuntu [04:43:08 PM] [~]
-> # cat /etc/nginx/conf.d/common/ssl_common.conf
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384';
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
ssl_session_tickets off;
root@pve-ubuntu [04:43:50 PM] [~]
-> # cat /etc/nginx/conf.d/common/add_header_fileserver.conf
add_header Referrer-Policy                      "no-referrer"   always;
add_header X-Content-Type-Options               "nosniff"       always;
add_header X-Download-Options                   "noopen"        always;
add_header X-Frame-Options                      "SAMEORIGIN"    always;
add_header X-Permitted-Cross-Domain-Policies    "none"          always;
add_header X-Robots-Tag                         "none"          always;
add_header X-XSS-Protection                     "1; mode=block" always;
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
add_header Content-Security-Policy "frame-ancestors 'self' *.vanjay.cn";
charset utf-8;
root@pve-ubuntu [04:43:53 PM] [~]
-> # cat /etc/nginx/conf.d/common/fileserver.conf
include       mime.types;
default_type  application/octet-stream;

client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 10240M;
client_body_timeout 3600s;
client_body_buffer_size 512k;

sendfile on;
tcp_nopush on;
tcp_nodelay on;

fastcgi_send_timeout 3600;
fastcgi_read_timeout 3600;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 256k;
fastcgi_intercept_errors on;
fastcgi_hide_header X-Powered-By;

gzip on;
gzip_vary on;
gzip_comp_level 4;
gzip_min_length  256;
gzip_types text/plain application/javascript application/x-javascript application/json application/ld+json application/manifest+json application/rss+xml text/javascript text/css application/xml;
gzip_proxied expired no-cache no-store private no_last_modified no_etag  auth;
gzip_disable "MSIE [1-6]\.";
server_tokens off;
root@pve-ubuntu [04:43:59 PM] [~]
-> # cat /etc/nginx/conf.d/common/proxy_http.conf
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

效果展示

以上是两种常见的绕过公司运维网络限制的方法。当然,选择哪种方案,需要根据具体的工作需求和网络环境来决定。重要的是,在不违反公司政策和法律法规的前提下,寻找最适合自己的工作方式。