squid + dansguardian + iptable 實現網頁過濾

dansguardian 能真正實現內容過濾, 不僅能過濾網站, URL ,還能過濾網頁裏包含的一些詞、還有 mime 類型等。 DansGuardian 中有一些鑑別文檔,類似黑白名單,可以向相應的文檔裏輸入所要控制的相應內容,再重啓 DansGuardian 即可生效。

工作 原理

dansguardian 默認監聽 8080 端口,默認的 squid 代理端口爲 3128 dansguardian 將得到的 http 請求轉發給 squid ,然後再從 squid 將響應轉發給用戶 ,在這個過程 中進行過濾

1.下好squid和dansguardian 源碼

./configure ;make;make install

安裝好後squid應該在/usr/local/squid/ 下

dansguardian在/usr/local/etc下( 如果覺得這個目錄不舒服可以在用./configure --prefix= 替代./ configure ,此時, 會改裝到/etc /dansguardian/ 下)

2.運行Squid

2.1 squid命令行選項

在開始其他事情之前,讓我們先看一下squid的命令行選項。這裏的許多選項你從不會使用,另外有些僅僅在調試問題時有用。

-a port

指定新的http_port值。該選項覆蓋了來自squid.conf的值。然而請注意,你能在squid.conf裏指定多個值。-a選項僅僅覆蓋配置 文件裏的第一個值。(該選項使用字母a是因爲在Harvest cache裏,HTTP端口被叫做ASCII端口)

-d level

讓squid將它的調試信息寫到標準錯誤(假如配置了,就是cache.log和syslog)。level參數指定了顯示在標準錯誤裏的消息的最大等 級。在多數情況下,d1工作良好。請見16.2章關於調試等級的描述。

-f file

指定另一個配置文件。

-h

顯示用法。

-k function

指 示squid執行不同的管理功能。功能參數是下列之一:reconfigure, rotate, shutdown, interrupt, kill, debug, check, or parse. reconfigure導致運行中的squid重新讀取配置文件。rotate導致squid滾動它的日誌,這包括了關閉日誌,重命名,和再次打開它們。 shutdown發送關閉squid進程的信號。interrupt立刻關閉squid,不必等待活動會話完成。kill發送KILL信號給squid, 這是關閉squid的最後保證。debug將squid設置成完全的調試模式,假如你的cache很忙,它能迅速的用完你的磁盤空間。check簡單的檢 查運行中的squid進程,返回的值顯示squid是否在運行。最後,parse簡單的解析squid.conf文件,如果配置文件包含錯誤,進程返回非 零值。

-s

激活將日誌記錄到syslog進程。squid使用LOCAL4 syslog設備。0級別調試信息以優先級LOG_WARNING被記錄,1級別消息以LOG_NOTICE被記錄。更高級的調試信息不會被髮送到 syslogd.你可以在/etc/syslogd.conf文件裏使用如下接口:

local4.warning                     /var/log/squid.log

-u port

指定另一個ICP端口號,覆蓋掉squid.conf文件裏的icp_port。

-v

打印版本信息。

-z

初始化cache,或者交換,目錄。在首次運行squid,或者增加新的cache目錄時,你必須使用該選項。

-C

阻止安裝某些信號句柄,它們捕獲特定的致命信號例如SIGBUS和SIGSEGV。正常的,這些信號被squid捕獲,以便它能幹淨的關閉。然而,捕獲這 些信號可能讓以後調試問題困難。使用該選項,致命的信號導致它們的默認動作,通常是coredump。

-D

禁止初始化DNS測試。正常情況下,squid直到驗證它的DNS可用才能啓動。該選項阻止了這樣的檢測。你也能在squid.conf文件裏改變或刪除 dns_testnames選項。

-F

讓squid拒絕所有的請求,直到它重新建立起存儲元數據。假如你的系統很忙,該選項可以減短重建存儲元數據的時間。然而,如果你的cache很大,重建 過程可能會花費很長的時間。

-N

阻止squid變成後臺服務進程。

-R

阻止squid在綁定HTTP端口之前使用SO_REUSEADDR選項。

-V

激活虛擬主機加速模式。類似於squid.conf文件裏的httpd_accel_host virtual指令。

-X

強迫完整調試模式,如你在squid.conf文件裏指定debug_options ALL,9一樣。

-Y

在重建存儲元數據時,返回ICP_MISS_NOFETCH代替ICP_MISS.忙碌的父cache在重建時,該選項可以導致最少的負載。請見 10.6.1.2章。

 

2.2 對配置文件查錯

在開啓squid之前,你應該謹慎的驗證配置文件。這點容易做到,運行如下命令即可:

