【iptables防火墙】-- URL过滤 (Hexstring、IP、DoT和DoH)

article/2025/8/6 3:24:02

在路由器中使用iptables工具对URL地址进行过滤涉及到如下几个方面,hexstring、ip、DoT和DoH。

以过滤www.baidu.com为例

1、DNS阻断

m string --hex-string是iptables中一个以​十六进制格式​定义要匹配的二进制特征并且支持混合明文和二进制数据的模块。由于DNS协议使用二进制格式,所以无法使用明文(–string “www.baidu.com”)规则匹配。

#ipv4
iptables  -w -I INPUT -i bridge -p udp --dport 53 -m string  --hex-string "www|05|baidu|03|com" --algo bm  -j DROP
iptables  -w -I FORWARD-i bridge -p udp -o wan_iface --dport 53 -m string --hex-string "www|05|baidu|03|com" --algo bm  -j DROP
iptables  -w -I INPUT -i bridge -p tcp --dport 53 -m string  --hex-string "www|05|baidu|03|com" --algo bm  -j DROP
iptables  -w -I FORWARD-i bridge -p tcp -o wan_iface --dport 53 -m string --hex-string "www|05|baidu|03|com" --algo bm  -j DROP#ipv6
ip6tables  -w -I INPUT -i bridge -p udp --dport 53 -m string  --hex-string "www|05|baidu|03|com" --algo bm  -j DROP
ip6tables  -w -I FORWARD-i bridge -p udp -o wan_iface --dport 53 -m string --hex-string "www|05|baidu|03|com" --algo bm  -j DROP
ip6tables  -w -I INPUT -i bridge -p tcp --dport 53 -m string  --hex-string "www|05|baidu|03|com" --algo bm  -j DROP
ip6tables  -w -I FORWARD-i bridge -p tcp -o wan_iface --dport 53 -m string --hex-string "www|05|baidu|03|com" --algo bm  -j DROP

以ipv4部分,来解析一下规则。(ipv6同理)
因为DNS协议使用二进制格式,这里四条规则核心分别是在INPUT和FORWARD链中分别对tcp、udp协议的53端口进行过滤,将包含www.baidu.com负载的数据包拦截下来,从而做到阻断DNS解析的作用。

这里关于DNS,之前还遇到一个小问题,大部分dns解析都是通过udp协议,直到后面用户投诉url过滤功能不生效,才发现原来dns还会使用tcp协议(DNS over TCP,即DoT,用于大型DNS响应或加密DNS),上网搜了一下,把大概内容也贴在这里。

dns同时使用tcp和udp协议

2、IP地址过滤

在阻断DNS解析之后,运气不好的你发现,还是可以访问目标www.baidu.com,这是缓存机制导致的,比如你之前访问过www.baidu.com,那么你的电脑、手机以及路由器等设备就都会对这个URL做一个缓存表,里面放着该URL对应的IP地址,下一次你访问的时候,就不需要去再次进行DNS解析了,直接通过ip进行访问,那就绕过了DNS阻断。

所以在进行了DNS阻断之后,还需要通过ip来进行过滤。
这里可以使用nslookup指令来查询URL对应的IP,然后通过iptables将对应IP过滤,如下所示

#不指定DNS服务器
nslookup www.baidu.com
Server:    221.5.88.88
Address 1: 221.5.88.88 d3-dns-gdlt-tycName:      www.baidu.com
Address 1: 157.148.69.186
Address 2: 157.148.69.151
Address 3: 2408:8756:c52:1a18:0:ff:b030:7606
Address 4: 2408:8756:c52:15df:0:ff:b073:d207#指定DNS服务器
nslookup www.baidu.com 114.114.114.114
Server:    114.114.114.114
Address 1: 114.114.114.114 public1.114dns.comName:      www.baidu.com
Address 1: 157.148.69.151
Address 2: 157.148.69.186
Address 3: 2408:8756:c52:1a18:0:ff:b030:7606
Address 4: 2408:8756:c52:15df:0:ff:b073:d207

在此获取到ip之后就可以根据ip来生成防火墙规则,如下所示

#ipv4
iptables  -w -I FORWARD -s 157.148.69.186 -j DROP
iptables  -w -I FORWARD -d 157.148.69.186 -j DROP
iptables  -w -I FORWARD -s 157.148.69.151 -j DROP
iptables  -w -I FORWARD -d 157.148.69.151 -j DROP#ipv6
ip6tables  -w -I FORWARD -s 2408:8756:c52:15df:0:ff:b073:d207 -j DROP
ip6tables  -w -I FORWARD -d 2408:8756:c52:15df:0:ff:b073:d207 -j DROP
ip6tables  -w -I FORWARD -s 2408:8756:c52:1a18:0:ff:b030:7606 -j DROP
ip6tables  -w -I FORWARD -d 2408:8756:c52:1a18:0:ff:b030:7606 -j DROP

插播一个小知识点,其实防火墙本身也带解析URL地址的功能,可以直接使用如下方法添加规则

