Ting-Jun (snsd0805)

Ting-Jun (snsd0805)

Developer. Student

© 2019

[筆記]更改hosts檔以封鎖網頁

今天在twitter偶然看到一篇工程師將facebook,twitter等SNS封鎖掉,
結果工作效率提升很多。
我自己還沒有決心做這麼徹底拉!
只是既然看到了就稍微查了一下怎麼做到的。
方法比我想想中的簡單,在linux系統上只要修改/etc/hosts檔就行了

封鎖原理

DNS運作流程

這是簡單的網際網路運作過程,
因網路上是用IP在傳送網頁資料,然而一般人記不住每個IP,
所以網際網路採用DNS伺服器提供查詢該網址所對應的伺服器IP。

過程如下:

1. 輸入www.google.com網址時,電腦查詢內部有沒有紀錄該IP

2. 若無紀錄IP,便向設定的DNS伺服器發出查詢請求

3. DNS伺服器回覆對應到的IP位址 216.239.38.120

4. 電腦向該IP提出網頁請求

5. 取得該主機回傳的網頁資料

原理

封鎖網站可以藉由回報不正確的ip位址達成,
但我們無法控制DNS伺服器回傳位址,
然而我們可以更改自己電腦內的設定。

因前項過程1提到,電腦會查詢內部紀錄:

1. /etc/hosts檔案,該檔儲存網址所對應的IP,
   若該檔案存有該網址資料,就不會向DNS伺服器提出請求

2. 若不久前瀏覽過該網址,電腦會有一份Catch,
   該設計目的是為了減少DNS伺服器的負擔


實作

1. 取得網址:

browser URL bar 取得 www.google.com

2. 取得IP:

簡單ping到

	ping www.google.com	

取得以下類似資料,可以看到IP位址216.239.38.120

PING www.google.com (216.239.38.120) 56(84) bytes of data.
64 bytes from any-in-2678.1e100.net (216.239.38.120): icmp_seq=1 ttl=53 time=43.0 ms
64 bytes from any-in-2678.1e100.net (216.239.38.120): icmp_seq=2 ttl=53 time=43.3 ms
64 bytes from any-in-2678.1e100.net (216.239.38.120): icmp_seq=3 ttl=53 time=43.2 ms
^C
--- www.google.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 43.040/43.199/43.341/0.123 ms


3. 更改hosts檔:

	sudo vim /etc/hosts

加入該行將www.google.com導向至錯誤的IP 127.0.0.1

	127.0.0.1			www.google.com


4. 完成:

開啟browser測試是否無法進入該網站


若修改後卻仍然可以進入該網站,
這極大可能是前述的DNS Catch仍然存在。
linux系統下可以重啟nscd服務達到效果。

	sudo /etc/init.d/nscd restart

若無nscd指令,可以藉由apt安裝

	sudo apt install nscd