%squid -k parse

假如你看不到輸出,配置文件有效,你能繼續後面的步驟。然而,如果配置文件包含錯誤,squid會告訴你:

squid.conf line 62: http_access allow okay2

aclParseAccessLine: ACL name 'okay2' not found.

這裏你可以看到,62行的http_access指令指向的ACL不存在。有時候錯誤信息很少:

FATAL: Bungled squid.conf line 76: memory_pools

在這個情形裏,我們忘記了在76行的memory_pools指令後放置on或off. 建議你養成習慣:在每次修改配置文件後,使用squid -k parse。假如你不願麻煩,並且你的配置文件有錯誤,squid會告訴你關於它們而且拒絕啓動。假如你管理着大量的cache,也許你會編輯腳本來自動 啓動,停止和重配置squid。你能在腳本里使用該功能,來確認配置文件是有效的。

 

2.3 初始化cache目錄

在初次運行squid之前,或者無論何時你增加了新的cache_dir,你必須初始化cache目錄。命令很簡單:

%squid -z

對UFS相關的存儲機制(ufs,aufs,and diskd;見第8章),該命令在每個cache_dir下面創建了所需的子目錄。你不必擔心squid會破壞你的當前cache目錄(如果有的話)。

在該階段屬主和許可權是通常遇到的問題。squid在特定的用戶ID下運行,這在squid.conf文件裏的cache_effective_user 裏指定。用戶ID必須對每個cache_dir目錄有讀和寫權限。否則,你將看到如下信息:

Creating Swap Directories

FATAL: Failed to make swap directory /usr/local/squid/var/cache/00:

(13) Permission denied

在這樣的情形下,你該確認/usr/local/squid/var/cache目錄的所有組成都可被squid.conf給定的用戶ID訪問。最終的組 件--cache目錄--必須對該用戶ID可寫。

cache目錄初始化可能花費一些時間,依賴於cache目錄的大小和數量,以及磁盤驅動器的速度。假如你想觀察這個過程,請使用-X選項:

%squid -zX

 

2.4 在終端窗口裏測試squid

一旦你已經初始化cache目錄,就可以在終端窗口裏運行squid,將日誌記錄到標準錯誤。這樣,你能輕易的定位任何錯誤或問題,並且確認squid是 否成功啓動。使用-N選項來保持squid在前臺運行,-d1選項在標準錯誤裏顯示1級別的調試信息。

%squid -N -d1

你將看到類似於以下的輸出:

2003/09/29 12:57:52| Starting Squid Cache 

version 2.5.STABLE4 for i386-unknown-freebsd4.8...

2003/09/29 12:57:52| Process ID 294

2003/09/29 12:57:52| With 1064 file descriptors available

2003/09/29 12:57:52| DNS Socket created on FD 4

2003/09/29 12:57:52| Adding nameserver 206.107.176.2 from /etc/resolv.conf

2003/09/29 12:57:52| Adding nameserver 205.162.184.2 from /etc/resolv.conf

2003/09/29 12:57:52| Unlinkd pipe opened on FD 9

2003/09/29 12:57:52| Swap maxSize 102400 KB, estimated 7876 objects

2003/09/29 12:57:52| Target number of buckets: 393

2003/09/29 12:57:52| Using 8192 Store buckets

2003/09/29 12:57:52| Max Mem size: 8192 KB

2003/09/29 12:57:52| Max Swap size: 102400 KB

2003/09/29 12:57:52| Rebuilding storage in /usr/local/squid/var/cache (DIRTY)

2003/09/29 12:57:52| Using Least Load store dir selection

2003/09/29 12:57:52| Set Current Directory to /usr/local/squid/var/cache

2003/09/29 12:57:52| Loaded Icons.

2003/09/29 12:57:52| Accepting HTTP connections at 0.0.0.0, port 3128, FD 11.

2003/09/29 12:57:52| Accepting ICP messages at 0.0.0.0, port 3130, FD 12.

2003/09/29 12:57:52| WCCP Disabled.

2003/09/29 12:57:52| Ready to serve reques

假如你看到錯誤消息,你該首先修正它。請檢查輸出信息的開始幾行以發現警告信息。最普通的錯誤是文件/目錄許可問題,和配置文件語法錯誤。假如你看到一條 不引起注意的錯誤消息,請見16章中關於squid故障處理的建議和信息。如果還不行,請檢查squid FAQ,或查找郵件列表來獲得解釋。

