banner
 Sayyiku

Sayyiku

Chaos is a ladder
telegram
twitter

AdGuard 去除廣告與 Clash 網絡代理同時進行

# 不只是厭煩廣告#

廣告的存在必然是有它的合理性的。它能幫助生產者在別種渠道獲取回報,以便支持他繼續免費提供作品,或將價格降至更可接受的範圍。但某些投放廣告的方式實在不恰當,為了將利益最大化,不惜犧牲原有的體驗,這總是很令用戶反感的。不僅嚴重影響用戶體驗,還容易給用戶留下負面印象,打擊宣傳效果。但是指望所有廣告投放者嚴格規範自己行為、以符合標準的形式投放廣告是不切實際的。畢竟在巨大的利益前,人都可以不當人。

借助各種廣告攔截工具,很大程度上就是為了攔截這些侵入式的、擾人的廣告。這不僅能夠保障用戶體驗,還能節省帶寬和性能開銷。

但不止於此,AdGuard 還能勝任保護隱私的使命。也許你只是在搜索引擎中搜索了一份講義,之後打開購物 App 全在給你推這方面的教材。對於比較在意個人隱私的人而言,這是不能容忍的。我希望盡可能少的隱私被他人掌握。

在攔截廣告的同時,AdGuard 還可以對一些跟蹤器進行攔截。當我們瀏覽網頁時,不僅發送了請求,還傳遞了許多額外的信息。如訪問時的 IP 地址、正在使用的瀏覽器和系統信息、語言首選項、前一個訪問的網站,甚至讀取 Cookie 得知更多有關的信息。廣告聯盟等通過這些信息確定「你」是你、建立關於你的模型,以便進行更個性化的推送。

為杜絕此類現象,AdGuard 不僅攔截跟蹤器,還攔截某些不安全的接口、攔截網站之間的聯繫、偽造瀏覽器信息等。這些是單靠插件和規則很難做到的,也是我選擇應用的原因之一。

# AdGuard 是怎麼做好這件事的#

相較於傳統去廣告插件,AdGuard 在他們的 KnowledgeBase 知識庫 中也提到,AdGuard 主要通過以下三種方式實現去廣告:

  • Request blocking:即按照規則阻止(Block)某些連接以達到去廣告的目的。網頁載入時,某些元素會請求(Request)其他資源。AdGuard 會根據規則檢查請求,若命中廣告或跟蹤器等規則時便予以攔截,阻止其載入。

  • Page code filtering:在網頁載入前,AdGuard 會先根據規則過濾一遍網頁源碼並去除其中包含廣告等的代碼。相比 Request blocking 讓某些元素請求不到,Page code filtering 直接剝除部分代碼,讓廣告根本不去請求。

  • CSS Injection and Javascript:有些廣告是通過 JavaScript 動態插入網頁的,無需請求外部資源。這樣一來前兩條便不起作用了,需要額外的操作。AdGuard 通過調整 CSS 和 JavaScript 針對這類廣告更徹底的清除。

第一條很常見,而後兩條由於瀏覽器插件限制,只能在客戶端實現。在比如 HTTPS 過濾這些會在之後詳細配置時再談。

# 好好配置 AdGuard#

雖說 AdGuard 是付費應用,但也可不只是給錢辦事就完事了。想要 AdGuard 發揮全部威力還需要好好配置一番。這裡將以桌面端為例,介紹部分 AdGuard 功能,並給出我使用 AdGuard 保證上網體驗和保護隱私的一個實踐,希望能對你有所幫助。

AdGuard 團隊仍在積極開發,AdGuard 軟件 / 插件也在快速迭代。本文所提及的內容有一定時效性,最終以 AdGuard KnowledgeBase 為準。

# 選取合適的攔截規則#

image

絕大多情況下,攔截規則都是廣告攔截工具的核心。攔截規則在 AdGuard 被稱為廣告攔截器,不僅有廣告攔截,還能屏蔽跟蹤器、社交媒體插件、惱人的彈窗等。不過要注意,雖然通過規則阻止部分元素加載理論上能夠加快頁面加載,但如果設置了過多的規則,每次都要進行大量比對,反而可能會適得其反。這裡按需選取即可。

AdGuard 默認開啟的攔截器不多,這裡我開啟了:

  • 廣告攔截

  • AdGuard 基礎過濾器

  • EasyList

  • 隱私

  • AdGuard 防護跟蹤保護過濾器

  • EasyPrivacy

  • 社交插件

  • AdGuard 社交媒體過濾器

  • Fanboy’s Social Blocking List(包含於 Fanboy’s Annoyances)

  • 惱人的

  • AdGuard 惱人廣告過濾器

  • Fanboy’s Annoyances

  • 特定語言

  • AdGuard 中文過濾器

  • EasyList China

