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