求助:Ubuntu 16.04下Squid与SquidGuard URL重定向失效问题
我之前也碰到过类似的SquidGuard重定向失效问题,在Ubuntu 16.04上折腾了好一阵才搞定,给你一套亲测可行的配置流程,跟着一步步来应该能解决:
先检查是否已经安装了这两个工具,没装的话执行以下命令:
sudo apt-get update && sudo apt-get install squid3 squidguard
安装完成后,用下面的命令确认服务状态,确保都是active (running)状态:
sudo systemctl status squid3 sudo systemctl status squidguard
- 先创建一个存放重定向域名列表的文件夹和文件:
sudo mkdir -p /etc/squidguard/redirectlists sudo nano /etc/squidguard/redirectlists/abc_redirect.list
在打开的文件里只需要写一行:www.abc.com
保存退出(Ctrl+O,回车,Ctrl+X)。
- 编辑SquidGuard的主配置文件:
sudo nano /etc/squidguard/squidguard.conf
找到文件里的dest配置区块,添加一个新的目标规则:
dest abc_redirect { domainlist /etc/squidguard/redirectlists/abc_redirect.list redirect http://localhost:3000 }
接着找到acl和redirect的配置部分,把这个新规则加入过滤链(确保它在其他redirect规则前面,因为SquidGuard是按顺序匹配的):
acl all src 0.0.0.0/0.0.0.0 redirect abc_redirect all
SquidGuard是以proxy用户身份运行的,必须确保规则文件的权限正确,否则会读取失败:
sudo chown -R proxy:proxy /etc/squidguard/redirectlists sudo chmod -R 755 /etc/squidguard/redirectlists
很多人配置后失效就是忘了这一步——SquidGuard需要把规则文件编译成数据库才能生效:
sudo squidGuard -C all
执行完成后,会在/var/lib/squidguard/db目录下生成对应的数据库文件。
编辑Squid的主配置文件:
sudo nano /etc/squid3/squid.conf
找到http_access配置段,添加一行让Squid调用SquidGuard做URL重写:url_rewrite_program /usr/bin/squidGuard
同时确保你的Squid配置允许流量通过,比如存在http_access allow all(如果有自定义的ACL规则,调整成适合你环境的配置即可)。
sudo systemctl restart squid3 sudo systemctl restart squidguard
测试方法:在客户端浏览器里设置代理为你的Ubuntu机器IP,端口默认是3128,然后访问www.abc.com,应该会自动跳转到http://localhost:3000,其他网站保持正常访问。
- 如果还是不生效,查看日志找问题:
- Squid日志:
/var/log/squid3/access.log、/var/log/squid3/cache.log - SquidGuard日志:
/var/log/squidguard/squidguard.log
日志里会明确显示规则是否命中、有没有权限错误等信息。
- Squid日志:
- 注意
localhost:3000的指向:如果是让客户端跳转到自己本地的3000端口,当前配置没问题;如果是要跳转到Ubuntu服务器的3000端口,需要把地址改成http://你的服务器IP:3000。 - 确保Ubuntu机器的3128端口没有被防火墙拦截,客户端能正常连接。
内容的提问来源于stack exchange,提问作者Voora Tarun