當然,即便如此還是可能會有「漏網之魚」,可以借助「拓展 > AdGuard Extra」手動處理某些元素。

# 隱形模式充分保護隱私#

過濾器已能攔截部分跟蹤器,而隱形模式才是專門涉及保護隱私的「大招」。儘管過濾器能攔截大部分網頁跟蹤器,但正如前面提到過的,「請求網頁」這個行為本身就已經洩露很多信息了。隱形模式一步步幫你保護這些個人敏感信息。

# 常規#

先是 4 個常規選項,能夠初步阻止一些跟蹤:

image

隱藏您的搜索記錄會隱藏你使用搜索引擎連入某網站的查詢記錄,從而使網站難以得知你的管用搜索引擎。

發送「請勿跟蹤」請求,AdGuard 在請求網頁時一並發送一個請勿跟蹤的請求。部分瀏覽器裡也有此項功能,不過即便請求了不要跟蹤,最終還是取決於網站的意願。

移除 HTTP 請求中的 X-Client-Data 數據頭,使用 Chrome 瀏覽器請求任何和 Google 有關的網頁時(包括 Double Click 和 Google Analyse),Chrome 瀏覽器都會把瀏覽器信息等一同傳遞給 Google。移除 HTTP 請求中的 X-Client-Data 數據頭正是為了攔截這一項的數據。

剝離 URL 中的跟蹤參數將會剝離 URL 裡的跟蹤參數,可以適當避免跨站跟蹤情況的發生。同時允許手動配置跟蹤參數實現自定義屏蔽。

# 跟蹤方式#

緊接著,在跟蹤方式裡可以限制常見網頁跟蹤你的方法:

image

自銷毀第三方 Cookie,Cookie 通常用於存儲用戶登錄信息等。而第三方 Cookie 指並非當前頁面生成的 Cookie。即便生成 Cookie 的網站行為乾淨得體,但是這條 Cookie 被其他網站獲取到也可能被濫用。相較於攔截第三方 Cookie,自銷毀第三方 Cookie 不會導致第三方登錄失效(第三方登錄大多通過 Cookie 或授權頭授權原網站)。我在此處將第三方 Cookie 超時時間上調至 4 小時。

自銷毀第一方 Cookie,與前者很像,但是啟用後同一網站超時後都需要重新登錄。帶來許多不必要的繁瑣,所以這裡我將其保持關閉。

禁止緩存第三方請求,某些網站可能會在加載頁面時加上電子標籤(e-tags)。只要緩存未被清除,下次請求時這些標記就有可能一並發給服務端,從而洩露之後訪問了哪些網站。

攔截第三方授權頭,授權頭主要用於登錄授權等,但是也能用於跟蹤。且若使用 HTTP 未加密協議發送授權頭還有可能導致密鑰等重要信息的洩露。但攔截後可能導致某些應用、插件的工作。

# 瀏覽器 API#

這一項只影響瀏覽器,不影響其他應用。在此可以禁止某些有安全隱患的瀏覽器 API。

image

攔截 WebRTC,WebRTC 是一種實時通訊協議,但它可能繞過代理洩露真實 IP 地址。禁用後可能影響 Google Voice (特別是網頁版)的正常使用。

攔截推送 API攔截定位 API,這兩個 API 分別用於管理瀏覽器推送和定位。由於我很少使用桌面端的地圖以及完全不需要瀏覽器推送,所以完全禁用這兩項。

攔截 Flash攔截 Java,隨著前端技術更迭,現在幾乎所有網站都移除了 Flash/Java 的依賴。此外 Flash/Java 還有許多嚴重安全隱患,在 2020 年確實不該讓瀏覽器繼續支持它們。

# 雜項#

這部分選項必須包含在請求中,不能被禁止,但可以偽造。

image

隱藏您的第三方 Referrer 可以隱藏你是從哪裡跳轉過去的。我使用的第三方 Referrer 是 https://www.bing.com

隱藏您的 User-Agent,User-Agent 同樣是包含在網頁請求頭中的,User-Agent 將暴露你所使用的瀏覽器信息、操作系統等。建議開啟此項以使用默認替代信息。

隱藏您的 IP,由於我平時一直開啟代理,而這項似乎並無太大作用,於是我將其關閉了。

此外,還有拓展、高級設置中某些項值得留意。例如 AdGuard Extra、使用重定向驅動模式都是我額外開啟的。

# 移動端兼容代理與 HTTPS 過濾#

移動端配置項與桌面端大同小異,不再贅述。要注意的是為了更深層次地去廣告,絕大多數去廣告工具都需要借助系統代理。而如果你本身就有使用網路代理需求,那就比較麻煩了。AdGuard 專門針對此支持了轉發至本地代理,這也是 AdGuard 最抓住我需求的一點。

