【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
繁體地址,請注明出處:http://hk.pswp.cn/news/907833.shtml
英文地址,請注明出處:http://en.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源碼自帶…