用监控宝来检测服务器运行状况(linux)
- 八月 31st, 2010
- By admin
www.jiankongbao.com 服务器管理必备良器。
首先我们怀着半信半疑的态度注册一个免费的用户,吼吼!
然后看教程,http://wiki.jiankongbao.com/doku.php 找到“服务器监控”的“在Linux服务器上开启安全的SNMP代理”这一节,仔细拜读。
特别是假如你的系统没有安装net-snmp的时候,要认真读这篇文章 http://wiki.jiankongbao.com/doku.php/文档:安全指引#linux_snmp
这里有几点是我在配置过程中遇到的问题,说明一下:
(1)我在编译的时候,对“–with-openssl=/usr/”这个比较不解,于是没有跟上参数,用的“–with-openssl”
(2)在vi /var/net-snmp/snmpd.conf的时候,提示无法建立,这个我手工在/var目录下建了个 net-snmp 目录搞定
(3)iptables开启端口后,记得重启下防火墙的服务
(4)第一次试v3不成功,修改配置文件后,需要killall -9 snmpd,然后重启snmpd服务……
偷个懒,其实最完整的说明在官方网站的的wiki上都能找到,这里附上net-snmp安装及配置的原文:
安全指引以下内容将帮助您更加安全的在监控宝上创建各类监控项目。
Linux SNMP
以下的示例采用SUSE10 Linux环境,但它同样适用于其它Linux发行版。
编译和安装
首先我们需要下载Net-SNMP的源代码,选择当前最新的版本5.4.2.1,地址如下:
http://sourceforge.net/projects/net-snmp/files/net-snmp/5.4.2.1/
接下来对下载的源代码包进行解压缩,如下:
suse10:~ # tar xzvf net-snmp-5.4.2.1.tar.gz
然后通过configure来生成编译规则,如下:suse10:~ # cd net-snmp-5.4.2.1
suse10:~ # ./configure –prefix=/usr/local/snmp –with-openssl=/usr/ –with-mib-modules=ucd-snmp/diskio
注意,以上的–with-mib-modules=ucd-snmp/diskio
选项,可以让服务器支持磁盘I/O监控。接下来,开始编译和安装:
suse10:~ # make
suse10:~ # make install
到现在为止,我们已经有了可以运行的SNMP代理程序,它位于/usr/local/snmp/sbin/snmpd,在启动它之前,我们还要进行一些必要的设置。设置安全的验证方式
将SNMP代理程序暴露给网络上的所有主机是很危险的,为了防止其它主机访问你的SNMP代理程序,我们需要在SNMP代理程序上加入身份验证机制。SNMP支持不同的验证机制,这取决于不同的SNMP协议版本,监控宝目前支持v2c和v3两个版本,其中v2c版本的验证机制比较简单,它基于明文密码和授权IP来进行身份验证,而v3版本则通过用户名和密码的加密传输来实现身份验证,我们建议使用v3,当然,只要按照以下的介绍进行配置,不论是v2c版本还是v3版本,都可以保证一定的安全性,你可以根据情况来选择。
注意一点,SNMP协议版本和SNMP代理程序版本是两回事,刚才说的v2c和v3是指SNMP协议的版本,而Net-SNMP是用来实现SNMP协议的程序套件,目前它的最新版本是刚才提到的5.4.2.1。
v2c
先来看如何配置v2c版本的SNMP代理,我们来创建snmpd的配置文件,默认情况下它是不存在的,我们来创建它,如下:
suse10:~ # vi /usr/local/snmp/share/snmp/snmpd.conf
然后我们需要创建一个只读帐号,也就是read-only community,在snmpd.conf中添加以下内容:rocommunity jiankongbao 60.195.249.83
注意,这里的“rocommunity”表示这是一个只读的访问权限,监控宝只可以从你的服务器上获取信息,而不能对服务器进行任何设置。紧接着的“jiankongbao”相当于密码,很多平台喜欢使用“public”这个默认字符串。这里的“jiankongbao”只是一个例子,你可以设置其它字符串作为密码。
最右边的“60.195.249.83”代表指定的监控点IP,这个IP地址是监控宝专用的监控点,这意味着只有监控宝有权限来访问你的SNMP代理程序。
所以,以上这段配置中,只有“jiankongbao”是需要你进行修改的,同时在监控宝上添加服务器的时候,需要提供这个字符串。
v3
当然,我们建议您使用v3版本来进行身份验证。对于一些早期版本的Linux分发版,其内置的SNMP代理程序可能并不支持v3,所以我们建议您按照前边介绍的方法,编译和安装最新的Net-Snmp。
v3支持另一种验证方式,需要创建一个v3的帐号,我们同样修改以下配置文件:
suse10:~ # vi /usr/local/snmp/share/snmp/snmpd.conf
然后添加一个只读帐号,如下:rouser jiankongbao auth
可以看到,在v3中,“rouser”用于表示只读帐号类型,随后的“jiankongbao”是指定的用户名,后边的“auth”指明需要验证。接下来,我们还要添加“jiankongbao”这个用户,这就是v3中的特殊机制,我们打开以下配置文件:
suse10:~ # vi /var/net-snmp/snmpd.conf
这个文件会在snmpd启动的时候被自动调用,我们需要在它里边添加创建用户的指令,如下:createUser jiankongbao MD5 mypassword
这行配置的意思是创建一个名为“jiankongbao”的用户,密码为“mypassword”,并且用MD5进行加密传输。这里要提醒的是:密码至少要有8个字节
这是SNMP协议的规定,如果小于8个字节,通信将无法进行。
值得注意的是,一旦snmpd启动后,出于安全考虑,以上这行配置会被snmpd自动删除,当然,snmpd会将这些配置以密文的形式记录在其它文件中,重新启动snmpd是不需要再次添加这些配置的,除非你希望创建新的用户。
以上配置中的用户名、密码和加密方式,在监控宝添加服务器的时候需要添加。
启动SNMP代理程序
经过配置后,现在可以启动snmpd,如下:
/usr/local/snmp/sbin/snmpd
如果要关闭,则可以直接kill这个进程,如下:killall -9 snmpd
增强的安全机制有了以上的验证机制,你就可以放心的使用SNMP代理了。但是,如果你的SNMP代理程序版本较低,可能会有一些别有用心的破坏者利用一些固有的漏洞进行破坏,比如发送较长的数据导致SNMP代理程序内存泄漏或者拒绝服务等,为此,你还可以使用防火墙(iptables)来进行增强的安全过滤。
在Linux中,我们用iptables来实现防火墙,一般情况下,除了流入指定端口的数据包以外,我们应该将其它流入的IP数据包抛弃。你可能已经配置了一定的防火墙规则,那么只要增加针对SNMP的规则即可。
SNMP代理程序默认监控在udp161端口,为你的iptables增加以下规则:
iptables -A INPUT -i eth0 -p udp -s 60.195.249.83 –dport 161 -j ACCEPT
以上设置中假设服务器外网网卡是eth0,你可以根据实际情况来修改。这样一来,只有监控宝的专用监控器可以发送UDP数据包到你的服务器的161端口,与SNMP代理程序进行通信。
Windows SNMP
在Windows服务器上开启SNMP服务非常简单,您可以参考http://blog.jiankongbao.com/?p=185。
MySQL 监控
创建MySQL权限
您需要在被监控的MySQL服务器上为监控宝创建一个专用的MySQL用户,这样做的好处是:
与您的其它MySQL用户进行有效隔离,独立管理。
对该用户进行受限管理,不需要给予任何MySQL权限。
指定监控宝的访问IP地址,阻止其它非法访问。
操作非常简单,在MySQL中操作如下:CREATE USER ‘jiankongbao’@’60.195.252.106′ IDENTIFIED BY ‘your_password’;
CREATE USER ‘jiankongbao’@’60.195.249.83′ IDENTIFIED BY ‘your_password’;
在以上操作中,我们创建的MySQL用户名为“jiankongbao”,密码为“your_password”,建议您对其进行修改。除此之外,目前我们不需要对该MySQL账户授予任何权限。同时,监控宝目前指定的授权IP地址为:60.195.252.106、60.195.249.83,请同时添加,随后如有变更,我们会及时通知用户。
防火墙安全配置
尽管以上的MySQL配置已经相当安全,您仍然可以通过防火墙来保护您的MySQL服务器,以Linux的iptables为例,您可以仅开放监控宝指定IP地址来访问MySQL服务器的端口。
iptables操作如下:
iptables -A INPUT -i eth0 -p tcp -s 60.195.252.106 –dport 3306 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp -s 60.195.249.83 –dport 3306 -j ACCEPT
注意:在MySQL或者防火墙中指定授权IP地址的时候,请只开放我们指定的IP地址,而不要直接开放整个C类网段,比如60.195.252.0/24,因为该网段中其它服务器不在我们的可控范围内。Apache 监控
修改httpd.conf
在添加Apache监控之前,我们需要开启Apache的status模块,以Apache2.x版本为例,我们需要修改httpd.conf,增加以下配置段:
ExtendedStatus On
<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from 60.195.252.106
Allow from 60.195.249.83
</Location>
这样一来,假如你的Apache所在服务器的域名和IP地址为www.domain.com -> 10.0.0.1
那么,Apache的状态页面地址便为:http://www.domain.com/server-status
或者
http://10.0.0.1/server-status
受限访问设置
我们当然不希望其它人浏览status页面,所以您可以做一些限制,首先,对于默认的status地址,您可以进行修改,比如将:
<Location /server-status>
修改为:<Location /my-domain-status>
其次,您已经看到,我们提供了指定的授权IP地址:60.195.252.106、60.195.249.83,您可以仅授权这个地址访问您的status页面。Lighttpd 监控
Lighttpd的状态监控依赖于mod_status模块,幸运的是,Lighttpd缺省已经内置了mod_status模块,我们要做的就是打开配置文件lighttpd.conf,开启这个模块,也就是删除模块前边的“#”注释符,比如:
server.modules = (
# “mod_rewrite”,
# “mod_redirect”,
# “mod_alias”,
“mod_access”,
# “mod_trigger_b4_dl”,
# “mod_auth”,
“mod_status”,
“mod_fastcgi”,
“mod_accesslog” )
为了便于描述,以上配置部分省略了其它的模块。然后,在lighttpd.conf中找到以下部分:
#### status module
status.status-url = “/server-status”
默认情况下以上语句是被注释的,同样,删掉注释符,保存配置文件,重启lighttpd,大功告成。假如lighttpd所在服务器的IP为10.0.0.1,同时指向它的域名为www.domain.com。那么,这样一来,状态页面便是:
http://10.0.0.1/server-status
或者
http://www.domain.com/server-status
最后,建议您修改默认的server-status,比如:
#### status module
status.status-url = “/my-lighttpd-status”
Nginx 监控需要注意的是,Nginx默认安装不包含状态模块stub_status,所以,在编译Nginx的时候,需要添加以下参数:
–with-http_stub_status_module
一旦包含stub_status模块后,我们就可以在配置文件nginx.conf中开启状态页面:http {
server {
listen 80;
server_name localhost;location / {
root html;
index index.html index.htm;
}location /nginx-status {
stub_status on;
access_log off;
}
}
}
以上配置文件中,我们实际增加的部分是:location /nginx-status {
stub_status on;
access_log off;
}
同样,假如Nginx所在服务器的IP为10.0.0.1,同时指向它的域名为www.domain.com,这样一来,Nginx的状态页面便是:http://10.0.0.1/nginx-status
或者
http://www.domain.com/nginx-status
同样,建议您将以上示例中的nginx-status修改为其它字符串。
另外,Nginx的stub_status也支持授权IP的配置,您可以参考Nginx的手册,监控宝提供的服务监控点IP地址为:
60.195.252.106
60.195.249.83