一 旦你見到"Ready to serve requests"消息,就可用一些HTTP請求來測試squid。配置你的瀏覽器使用squid作爲代理,然後打開某個web頁面。假如squid工作 正常,頁面被迅速載入,就象沒使用squid一樣。另外,你可以使用squidclient程序,它隨squid發佈:

% squidclient http://www.squid-cache.org/

假如它正常工作,squid的主頁html文件會在你的終端窗口裏滾動。一旦確認squid工作正常,你能中斷squid進程(例如使用ctrl-c)並 且在後臺運行squid。

 

2.5 將squid作爲服務進程運行

正常情況下你想將squid以後臺進程運行(不出現在終端窗口裏)。最容易的方法是簡單執行如下命令:

%squid -s

-s 選項導致squid將重要的狀態和警告信息寫到syslogd。squid使用LOCAL4設備,和LOG_WARNING和LOG_NOTICE優先 權。syslog進程實際可能會或不會記錄squid的消息,這依賴於它被如何配置。同樣的消息被寫進cache.log文件,所以假如你願意,忽略-s 選項也是安全的。

當你不使用-N選項來啓動squid,squid自動在後臺運行並且創建父/子進程對。子進程做所有的實際工作。父進程確 認子進程總在運行。這樣,假如子進程意外終止,父進程啓動另外一個子進程以使squid正常工作。通過觀察syslog消息,你能看到父/子進程交互作 用。

Jul 31 14:58:35 zapp squid[294]: Squid Parent: child process 296 started

這裏顯示的父進程ID是294,子進程是296。當你查看ps的輸出,你可以看到子進程以(squid)形式出現:

% ps ax | grep squid
294 ?? Is 0:00.01 squid -sD
296 ?? S 0:00.27 (squid) -sD (squid)

假如squid進程意外終止,父進程啓動另一個。例如:

Jul 31 15:02:53 zapp squid[294]: Squid Parent: child process 296 exited due to signal 6
Jul 31 15:02:56 zapp squid[294]: Squid Parent: child process 359 started

在某些情形下,squid子進程可能立即終止。爲了防止頻繁的啓動子進程,假如子進程連續5次沒有運行至少10秒鐘,父進程會放棄。

Jul 31 15:13:48 zapp squid[455]: Squid Parent: child process 474 exited with status 1
Jul 31 15:13:48 zapp squid[455]: Exiting due to repeated, frequent failures

如果發生這樣的事,請檢查syslog和squid的cache.log以發現錯誤。

 

2.5.1 squid_start腳本

當 squid以後臺進程運行時,它查找squid執行程序目錄下的名爲squid_start的文件。假如發現,該程序在父進程創建子進程之前被執行。你能 使用該腳本完成特定的管理任務,例如通知某人squid在運行,管理日誌文件等。除非squid_start程序存在,squid不會創建子進程。

squid_start腳本在你使用絕對或相對路徑啓動squid時纔開始工作。換句話說,squid不使用PATH環境變量來定位 squid_start.這樣,你應該養成習慣這樣啓動squid:

% /usr/local/squid/sbin/squid -sD

而不要這樣:

%squid -sD

 

2.6 啓動腳本

通常你希望squid在每次計算機重啓後自動啓動。對不同的操作系統,它們的啓動腳本如何工作也很不同。我在這裏描述一些通用的環境,但對你自己的特殊操 作系統,也許該有特殊的處理方法。

 

2.6.1 /etc/rc.local

最容易的機制之一是/etc/rc.local腳本。這是個簡單的shell腳本,在每次系統啓動時以root運行。使用該腳本來啓動squid非常容 易,增加一行如下:

/usr/local/squid/sbin/squid -s

當然你的安裝位置可能不同,還有你可能要使用其他命令行選項。不要在這裏使用-N選項。

假如因爲某些理由,你沒有使用cache_effective_user指令,你可以嘗試使用su來讓squid以非root用戶運行:

/usr/bin/su nobody -c '/usr/local/squid/sbin/squid -s'

 

2.6.2 init.d和rc.d

init.d和rc.d機制使用獨立的shell腳本來啓動不同的服務。這些腳本通常在下列目錄之中:/sbin/init.d, /etc/init.d, /usr/local/etc/rc.d.腳本通常獲取單一命令行參數,是start或stop。某些系統僅僅使用start參數。如下是啓動squid 的基本腳本:

#!/bin/sh
# this script starts and stops Squid
case "$1" in
start)
/usr/local/squid/sbin/squid -s
echo -n ' Squid'
;;
stop)
/usr/local/squid/sbin/squid -k shutdown
;;
esac

Linux用戶可能在啓動squid之前需要設置文件描述符限制。例如:

echo 8192 > /proc/sys/fs/file-max
limit -HSn 8192