#ipv4
iptables -A  FORWARD -d baidu.com -j DROP
iptables -A  FORWARD -s baidu.com -j DROP
#ipv6
ip6tables -A FORWARD -d www.baidu.com -j DROP
ip6tables -A FORWARD -s www.baidu.com -j DROP

不过这个方法需要注意,不是所有iptables版本都支持,并且如果某个URL不存在相应的ip地址,会导致指令报错!!!且使用用限制,截取man中的说明,这是一个糟糕的做法!因此不推荐使用这种方法哦~
在这里插入图片描述

基本做到这一步,URL过滤功能就算完成了!但是凡是都有例外!!!下面聊一下DoH

3、DoH(DNS over HTTP)阻断

这是一种通过 HTTPS 协议加密传输 DNS 查询的技术,旨在解决传统 DNS 的安全与隐私缺陷。DoH 将传统的 DNS 查询封装在 HTTPS 请求中,通过 TLS/SSL 加密传输,使用标准 443 端口。与传统 DNS(明文 UDP/TCP,端口 53)相比,它可防止窃听、篡改和劫持。

由于其内容加密的特性,因此主要阻断方法就是阻断访问DoH服务器,因为即使加密的https协议,其域名部分也是明文的。

iptables -A OUTPUT -p tcp -m tcp --dport 443 -m string --string "dns.alidns.com" --algo bm -j DROP

以下是部分的DoH服务器

#国内
"dns.alidns.com"    # 阿里云
"doh.pub"           # 腾讯 DNSPod
"dns.cfiec.net"     # 中国互联网络信息中心
"dot.pub"           # 腾讯备用
"doh.360.cn"        # 360安全DNS
"dns.ipv6dns.com"   # 下一代互联网工程中心#国外
"dns.google"
"cloudflare-dns.com"
"dns.opendns.com"

过去问题总结:
1、为什么不直接阻止ip,最后不都是通过ip访问吗?
这里涉及到一个ip获取是否完整的问题,通常一个URL会对应多个IP,但是部分情况下一个DNS服务器上不会包含此URL的全部ip,尤其是google.com这种地址,ip数量众多,所以要在阻断ip的情况下,同步阻断DNS,这样能保证设备换了DNS服务器的情况下也能阻断访问。


http://www.hkcw.cn/article/OYmdyBaeXA.shtml

相关文章

Agent + MCP工具实现数据库查询

目录 1. RAG 2. Function Calling(函数调用) 3. MCP(模型上下文协议) 4. 案例实践 (DifyAgent MCP数据查询) 5. 参考资料: 在大模型领域里,RAG和Function Calling是常见的概念,他们之间又是有区别的,R…

【瑶池数据库训练营及解决方案本周精选(探索PolarDB,参与RDS迁移、连接训练营)】

一、训练营 数据库迁移训练营 自建数据库运维难?本次训练营教您迁移至云数据库 RDS,高可用架构跨区容灾,降本增效!模拟教程 实战演练,零基础也能上手。 (一)开营时间 2025年4月8日-6月2日16…

005学生心理咨询评估系统技术解析:搭建科学心理评估平台

学生心理咨询评估系统技术解析:搭建科学心理评估平台 在心理健康教育日益受重视的当下,学生心理咨询评估系统成为了解学生心理状态的重要工具。该系统涵盖试卷管理、试题管理等核心模块,面向管理员和用户两类角色,通过前台展示与…

为什么企业需要应用程序可观测性

当今数字经济的持续需求迫使企业不仅要确保其应用程序功能正常,还必须提供高可用性、无缝扩展性和最佳性能。无论是每秒处理数百万关键交易的复杂的金融平台,还是服务全球多元化客户群的电商网站,现代企业应用程序早已突破传统简单架构&#…

Open3D 最小二乘法拟合曲线——线性回归实现

目录 1. 前言 2. 线性回归法 2.1 模型假设 2.2 定义误差函数 2.3 求偏导并解方程 2.4 案例演示 2.4.1 使用 python 实现 2.4.2 使用库函数实现(更推荐) 1. 前言 最小二乘法拟合曲线与拟合直线的核心原理完全相同,都是基于最小化误差平方和的思想,使得所有数据点到…

JavaWeb开发基础Servlet生命周期与工作原理

Servlet生命周期 Servlet的生命周期由Servlet容器(如Tomcat、Jetty等)管理,主要包括以下5个阶段: 加载Servlet类 创建Servlet实例 调用init方法 调用service方法 调用destroy方法 加载(Loading): 当Servlet容器启动或第一次接收到对某个…

Electron-vite【实战】MD 编辑器 -- 系统菜单(含菜单封装,新建文件,打开文件,打开文件夹,保存文件,退出系统)

最终效果 整体架构 src/main/index.ts import { createMenu } from ./menu在 const mainWindow 后 // 加载菜单createMenu(mainWindow)src/main/menu.ts import { BrowserWindow, Menu, MenuItem, MenuItemConstructorOptions, dialog, shell } from electron import fs from…

天气预报中的AI:更准确的预测如何实现

