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

在路由器中使用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.pswp.cn/news/907833.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql-本地编译 MySQL 源码

完全理解你的感受!MySQL 源码本地调试确实是一个“坑多”的过程,尤其是当你第一次尝试从源码构建和调试 MySQL 时。但别担心,我来一步步帮你梳理整个流程,并提供一个详细、可操作的指南,让你可以顺利跑起来 MySQL 源码…

深入理解 shared_ptr 与 enable_shared_from_this

在 C++ 的智能指针体系中,std::shared_ptr 是一个非常重要的工具,它通过引用计数机制帮助我们管理动态分配的对象生命周期,避免内存泄漏。然而,在某些情况下,我们可能需要从一个对象内部获取指向自身的 shared_ptr,这时候就需要使用 std::enable_shared_from_this 这个辅…

通义开源视觉感知多模态 RAG 推理框架 VRAG-RL:开启多模态推理新时代

通义实验室的自然语言智能团队,凭借深厚的技术积累与创新精神,成功研发并开源了视觉感知多模态 RAG 推理框架 VRAG-RL,为 AI 在复杂视觉信息处理领域带来了重大突破。 传统 RAG 方法的局限 传统的检索增强型生成(RAG&#xff0…

【iOS】方法交换

方法交换 method-swizzling是什么相关API方法交换的风险method-swizzling使用过程中的一次性问题在当前类中进行方法交换类方法的方法交换 方法交换的应用 method-swizzling是什么 method-swizzling的含义是方法交换,他的主要作用是在运行的时候将一个方法的实现替…

Python - 爬虫;Scrapy框架之插件Extensions(四)

阅读本文前先参考 https://blog.csdn.net/MinggeQingchun/article/details/145904572 在 Scrapy 中,扩展(Extensions)是一种插件,允许你添加额外的功能到你的爬虫项目中。这些扩展可以在项目的不同阶段执行,比如启动…

95套HTML高端大数据可视化大屏源码分享

概述​​ 在大数据时代,数据可视化已成为各行各业的重要需求。这里精心整理了95套高端HTML大数据可视化大屏源码,这些资源采用现代化设计风格,可帮助开发者快速构建专业的数据展示界面。 ​​主要内容​​ ​​1. 设计风格与特点​​ 采用…

redis未授权(CVE-2022-0543)

概述 Redis 默认绑定在 0.0.0.0:6379,在未配置防火墙或访问控制的情况下会将服务暴露在公网上。若未设置访问密码(默认通常为空),攻击者可直接未授权访问 Redis。利用 Redis 提供的 CONFIG 命令,攻击者可修改配置并将…

(面试)OkHttp实现原理

OkHttp 是一个高效的 HTTP 客户端,被广泛应用于 Android 和 Java 应用中。它提供了许多强大的特性,例如连接池、透明的 GZIP 压缩、HTTP/2 支持等。理解 OkHttp 的实现原理有助于更好地使用和调试它。 以下是 OkHttp 的一些核心实现原理: 1…

Netty 实战篇:构建简易注册中心,实现服务发现与调用路由

本文将为前面构建的轻量级 RPC 框架添加“服务注册与发现”功能,支持多服务节点动态上线、自动感知与调用路由,为构建真正可扩展的分布式系统打好基础。 一、背景:为什么需要注册中心? 如果每个客户端都硬编码连接某个 IP/端口的…

c++之分支

深入理解 C 分支结构:从基础到实战 在 C 编程的世界里,分支结构是控制程序流程的重要手段,它赋予程序 “思考” 和 “选择” 的能力,让程序能够根据不同的条件执行不同的代码块。本文将带大家深入探索 C 分支结构,结合…

LLMs之MCP:如何使用 Gradio 构建 MCP 服务器

LLMs之MCP:如何使用 Gradio 构建 MCP 服务器 导读:本文详细介绍了如何使用Gradio构建MCP服务器,包括前提条件、构建方法、关键特性和相关资源。通过一个简单的字母计数示例,演示了如何将Gradio应用转换为LLM可以使用的工具。Gradi…

ubuntu20.04.5-arm64版安装robotjs

ubuntu20.04.5arm上使用robotjs #ssh,可选 sudo apt update sudo apt install openssh-server sudo systemctl status ssh sudo systemctl enable ssh sudo systemctl enable --now ssh #防火墙相关,可选 sudo ufw allow ssh sudo ufw allow 2222/tc…

craw4ai 抓取实时信息,与 mt4外行行情结合实时交易,基本面来觉得趋势方向,搞一个外汇交易策略

结合实时信息抓取、MT4行情数据、基本面分析的外汇交易策略框架,旨在通过多维度数据融合提升交易决策质量:行不行不知道先试试,理论是对的,只要基本面方向没错 策略名称:Tri-Sync 外汇交易系统 核心理念 「基本面定方…

Python中scapy库详细使用(强大的交互式数据包操作程序和库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、scapy概述1.1 scapy介绍1.2 安装1.3 交互模式1.4 安全注意事项二、基本使用2.1 数据包构造基础2.2 数据包发送2.3 数据包嗅探2.4 数据包分析与操作2.5 网络扫描技术2.6 协议实现示例三、高级功能3.1 数据包重放3.2 …

基于Web的濒危野生动物保护信息管理系统设计(源码+定制+开发)濒危野生动物监测与保护平台开发 面向公众参与的野生动物保护与预警信息系统

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…

[SAP] 矩阵复制(Matrix Copy)

SAP中的复制粘贴功能被称为矩阵复制,通过点击对话框或屏幕,并执行下述命令,使用矩阵复制就可以复制多行文本 ① 按下Ctrl-Y,从左上到右下拖拉鼠标来选择文本 ② 文本高亮显示后,按下Ctrl-C ③ 移到新的位置插入文本…

【笔记】在 MSYS2(MINGW64)中安装 Python 工具链的记录

#工作记录 📌 安装背景 操作系统:MSYS2 MINGW64当前时间:2025年6月1日Python 版本:3.12(默认通过 pacman 安装)目标工具链: pipxnumpypipsetuptoolswheel 🛠️ 安装过程与结果记录…

OpenCV CUDA模块结构分析与形状描述符------在 GPU 上计算图像的原始矩(spatial moments)函数spatialMoments()

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 该函数用于在 GPU 上计算图像的原始矩(spatial moments)。这些矩可用于描述图像中物体的形状特征,如面积、质…

Nacos实战——动态 IP 黑名单过滤

1、需求分析 一些恶意用户(‏可能是黑客、爬虫、DDoS ؜攻击者)可能频繁请求服务器资​源,导致资源占用过高。针对这种问题,可以通过IP‏ 封禁,可以有效拉؜黑攻击者,防止资源​被滥用,保障合法…

opencv + jpeg_turbo(启用SIMD加速)

背景 opencv的imreadimwrite耗时过大 一张5M的图片读用了140ms,写一张1.7M的图片用149ms 平台:mingw64编译Windows程序版本:opencv4.5.4 加速方案 opencv启用openmpopencv启用jpeg_turbojpeg_turbo启动SIMD加速 下载jpeg_turbo源码 opencv源码自带…