爲了使用該腳本,先找到腳本存放的目錄。給它一個有意義的名字,類似於其他的系統啓動腳本。可以是S98squid或squid.sh。通過重啓計算機來 測試該腳本,而不要假想它會正常工作。

 

2.6.3 /etc/inittab

某些操作系統支持另一種機制,是/etc/inittab文件。在這些系統中,init進程啓動和停止基於運行等級的服務。典型的inittab接口類似 如此:

sq:2345:once:/usr/local/squid/sbin/squid -s

使用該接口,init進程啓動squid一次並且隨後忘記它。squid確認它駐留在運行狀態,象前面描述的一樣。或者,你能這樣做:

sq:2345:respawn:/usr/local/squid/sbin/squid -Ns

這裏我們使用了respawn選項,假如進程不存在init會重啓squid。假如使用respawn,請確認使用-N選項。

在編輯完inittab文件後,使用下面的命令來使init重新讀取它的配置文件和啓動squid:

# init q

 

2.7 chroot環境

某 些人喜歡在chroot環境運行squid。這是unix的功能,給予進程新的root文件系統目錄。在squid受安全威脅時,它提供額外等級的安全保 護。假如攻擊者在某種程度上通過squid獲取了對操作系統的訪問權,她僅僅能訪問在chroot文件系統中的文件。在chroot樹之外的系統文件,她 不可訪問。

最容易在chroot環境裏運行squid的方法是,在squid.conf文件裏指定新的root目錄,如下:

chroot /new/root/directory

chroot()系統調用需要超級用戶權限,所以你必須以root來啓動squid。

chroot 環境不是爲unix新手準備的。它有點麻煩,因爲你必須在新的root目錄裏重複放置大量的文件。例如,假如默認的配置文件正常在/usr/local /squid/etc/squid.conf,並且你使用chroot指令,那麼文件必須位於/new/root/directory/usr /local/squid/etc/squid.conf.你必須將位於$prefix/etc,$prefix/share,$prefix /libexec下的所有文件拷貝到chroot目錄。請確認$prefix/var和cache目錄在chroot目錄中存在和可寫。

同 樣的,你的操作系統需要將大量的文件放在chroot目錄裏,例如/etc/resolv.conf和/dev/null.假如你使用外部輔助程序,例如 重定向器(見11章)或者驗證器(見12章),你也需要來自/usr/lib的某些共享庫。你可以使用ldd工具來查找給定的程序需要哪些共享庫:

% ldd /usr/local/squid/libexec/ncsa_auth
/usr/local/squid/libexec/ncsa_auth:

libcrypt.so.2 => /usr/lib/libcrypt.so.2 (0x28067000)

libm.so.2 => /usr/lib/libm.so.2 (0x28080000)

libc.so.4 => /usr/lib/libc.so.4 (0x28098000)

你可以使用chroot命令來測試輔助程序:

# chroot /new/root/directory /usr/local/squid/libexec/ncsa_auth

/usr/libexec/ld-elf.so.1: Shared object "libcrypt.so.2" not found

更多的關於chroot的信息,請見你係統中chroot()的manpage.

 

2.8 停止squid

最安全的停止squid的方法是使用squid -k shutdown命令:

%squid -k shutdown

該命令發送TERM信號到運行中的squid進程。在接受到TERM信號後,squid關閉進來的套接字以拒收新請求。然後它等待一段時間,用以完成外出 請求。默認時間是30秒,你可以在shutdown_lifetime指令裏更改它。

假如因爲某些理由,squid.pid文件丟失或不可讀,squid -k命令會失敗。在此情形下,你可以用ps找到squid的進程ID,然後手工殺死squid。例如:

%ps ax |grep squid

假如你看到不止一個squid進程,請殺死以(squid)顯示的那個。例如:

% ps ax | grep squid

294 ?? Is 0:00.01 squid -sD

296 ?? S 0:00.27 (squid) -sD (squid)

% kill -TERM 296

在發送TERM信號後,你也許想查看日誌,以確認squid已關閉:

% tail -f logs/cache.log

2003/09/29 21:49:30| Preparing for shutdown after 9316 requests

2003/09/29 21:49:30| Waiting 10 seconds for active connections to finish

2003/09/29 21:49:30| FD 11 Closing HTTP connection

2003/09/29 21:49:31| Shutting down...

2003/09/29 21:49:31| FD 12 Closing ICP connection

2003/09/29 21:49:31| Closing unlinkd pipe on FD 9

2003/09/29 21:49:31| storeDirWriteCleanLogs: Starting...

