我的 2019 電腦安全方法-下

如果還沒有看過第一篇的請先去服用。

花媽的料理教室 DoReMiSo

這篇我們來介紹一下如何安裝 AdGuard Home ,這邊使用 Docker 來安裝,這樣一來就不用特地管什麼平台惹。

首先我們需要什麼?

  • 一台 24h 開著的主機且可以 ssh 且可以外連 port-forward
  • 主機安裝了 docker & docker-compose
  • 一個長期穩定的 domain (建議付費)
  • domain 託管於 CloudFlare (本篇示範)

製造憑證

都 9102 年了,免費的憑證到處飛,這邊使用簡單的 Let’s Encrypt 搭配 Certbot 自動產生以及 Renew 憑證,假設已經把 domain 託管到 CloudFlare 上了之後開啟這個網頁進入個人 CloudFlare 帳號頁面。

alt

輸入帳號後,通過 Google ReCaptcha 驗證複製 Global API Key 貼到 Certbot/cloudflare.ini 第一行則填入你的 CloudFlare 登入信箱如下圖。

alt

準備好後便可以來產生憑證,進入 Certbot 資料夾後,將 & 內的標示換成實際參數。

docker run --name certbot --rm -it \
-v "${PWD}/ssl:/etc/letsencrypt" \
-v "${PWD}/cloudflare.ini:/cloudflare.ini" \
certbot/dns-cloudflare \
certonly --dns-cloudflare \
--dns-cloudflare-credentials /cloudflare.ini \
--preferred-challenges dns-01 \
--agree-tos -m  \
-d 

理論上 Certbot 底下會多一個 ssl 資料夾,裡面 live 應該會出現一個你域名的資料夾。完成後就準備好了。

自動更新憑證

什麼這麼煩?

對 不爽去買憑證。

依照 Let’s Encrypt 白皮書,他發放的憑證有效期限只有幾個月,但我總不可能幾個月就手動 Renew 一次吧,太擾民了。其實我們只需要把 Certbot 指令修改一下,放到 crontab 下他自己執行即可。

crontab -e

接著選擇自己喜愛的編輯器,在底下插入,並請依照實際路徑修改

0 0 * * * docker run -it --rm --name certbot -v /Certbot/ssl:/etc/letsencrypt -v /Certbot/cloudflare.ini:/cloudflare.ini certbot/dns-cloudflare renew >/dev/null 2>&1

安裝 AdGuard Home

進入 AdGuardHome 資料夾後進入我個人最愛的環節 欸!

先別急著啟動,先將註解的 docker-compose.yml 開啟,並且將第八行註解的地方修改成剛剛上面產生的憑證的部分,就是你的域名,請務必記得將 # 刪除。

- ../Certbot/ssl/archive/blog.tdccc.com.tw:/ssl

修改完畢後直接使用最棒的指令。

docker-compose up

確認沒有啟動失敗後可以直接 ctrl+z 丟去後台,並啟動瀏覽器進去, http://:3000

ip 即是你架設的地點,接著基本上就是一直按下一步了。

alt

alt

alt

alt

接著就會進入儀表板的介面,接著點擊 Settings 做一些詳細的設定。

alt

第一項是黑名單的更新頻率,這邊建議直接更改為 1 hour

接著 Logs 查詢/封鎖 紀錄如果有隱私疑慮建議直接關閉不要勾選。

alt

底下還可以一鍵封鎖指定網站 當然我建議直接把抖陰直接弄爛

alt

設定完後,別忘記點擊 Save 儲存設定,接著來到 Encryption Settings

開啟加密之後,輸入上面設定好的網域,並且開啟自動轉址到 HTTPS

alt

往下轉來到輸入憑證的地方,依序貼上。

/ssl/fullchain1.pem & /ssl/privkey1.pem 即可。如果出現錯誤的話,例如找不到資料夾請先檢查在製造憑證時是否有成功,並且 docker-compose.yml 有正確掛載將 # 拿掉,如果還是出現問題可以在下方留言 :)

alt

接著儲存後就完成了。

Filter 到底要裝哪些?

