当前位置: 首页 > news >正文

【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服务器的情况下也能阻断访问。

相关文章:

  • Spring Boot微服务架构(九):设计哲学是什么?
  • VScode ios 模拟器安装cocoapods
  • 广州邮科高频开关电源:以创新科技赋能通信能源绿色未来
  • 代码随想录打卡|Day53 图论(Floyd 算法精讲 、A * 算法精讲 (A star算法)、最短路算法总结篇、图论总结 )
  • 电子书阅读器:基于UDP的网络日志调试系统
  • python打卡day40
  • TF 卡 U1 与 U3 的核心差异解析:从速度标准到应用场景
  • dvwa3——CSRF
  • 智能改变一切:当技术革命遇见人类文明
  • MySql(八)
  • Java本地缓存实现方案全解析:原理、优缺点与应用场景
  • 第十二篇:MySQL 分布式架构演进与云原生数据库探索
  • 针对Helsinki-NLP/opus-mt-zh-en模型进行双向互翻的微调
  • 大厂前端研发岗位设计的30道Webpack面试题及解析
  • ROS 2 中的 robot_state_publisher 和 joint_state_publisher 详解
  • comfyui 工作流中 视频长度和哪些参数有关? 生成15秒的视频,再加上RTX4060 8G显卡,尝试一下
  • AI书签管理工具开发全记录(五):后端服务搭建与API实现
  • (18)混合云架构部署
  • SpringBoot整合Flowable【08】- 前后端如何交互
  • 数据分类分级的实践与反思:源自数据分析、治理与安全交叉视角的洞察
  • 网站后台开发/2023国内外重大新闻事件10条
  • 海南在线人才网招聘官网/赣州seo外包
  • 搭建网站需要钱吗/抖音seo排名系统
  • 动态网站的建设及综合设计/个人能接广告联盟吗
  • 长春建站企业/百度一下 你就知道官方
  • 建站公司哪家好 知道万维科技/网络营销模式有哪些类型