可以通过iptables结合使用squid和squidGuard来实现URL过滤黑名单。具体的步骤如下:
1、安装squid和squidGuard
在Linux系统中安装squid和squidGuard,可以使用命令:
sudo apt-get update
sudo apt-get install squid squidguard
2、配置squid
打开squid配置文件/etc/squid/squid.conf,在其中添加如下配置:
http_port 3128
acl bad_url url_regex "/etc/squid/bad-sites.acl"
http_access deny bad_url
其中,http_port指定squid监听的端口号,bad_url是一个ACL(Access Control List)规则,用来匹配黑名单中的URL,http_access则是squid访问控制规则,表示如果匹配到bad_url规则,就拒绝访问。
3、配置squidGuard
打开squidGuard配置文件/etc/squidguard/squidGuard.conf,在其中添加如下配置:
src blacklist {
url_rewrite_program /usr/bin/squidGuard -c /etc/squidguard/squidGuard.conf
}
这里定义了一个名为blacklist的源,用来引用后面的ACL规则。url_rewrite_program指定了squidGuard的可执行文件路径和配置文件路径。
4、创建黑名单
创建一个名为bad-sites.acl的文件,用来存储黑名单中的URL,可以使用命令:
sudo touch /etc/squid/bad-sites.acl
然后打开该文件,添加需要屏蔽的URL,如:
.*facebook\.com.*
.*twitter\.com.*
这里使用正则表达式匹配URL。
5、生成squidGuard数据库
使用命令生成squidGuard数据库:
sudo squidGuard -C all
这里使用了-C all参数,表示生成所有ACL规则的数据库。
6、启动squid和squidGuard
使用命令启动squid和squidGuard:
sudo systemctl start squid
sudo systemctl start squidGuard
7、配置iptables
在iptables中配置规则,将访问端口为3128的HTTP流量重定向到squid监听的端口,如:
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3128
这样就完成了通过iptables配置URL过滤黑名单的操作。需要注意的是,这种方式虽然可以屏蔽指定的URL,但无法屏蔽HTTPS流量,因为HTTPS流量是加密的。如果需要屏蔽HTTPS流量,需要使用其他工具或方法。