站長新書 站長開講 首頁 最新文章 站長著作及審校 FreeBSD 筆記 Linux 筆記 Windows 筆記 虛擬化筆記 網管人雜誌 遊山玩水 關於本站
站長新書 VMware vSphere ICM 團購開跑了!!

SquidGuard-Proxy Server Filter

前言

[Squid] 能設定過濾 (Filter) 不當資訊網站,但 [Squid] 必須一筆一筆自行定義實在是很累人的事,因此 [SquidGuard] 就這樣產生了 [SquidGuard] 是由國外一群厭惡網路不當資訊的人所組成的團體,他們會定期增加黑名單網站 ([Blacklist]),因此您可安裝 [SquidGuard] 並匯入黑名單並搭配 [Squid] 就可輕鬆達到幫 User 過濾不當資訊網站的功能。

[SquidGuard] 作用的原理很簡單,當 Squid Clients 欲透過 [Squid] 對外連線至 Internet 時會檢查一下 [SquidGuard] 內所定義的黑名單網站清單 ([Blacklist]) 若比對到定義的黑名單時則將 Squid Clients 重新導向 (Redirect) 至您自訂的禁止連線說明網站,若未比對到則放行 Squid Clients 對外連線。

實作環境

安裝及設定

本篇實作僅著重於 SquidGuard 安裝及設定部份,有關於 Squid 請參考站內文章 Squid-Web Proxy Server

步驟1.安裝 SquidGuard 套件

切換至 Ports Tree 路徑安裝 SquidGuard 套件

 #cd /usr/ports/www/squidguard                           //切換至安裝路徑
 #make install clean                                     //安裝套件並清除安裝過程中產生不必要檔案

步驟2.下載黑名單網站 (Black List)

預設安裝的黑名單網站不多,您可透過下載 [Blacklist] 來增加過濾的黑名單網站

本次實作採用 [urlblacklist.com - BlackLists] 目前共有 3,164,254 黑名單網站記錄,下載 bigblacklist.tar.gz 後解壓縮後並存放於 squidGuard 黑名單資料庫路徑 (/var/db/squidGuard)

 #tar zxvf bigblacklist.tar.gz
 #cd blacklists
 #cp -p * /var/db/squidGuard/

步驟3.修改 SquidGuard 設定檔 (squidGuard.conf)

修改 SquidGuard 設定檔 squidGuard.conf 以符合目前網路環境。

 #vi /usr/local/etc/squid/squidGuard.conf
 dbhome /var/db/squidGuard                               //指定 Blacklist 資料庫路徑
 logdir /var/log                                         //指定 SquidGuard Log 路徑
 source clients {                                        //定義 Squid Clients IP 網段
     ip 192.168.1.0/24
 }
 dest ads {                                              //定義黑名單網站名稱 ads (配合後續 acl 設定)
        domainlist ads/domains                           //指定 Domains 檔路徑 (也就是讀取 /var/db/squidGuard/ads/domains)
        urllist ads/urls                                 //指定 URL 檔路徑 (也就是讀取 /var/db/squidGuard/ads/urls)
 }
 ...略...                                                //請依個人需求載入相關黑名單網站檔案
 dest whitelist {                                        //定義白名單網站名稱 whitelist (配合後續 acl 設定)
        domainlist whitelist/domains                     //指定 Domains 檔路徑 (也就是讀取 /var/db/squidGuard/whitelist/domains)
        urllist whitelist/urls                           //指定 URL 檔路徑 (也就是讀取 /var/db/squidGuard/whitelist/urls)
 }
 acl {
     default {
         pass     whitelist !ads all                     //允許連結於定義的白名單、非黑名單、其它網站
         redirect http://www.weithenn.org/block.htm      //若是連線網站為 ads 內 (domains 或 urls) 定義的網站則重新導向至此網頁
     }
 }

步驟4.修改 Squid 設定檔 (squid.conf)

修改 Squid 設定檔 squid.conf 加入 SquidGuard 執行檔路徑,如此 Squid 才能呼叫 SquidGuard 檢查黑名單網站。

 #vi /usr/local/etc/squid/squid.conf
 url_rewrite_program /usr/local/bin/squidGuard           //加入此行已帶起 SquidGuard 服務

