代理服务器在企业网络中扮演着重要角色,正向代理帮助内网用户访问外部资源并提供缓存加速和访问控制,反向代理则实现负载均衡、SSL终端和Web应用防护。本文以CentOS 9 Stream为例,详细介绍Squid正向代理和Nginx反向代理的配置方法和安全策略。
▶一、代理服务器架构选择
正向代理和反向代理的应用场景完全不同。正向代理部署在客户端侧,代表客户端发出请求,适用于企业内网统一上网出口和内容过滤。反向代理部署在服务端侧,代表服务器接收请求,适用于Web应用的负载均衡和加速。理解两者的区别是正确部署代理服务器的前提。
▶二、安装与配置Squid正向代理
# 安装Squid
apt install -y squid
# 或 yum install -y squid
# /etc/squid/squid.conf - 基础配置
http_port 3128
# 访问控制列表
acl localnet src 192.168.0.0/16
acl localnet src 10.0.0.0/8
acl localnet src 172.16.0.0/12
acl Safe_ports port 80 443 21 22 25 53 110 143
acl CONNECT method CONNECT
http_access allow localnet
http_access deny all
# 缓存配置
cache_dir ufs /var/spool/squid 10000 16 256
cache_mem 256 MB
maximum_object_size 50 MB
# 启动服务
systemctl start squid
systemctl enable squid
▶三、Squid访问控制与内容过滤
# Squid高级访问控制
# 时间限制 - 工作时间禁止访问社交网站
acl work_hours time MTWHF 09:00-18:00
acl social_sites dstdomain .facebook.com .twitter.com .instagram.com
http_access deny social_sites work_hours
# 按用户认证控制
auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/users.passwd
acl authenticated proxy_auth REQUIRED
http_access allow authenticated
# URL过滤
acl banned_urls url_regex -i "/etc/squid/banned_urls.txt"
http_access deny banned_urls
http_access allow localnet
# 带宽限制
delay_pools 1
delay_class 1 2
delay_parameters 1 10000/20000
delay_access 1 allow localnet
▶四、Squid透明代理配置
# Squid透明代理(无需客户端配置)
http_port 3128 intercept
# 需要配合iptables将HTTP流量重定向到Squid
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
# 允许透明代理的HTTPS流量
http_port 3129 intercept ssl-bump cert=/etc/squid/ssl_cert/myca.pem generate-host-certificates=on dynamic_cert_mem_cache_size=4MB
# SSL Bump配置
ssl_bump peek all
ssl_bump bump all
▶五、Nginx反向代理基础配置
# /etc/nginx/conf.d/reverse-proxy.conf
server {
listen 80;
server_name www.bacaiyun.com;
location / {
proxy_pass http://backend_servers;
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;
# 缓冲设置
proxy_buffering on;
proxy_buffer_size 4k;
proxy_buffers 8 4k;
proxy_busy_buffers_size 8k;
# 超时设置
proxy_connect_timeout 30;
proxy_send_timeout 60;
proxy_read_timeout 60;
}
}
upstream backend_servers {
least_conn; # 最少连接数分发
server 192.168.1.101:8080 max_fails=3 fail_timeout=30s;
server 192.168.1.102:8080 max_fails=3 fail_timeout=30s;
server 192.168.1.103:8080 backup; # 备用服务器
}
▶六、Nginx代理安全加固
# 限制请求速率和并发
limit_req_zone $binary_remote_addr zone=web:10m rate=30r/s;
limit_conn_zone $binary_remote_addr zone=addr:10m;
server {
location / {
limit_req zone=web burst=20 nodelay;
limit_conn addr 10;
proxy_pass http://backend;
}
# 隐藏后端信息
proxy_hide_header X-Powered-By;
proxy_hide_header Server;
# 防止Host头注入攻击
if ($host !~ ^(www\.bacaiyun\.com|bacaiyun\.com)$ ) {
return 444;
}
# 限制请求方法
if ($request_method !~ ^(GET|HEAD|POST)$) {
return 405;
}
}
▶七、WebSocket代理配置
# Nginx代理WebSocket连接
server {
listen 443 ssl;
server_name ws.bacaiyun.com;
location /ws/ {
proxy_pass http://ws_backend;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_read_timeout 86400; # 长连接超时设为1天
}
}
▶八、缓存加速配置
# Nginx代理缓存配置
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=static:500m inactive=7d max_size=10g;
proxy_cache_path /var/cache/nginx/dynamic levels=1:2 keys_zone=dynamic:100m inactive=1h;
server {
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
proxy_cache static;
proxy_cache_valid 200 302 7d;
proxy_cache_valid 404 1m;
proxy_cache_use_stale error timeout updating;
proxy_pass http://backend;
expires 7d;
add_header X-Cache-Status $upstream_cache_status;
}
location / {
proxy_cache dynamic;
proxy_cache_valid 200 5m;
proxy_cache_key "$scheme$request_method$host$request_uri";
proxy_pass http://backend;
}
}
▶九、代理高可用部署
生产环境的代理服务器通常部署为集群模式保证高可用。LVS+Keepalived实现代理服务器的VIP(虚拟IP)漂移,当主节点故障时备节点自动接管IP。反向代理层部署多个Nginx实例,前端通过云负载均衡器(SLB/ELB)分发流量。正向代理集群使用haproxy实现Squid实例的负载均衡。
▶十、代理日志分析与审计
代理服务器的日志记录了所有通过代理的流量,是安全审计的重要数据源。配置Squid日志格式包含源IP、目标域名、访问时间、传输字节数和响应状态码。Nginx反向代理日志可记录上游服务器响应时间用于性能分析。日志推荐集中到ELK或Loki平台,配置告警规则检测异常流量模式。
▶十一、正向代理缓存加速策略
Squid正向代理的缓存功能可以显著减少重复请求的带宽占用和响应时间。配置缓存策略时需要设置合理的缓存大小和过期时间,对静态内容(图片、CSS、JS)设置较长的缓存时间,动态内容设置短缓存或不缓存。使用Squid的refresh_pattern指令精细控制不同类型内容的缓存行为,配合squidanalyzer报表分析缓存命中率。
▶十二、代理服务器安全加固
代理服务器位于网络边界面临各种安全威胁,需要重点加固:限制代理请求的目标端口避免SSRF攻击、配置ACL禁止访问恶意域名、启用TLS拦截扫描https流量中的恶意内容、实施身份认证防止未授权使用、部署代理服务监控及时发现异常使用模式。对于正向代理建议只对认证用户开放,反向代理需要做好WAF防护。
▶十三、代理服务高可用与故障切换
正向代理作为企业上网的统一出口,其高可用性直接影响所有用户的网络访问体验。部署多台Squid形成代理集群,前端使用HAProxy分发代理请求。代理服务器之间共享缓存数据降低单台缓存未命中率,使用ICP或HTCP协议实现缓存互联。代理故障时用户自动切换到健康节点,保持上网服务不中断。
代理层面的安全管控同样重要,部署代理日志分析系统检测通过代理发起的外连攻击。限制代理协议和端口范围防止SSRF攻击和数据泄露。使用ICAP协议集成外部安全扫描引擎对传输内容进行深度检查,检测恶意软件和敏感数据泄露行为。
注册
登录控制台