如今的天气预报早已不是简单的看云识天气,而是变成了一场数据与算法的科技博弈。当你在手机App上查看未来两小时的降雨概率时,背后可能是AI模型分析了全球数万颗气象卫星的数据;当你收到台风路径预警短信时,或许是AI提前五天就锁定…

虚拟化数据恢复—XenServer虚拟机虚拟磁盘文件丢失的数据恢复案例

虚拟化环境: 某品牌720服务器中有一组通过型号为H710P的RAID卡4块STAT硬盘组建的RAID10,上层部署Xen Server服务器虚拟化平台。虚拟机安装的Windows Server系统,运行Web服务器。有系统盘 数据盘两个虚拟机磁盘。 虚拟化故障: 机…

Java 之殇:从中流砥柱到“被温柔替代”

—— 一位老派 Java 工程师的自述 今天看到一篇江苏的作者发出的《公司Rust团队全员被裁,只因把服务写得「太稳定」:“项目0故障、0报警,那养着3个Rust工程师没用啊”》帖子。看到那篇文章第一反应也是:这八成是 AI 编的。但说实…

vscode一直连接不上虚拟机或者虚拟机容器怎么办?

1. 检查并修复文件权限 右键点击 C:\Users\20325\.ssh\config 文件,选择 属性 → 安全 选项卡。 确保只有你的用户账户有完全控制权限,移除其他用户(如 Hena\Administrator)的权限。 如果 .ssh 文件夹权限也有问题,同…

面试中的项目经验考查:如何让实战经历成为你的决胜王牌

阅读原文 "你在项目中遇到的最大困难是什么?" 当面试官抛出这个问题时,你是否曾感到一阵心虚?是否担心自己的回答显得单薄无力?在竞争激烈的技术岗位面试中,项目经验往往是决定成败的关键因素。资深HR甚至建…

基于Java(SSH框架)+MySQL 实现(Web)公司通用门户(CMS)网站

一、公司通用门户网站的设计与实现 摘要:随着IT应用的深入普及,各行各业都积累了大量的信息资源,实现企业内部信息技术资源的有效整合和精益化管理,是越来越多公司企业的迫切需求。公司门户网站是一个企业向外宣传企业品牌和展示…

vue3实现鼠标悬浮div动画效果

需求 鼠标悬浮在div上显示下载按钮和信息&#xff0c;同时保持下面的div位置不变&#xff1b;当鼠标移走的时候就隐藏恢复原样。 效果&#xff1a; 代码 <script setup> const software ref([{id: "one",title: "软件",container: [{id: "123…

数据结构与算法之单链表面试题(新浪、百度、腾讯)

单链表面试题&#xff08;新浪、百度、腾讯&#xff09; 求单链表中的有效节点的个数 public int getCount(HeroNode head) {Hero1 cur head.getNext();int count 0;while(cur ! null) {count;cur cur.getNext();}return count;}查找单链表中的倒数第k个结点【新浪面试题】…

Google Play推出新功能:用户可直接向Gemini提问应用相关问题

5 月 30 日消息&#xff0c;谷歌在Google Play中广泛推出了由 Gemini AI 提供支持的“向Google Play询问此应用”功能&#xff0c;该功能已正式出现在Google Play的46.1.39-31 版本中。 “向Google Play询问此应用”这项功能&#xff0c;将 Gemini AI 直接集成到Google Play中&…

PyTorch学习(1):张量(Tensor)核心操作详解

PyTorch学习(1)&#xff1a;张量&#xff08;Tensor&#xff09;核心操作详解 一、张量&#xff08;Tensor&#xff09;核心操作详解 张量是PyTorch的基础数据结构&#xff0c;类似于NumPy的ndarray&#xff0c;但支持GPU加速和自动微分。 1. 张量创建与基础属性 import to…

农村土地承包经营权二轮延包—生成地块的KJZB字段

"关于地块的空间坐标&#xff08;KJZB&#xff09;字段&#xff0c;可能稍微复杂一点&#xff0c;用脚本生成较好。空间坐标&#xff0c;目前有两种表达&#xff1a;方案一&#xff0c;根据地块上界址点的个数依次填上&#xff08;如4个为J1/J2/J3/J4&#xff09;&#xf…

时空数据智能分析的原理和案例分享

在当今数字化时代,时空数据如同隐藏在海量信息中的宝藏,蕴含着丰富的价值,等待我们去挖掘和利用。从城市交通的实时监测与优化,到自然灾害的预警与防范,从精准农业的智能管理,到金融市场的动态分析,时空数据的身影无处不在,深刻地影响着我们生活的方方面面。DeepSeek,…

专场回顾 | 重新定义交互,智能硬件的未来设计

自2022年起&#xff0c;中国智能硬件行业呈现出蓬勃发展的态势&#xff0c;市场规模不断扩大。一个多月前&#xff0c;“小智AI”在短视频平台的爆火将智能硬件带向了大众视野&#xff0c;也意味着智能硬件已不再仅仅停留在概念和技术层面&#xff0c;而是加速迈向实际落地应用…