在Linux系统上部署Squid代理服务器,能够帮助局域网内的多台设备统一通过一台机器访问互联网,同时实现访问策略控制、流量缓存与行为审计。Squid是一款成熟的开源正向代理软件,支持HTTP、HTTPS以及FTP协议,在Ubuntu、CentOS等常见发行版中均可通过包管理器直接安装。

一、安装Squid与基础环境准备
在基于Debian或Ubuntu的系统中,可以使用apt命令快速安装Squid。安装完成后,系统会自动创建squid用户与对应的服务单元,默认配置文件位于/etc/squid/squid.conf。首先应确认服务器具备稳定的外网连接,并且防火墙放行Squid默认监听的3128端口,否则客户端请求会被拒绝。
如果是CentOS或RHEL系列,则使用yum或dnf进行安装。安装后建议通过systemctl enable squid设置开机自启,并使用systemctl start squid启动服务。可以用ss -tlnp命令检查3128端口是否处于监听状态,确保代理进程正常工作。
安装阶段还需要关注系统时间和DNS解析,因为Squid在记录访问日志时会使用时间信息,域名过滤也依赖DNS查询。对于企业环境,建议先以最小化配置启动并验证基础联通性,再逐步添加访问控制规则。
# Ubuntu / Debian 安装 sudo apt update sudo apt install squid -y # CentOS / RHEL 安装 sudo yum install squid -y # 设置开机自启并启动服务 sudo systemctl enable squid sudo systemctl start squid # 查看监听端口是否正常 ss -tlnp | grep 3128
二、配置正向代理与监听地址
Squid的默认配置已经提供了一个可用的正向代理框架,但出于安全考虑,默认只允许本机回环地址访问。需要修改http_port与http_access指令,将代理暴露给局域网内的特定网段。例如将http_port 3128改为监听所有网卡,或通过acl定义可信子网。
在配置文件中,acl localnet src 192.168.1.0/24这类语句用于声明内部网络范围,随后用http_access allow localnet放开权限。注意http_access规则自上而下匹配,应将拒绝全部流量的http_access deny all放在最后,避免误拦合法请求。修改配置后无需重启,执行squid -k reconfigure即可热加载。
监听地址的选择也影响安全性。如果代理服务器同时具备公网网卡,建议不要把服务直接暴露在公网上,应限定在受信的内网网卡或使用防火墙规则限制来源。生产环境中还可以配合反向代理或隧道技术,但普通正向代理场景下保持最小开放面是最稳妥的做法。
# 在 /etc/squid/squid.conf 中调整 # 允许来自局域网网段的代理请求 acl localnet src 192.168.1.0/24 http_access allow localnet http_access deny all # 热加载配置,不必中断服务 sudo squid -k reconfigure
三、使用ACL实现访问控制
ACL(访问控制列表)是Squid最核心的管控手段。除了按源IP限制,还可以基于目标域名、URL关键字、时间段来过滤。比如禁止访问社交网站,可以定义acl block_sites dstdomain .ipipp.com,然后用http_access deny block_sites拒绝命中该列表的请求。
如果希望按时间控制,例如只允许工作时间上网,可使用time ACL配合工作日与时段。Squid的ACL类型非常丰富,包括src、dst、dstdomain、url_regex、time等。合理配置ACL不仅能提升安全性,也能节省出口带宽。下方示例展示了域名黑名单与工作时间限制的写法。
在编写ACL规则时,要特别注意顺序和组合关系。可以同时使用多个条件来构造更精细的策略,例如先定义内网网段,再叠加时间限制,最后统一拒绝。每次修改规则后建议先使用squid -k parse检查语法,再通过squid -k reconfigure生效,避免配置错误导致服务中断。
# 定义域名黑名单并拒绝访问 acl block_sites dstdomain .ipipp.com http_access deny block_sites # 定义工作时间并仅允许工作时间上网 acl work_time time MTWHF 09:00-18:00 http_access allow localnet work_time http_access deny localnet
四、客户端配置与代理验证
Linux或Windows上的浏览器都可以在网络设置中填写Squid服务器的IP与3128端口作为HTTP代理。命令行工具如curl也可以通过-x参数指定代理进行连通性测试。若出现无法访问的情况,应优先查看/var/log/squid/access.log中的拒绝原因码。
对于需要身份认证的场合,Squid支持basic_ncsa_auth等认证方式,可结合htpasswd生成密码文件。但在内网受控环境,通常仅依靠IP白名单即可。无论采用哪种方式,都应定期审查日志,确认没有异常外联,保障代理服务器不被滥用。
验证代理时可以先测试一个简单的HTTP页面,再尝试访问HTTPS站点。由于正向代理对HTTPS主要使用CONNECT方法,需确保相应端口没有被防火墙阻断。客户端还可以在系统环境变量中写入http_proxy与https_proxy,让命令行工具自动读取代理配置。
# 使用 curl 通过代理测试访问 curl -x http://192.168.1.10:3128 http://ipipp.com # 查看代理访问日志,定位拒绝原因 tail -f /var/log/squid/access.log
五、缓存与性能调优要点
Squid默认开启磁盘缓存,cache_dir指令定义了缓存路径与容量。适当增大缓存上限可以提升重复资源的命中率,但也要避免占满系统磁盘。通过cache_mem设置内存缓存大小,能让热点对象响应更快。
在并发较高的场景,可以调整maximum_object_size与workers参数。Squid的调优本质是在内存、磁盘与网络之间找平衡。建议先在测试环境用压力工具验证,再上线到生产代理网关,以免错误配置引发转发延迟。
此外,日志轮转和磁盘健康状态也需要纳入运维范围,因为缓存目录的I/O性能会直接影响代理响应速度。定期清理过期缓存对象、观察swap.state等内部文件,可以保持Squid长期稳定运行。
# 设置磁盘缓存目录、容量与层级 cache_dir ufs /var/spool/squid 1000 16 256 cache_mem 256 MB maximum_object_size 64 MB
通过从基础安装、正向代理配置、ACL策略、客户端验证到缓存调优的完整流程,可以在Linux上构建一个可靠且易于管理的Squid代理服务器。实际部署时还要结合网络规模、带宽条件和安全要求选择适当的ACL类型与缓存参数,持续通过日志分析优化规则,让代理真正成为网络访问控制的有效节点。
SquidLinux_proxyACL修改时间:2026-08-01 05:45:25