步驟4.建立 SquidGuard Log 檔案及設定相關權限

建立 SquidGuard Log 檔案及設定相關權限以便屆時 Squid 可讀取相關檔案及資料夾,此次實作中 Squid 服務的 owner 及 group 帳戶名稱為 squid。

 #touch /var/log/squidGuard.log                          //建立 SquidBuard Log
 #chown squid:squid squidGuard.log                       //使 Squid 服務能寫入 SquidBuard Log
 #find /var/db/squidGuard -type f | xargs chmod 644      //設定檔案權限為 644
 #find /var/db/squidGuard -type d | xargs chmod 755      //設定目錄權限為 755
 #chown -R squid:squid /var/db/squidGuard                //設定黑名單目錄 owner 及 group 為 squid (使 Squid 服務能讀取 SquidGuard DB)

步驟5.初始化黑名單資料庫 (Initializing Blacklists)

此次實作中 Squid 服務的 owner 及 group 帳戶名稱為 squid 因此利用 sudo 指令來切換使用者為 squid 後執行初始化黑名單資料庫 (.db) 指令,此初始化黑名單資料庫項目將依照 SquidGuard 設定檔 (squidGuard.conf) 中所設定的項目來進行初始化資料庫的動作,日後若更新黑名單資料庫在重新載入 Squid 服務之後也請記得先執行此一動作。

 #sudo -u squid squidGuard -C all                        //初始化黑名單資料庫

執行完上述指令後可透過查詢 SquidGuard Log 來了解初始化黑名單資料庫的動作是否成功

 #tail /var/log/squidGuard.log
 2009-08-10 15:42:17 [9594] init domainlist /var/db/squidGuard/ads/domains
 2009-08-10 15:42:17 [9594] create new dbfile /var/db/squidGuard/ads/domains.db
 2009-08-10 15:42:17 [9594] init urllist /var/db/squidGuard/ads/urls
 2009-08-10 15:42:17 [9594] create new dbfile /var/db/squidGuard/ads/urls.db
 2009-08-10 15:42:17 [9594] init domainlist /var/db/squidGuard/whitelist/domains
 2009-08-10 15:42:17 [9594] domainlist empty, removed from memory
 2009-08-10 15:42:17 [9594] init urllist /var/db/squidGuard/whitelist/urls
 2009-08-10 15:42:17 [9594] urllist empty, removed from memory
 2009-08-10 15:42:17 [9594] squidGuard 1.4 started (1249890136.134)
 2009-08-10 15:42:17 [9594] db update done

步驟6.重新載入 Squid 設定檔 (squid.conf)

請鍵入下列指令來重新載入 Squid 設定檔 (請依個人喜好擇一即可)

 #/usr/local/etc/rc.d/squid reload                       //squid 重新讀取設定檔 (方法一)
 #/usr/local/sbin/squid -k reconfigure                   //squid 重新讀取設定檔 (方法二)

