AdguardTeam / AdGuardHome

Network-wide ads & trackers blocking DNS server
https://adguard.com/adguard-home.html
GNU General Public License v3.0
24.78k stars 1.79k forks source link

一些DNS过滤器黑名单规则不生效 #6017

Closed MiKing233 closed 1 year ago

MiKing233 commented 1 year ago

Prerequisites

Platform (OS and CPU architecture)

Linux/ARM64

Installation

Custom package (OpenWrt, HomeAssistant, etc; please mention in the description)

Setup

On a router, DHCP is handled by the router

AdGuard Home version

v0.107.34

Action

對於DNS 黑名单, 大部分規則能正常工作, 但是今天在我檢查時發現個別規則的規則數量為0, 我確認了規則文件目標LINK正常, 網頁能正常載入看到規則, 但他們似乎不再能被AdGuard Home解析, 我確認之前他們工作的很好, 不太清楚從什麽時候開始(也許是v0.107.34?)規則不在能被正確的解析

Expected result

規則能夠被正確的解析

Actual result

image 一些規則的規則數量為0, 測試LINK能正常打開, 舉例:https://easylist-downloads.adblockplus.org/easylist.txt image 檢查ADGH的config文件 image 確認ID為1684351173的規則 image 發現此規則並不存在, 這似乎是導致規則數量爲0的問題所在 嘗試刪除/usr/bin/AdGuardHome/data/filters資料夾, 並重啓ADGH服務, 在DNS黑名單中確認所有規則的規則數量都變為0, 重新點擊檢查更新, 依然是這些規則數量爲0

我不太清楚這是否是一個BUG, 難道是ADGH更改了自身的規則語法導致這些規則不再能被解析? 但他們曾經工作得很好, 這是我的困惑...

Additional information and/or screenshots

No response

hoilung commented 1 year ago

看#6003 说明吧,应该是新版本升级后限制了文件大小,最大就是1024kb造成的

9dark9 commented 1 year ago

看#6003 说明吧,应该是新版本升级后限制了文件大小,最大就是1024kb造成的

应该并不是比如https://raw.githubusercontent.com/banbendalao/ADgk/master/ADgk.txt 这个规则,https://raw.githubusercontent.com/o0HalfLife0o/list/master/ad-edentw.txt 这个也是,就不能加载 而这个规则https://raw.githubusercontent.com/privacy-protection-tools/anti-AD/master/anti-ad-easylist.txt就可以加载 从0.107.34开始,上一个版本好好的

MiKing233 commented 1 year ago

看#6003说明吧,应该是新版本升级后限制了文件大小,最大就是1024kb的原因

不应该像https://raw.githubusercontent.com/banbendalao/ADgk/master/ADgk.txt这个规则,https://raw.githubusercontent.com/o0HalfLife0o/list/master/ad-edentw.txt这个也是,就不能加载 而这个规则https://raw.githubusercontent.com/privacy-protection-tools/anti-AD/master/anti-ad-easylist.txt就可以 从0.107.34开始加载,上一个版本好好的

image 確實不是行长度限制的問題, 看起來似乎是文件中包含有问题的字符, 我還在研究這個問題, 據ainar-g所説:该错误是为了防止用户放置二进制文件而不是文本文件。对 HTML 文本也有类似的检查。

MiKing233 commented 1 year ago

看#6003说明吧,应该是新版本升级后限制了文件大小,最大就是1024kb的原因

不应该像https://raw.githubusercontent.com/banbendalao/ADgk/master/ADgk.txt这个规则,https://raw.githubusercontent.com/o0HalfLife0o/list/master/ad-edentw.txt这个也是,就不能加载 而这个规则https://raw.githubusercontent.com/privacy-protection-tools/anti-AD/master/anti-ad-easylist.txt就可以 从0.107.34开始加载,上一个版本好好的

image 確實不是行长度限制的問題, 看起來似乎是文件中包含有问题的字符, 我還在研究這個問題, 據ainar-g所説:该错误是为了防止用户放置二进制文件而不是文本文件。对 HTML 文本也有类似的检查。

我已經解決了該問題, 對於報錯為Error: control/filtering/add_url | Couldn't fetch filter from URL "https://cdn.mknetwork.net/ADFilters/AdByBy_Video_Rule_By_xwhyc.txt": line at index 0: character at index 0: non-printable character | 400的問題, 是因爲文件中存在中文, 我爲了使Web展示中文不亂碼添加了一個字符, 不過我其實也不太理解這個字符是什麽意思, 不過他被Web展示出來是不可見的, 就像圖中開頭的那個圓點一樣 image 現在的解決方案是在Nginx端聲明字符為UTF-8"charset utf-8;"這樣就可以在文件中把有問題的字符刪掉讓規則重新生效 image 至於這幾個, 確認了一下確實是有些行太長了, 確實長的不正常, 得等維護這個規則的owner自己去修復這個問題, 應該去這些項目下面提issue

