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 "ou=people,dc=company,dc=com" \ -D "cn=admin,dc=company,dc=com" \ -w "password" \ -f "(&(uid=%s)(memberOf=cn=developers,ou=groups,dc=company,dc=com))" \ -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-certificates=on \ dynamic_cert_mem_cache_size=20MB \ ssl-bump \ cipher=HIGH:!aNULL:!MD5 \ options=NO_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_numbers=1,2,3,4,5,6,7,8 cores=0,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 size=4G 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