Squid代理服务器进阶配置:从基础部署到企业级安全与性能调优
1. Squid代理服务器企业级部署基础第一次接触Squid还是在十年前的公司网络改造项目当时我们需要为200多人的研发团队搭建统一的网络出口。现在回想起来那些踩过的坑反而成了最宝贵的经验。不同于基础教程这里我想分享的是真正在企业环境中验证过的配置方案。先说说硬件选型。很多人以为代理服务器对硬件要求不高这其实是个误区。根据我的实测数据一个500人规模的企业日均请求量在300万次左右时这样的配置比较合适CPU至少8核心建议16核以上内存每100并发连接需要1GB内存建议32GB起步磁盘NVMe SSD最佳容量按缓存需求计算每人每天50MB缓存空间网卡建议双万兆网卡做bonding安装环节有个容易忽略的点是文件描述符限制。企业级环境必须提前调整# 修改系统限制 echo fs.file-max 655350 /etc/sysctl.conf echo squid soft nofile 65535 /etc/security/limits.conf echo squid hard nofile 65535 /etc/security/limits.conf配置文件的结构设计也有讲究。我习惯把不同功能的配置拆分到独立文件再用include引入主配置# /etc/squid/squid.conf 主配置 include /etc/squid/acls.conf include /etc/squid/cache.conf include /etc/squid/ssl.conf这种模块化设计在后期维护时会带来巨大便利。比如上周我们需要临时调整访问策略只需修改acls.conf文件完全不会影响其他功能模块。2. 企业级访问控制策略实战去年给某金融机构做安全加固时他们的风控总监提了个需求既要让研发能访问GitHub又要防止代码泄露。这种看似矛盾的需求用Squid的多维度ACL就能完美解决。时间维度控制是最基础的。比如这个配置实现了上班时间禁止视频网站# /etc/squid/time_acl.conf acl work_hours time MTWHF 09:00-18:00 acl media_sites dstdomain .youtube.com .netflix.com http_access deny media_sites work_hours更精细化的控制需要结合LDAP认证。下面是OpenLDAP集成的配置示例# /etc/squid/auth.conf auth_param basic program /usr/lib64/squid/basic_ldap_auth \ -b oupeople,dccompany,dccom \ -D cnadmin,dccompany,dccom \ -w password \ -f ((uid%s)(memberOfcndevelopers,ougroups,dccompany,dccom)) \ -H ldap://ldap.company.com acl dev_group external ldap_auth acl github dstdomain .github.com http_access allow dev_group github针对不同部门设置策略时我推荐使用标签式配置管理# 研发部门策略 include /etc/squid/policies/dev.conf # 市场部门策略 include /etc/squid/policies/market.conf # 高管特殊策略 include /etc/squid/policies/executive.conf最近遇到的一个典型案例是某电商公司大促期间CDN流量激增。我们通过Squid的缓存分层设计将热门商品的图片缓存到边缘节点带宽成本直接降低了40%。3. SSL流量安全审查方案三年前第一次接触SSL Bump时我整整花了两周时间才搞明白证书链的处理逻辑。现在把这套企业级方案分享给大家能省去不少摸索时间。首先是证书准备环节。很多教程只教生成CA证书但实际企业环境需要完整的证书链# 生成根CA openssl genrsa -out rootCA.key 4096 openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1825 -out rootCA.crt # 生成中间CA openssl genrsa -out intermediateCA.key 2048 openssl req -new -key intermediateCA.key -out intermediateCA.csr openssl x509 -req -in intermediateCA.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out intermediateCA.crt -days 730 -sha256 # 生成叶证书 openssl genrsa -out squid.key 2048 openssl req -new -key squid.key -out squid.csr openssl x509 -req -in squid.csr -CA intermediateCA.crt -CAkey intermediateCA.key -CAcreateserial -out squid.crt -days 365 -sha256SSL Bump的配置要特别注意性能优化。这是经过压测验证的参数组合# /etc/squid/ssl_bump.conf https_port 3129 \ cert/etc/squid/ssl/squid.crt \ key/etc/squid/ssl/squid.key \ generate-host-certificateson \ dynamic_cert_mem_cache_size20MB \ ssl-bump \ cipherHIGH:!aNULL:!MD5 \ optionsNO_SSLv3,NO_TLSv1,NO_TLSv1.1,SINGLE_DH_USE,SINGLE_ECDH_USE ssl_bump server-first all sslproxy_cert_error allow all sslproxy_flags DONT_VERIFY_PEER曾经有家公司的安全团队要求对金融类网站禁用解密这个需求可以通过白名单实现acl financial_sites dstdomain .alipay.com .paypal.com ssl_bump splice financial_sites ssl_bump bump all4. 高并发场景性能调优去年双十一期间某电商平台的Squid集群峰值QPS达到12万我们通过以下调优方案稳定支撑了流量洪峰。首先是操作系统层面的优化。这个配置单在多个万级并发环境验证有效# /etc/sysctl.d/squid-optimize.conf net.ipv4.tcp_tw_reuse 1 net.ipv4.tcp_fin_timeout 30 net.ipv4.tcp_max_syn_backlog 8192 net.core.somaxconn 8192 net.ipv4.tcp_syncookies 1 net.ipv4.tcp_max_tw_buckets 2000000 net.ipv4.tcp_mem 94500000 915000000 927000000 net.ipv4.tcp_rmem 4096 87380 16777216 net.ipv4.tcp_wmem 4096 65536 16777216Squid自身的线程模型也要调整。现代多核CPU建议这样配置# /etc/squid/performance.conf workers 8 cpu_affinity_map process_numbers1,2,3,4,5,6,7,8 cores0,1,2,3,4,5,6,7 memory_pools off max_filedescriptors 65535缓存策略对性能影响极大。这是针对电商场景优化的配置# /etc/squid/cache_tuning.conf cache_mem 16GB maximum_object_size_in_memory 2MB cache_dir aufs /data/squid/cache1 50000 64 256 cache_dir aufs /data/squid/cache2 50000 64 256 quick_abort_min -1KB quick_abort_max 1MB quick_abort_pct 95 refresh_pattern -i \.(jpg|png|gif|css|js)$ 1440 50% 10080 ignore-reload refresh_pattern -i \.(html|htm)$ 60 40% 1440有个特别实用的技巧用内存盘加速热点资源。我在处理某次秒杀活动时这样配置mount -t tmpfs -o size4G tmpfs /var/cache/squid/hot cache_dir aufs /var/cache/squid/hot 4000 16 256 acl hot_items urlpath_regex -i \/(product_123|flash_sale) cache allow hot_items cache deny all