CentOS9部署Squid 5.5代理服务教程
下文主要包括:CentOS 9 安装 + 配置 Squid(5.x) 的完整、可行配置方案,含基础正向代理、允许内网、防火墙、SELinux、开机自启和测试,实现内网不走代理,外网需登录认证放行(2小时凭据有效期内免密)
一、环境说明
- 系统:CentOS 9 Stream
- Squid 版本:5.x(官方源自带)
- 内网网段示例:192.168.1.0/24
- 代理端口:3128
二、安装 Squid
# 1. 更新系统
sudo dnf update -y
# 2. 安装 squid
sudo dnf install squid -y
# 3. 查看版本(确认 5.x)
squid -v
三、备份配置文件(重要)
#备份配置
sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.bak
#安装http-tools支持包(身份验证功能需要用到)
dnf install -y squid httpd-tools #httpd-tools 包含 htpasswd,用来创建账号密码文件
#创建密码文件(第一次用 -c)
htpasswd -c /etc/squid/passwd user1 #输入密码、确认密码
#再加用户(不要 -c,否则覆盖)
htpasswd /etc/squid/passwd user2
#权限必须严格
chown squid:squid /etc/squid/passwd
chmod 600 /etc/squid/passwd
#查看用户
cat /etc/squid/passwd
四、基础配置(/etc/squid/squid.conf)
#编辑Squid配置文件
sudo vim /etc/squid/squid.conf
#Squid 配置文件的规则是 从上到下匹配,匹配到就生效
4.1 关键配置(直接替换 / 修改)
# 1. 监听端口(默认 3128)
http_port 3128
#https_port 443 cert=/etc/squid/ssl_cert/squid.pem key=/etc/squid/ssl_cert/squid.pem #如启用https需增加自签名证书
# 2. 缓存目录(默认即可,生产可加大;纯代理也可以 cache deny all)
cache_dir ufs /var/spool/squid 100 16 256
cache_mem 256 MB
maximum_object_size 80 MB
# 3. 日志路径
access_log /var/log/squid/access.log combined
cache_log /var/log/squid/cache.log
# 4. 允许的内网段(改成你的网段)
acl localnet src 192.168.1.0/24
acl localnet src 172.16.0.0/12
acl localnet src 10.0.0.0/8
# 5. 访问控制:先允许内网,最后拒绝所有
auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/passwd
auth_param basic realm "Squid Proxy Login"
auth_param basic credentialsttl 2 hours #凭证缓存有效期 2 小时(如缺少这行,默认值为2小时)
#auth_param basic credentialsttl 0 #凭证不限时,至重启squid失效
acl authenticated proxy_auth REQUIRED
http_access allow localnet #内网访问直接放通,如全部要认证则这条必须注释掉
http_access allow authenticated #启用鉴权访问(如内网直接放通的则内网不需要鉴权)
http_access deny all
# 6. 主机名(随便填)
visible_hostname squid-proxy
# 7. 运行用户/组(默认 squid)
cache_effective_user squid
cache_effective_group squid
说明:默认配置很多,只改上面这几处即可,其他保持默认。
五、初始化缓存目录
sudo squid -z
# 出现 "Creating swap directories" 即可
六、启动服务 + 开机自启
# 启动
sudo systemctl start squid
# 开机自启
sudo systemctl enable squid
# 查看状态(active (running) 正常)
sudo systemctl status squid
七、防火墙放行 3128
sudo firewall-cmd --add-port=3128/tcp --permanent
sudo firewall-cmd --reload
# 验证
sudo firewall-cmd --list-ports | grep 3128
八、SELinux 放行(CentOS 9 默认开启)
# 允许 squid 监听 3128
sudo setsebool -P squid_connect_any 1
# 或更精准:
sudo semanage port -a -t http_port_t -p tcp 3128
九、FRP部署
9.1 Frps安装(与Squid同侧)9.1 Frps安装(与Squid同侧)
#安装Frp
wget https://github.com/fatedier/frp/releases/download/v0.58.1/frp_0.58.1_linux_amd64.tar.gz
tar -zxvf frp_0.58.1_linux_amd64.tar.gz #解压
mv frp_0.58.1_linux_amd64 frp #重命名目录为frp
chown -R root:root frp #目录权限设置
#Frps配置
cd /root/frp
vi frps.toml #开始配置frp服务端配置文件
#Frps配置文件示例
bindPort = 7000 #监听端口
auth.token = "Abc123456" #填写你的真实token,建议提高复杂性
# Windows 客户端 frpc.toml 配置示例
serverAddr = "服务器IP" # 填写你 VPS 的真实 IP
serverPort = 7000 #服务器监听端口
auth.token = "Abc123456"
# 1. 主访客:尝试通过 XTCP 进行 P2P 打洞
[[visitors]]
name = "squid-xtcp-visitor"
type = "xtcp"
serverName = "squid-xtcp" # 对应 VPS 上新增的 XTCP 代理名称
secretKey = "123456abc"
bindAddr = "127.0.0.1"
bindPort = 13128
keepTunnelOpen = true
fallbackTo = "squid-stcp-fallback" # 打洞失败自动回退到下面的 STCP 访客
fallbackTimeoutMs = 500
# 2. 备用访客:当 XTCP 失败时,通过服务器中转流量
[[visitors]]
name = "squid-stcp-fallback"
type = "stcp"
serverName = "squid-stcp" # 对应 VPS 上原有的 STCP 代理名称
secretKey = "123456abc"
bindAddr = "127.0.0.1"
bindPort = -1 # 仅作内部回退通道,不单独占用端口
#测试连接效果
curl -x http://127.0.0.1:3128 http://www.baidu.com
# 返回百度页面即成功
9.2 Frpc安装(与Squid同侧)
- 代理地址:Squid 服务器 IP
- 端口:3128
- 浏览器 / 系统代理设置后访问外网测试
- 9.2 Frpc安装(与Squid同侧)
- 代理地址:Squid 服务器 IP
- 端口:3128
- 浏览器 / 系统代理设置后访问外网测试。
9.3 Frpc安装(本机/客户机)
- 代理地址:Squid 服务器 IP
- 端口:3128
- 浏览器 / 系统代理设置后访问外网测试
- 9.2 Frpc安装(与Squid同侧)
- 代理地址:Squid 服务器 IP
- 端口:3128
- 浏览器 / 系统代理设置后访问外网测试。
十、测试代理(本机或内网机器)
9.1 本机测试
curl -x http://127.0.0.1:3128 http://www.baidu.com
# 返回百度页面即成功
9.2 内网客户端测试(Windows/Linux)
- 代理地址:Squid 服务器 IP
- 端口:3128
- 浏览器 / 系统代理设置后访问外网测试。
十、常用优化(可选)
10.1 加大缓存(例如 2GB)
cache_dir ufs /var/spool/squid 2048 16 256
10.2 禁止缓存大文件(如 >100M)
maximum_object_size 100 MB
10.3 黑名单(禁止访问某些域名)
acl blacklist dstdomain .qq.com .taobao.com
http_access deny blacklist
十一、常见问题排查
- 启动失败:
tail -f /var/log/squid/cache.log看报错 - 客户端连不上:检查防火墙 3128、SELinux、ACL 网段是否正确
- 能连但上不了网:检查服务器本身能否上网、DNS 是否正常、是否被GFW
- 不用密码也能上:检查:http_access allow authenticated 必须在 http_access deny all 之前,且没有任何允许 IP 的规则。
- 认证失败:密码文件权限必须 600、属主 squid
确认路径:/usr/lib64/squid/basic_ncsa_auth(64 位系统) - SELinux 导致认证卡着:setsebool -P squid_connect_any 1
- 查看访问日志:tail -f /var/log/squid/access.log
- 配置语法检查:squid -k parse
- 重载配置(不重启服务):squid -k reconfigure