# 兼容 Clash 網路代理#

網路代理工具選擇的是 Clash For Android,它很好地支持了開啟本地代理的同時不佔用系統代理、向內部暴露並監聽 DNS 端口。

如果你所使用的代理服務商不支持 Clash 訂閱或者 Clash 配置中不含 DNS 配置,你可能需要借助公共 API 整理 Clash 配置文件。

# 利用 API 整理 Clash 配置文件#

基於 subconverter 項目,你可以在許多公共 API 上方便的整理 Clash 配置文件。特別的,你可以使用 subconverter 作者 TindyX 提供的 公共 API 直接將訂閱轉換為帶 AdGuard DNS 的 Clash 配置文件。

請確保 Clash 配置文件至少包含類似以下內容:

port: 7890
socks-port: 7891
dns:
 enable: true
 ipv6: false
 listen: 127.0.0.1:5450
 enhanced-mode: redir-host
 default-nameserver:
    - 119.29.29.29
    - 119.28.28.28
    - 1.0.0.1
    - 208.67.222.222
    - 1.2.4.8
  nameserver:
    - https://dns.alidns.com/dns-query
    - https://1.1.1.1/dns-query
    - tls://dns.adguard.com:853

其中,默認 DNS 監聽端口( dns.listen )為 5450 、默認 HTTP 代理端口( port )為 7890 、默認 SOCKS5 代理端口( socks-port )為 7891 。這些參數之後配置時會需要用到。

# AdGuard 配置 Clash 轉發規則#

首先,在「AdGuard > 側邊欄 > 應用管理」中對 Clash For Android 關閉通過 AdGuard 路由應用流量。

image

緊接著,將 Clash 配置導入 Clash For Android 後,在「設置 > 網路」中關閉「自動路由系統流量」以關閉 Clash For Android 的 VPN 模式。隨後開啟 Clash For Android 代理功能。

image

再到「AdGuard > 側邊欄 > 設置 > DNS > 選擇 DNS 伺服器」最下方「添加自定義 DNS 伺服器」。名稱任取、地址填寫 127.0.0.1:5450 (取決於之前配置的 dns.listen 參數)。

image

返回到「設置」,繼續點擊「網路 > 代理」,在下方「+ 添加代理」。名稱任取、方式選 HTTPSOCKS5 )、地址填寫 127.0.0.1 、端口填寫 78907891 )。配置完畢後點擊「保存並選擇」並開啟上方代理開關。

image

再回到「網路」,繼續點擊「過濾方式」,選擇「本地 VPN」。之後回到主界面,開啟主開關,便能在不影響原有代理的前提下享受 AdGuard 為你隱私保駕護航。

# 安裝證書過濾 HTTPS#

AdGuard 支持在頁面載入前過濾部分代碼,但是 HTTPS 加密讓 AdGuard 正常情況下無法在載入前得到具體內容,也就無從過濾了。AdGuard 通過安裝證書解密流量(Surge/QuantimultX 也使用類似的思路過濾),但是 Target API 24(Android 7.0)以上的 App 不再認可用戶證書

對於已經刷入 Magisk 的用戶,可以借助 Move Certificates 將證書轉為系統證書,從而讓 AdGuard HTTPS 過濾對所有 App 生效

image 這應該是全篇唯一一個需要 root 的行為了

AdGuard 總是對幾乎所有應用生效,這會一定的浪費性能。對於一些系統 App(電話、信息等)和一定不會有廣告的 App,可以考慮關閉 AdGuard 過濾。

# 後續#

仔細思考下,AdGuard 作為一款付費去廣告工具,其付費的合理性何在?為何不直接將一定費用支付給作者使其放棄投放廣告,而偏偏選擇支付給去廣告工具,讓作者得不到合理(也許有些是不合理)的收入。而且,去廣告工具功能很快就會飽和,框架也會慢慢穩定下來,真正讓去廣告工具保持生命力的,或許是那一條一條的規則。

但不能就此否認 AdGuard 的貢獻。即便它不是最老牌,即便它還有不足。

在我看來,去廣告只是 AdGuard 中的一環,而且不是最重要的一環。「Guard」—— 守衛,對自己隱私的重視與不妥協,才似乎是它希望傳遞的主旋律。當相當一部分用戶對自己隱私的無所謂,認為區區市井小民沒必要為隱私下功夫,這是否在一定程度上促成某些不恰當的行為呢?

也許 AdGuard 並非最早實現這些特性的,但它怎麼都是完成得非常出色的。它是第一個讓我願意和網路代理工具一起 7x24 後台常駐的、第一個讓我在其他應用中

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。