所以我想包含一个基于 80k+ url 的文件https://github.com/StevenBlack/hosts主机文件到IPTABLES中的规则。有一种方法可以手动执行此操作,但正如您所知,手动执行 80k+ 条目将是一件令人头痛的事情。
过滤器 :输入下降 [0:0] :前进下降 [0:0] :输出接受 [0:0] :upnp - [0:0] :vpnlist - [0:0] :bfplimit - [0:0] :麦克列表 - [0:0] :urllist - [0:0] -A 输入 -m 状态 --state 已建立,相关 -j 接受 -A 输入 -i br0 -j 接受 -A 输入 -i lo -j 接受 -A 输入 -m 状态 --state 无效 -j DROP -A 输入 -p udp --sport 67 --dport 68 -j 接受 -A 输入 -p icmp ! --icmp-type echo-request -j 接受 -A 转发 -i br0 -o br0 -j 接受 -A urllist -p tcp -m webstr --url "ada.com aaa.com ffff.com“ -j REJECT --reject-with tcp-reset -A 转发 -i br0 -j urllist -A 转发 -m 状态 --state 已建立,相关 -j 接受 -A 转发 -m 状态 --state 无效 -j DROP -A 转发 -i br0 -j 接受 -A FORWARD -m conntrack --ctstate DNAT -j 接受提交
粗体部分是我想要填写所有网址或包含文件的部分
有什么想法如何做到这一点吗?
答案1
据我所知,iptables 不理解 URL 或域。您必须首先将所有 URL 转换为 IP 地址。使用这个在线工具http://domaintoipconverter.com/index.php
要从以前的结果中提取 IP 地址,请使用此在线工具https://www.ipvoid.com/ip-extractor/
将您的 IP 地址保存到文本文件(list.txt
例如),每行一个条目。您的list.txt
文件应类似于以下内容:
$ cat list.txt
145.14.145.222
145.14.144.69
192.243.59.20
192.243.59.12
150.242.210.158
150.242.210.187
122.226.186.3
然后使用简单的“for 循环”bash 脚本将list.txt
文件中的所有 IP 地址添加到 iptables:
#!/bin/bash
for i in $(cat list.txt);
do
iptables -A OUTPUT -d "$i" -j DROP
done
# Save the rules
service iptables save
答案2
iptables 允许您根据数据包的内容进行过滤,但前提是这些数据包未加密。
由于您想将其用作广告拦截:
- 这不适用于 https 连接
- 每一个数据包将与 80k 以上的规则进行匹配
请考虑替代方案(例如https://pi-hole.net/)。