MiKing233 commented 1 year ago

看#6003说明吧,应该是新版本升级后限制了文件大小,最大就是1024kb的原因

不应该像https://raw.githubusercontent.com/banbendalao/ADgk/master/ADgk.txt这个规则,https://raw.githubusercontent.com/o0HalfLife0o/list/master/ad-edentw.txt这个也是,就不能加载 而这个规则https://raw.githubusercontent.com/privacy-protection-tools/anti-AD/master/anti-ad-easylist.txt就可以 从0.107.34开始加载,上一个版本好好的

image 確實不是行长度限制的問題, 看起來似乎是文件中包含有问题的字符, 我還在研究這個問題, 據ainar-g所説:该错误是为了防止用户放置二进制文件而不是文本文件。对 HTML 文本也有类似的检查。

我已經解決了該問題, 對於報錯為Error: control/filtering/add_url | Couldn't fetch filter from URL "https://cdn.mknetwork.net/ADFilters/AdByBy_Video_Rule_By_xwhyc.txt": line at index 0: character at index 0: non-printable character | 400的問題, 是因爲文件中存在中文, 我爲了使Web展示中文不亂碼添加了一個字符, 不過我其實也不太理解這個字符是什麽意思, 不過他被Web展示出來是不可見的, 就像圖中開頭的那個圓點一樣 image 現在的解決方案是在Nginx端聲明字符為UTF-8"charset utf-8;"這樣就可以在文件中把有問題的字符刪掉讓規則重新生效 image 至於這幾個, 確認了一下確實是有些行太長了, 確實長的不正常, 得等維護這個規則的owner自己去修復這個問題, 應該去這些項目下面提issue

如果有同樣遇到規則數量變爲0的問題, 兩種情況, 1是規則文件中存在包含1024個字符的行這是新版本的限制, 2是規則文件中存在非法字符, 這是新版本增加的安全檢查意爲防止用户放置二进制文件而不是文本文件.

最簡單直接的方法就是直接在Web界面嘗試新增規則, 有行超過1024個字符和存在非法字符添加不成功的報錯是不一樣的.

或者使用命令確認此問題, 例如規則文件名爲blocklist.txt, 確認他是否因爲包含1024個字符的行而無法添加: grep -e '^.\{1024,\}' -- ./blocklist.txt | wc 若沒有包含1024個字符的行則輸出如下 0 0 0 那麽你應該去確認文件中是否含有非法字符, 因爲官方沒有説明何爲非法字符, 所以這邊只能靠你自己去audit

若包含則輸出類似如下 5 64 8809 5表示有五行超過1024個字符, 64為單詞數, 8809為字符數

再使用以下命令檢查超過1024個字符的是第幾行, 并輸出該行的内容 grep -n -e '^.\{1024,\}' -- ./blocklist.txt 輸出内容大致如下 2130:xxxxxxxxxx 2130表示在第2130行, 冒號後的xxxxxx則爲該行的内容, 你應該縮短該行的内容, 官方的意圖是通过将单个规则的长度限制为 1024 字节来限制更新检查所消耗的 RAM 如果你在訂閲一個其他人維護的規則, 那麽如我之前所講的, 你應當去相關規則的GitHub頁面開issue, 實際情況是, 他們可能并不能快速響應issue並更新修復此問題, 爲此你可能需要fork一份自己去維護, 使用我上面的步驟使得該規則重新在ADGH的新版本中生效, 不過我仍然認爲ADGH的新變動是愚蠢的, 我理解官方團隊的出發點是好的, 但也許我的機器并不缺少RAM呢?爲什麽要一刀切的將所有人限制在每行不能超過1024個字符?如果在設定中加入項目可以自定每行的最大字符數量不是更好的決策嗎, 又或者是存在行超過了目標字符數量, 可以自動忽略掉這一行而不至於整個規則都變成0呢, 這也許能夠成爲後期改進的地方, 如果他們能看得到的話, 但對此我不抱太大期望...

MiKing233 commented 1 year ago

對於存在超過1024個字符的行, 可以直接使用這句命令刪除掉裏面超過1024個字符的行 sed -i '/^.{1024,}/d' ./blocklist.txt