如何在 iptables 中包含 url 列表文件?

如何在 iptables 中包含 url 列表文件?

所以我想包含一个基于 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-r​​equest -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/)。

相关内容