步驟7.測試 SquidGuard 功能

 #tail /var/log/squidGuard.log
 2009-08-10 16:23:16 [9758] New setting: dbhome: /var/db/squidGuard
 2009-08-10 16:23:16 [9758] New setting: logdir: /var/log
 2009-08-10 16:23:16 [9758] init domainlist /var/db/squidGuard/ads/domains
 2009-08-10 16:23:16 [9758] loading dbfile /var/db/squidGuard/ads/domains.db
 2009-08-10 16:23:16 [9758] init urllist /var/db/squidGuard/ads/urls
 2009-08-10 16:23:16 [9758] loading dbfile /var/db/squidGuard/ads/urls.db
 2009-08-10 16:23:16 [9758] init domainlist /var/db/squidGuard/whitelist/domains
 2009-08-10 16:23:16 [9758] loading dbfile /var/db/squidGuard/whitelist/domains.db
 2009-08-10 16:23:16 [9758] init urllist /var/db/squidGuard/whitelist/urls
 2009-08-10 16:23:16 [9758] loading dbfile /var/db/squidGuard/whitelist/urls.db
 2009-08-10 16:23:16 [9758] squidGuard 1.4 started (1249892596.073)
 2009-08-10 16:23:16 [9758] squidGuard ready for requests (1249892596.074)
 #ps ax |grep squid
 17141  ??  Is     0:00.00 /usr/local/sbin/squid -D
 17143  ??  S      0:41.91 (squid) -D (squid)
 76159  ??  Ss     0:00.01 (squidGuard) (squidGuard)
 76160  ??  Ss     0:00.01 (squidGuard) (squidGuard)
 76161  ??  Ss     0:00.01 (squidGuard) (squidGuard)
 76162  ??  Ss     0:00.01 (squidGuard) (squidGuard)
 76163  ??  Ss     0:00.01 (squidGuard) (squidGuard)
 #sockstat | grep squidGuard
 squid    squidGuard 76163 0  tcp4   127.0.0.1:54118       127.0.0.1:50215
 squid    squidGuard 76163 1  tcp4   127.0.0.1:54118       127.0.0.1:50215
 squid    squidGuard 76162 0  tcp4   127.0.0.1:64142       127.0.0.1:52824
 squid    squidGuard 76162 1  tcp4   127.0.0.1:64142       127.0.0.1:52824
 squid    squidGuard 76161 0  tcp4   127.0.0.1:55760       127.0.0.1:58336
 squid    squidGuard 76161 1  tcp4   127.0.0.1:55760       127.0.0.1:58336
 squid    squidGuard 76160 0  tcp4   127.0.0.1:60724       127.0.0.1:50951
 squid    squidGuard 76160 1  tcp4   127.0.0.1:60724       127.0.0.1:50951
 squid    squidGuard 76159 0  tcp4   127.0.0.1:64308       127.0.0.1:53004
 squid    squidGuard 76159 1  tcp4   127.0.0.1:64308       127.0.0.1:53004

此時您可以操作 Squid Client 隨便連一個 Blacklist 內的網站 (例如: mp3.com) 此時應該會將 Squid Client 導向 (Redirect) 至您指定的禁止存取說明網頁才對,此例為 http://www.weithenn.org/block.htm 如下圖所示。

禁止存取說明網頁

參考

[ SquidGuard 安裝]

[觀看文章 - 安裝Squid-Guard]

[郭慶賢 Squid Guard]

[國立暨南國際大學色情防治機制]

[MyUnix論壇 :: 觀看文章 - squid和squidGuard配置代理伺服器]

[jackyin Linux下的互聯網過濾功能]

[squidGuard - An ultrafast and free filter/redirector/access controller for Squid]

[GPL授權的防堵不當資訊網站(情色、暴力、賭博…以及任何您想擋下]

[IEBLOCKER個人版色情防堵程式]

[DebianEdu/HowTo/SquidGuard - Debian Wiki]

Me FAQ

Q1.啟動 SquidGuard 服務似乎不成功且有錯誤訊息?

Error Meaage:

執行重新載入 Squid 設定檔後查看 Log 吐出如下錯誤訊息

 #tail /usr/local/squid/logs/cache.log
 2006-10-17 15:02:01 [76366] (squidGuard): can't write to logfile /var/log/squidGuard.log
 2006-10-17 15:02:01 [76366] /var/db/squidGuard/ads/domains: Permission denied

Ans:

由於用 Ports 安裝 SquidGuard 時預設是以 nobody 身份來安裝的,但我們必須修改權限為 squid 這樣 Squid 服務才能順利載入 SquidGuard 的 Blacklist 同時因為 nobody 無法寫入 /var/log 因此我們也先把 Log 建立並設定權限為 squid。

 #chown -R squid:squid /var/db/squidGuard                //使 Squid 服務能讀取 SquidGuard DB
 #touch /var/log/squidGuard.log                          //建立 SquidBuard Log
 #chown squid:squid squidGuard.log                       //使 Squid 服務能寫入 SquidBuard Log
Go To Oddmuse OrgGo To FreeBSD OrgCreative Commons 2.5 Taiwansitestates.com