kuihan0 2013-03-09
NET-SNMP官方网站:[url]http://www.net-snmp.org/[/url]
# tar zxvf net-snmp-5.2.4.tar.gz
# cd net-snmp-5.2.4
# ./configure –prefix=/usr/local/net-snmp --enable-developer --with-mib-modules="host agentx examples/example"
# make
# make install
# ln –s /usr/local/net-snmp/bin/* /usr/local/bin/
或使用环境变量:
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/net-snmp/bin:/usr/local/net-snmp/sbin"
# cp EXAMPLE.conf /usr/local/net-snmp/share/snmp/snmpd.conf
# vi /etc/rc.d/rc.local
//在rc.local上加入一行/usr/local/net-snmp/sbin/snmpd &,系统启动时启动SNMP服务。
修改snmpd.conf 文件,community 为你自定义的snmp字符串,source为允许访问的网络来源,必须指定,否则无法被监控
vi /usr/local/net-snmp/share/snmp/snmpd.conf
把这句
com2sec local localhost COMMUNITY
com2sec mynetwork NETWORK/24 COMMUNITY
改为
com2sec local localhost public
com2sec mynetwork 192.168.1.0/24 public
//192.168.1.0为snmp这台机器所以的网段(注意:不充许为192.168.1.1)
# /usr/local/net-snmp/sbin/snmpd //启动SNMP服务
##########################################################
用如下命令测试:
snmpget -v 1 -c public localhost system.sysUpTime.0
snmpwalk -v 1 -c public localhost system
查看日志:
tail -f /var/log/snmpd.log
#########################################################
控制台显示日志
snmptrapd -f -Le -d -M /usr/local/net-snmp/share/snmp/mibs -m ALL
#########################################################
1.启动snmpd服务
#/usr/local/sbin/snmpd -d
//snmptrapd的启动类似
2.重启snmpd服务
#/etc/rc.d/init.d/snmpd restart
3. 系统启动时启动SNMP服务
#vi /etc/rc.d/rc.local
//在rc.local上加入一行/usr/local/net-snmp/sbin/snmpd,系统启动时启动SNMP服务。
4.重启snmpd服务
#cd /etc/rc.d/init.d
#snmpd restart
或#service snmpd restart
# rpm -qa|grep squid
# rpm -e squid //删除squid老版本
wget http://www.squid-cache.org/Versions/v3/3.0/squid-3.0.STABLE18.tar.gz
# tar -zxvf squid-3.0.STABLE18.tar.gz
# cd squid-3.0.STABLE18
# ./configure --prefix=/usr/local/squid --sysconfdir=/usr/local/squid/etc/ --bindir=/usr/local/squid/bin --sbindir=/usr/local/squid/sbin --mandir=/usr/local/squid/share/man --enable-gnuregex --enable-carp --enable-async-io=80 --enable-removal-policies=heap,lru --enable-icmp --enable-delay-pools --enable-useragent-log --enable-referer-log --enable-kill-parent-hack --enable-snmp --enable-arp-acl --enable-htcp --enable-cache-digests --enable-default-err-language=Simplify_Chinese --enable-err-languages="Simplify_Chinese" --enable-poll --enable-linux-netfilter --disable-ident-lookups --enable-underscores --enable-auth="basic" --enable-basic-auth-helpers="NCSA" --enable-external-acl-helpers="ip_user" --enable-x-accelerator-vary
# make
# make install
# cd ./helpers/basic_auth/NCSA/
# make
# cp ncsa_auth /usr/sbin/
# htpasswd -c /usr/local/squid/password <用户名>
./configure --prefix=/usr/local/squid \ #指定squid安装目录
--mandir=/usr/local/squid/share/man \ #指定man的安装目录
--enable-async-io=20 \ #采用同步io提高性能,负载高可设大点
--disable-icmp \ #禁止icmp协议代理(默认不允许)
--enable-delay-pools \ #允许延迟限止带宽
--enable-cache-digests \ #允许缓存摘要,可以加快请求缓冲内容的速度(集群用)
--enable-snmp \ #允许snmp协议支持(如用mrtg进行流量监控等)
--disable-ident-lookups \ #禁止使用RFC931识别
--enable-epoll \ #支持epoll的IO模式,2.6以上内核才具有
--enable-basic-auth-helpers="NCSA" #允许带密码验证,NCSA 风格的用户名和密码档
--enable-linux-netfilter #允许透明代理
--enable-arp-acl #允许基于MAC地址的存取过滤
--enable-err-language="Simplify_Chinese" #支持的错误语言
--enable-default-err-language="Simplify_Chinese" #指定默认的错误语言
# mv -f /usr/local/squid/etc/squid.conf /usr/local/squid/etc/squid.conf.bak
# vi /usr/local/squid/etc/squid.conf
http_port 192.168.253.8:3128 transparent
icp_port 3130
cache_dir aufs /usr/local/squid/var/cache 25000 16 256
cache_access_log /usr/local/squid/var/logs/access.log
cache_log /usr/local/squid/var/logs/cache.log
cache_store_log /usr/local/squid/var/logs/store.log
pid_filename /usr/local/squid/var/logs/squid.pid
http_access deny all
http_access allow all
cache_effective_user nobody
cache_effective_group nobody
cache_mgr [email protected]
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl Safe_ports port 161 # multiling http
acl CONNECT method CONNECT
http_access allow all
##########################################################
#acl snmpManager 192.168.253.8/255.255.255.255
acl localhost src 127.0.0.1/32
snmp_port 3401
acl snmppublic snmp_community public
snmp_access allow snmppublic localhost
# mkdir -p /usr/local/squid/var/cache
# chown -R nobody:nobody /usr/local/squid/var
#初始化你在 squid.conf 里配置的 cache 目录
# cd /usr/local/squid/var
# squid –z
各种启动方式如下:
#squid -k parse #检查配置是否有错误,没有任何输出,证明配置基本是正确的!!!
#squid -zX #可以加一个X参数,看看初始化具体的项目.
#squid –D #如果因为DNS无法启动squid,可以用下面的命令启动squid
# squid -NCd1 #如果运行正常,终端会显示“Ready to serve requests”
另一份squid.config
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT
auth_param basic program /usr/sbin/ncsa_auth /usr/local/squid/password
acl normal proxy_auth REQUIRED
http_access allow normal
# Deny requests to certain unsafe ports
http_access deny !Safe_ports
# Deny CONNECT to other than secure SSL ports
http_access deny CONNECT !SSL_ports
# And finally deny all other access to this proxy
http_access deny all
# Squid normally listens to port 3128
http_port 3128
# We recommend you to use at least the following line.
hierarchy_stoplist cgi-bin ?
# Uncomment and adjust the following to add a disk cache directory.
#cache_dir null /tmp
# Leave coredumps in the first cache dir
coredump_dir /usr/local/squid/var/cache
# Add any of your own refresh_pattern entries above these.
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern . 0 20% 4320
用下面的命令测试:
# snmpwalk -v1 -c public 127.0.0.1:3401 .1.3.6.1.4.1.3495.1
如果能看到类似下面的信息,说明成功了。
SNMPv2-SMI::enterprises.3495.1.1.1.0 = INTEGER: 16360
SNMPv2-SMI::enterprises.3495.1.1.2.0 = INTEGER: 21626872
有因为默认snmp是使用161端口的,而squid的snmp开启的是3401端口,如果想直接通过snmp端口就可以取到squid的相关信息,可以在snmpd.conf中加入
view systemview included .1.3.6.1.4.1.3495.1
proxy -v 1 -c public localhost:3401 .1.3.6.1.4.1.3495.1
用下面的命令测试:
snmpwalk -v1 -c public 127.0.0.1 .1.3.6.1.4.1.3495.1
如果能看到类似下面的信息,说明成功了。
SNMPv2-SMI::enterprises.3495.1.1.1.0 = INTEGER: 16360
SNMPv2-SMI::enterprises.3495.1.1.2.0 = INTEGER: 21626872
1,对你的squid.conf 排错,即验证 squid.conf 的语法和配置。
#squid -k parse
如果squid.conf 有语法或配置错误,这里会返回提示你,如果没有返回,恭喜,可以尝试启动squid。
2,在前台启动squid,并输出启动过程。
#squid -N -d1
如果有到 ready to server reques,恭喜,启动成功。
然后 ctrl + c,停止squid,并以后台运行的方式启动它。
3,启动squid在后台运行。
#squid -s
这时候可以 ps -A 来查看系统进程,可以看到俩个 squid 进程。
4,停止 squid
#squid -k shutdown
这个不用解释吧。
5,重引导修改过的 squid.conf
#squid -k reconfigure
1,把squid添加到系统启动项
编辑 /etc/rc.d/rc.local
添加如下行: /usr/local/squid/sbin/squid -s
当然,并不是每个人都喜欢这种启动方式,你可以用你最习惯的方式;或者把它安装为服务。
2,修改cache 缓存目录的权限。
#chown -R nobody:nobody /home/cache
我的cache缓存目录是 /home/cache, nobody执行用户和用户组是nobody,nobody。
3,修改squid 日志目录的权限
#chown -R squid:squid /usr/local/squid/var/logs
这一步并不是适合每一个使用squid的用户.意为让squid有权限在该目录进行写操作。
例如生成 access.log cache.log store.log
4,查看你的日志文档。
#more /usr/local/squid/var/logs/access.log | grep TCP_MEM_HIT
该指令可以看到在squid运行过程中,有那些文件被squid缓存到内存中,并返回给访问用户。
#more /usr/local/squid/var/logs/access.log | grep TCP_HIT
该指令可以看到在squid运行过程中,有那些文件被squid缓存到cache目录中,并返回给访问用户。
#more /usr/local/squid/var/logs/access.log | grep TCP_MISS
该指令可以看到在squid运行过程中,有那些文件没有被squid缓存,而是现重原始服务器获取并返回给访问用户。
lSquid配置(仅对必要选项配置并说明):
http_port 80
此选项用于Squid代理所侦听的端口,由于要实现Http加速代理,则侦听端口80
tcp_outgoing_address 255.255.255.255
此句法指定了远程服务器的IP地址,这里我们使用255.255.255.255来指定为所有地址
tcp_incoming_address
这里可以使用http_port语法进行绑定端口和IP地址。表示客户端的请求。可以不使用。
cache_mem 64 MB
由于Squid在读写磁盘,I/O通道,数据转贮等需要大量内存,我们可以把内存值稍微设置大一些,这样可以提供服务器性能。
cache_swap_low 95
这用做表示缓存内部对象的替换的衡量基线。当交换分区的磁盘利用率超越这个基线,那么缓存对象替换也就随之开始。这里是用百分率做衡量标准。
cache_swap_high 98
此标记用于缓存对象替换的最高程度,当交换分区磁盘利用率接近此设置,则表示对象的更新程度更为剧烈。这里由于我的缓存区设置比较大,因此设置为98%。
下面几个配置标记采用系统默认配置。
{ maximum_object_size 4096 KB
{ 超过此尺寸的对象将不缓存。
{ minimum_object_size 0 KB
{ 小于此尺寸的对象将不缓存。
{ maximum_object_size_in_memory 8 KB
{ 内存中能缓存的最大对象尺寸。
{ ipcache_size 1024
{ 指定IP缓存大小。
{ ipcache_low 90
{ 缓存IP地址的最低基线。
{ ipcache_high 95
{ 缓存IP地址的最高极限。
{ fqdncache_size 1024
{ 缓存DNS全域名解析的尺寸。
cache_replacement_policy lru
此标记用于当缓存新对象时,使用缓存策略来清除缓存中特定对象。这里使用lru表示:它只替换长时间没有被访问过的对象。其他策略请参看配置文档介绍。
memory_replacement_policy lru
此用法同上,区别在于替换内存对象。
cache_dir ufs /cache 4000 16 256
设置缓存根目录为/cache,类型为ufs,缓存区大小为4G,可以有16个二级子目录,每有二级目录有256个三级子目录。
cache_access_log /var/log/squid/access.log
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log
cache_swap_log /var/log/squid/swap.log
上面几项是缓存日志记录的路径和文件名。
log_ip_on_direct on
记录客户端主机的IP地址。
log_fqdn on
记录全DNS域名解析。
mime_table /usr/local/squid/etc/mime.conf
Squid所用mime的文件路径
pid_filename /usr/local/squid/logs/squid.pid
Squid进程ID的文件。
ftp_user [email protected]
这里可以使用匿名登陆FTP服务器。
ftp_list_width 32
FTP文件列表长度,超过长度则截断文件名。
ftp_passive on
允许主动连接FTP服务器。
dns_nameservers 202.98.187.1
指定代理的域名解析服务器。
authenticate_program /usr/local/squid/bin/ncsa_auth
/usr/local/squid/etc/passwd
代理认证程序,这里在/usr/local/squid/etc使用htpasswd产生一个密码文件,具体方法如下:
#htpasswd –cdb passwd auth_usr1 pass1
#htpasswd –db passwd auth_usr2 pass2
#htpasswd –db passwd auth_usr3 pass3
创建passwd文件,并添加auth_usr1,auth_usr2,auth_usr3三个认证用户。
authenticate_children 5
所需要要产生的认证进程数。
authenticate_ttl 3600
此标记设置认证保持时间。
authenticate_ip_ttl 1800
此标记设置认证绑定IP地址的时间长度。
authenticate_ip_ttl_is_strict on
此标记可在authenticate_ttl时间内,拒绝其他非认证IP地址访问。
request_header_max_size 10 KB
request_body_max_size 1 MB
设置了Http请求的包头和数据大小。
request_body_max_size 0
这里,请求所返回的数据大小为0,意义为没有任何限制。
connect_timeout 180 seconds
read_timeout 15 minutes
request_timeout 20 seconds
上面几项是代理服务几个超时设置,这里使用配置文件默认值。
下面是访问控制列表一些配置,这里对访问的IP地址,域名,访问类型极其访问代理的权限做的限制:
acl acldomain dstdomain .ynst.net.cn
acl acceleratedport port 80
acl acceleratedhost dst 202.98.187.17/255.255.255.255
acl aclprotocol proto HTTP FTP
acl aclmethod method GET POST
acl aclauth proxy_auth required
(注:这里使用required表示任何passwd文件中存在的合法用户才授予访问权限。)
acl aclsnmp snmp_community secrect
MRTG可以使用snmp协议检测此代理服务运行状态。
acl aclconn maxconn 20
可并行连接的最大数量。
启用定义的访问控制列表
http_access allow manager localhost
http_access deny manager
http_access allow aclauth
http_access allow acceleratedport acceleratedhost
http_access deny all
下面为缓存管理设置
cache_mgr [email protected]
设置缓存管理者的接受邮件地址。
cache_effective_user squidusr
cache_effective_group squidgrp
设置执行Squid的用户和用户组。
{注:设置用户和用户组及其权限修改方法如下:
#groupadd squidgrp
#useradd –g squidgrp –d /home/squidusr squidusr
修改log日志权限属性,使squidusr有写权限。
#chown squidusr /var/log/squid
#chgrp&
/usr/local/squid/bin/squidclient -p 80 mgr:info
/usr/local/squid/bin/squidclient -p 80 mgr:5min
可以看到详细的性能情况,其中PORT是你的proxy的端口,5min可以是60min
取得squid运行状态信息: squidclient -p 80 mgr:info
*取得squid内存使用情况: squidclient -p 80 mgr:mem
*取得squid已经缓存的列表: squidclient -p 80 mgr:objects . use it carefully,it may crash
*取得squid的磁盘使用情况: squidclient -p 80 mgr:diskd
*强制更新某个url:squidclient -p 80 -m PURGE http://www.xxx.com/xxx.php
*更多的请查看:squidclient-h 或者 squidclient -p 80 mgr:
查命中率:
/usr/local/squid/bin/squidclient -h 111.222.111.111 -p80 mgr:info
/usr/local/squid/bin/squidclient -h具体的IP -p80 mgr:info
(我们一般都会把squid配置成有缓存目录的模式,也就是有配置cache_dir目录,当squid应用运行了一段时间以后,cache_dir对应的swap.state文件就会变得越来越大,里面的无效接口数据越来越多,这可能在一定程度上影响squid的响应时间,此时我们可以使用rotate命令来使squid清理swap.state里面的无效数据,减少swap.state的大小。具体命令格式:
/path/to/squid/sbin/squid -k rotate -f /path/to/squid/conf_file
但是在3.0.7以前的版本都发现一些问题,rotate完以后启动DNSSERVER的时候会提示不能分配内存,从而导致DNSSERVER的辅助进程不能启动,此时一般情况下需要重启squid应用。)
检查缓存目录中的cache.log文件可以判断squid工作是否正常。此文件包含squid运行时产生的输出信息和错误信息。
三安装sarg
# mkdir /usr/local/sarg
# tar zxvf sarg-2.2.5.tar.gz
# cd sarg-2.2.5
# ./configure --prefix=/usr/local/sarg --enable-mandir=/usr/local/sarg/man --enable-bindir=/usr/local/sarg/bin
# make
# make install
# vi /usr/local/sarg/sarg.conf
language english //指定网页报告文件的语言类型,不支持中文网页。
access_log /usr/local/squid/var/logs/access.log //指定squid日志文件绝对路径。
title "squid user access reports" //指定网页标题
output_dir /usr/local/apache/htdocs/sarg //指定网页报告文件输出路径
overwrite_report no //是否覆盖报告,当那个日期的报告已经存在时是否覆盖掉
mail_utility mail
topsites_num 100
exclude_codes /usr/local/sarg/exclude_codes
max_elapsed 28800000
charset UTF-8
exclude_hosts /usr/local/sarg/norecords //指定不计入排序的站点列表文件名
resolve_ip no
user_ip no //使用用户名显示
# vi /usr/local/sarg/norecords //添加不计排序站点
google.com
microsoft.com
baidu.com
# /usr/local/sarg/bin/sarg //生成报表
# vi/root/sarg-hour.sh //每小时生成
#!/bin/bash
#hour
Date=$(date -d "1 hours ago " +"%y%m%d%H")
/usr/local/squid/sbin/squid -k rotate
sleep 10
Squiddir='/usr/local/squid/var/logs'
Access='access.log.*'
/bin/mv ${Squiddir}${Access} ${Squiddir}access${Date}.log
/usr/local/sarg/bin/sarg -o /usr/local/apache/htdocs/hours -l ${Squiddir}access${Date}.log
#chmod a+x /root/sarg-hour.sh
# crontab -e
0 8,9,10,11,12,13,14,15,16,17,18,19,20 * * * /root/sarg-hour.sh
# vi /root/sarg-day.sh
#!/bin/bash
#day
Squiddir='/usr/local/squid/var/logs'
Date=$(date -d "1 day ago " +"%y%m%d")
/bin/sort -m -t " " -k 1 -o $Squiddir${Date}log_all.log ${Squiddir}access${Date}*.log
/bin/rm access${Date}*.log -rf
/usr/local/sarg/bin/sarg -o /usr/local/apache/htdocs/days -l ${Squiddir}${Date}log_all.log
# chmod a+x /root/sarg-day.sh
# crontab -e
20 1 * * * /root/sarg-day.sh
# vi /root/sarg-week.sh
#!/bin/bash
#week
Date=$(date -d "1 week ago " +"%y%m%d")
YESTERDAY=$(date –date "1 week ago" +%d/%m/%Y)
/bin/sort -m -t " " -k 1 -o $Squiddir${Date}weeklog_all.log ${Squiddir}*log_all.log
/usr/local/sarg/bin/sarg -o /usr/local/apache/week -l ${Squiddir}${Date}weeklog_all.log
# chmod a+x /root/sarg-week.sh
# crontab -e
40 * * * 5 /root/sarg-week.sh
或者 //每十分钟生成一次日志
# crontab -e
*/10 * * * * /usr/local/sarg/bin/sarg > /dev/null 2>&1