上一篇文章已經提過可以到 filterlist 裡找尋答案。這邊建議可以使用幾個關鍵字來尋找,不過還是要再說一次。

過度訂閱列表,會影響電腦效能以及影響頁面呈現畫面,請自行斟酌訂閱,如果遇到頁面打不開不妨先關掉 AdGuard 並重新整理看看 :)

  • Coin 或 Mining (挖礦)
  • Malware (惡意軟體)
  • Phishing (釣魚網頁)

這邊也公開一下我個人訂閱的列表給大家好惹

家中其他設備?

如果家中有其他設備想要使用,但懶得一台一台設定的話呢 … ?其實也十分簡單,開啟家中的路由器,將 DNS 指向設定好的 AdGuard Home 就可以了。

Router

alt

PC

這個我放棄,我根本不用 Windows alt

或是參考下面的方法,使用 docker 架設 knot

Android

大概是最簡單的最快速ㄉ

alt

如果是有安裝 AdGuard 在手機的也可以這麼做。

alt

Mac / Linux

Mac 必須先安裝 brew

brew install knot-resolver services

Linux 其他 Distro 則是按照官網說明比較快

在編寫設定檔之前先將驗證憑證的 CA 下載好

Mac: curl -o /usr/local/etc/kresd/DigiCertGlobalRootCA.crt -L "https://dl.cacerts.digicert.com/DigiCertGlobalRootCA.crt"

Linux: curl -o /etc/knot-resolver/DigiCertGlobalRootCA.crt -L "https://dl.cacerts.digicert.com/DigiCertGlobalRootCA.crt"

接著打開 knot 的設定檔路徑如下。

Linux 設定檔路徑 /etc/knot-resolver/kresd.conf

Mac 設定檔路徑 /usr/local/etc/kresd/config

請用自己喜愛的編輯器開啟,例如 vim (?),在最尾端加上並請依照實際狀況修改!!!!

policy.TLS_FORWARD({{'', hostname='.',ca_file='' }})

儲存退出之後將 knot 重啟即可。

Linux: systemctl start [email protected]{1..4}.service 1

Mac: sudo brew services restart knot-resolver

檢查一下 Log 是否有啟動失敗的問題。

Mac: tail -f /usr/local/var/log/kresd.log

Linux: tail -f /var/log/kresd.log

如果有遇到顯示找不到 root.key 的話可以嘗試先將它註解 -- 🤔

接著我們可以使用 dig 這套工具來測試是否解析正常,語法也十分簡單。

$ dig @127.0.0.1 google.com
; <<>> DiG 9.10.6 <<>> @127.0.0.1 google.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27757
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;google.com.            IN  A

;; ANSWER SECTION:
google.com.     300 IN  A   172.217.160.78

;; Query time: 58 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Tue Dec 03 11:22:59 CST 2019
;; MSG SIZE  rcvd: 55

如果有正確解析就是正常的囉!,那有沒有測試正常阻擋 ...?也超級簡單ㄉ。

$ dig @127.0.0.1 sa.bbc.com
; <<>> DiG 9.10.6 <<>> @134.209.108.164 sa.bbc.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 44462
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;sa.bbc.com.            IN  A

;; AUTHORITY SECTION:
sa.bbc.com.     10  IN  SOA fake-for-negative-caching.adguard.com. hostmaster.sa.bbc.com. 100500 1800 900 604800 86400

;; Query time: 96 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Tue Dec 03 11:25:28 CST 2019
;; MSG SIZE  rcvd: 109

只要看到 fake-for-negative-caching.adguard.com. hostmaster.sa.bbc.com. 100500 1800 900 604800 86400 就是直接被阻擋囉,真的舒服。當一切就緒時,就能去修改電腦本機的 DNS 指向 127.0.0.1

alt

Linux 則是編輯 /etc/resolv.conf 將底下替換成 127.0.0.1 就可以囉。

EnJoy It

alt

Ref

  • https://certbot-dns-cloudflare.readthedocs.io/en/stable/
  • https://hub.docker.com/r/adguard/adguardhome
  • https://github.com/docker/compose
  • https://www.digicert.com/digicert-root-certificates.htm
  • https://knot-resolver.readthedocs.io/en/stable