2003/09/29 21:49:32| Finished. Wrote 253 entries.

2003/09/29 21:49:32| Took 0.1 seconds (1957.6 entries/sec).

2003/09/29 21:49:32| Squid Cache (Version 2.5.STABLE4): Exiting normally.

假如你使用squid -k interrupt命令,squid立即關閉,不用等待完成活動請求。這與在kill裏發送INT信號相同。

 

2.9 重配置運行中的squid進程

在你瞭解了更多關於squid的知識後,你會發現對squid.conf文件做了許多改動。爲了讓新設置生效,你可以關閉和重啓squid,或者在 squid運行時,重配置它。

重配置運行中的squid最好的方法是使用squid -k reconfigure命令:

%squid -k reconfigure

當你運行該命令時,HUP信號被髮送到運行中的squid進程。然後squid讀取和解析squid.conf文件。假如操作成功,你可以在 cache.log裏看到這些:

2003/09/29 22:02:25| Restarting Squid Cache (version 2.5.STABLE4)...

2003/09/29 22:02:25| FD 12 Closing HTTP connection

2003/09/29 22:02:25| FD 13 Closing ICP connection

2003/09/29 22:02:25| Cache dir '/usr/local/squid/var/cache' size remains unchanged

at 102400 KB

2003/09/29 22:02:25| DNS Socket created on FD 5

2003/09/29 22:02:25| Adding nameserver 10.0.0.1 from /etc/resolv.conf

2003/09/29 22:02:25| Accepting HTTP connections at 0.0.0.0, port 3128, FD 9.

2003/09/29 22:02:25| Accepting ICP messages at 0.0.0.0, port 3130, FD 11.

2003/09/29 22:02:25| WCCP Disabled.

2003/09/29 22:02:25| Loaded Icons.

2003/09/29 22:02:25| Ready to serve requests.

在使用reconfigure選項時你須謹慎,因爲所做的改變可能會導致致命錯誤。例如,請注意squid關閉和重新打開進來的HTTP和ICP套接字; 假如你將http_port改變爲squid不能打開的端口,它會發生致命錯誤並退出。

在squid運行時,某些指令和和選項不能改變,包括:

  • 刪除cache目錄(cache_dir指令)
  • 改變store_log指令
  • 改變coss cache_dir的塊大小數值。事實上,無論何時你改變了該值,你必須重新初始化coss cache_dir.
  • coredump_dir指令在重配置過程中不被檢查。所以,在squid已經啓動了後,你不能讓squid改變它的當前目錄。

solaris 用戶在重配置squid過程中可能遇到其他問題。solaris的stdio執行組件裏的fopen()調用要求使用小於256的未用文件描述符。 FILE結構以8位值存儲該文件描述符。正常情況下這不構成問題,因爲squid使用底層I/O(例如open())來打開cache文件。然而,在重配 置過程中的某些任務使用fopen(),這就有可能失敗,因爲前面的256個文件描述符已被分配出去。

 

2.10 滾動日誌文件

除非你在squid.conf裏禁止,squid會寫大量的日誌文件。你必須週期性的滾動日誌文件,以阻止它們變得太大。squid將大量的重要信息寫入 日誌,假如寫不進去了,squid會發生錯誤並退出。爲了合理控制磁盤空間消耗,在cron裏使用如下命令:

%squid -k rotate

例如,如下任務接口在每天的早上4點滾動日誌:

0 4 * * * /usr/local/squid/sbin/squid -k rotate

該 命令做兩件事。首先,它關閉當前打開的日誌文件。然後,通過在文件名後加數字擴展名,它重命名cache.log,store.log,和 access.log。例如,cache.log變成cache.log.0,cache.log.0變成cache.log.1,如此繼續,滾動到 logfile_rotate選項指定的值。

squid僅僅保存每個日誌文件的最後logfile_rotate版本。更老的版本在重命名過程中被刪除。假如你想保存更多的拷貝,你需要增加 logfile_rotate限制,或者編寫腳本用於將日誌文件移動到其他位置。 請見13.7章關於滾動日誌的其他信息。

 

3.運行dansguardian

網上看到的這2種啓動方式,自己試了下,沒用

1)  手工啓動: service dansguardian start

2) 系統 啓動: chkconfig dansguardian on

看了dansguardian 的INSTALL文件後搞定了,方法如下:

1)直接運行/usr/local/sbin/dansguardian

dansguardian -q 退出

2)/usr/local/share/dansguardian/scripts下是幾個在各個系統下的啓動腳本:

bsd-init  dansguardian  logrotation  solaris-init  systemv-init

systemv-init是linux版的:

Usage: ./systemv-init {start|stop|restart|status}

 

 

 配 置 文件

dansguardian 配置文件默認路 徑: /etc/dansguardian

相關配置文件如 下:

bannedextensionlist        --     禁止的文件擴展名列表

bannediplist                   --     禁止的 ip 訪問列表

bannedmimetypelist       --     禁止的 mime 類型列表

bannedphraselist            --     禁止的關鍵字列表 ( 整個頁面 )

bannedregexpurllist        --     禁止帶有關鍵字的 url 列表

bannedsitelist                --     禁止域名列表 ( 域名下所有的網頁 )

bannedurllist                 --     禁止域名下的部分網頁

banneduserlist               --     禁止代理認證中的用戶

contentregexplist           --     關鍵字替換列表

dansguardian.conf         --     dansguardian 的配置文件

exceptioniplist               --     ip 白名單,不過濾

exceptionphraselist        --     關鍵字白名單

exceptionsitelist             --  站點白名單

exceptionurllist              --  url 白名單

exceptionuserlist            --  用戶白名單

logrotation                    --  自調用文件

messages                      --  用於頁面顯示哪種阻止信息,在 dansguardian.conf 中調用

phraselists                    --  是供 weightedphraselist 等調用的文件夾

pics/                                --  PICS 過濾

template.html                --  dansguardian 的阻止頁面信息

weightedphraselist         --  短語權重列表

 
# DansGuardian.conf
# 拒絕 Web 訪問報告
# -1 = 做日記但不阻止-祕密模式
# 0 = 只是說“拒絕訪問”
# 1 = 報告爲什麼但是不報告什麼關鍵詞阻止
# 2 = 完全報告
# 3 = 用 HTML 模式文件(突略拒絕訪問地址)-推進
reportinglevel = 3
# 全局語言貯存的語言目錄,只是用於reportinglevel=3時的HTML模式,
# 當被用,DansGuardian 將用html文件代替用perl cgi腳本來顯示,這個
# 選項更快更清晰更容易讓訪問者訪問被阻止的頁面
# 語言文件用於沒有問題的任何設置
languagedir = '/etc/dansguardian/languages'
# 從語言目錄中運用的語言
language = 'ukenglish'
# 日記設定
# 0 = none  1 = just denied  2 = all text based  3 = all request
loglevel = 2
# 記錄擴展命中
# 記錄如擴展(用戶、ip、URL、關鍵詞)匹配因此讓這個頁面通過,非常有用於診斷
# 怎樣的站點可以通過過濾器
# on | off
logexceptionhits = on
# 日記文件格式
# 1 = DansGuardian format        2 = CSV-style format
# 3 = Squid Log File Format      4 = Tab delimited
logfileformat = 1
# 本地日記文件
# 定義日記目錄和文件名
loglocation = '/var/log/dansguardian/access.log'
# 網絡設置
# DansGuardian 偵聽的IP。保留空着DansGuardian將偵聽所有的IPs。
# 通常你都會讓你的防火牆保護這些,但是當你只是限制1個IP,單單時一。
filterip =
# DansGuardian 偵聽的端口
filterport = 8080
# 代理服務器的IP(缺省是環回網卡ip-i.e. 這是服務器)
proxyip = 127.0.0.1
# DansGuardian 連接到代理服務器的端口
proxyport = 3128
# accessdeniedaddress是cgi dansguardian 報告腳本的web服務器的地址被拷貝
# 如果你不用到cgi就不要更改缺省
accessdeniedaddress = 'http://YOURSERVER.YOURDOMAIN/cgi-bin/dansguardian.pl'
# 非標準分隔符(僅用於accessdeniedaddress)
# 缺省是激活但可以返回用原始標準模式去disable
nonstandarddelimiter = on
# 禁止image交換
# Images 被禁止是由於domain/url/etc的原因包含了廣告黑名單將被交換
# 例如,掩藏廣告images和刪除非法的image
# icons禁止域名
# 0 = off
# 1 = on (default)
usecustombannedimage = 1
custombannedimagefile = '/etc/dansguardian/transparent1x1.gif'
# 組過濾選項
# filtergroups設置組過濾器的數量。組過濾器是設置包含過濾器選項應用於這個組的用戶。
# 這個參數變量必須是1或者更多
# DansGuardian 將自動查找dansguardianfN.conf 當N是這個過濾器的組。用filtergroupslist
# 選項來分配用戶到組。所有的用戶缺省是屬於過濾器組1。你必須有一些鑑別分類能夠讓用
# 戶到組的匹配。儘可能少的用更多的組過濾器更多的拷貝清單
filtergroups = 1
filtergroupslist = '/etc/dansguardian/filtergroupslist'
# 本地鑑別文件
bannediplist = '/etc/dansguardian/bannediplist'
exceptioniplist = '/etc/dansguardian/exceptioniplist'
banneduserlist = '/etc/dansguardian/banneduserlist'
exceptionuserlist = '/etc/dansguardian/exceptionuserlist'
# 展示有利的關鍵詞建立
# 如果激活則只要報告的標準夠高所有超越不規則限制關鍵詞建立將被記錄,
# on | off
showweightedfound = on
# 有利的關鍵詞的模式
# 下邊是3種可能模式的選項:
# 0 = off = 不用關鍵詞的特徵
# 1 = on, normal = 通用的關鍵詞選項
# 2 = on, singular = 每個有用的關鍵詞建立在一個頁面中只是一次
weightedphrasemode = 2
# 真實報告caching的文本URLs
# 好的caches頁面就不需要再次檢測
# 0 = off (推薦用戶不同的瀏覽ISPs)
# 1000 = 推薦多數用戶
# 5000 = 暗示最多上限
urlcachenumber = 1000
# 在多少秒過期在他們不活動和將被突略
# 0 = never
# 900 = recommended = 15 mins
urlcacheage = 900
# 敏捷和未處理的關鍵詞內容過濾選項
# Smart 是多樣的空間和HTML將刪除在關鍵詞過濾之前
# Raw 是rew的HTML包含meta標記將過濾關鍵詞
# 0 = raw only
# 1 = smart only
# 2 = both (default)
phrasefiltermode = 2
# 小寫選項
# 爲了比較關鍵詞當文件中檢查到大寫字母時將更改爲小寫
# 然而這將違背Big5和16-bit文本,如果需要保護大小寫
# 2.7.0版本的支持這個功能
# 0 = 強制更改爲小寫 (default)
# 1 = 不做任何改變
preservecase = 0
# 16進制解碼選項
# 當文件檢查到它會隨意的更改%XX成chars
# 如果你發現文件在過濾關鍵詞時讓其通過是由於編碼則enable
# 然而這將違背Big5和16-bit文本
# 0 = disabled (default)
# 1 = enabled
hexdecodecontent = 0
# Force Quick搜索好於DFA搜索算法
# 通常的DFA執行不是和16-bit字符完全一致,但是它作爲缺省是因爲它管理很大
# 關鍵詞的列表時很快,如果你希望用很大數量的6-bit字符關鍵詞則激活這選項
# 0 = off (default)
# 1 = on (Big5 compatible)
forcequicksearch = 0
# 反向查找禁止的設置和URLs
# 如果設置爲on,DansGuardian 將爲IP URL地址查找forward DNS和搜索禁止設置和URL列表
# 這將防止用戶簡單輸入IP來訪問禁止的地址,如果不是用本地的DNS服務器它將稍微降低查
# 找的速度,設置它爲off,用Blanket IP Block選項的bannedsitelist文件來代替
reverseaddresslookups = off
# 反向查找禁止和擴張的IP列表
# 如果設置爲on,DansGuardian 將爲IP連接的計算機查找forward DNS,這就意味着
# 你可以輸入hostname在exceptioniplist 和 bannediplist
# 如果不是用本地的DNS服務器它將稍微降低搜索的速度,設置爲off
reverseclientiplookups = off
# 創建bannedsitelist和bannedurllist cache文件
# 這將比較列表文件日戳和cache的日戳,使其得到重新創建這是必須的
# 如果bsl或bul程序的文件存在,則將被用於代替,它將增加處理300%的速度
# 在很慢的計算機上這是很有用,在很快的計算機上就不需要這個選項
# on | off
createlistcachefiles = on
# POST保護(web 上傳和窗體)
# 不阻止窗體沒有任何文件上傳,i.e. 這是只是爲了阻止和限制上傳
# kibibytes在MIME encoding和header bumph標準之後
# 用 0 表示完全阻止
# 用高些(e.g. 512 = 512Kbytes)來限制
# 用-1表示不阻止
#maxuploadsize = 512
#maxuploadsize = 0
maxuploadsize = -1
# 最大內容過濾頁面大小
# 有時候web服務器的二進制文本文件非常大就會消耗巨大的內存和CPU資源
# 處理這些,你可以限制文件的大小來過濾,直接讓它通過
# 這設置也同樣應用正規的內容擴張修改
# 大小單位爲Kibibytes - e.g. 2048 = 2Mb
# 用 0 表示不限制
maxcontentfiltersize = 256
# 用戶名辨別算法(用於日記記錄)
# 你可以有很多的算法不僅僅是這一個,第一當這被用雖然用戶名沒有建立,接着將很有用
# * proxyauth 是基本的代理辨別被用(對透明代理不是有用)
# * ntlm 是當代理支持MS NTLM辨認協議(只是工作於IE5.5 sp1或者更高版本)**NOT IMPLEMENTED**
# * ident 是當其他的算法不能用作時工作,它將連接來自連接的計算機和嘗試接連到identd服務器和
# query,它是用戶擁有的連接
usernameidmethodproxyauth = on
usernameidmethodntlm = off # **NOT IMPLEMENTED**
usernameidmethodident = off
# 優先禁止 - 這意味你激活代理辨別和用戶訪問設置禁止的URL,例如他們阻止直接外出沒有
# 享有的請求和通過,這影響用戶的需要訪問一個乾淨的設置,第一需它知道他們是誰甚至可以
# 是管理員
# 這就是爲什麼DansGuardian總是起作用但有些情況下缺少完美的,所以你可以隨便disable它
# 缺省是 on,衆所周知這個設置像mime類型一樣結果不能這作用AD image交換工作好
preemptivebanning = on

# Misc 設置
# 如果爲on它增加一個X-Forwarded-For: <clientip> HTTP請求頭,這有幫助於一些設置問題
# 這需要知道源ip。on | off
forwardedfor = off
# 如果爲on它用X-Forwarded-For: <clientip> 確定客戶端的IP,這作用於squid介於客戶端和
# DansGuardian之間
# 警告-報頭容易欺騙。on | off
usexforwardedfor = off
# 如果爲on它記錄一些調試信息關於fork()和accept(),通常試突略的,他們試用syslog來記錄的
# 它安全的設置爲on或者off
logconnectionhandlingerrors = on

# Fork pool 選項
# 設置最多的進程數fork來處理進來的連接,最大變量通常是250,依賴OS
# 最大設置你可以嘗試180
maxchildren = 120
# 設置最小的進程數fork來處理進來的連接
# 最大設置你可以嘗試32
minchildren = 8
# 設置最小的進程數fork來處理保持真正的連接
# 最大設置你可以嘗試8
minsparechildren = 4
# 設置最小的進程數fork來運行
# 最大設置你可以嘗試10
preforkchildren = 6
# 設置最大的進程數來不做任何東西
# 當有空間的時候可以精選他們一些
# 最大設置你可以嘗試64
maxsparechildren = 32
# 設置最大的子進程croaks的age
# 這是在他們退出之前他們處理的連接數
# 最大設置你可以嘗試10000
maxagechildren = 500

# 進程選項
# (更改他們只有你真正知道你自己在幹什麼)
# 這些選項允許你運行DansGuardian在多種場合在單個機器上
# 記住以你的意圖編輯上面日記文件路徑
# IPC 文件名
# 定義IPC 服務用於log進程通信的目錄和文件名
ipcfilename = '/tmp/.dguardianipc'
# URL 列表 IPC 文件名
# 定義URL列表IPC服務用於URL cache進程通信的目錄和文件名
urlipcfilename = '/tmp/.dguardianurlipc'
# PID 文件名
# 定義進程id的目錄和文件名
pidfilename = '/var/run/dansguardian.pid'
# 不能守護
# 如果激活,進程將不會fork運行在後臺
# 它不是通常有利去做這些
# on|off ( defaults to off )
nodaemon = off
# 不啓動日記進程
# on|off ( defaults to off )
nologger = off
# 守護進程運行的用戶和組
# 這是DansGuardian運行時的用戶,通常 user/group nobody
# 不註釋的用 缺省用戶在編譯時定義
# daemonuser = 'nobody'
# daemongroup = 'nobody'
# 軟件重啓
# 當on時不會強制的殺死所有同一進程組的進程
# 這不是很困惑運行時加上 -g 的選項 他們不是很有關係
# on|off ( defaults to off )
softrestart = off

 

4.設置IPtable

設定iptable的目的主要是防止用戶繞過dansguardian,如果 dansguardian 和squid都已經運行,客戶端可以直接 連3128端口來繞過dansguardian,我們可以通過把所有連向3128的 連接轉向8080來防止用戶繞過 dansguardian.
      iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 3128 -j REDIRECT --to-port 8080

還蒐集了一些其他的


iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080


iptables –t nat –A PREROUTING –s 192.168.0.xxx/32 –i eth1 –p tcp --dport 80 –j REDIRECT --to-dports 8080

這2個應該是在設置透明代理時把發到80的連接自動轉到8080?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章