squid+dansguardian實現網頁過濾

 dansguardian是一款內容過濾軟件,可以過濾網站、URL、網頁裏的關鍵字、mime等,配合squid是就是一個功能強大的過濾服務器了。

 

dansguardian:http://dansguardian.org/

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

兩個軟件可以進他們的官方網站下載

安裝:

我使用的環境是centos 5.5,安裝裝先檢查一下系統上有沒有安裝相應的編譯環境

gcc gcc-c++ pcre pcre-devel 不安裝pcre和pcre-devel的時候編譯dansguardian的時候會報錯,提示 No package 'libpcre' found

 

wget http://www.squid-cache.org/Versions/v3/3.1/squid-3.1.14.tar.gz

wget http://dansguardian.org/downloads/2/Stable/dansguardian-2.10.0.1.tar.gz

tar -zxvf squid-3.1.14.tar.gz

tar -zxvf dansguardian-2.10.0.1.tar.gz

cd squid-3.1.14

mkdir /etc/squid

mkdir /etc/dansguardian

./configusr –prefix=/etc/squid

make

make install

cd ../dansguardian-2.10.0.1

./configure –prefix=/etc/dansguardian

make

make install

#如不指定路徑squid會安裝到/usr/local/squid下,dansguardian會安裝到/usr/local/etc下

 

Squid

配置文件參數/etc/squid/etc/squid.conf

http_port 3128 #默認偵聽端口,可以在下面設置多個,也可以在

前面加上IP地址,進行地址端口的監聽,如:

#http_port 192.168.1.1:3128

cache_men 1024M #設置緩存大小,一般是3/1物理內存

maximum_object_size_in_memory 4096KB #定義最大緩存對象

cache_swap_low 90 #控制存儲在磁盤上對象的置換

cache_swap_high 95 #控制存儲在磁盤上對象的置換

cache_dir ufs /cache 40960 16 256 #告訴squid以何種方式將cache文件存到什麼位置

cache_effective_user squid #設置使用緩存的有效用戶

cache_effective_group squid #設置使用緩存的有效用戶組

acl ip src 192.168.1.0 #設置訪控列表

http_access allow ip #允許訪控列表

#訪問控制設置

#ACL格式爲

#acl 列表名稱 列表類型 [-i] 列表值1 列表值2

#列表名稱用於區分squid的和個ACL列表,不能使用重複的列表名稱

#列表類型是可以被squid識別的類型,squid支持很多列表類型,下面列出一些常用的:

# src              指終端客戶的源IP地址

# dst              指目標服務器IP地址

# myip            指squid的IP地址

# dstdomain    基於正向DNS查詢

# srcdomain    基於反向DNS查詢

# port             定義單獨的端口或範圍

# myport         squid的port

# method        指http請求方式,有get、post、put

# proto           指URL訪問協議,有http、https

# time            基於時間的控制

# maxconn     指來自終端客戶IP地址同時最大連接數

# arp              用於檢查cache客戶端的mac地址

#[-i]  表示忽略列表值的大小寫,否則squid對列表值是大小寫是很敏感的

#列表值是針對不同的列表類型,寫入不同的列表值

#允許或拒絕某個訪問控制列表的HTTP請求

#格式 http_access [allow | deny] 訪問控制列表名稱

 

groupadd squid

useradd squid

chown squid:squid /etc/squid/var/cache/00: #把文件權限改爲squid所以,不然會提示無權限

/etc/squid/sbin/squid -zX #初始化squid

/etc/squid/sbin/squid -N -d1 #看是否有錯誤消息,如有可修復它

/etc/squid/sbin/squid start

 

Dansguardian

配置文件:

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

 

相關配置文件如下:/etc/dansguardian/etc/dansguardian/list下

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

 

設置完後可以在其了的其個配置文件中設置自己想禁掉的一些關鍵字、url等

 

啓動和關閉

/etc/dansguardian/sbin/dansguardian #啓動dansguardian

/etc/dansguardian/sbin/dansguardian -q #關閉dansguardian

 

設置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

或設置透明代理時把發到80的連接自動轉到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

 

注:Dansguardian配置文件部分是網友提供,我對照了一下,其中差別不是特別大,所以就直接使用了,如看到和自己的路徑不相同請按你配置文件默認路徑,上面的配置請根據自己的情況修改

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