基于 Linux Netfilter 过滤 HTTP 协议中的 Host 字段,也就是域名白名单
使用 iptables 的 string 模块,可以实现相同的功能。白名单数量少或 HTTP 流量小时,强烈建议使用此方案。
Note
|
白名单数量增多或 HTTP 流量非常大时,由于 string 模块匹配是在整个包中查找字符串,匹配速度会明显下降。 |
#1. 创建自定义链 # IP 白名单 iptables -N whitelist_network # HTTP 头 iptables -N http_header # 域名白名单 iptables -N whitelist_host #2. 匹配 IP 白名单匹配 # 访问 TCP 协议 80 端口的包进入 whitelist_network 链 iptables -A INPUT -p tcp --dport 80 -j whitelist_network # 放行指定网络的包,不做任何过滤 iptables -I whitelist_network -p tcp -s 8.8.8.8/24 -j ACCEPT # 包进入 http_header 链 iptables -A whitelist_network -p tcp -j http_header #3. 匹配 HTTP 包 # 匹配包内容里面的 "Host:" 字符串,并进入 whitelist_host 链 iptables -I http_header -p tcp -m string --string "Host:" --algo bm -j whitelist_host # 不是 HTTP 包,直接放行 iptables -A http_header -p tcp -j ACCEPT #4. 匹配域名白名单匹配 # 匹配 HTTP 头中 "Host: " 之后的字符串,比如 "Host: abc.com" iptables -I whitelist_host -p tcp -m string --string "abc.com" --algo bm -j ACCEPT iptables -I whitelist_host -p tcp -m string --string "www.abc.com" --algo bm -j ACCEPT iptables -I whitelist_host -p tcp -m string --string "123.456.798.test.abc.com" --algo bm -j ACCEPT iptables -I whitelist_host -p tcp -m string --string "123.com" --algo bm -j ACCEPT iptables -I whitelist_host -p tcp -m string --string ".123.com" --algo bm -j ACCEPT # 不在域名白名单中的域名,无法访问 80 端口 iptables -A whitelist_host -p tcp -j DROP
默认过滤 80 端口
Note
|
如果 Web 服务端口为 8080,修改源代码中的 #define HTTP_PORT 80 为 #define HTTP_PORT 8080 即可。
|
Note
|
端口变化不频繁,所以没考虑写到配置文件。 |
主机信息将会保存到 /etc/http_whitelist
目录下。
$ sudo mkdir /etc/http_whitelist $ sudo touch /etc/http_whitelist/host /etc/http_whitelist/network
此名单中的域名可以被任意位置的用户访问。
支持普通域名、无限子域名以及泛域名,每行一个,以回车符分割。
abc.com www.abc.com 123.456.798.test.abc.com 123.com *.123.com
白名单模块会忽略在此文件中的单个 IP 地址 或 属于指定网络的 IP 地址,不会过滤任何 HTTP 包。相当于透明直通(不处理数据)。 支持单 IP 以及 CIDR 风格的网络地址格式,每行一个,以回车符分割。
0.0.0.0/0 1.1.1.1/1 2.2.2.0/24 8.8.8.8 8.8.4.4
相当于未使用白名单模块,不会过滤来自任何网络的 HTTP 包
Note
|
如果本机作为转发网关,必须添加内网网段,内网网络才能访问公网。
比如本机 IP 地址为 1.1.1.1,内网网段为 192.168.1.0/24。
将 192.168.1.0/24 写入 /etc/http_whitelist/network 文件,内网网络才能访问公网。
|
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
1. 开源生态
2. 协作、人、软件
3. 评估模型