︿
Top

1、前言

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


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





文章目錄

1、前言
2、實作環境
3、安裝及設定
          步驟1.安裝 SquidGuard 套件
          步驟2.下載黑名單網站 (Black List)
          步驟3.修改 SquidGuard 設定檔 (squidGuard.conf)
          步驟4.修改 Squid 設定檔 (squid.conf)
          步驟5.建立 SquidGuard Log 檔案及設定相關權限
          步驟6.初始化黑名單資料庫 (Initializing Blacklists)
          步驟7.重新載入 Squid 設定檔 (squid.conf)
          步驟8.測試 SquidGuard 功能
4、測試 SquidGuard 功能
5、參考
6、Me FAQ
          Q1.啟動 SquidGuard 服務似乎不成功且有錯誤訊息?





2、實作環境

  • FreeBSD 7.2-RELEASE-p3
  • squidGuard-1.4
  • db3-3.3.11_3,1





3、安裝及設定

本篇實作僅著重於 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 以符合目前網路環境。
  • 黑名單網站: 解開 bigblacklist.tar.gz 後有許多黑名單網站項目可依需求自行載入適合的黑名單網站。
  • 白名單網站: 您可自行定義允許的網站於此項目中。
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 檔相對路徑
        urllist ads/urls               //指定 URL 檔相對路徑
           }
 ...略...                              //請依個人需求載入相關黑名單網站檔案
 dest whitelist {                      //定義白名單網站名稱 whitelist (配合後續 acl 設定)
        domainlist whitelist/domains   //指定 Domains 檔相對路徑
        urllist whitelist/urls         //指定 URL 檔相對路徑
 }
 acl {
     default {
         pass     whitelist !ads all   //允許連結於定義的白名單、非黑名單、其它網站
         redirect http://www.weithenn.org/block.htm  //若連線網站為黑名單則導向此網頁
     }
 }




步驟 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 服務




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

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

建立 SquidGuard Log 檔案
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)




步驟 6. 初始化黑名單資料庫 (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




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

請鍵入下列指令來重新載入 Squid 設定檔 (請依個人喜好擇一即可)。
/usr/local/etc/rc.d/squid reload        //squid 重新讀取設定檔 (方法一)
/usr/local/sbin/squid -k reconfigure   //squid 重新讀取設定檔 (方法二)




步驟 8. 測試 SquidGuard 功能

查看 Squid 是否順利啟動 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)

查看 Squid 是否順利啟動 SquidGuard Process 及 Sockstat。
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)

查看 SquidGuard 是否聆聽相對應的 Port。
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






4、測試 SquidGuard 功能

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






5、參考






6、Me FAQ

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

Error Message:
執行重新載入 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
文章標籤: