在Linux服务器上开启安全的SNMP代理

我们知道,监控宝使用标准的SNMP协议来为用户提供服务器监控功能,这意味着被监控的服务器上必须运行SNMP代理程序(snmpd),接下来我们将详细介绍如何在Linux服务器上安装、开启Snmp代理,并且进行必要的安全配置,随后我们会在其它文章中介绍Windows服务器的配置方法。
  
  关于SNMP协议的定义和描述,可以浏览RFC1157,这里还描述了SNMP的设计动机和原理,到目前为止,SNMP已经被无数的设备用来作为监控协议,并且工作得非常可靠,至于安全性和必要的安全配置,我们在随后会详细介绍,你完全可以让SNMP代理程序在你的服务器上安全的运行。
  
  在各种Linux分发版中,大多数都已经默认集成了snmpd,比如在suse10中,你可以这样开启snmpd:
  
  suse10:~ # /etc/init.d/snmpd start
  
  如果没有默认安装,你要做的就是自己来编译snmpd,按照下边的步骤,非常简单。
  
  编译和安装
  对于Linux平台,我们推荐使用Net-SNMP,它实现了标准的SNMP协议,并且包括了代理程序以及各种SNMP工具。
  
  
  
  http://net-snmp.sourceforge.net/
  
  首先我们需要下载Net-SNMP的源代码,选择当前最新的版本5.4.2.1,地址如下:
  
  http://sourceforge.net/projects/net-snmp/files/net-snmp/5.4.2.1/
  
  接下来对下载的源代码包进行解压缩,如下
  
  ./configure –prefix=/usr/local/snmp –with-openssl=/usr/ –with-mib-modules=ucd-snmp/diskiomakemake installsuse10:~ # 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 125.76.229.215
  
  注意,这里的“rocommunity”表示这是一个只读的访问权限,监控宝只可以从你的服务器上获取信息,而不能对服务器进行任何设置。
  
  紧接着的“jiankongbao”相当于密码,很多平台喜欢使用“public”这个默认字符串。这里的“jiankongbao”只是一个例子,你可以设置其它字符串作为密码。
  
  最右边的“125.76.229.215”代表指定的监控点IP,这个IP地址是监控宝专用的监控点,这意味着只有监控宝有权限来访问你的SNMP代理程序。
  
  所以,以上这段配置中,只有“jiankongbao”是需要你进行修改的,同时在监控宝上添加服务器的时候,需要提供这个字符串。
  
  v3c
  
  当然,我们建议您使用v3c版本来进行身份验证。对于一些早期版本的Linux分发版,其内置的SNMP代理程序可能并不支持v3c,所以我们建议您按照前边介绍的方法,编译和安装最新的Net-Snmp。
  
  v3c支持另一种验证方式,要创建一个v3c的帐号,我们同样修改以下配置文件:
  
  suse10:~ # vi /usr/local/snmp/share/snmp/snmpd.conf
  
  然后添加一个只读帐号,如下:
  
  rouser jiankongbao auth
  
  可以看到,在v3c中,“rouser”用于表示只读帐号类型,随后的“jiankongbao”是指定的用户名,后边的“auth”指明需要验证。
  
  接下来,我们还要添加“jiankongbao”这个用户,这就是v3c中的特殊机制,我们打开以下配置文件:
  
  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 125.76.229.215 —-dport 161 -j ACCEPT
  注意,在以上的dport选项之前,是两个“-”符号,由于排版显示的问题,这里可能会不正常。另外,在以上设置中,假设你的服务器外网网卡是eth0,你可以根据实际情况来修改。
  这样一来,只有监控宝的专用监控器可以发送UDP数据包到你的服务器的161端口,与SNMP代理程序进行通信。
  在监控宝中添加服务器
  现在我们来看看如何在监控宝中添加服务器监控,通过新增的导航,你会很容易进入添加服务器的页面,这里分为两部分,首先是填写服务器信息,包括服务器名称和IP地址,以及操作系统类型。
  这些都非常简单,之所以要选择操作系统类型,是因为Linux和Windows的机制存在一些差异,所以它们的SNMP信息库会有一些不同,我们需要根据不同的系统来提供相应的监控项目。
  
  接下来是SNMP设置,主要是选择不同的SNMP协议,以及填写身份验证信息,前边已经有过详细的介绍,这里你只需要将前边配置的信息如实填写即可。
  
  
  填写完后,点击提交按钮,这时候监控宝会使用这些信息来尝试连接你的SNMP监控代理,需要一些时间,这一步非常重要。
  
  不妙,如果你填写的信息无法连接到服务器的SNMP代理程序,监控宝会提示你,这时候,请你仔细检查之前介绍的那些配置,以及防火墙策略,也许你没有开放udp161端口。
  
  找到问题后再次提交,如果连接成功,则会看到成功页面,如下:
  
  然后点击“添加监控项目”,便可以为这台服务器选择监控项目,对于Linux服务器,监控宝目前提供了以下的监控项目,你可以全部勾选,然后提交。
  
  然后就等待数据和图表吧,一切就这么简单,如果有疑问或需要帮助,请发邮件到 help (at) 
  
  网站:http://blog.jiankongbao.com/?p=160










net-snmp 的安装和配置
从以下地址可以下载到最新的软件安装包:
http://nchc.dl.sourceforge.net/sourceforge/net-snmp/net-snmp-5.4.2.1.tar.gz
1、解压源码包:
tar –zxvf net-snmp-5.4.2.1.tar.gz
2、进入解压后的文件目录:
cd net-snmp-5.4.2.1
3、执行文件目录下的configure可执行文件,如果想指定程序包的安装路径,那么您首先建立相应的文件夹来存放安装信息,您可以写成./configure –prefix=/您指定的路径名。参数—prefix用来告诉系统安装信息存放的路径,如果您没有指定路径,直接执行./configure,那么程序包都会安装在系统默认的目录下,通常为:/usr/local下。例如:
./configure --prefix=/usr/local/snmp //配置 指定安装目录,安装过程会询问您以下的信息:
注意:以下问题似乎不怎么重要,那好像仅仅是官方想了解使用本软件方的信息,可以直接回车而不用回答,系统会采用默认信息,其中日志文件默认安装在/var/log/snmpd.log.数据存贮目录默认存放在/var/net-snmp下。
default version of-snmp-version(3): 3(在这里版本通常有三种形式:1,2c,3)
Systemcontact information(配置该设备的联系信息): heaven(也可以是邮箱地址)
System location (该系统设备的地理位置):BEIJING P.R China
Location to write logfile (日志文件位置): /var/log/snmpd.log
Location to Write persistent(数据存储目录): /var/net-snmp
4、#make
编译源码包文件,通常只需要执行make命令,系统会根据Makefile层层进行编译,第一次编译这需要大约20分钟的时间哦,您需要有耐心等待(RedHat4系统通常会相继出现两个编译错误,您此时可以参考我在本页后面写的出错处理方式来解决). 如果make 成功的话,那么紧接着安装程序了,这一步一般不会出现怪异的错误,安装也比较费时,大约要花费10分钟呢.

#make install
5、在完成上面的步骤后紧接着制作配置文件 *.conf,在这里有两种方式,一种方式是用命令snmpconf -g basic_setup生成snmpd.conf文件,但需要回答很多没用的问题,比较费时,我这里用了一种较简便的方法生成配置文件,就是把解压后的那个文件目录下的EXAMPLE.conf文件拷在我们的安装路径下并修改,命令格式如下:
cp EXAMPLE.conf /usr/local/snmp/snmpd.conf //cp样例配置到安装目录下
6、vi /usr/local/snmp/snmpd.conf //编辑配置文件
把里面的NETWORK 改成需要查看snmp信息的主机ip 地址
把COMMUNITY改成你设定的值(自己起个字符串形式的名字)。
然后保存退出
7、/usr/local/sbin/snmpd –c /usr/local/snmp/snmpd.conf & //启动snmp
8、netstat -an //查看snmp是否启动
9、在脚本里配置snmp,使其在开机时自启动snmpd服务。(也可以不写在脚本里,每次系统启动后执行一下第7步就行了)。在脚本里的编写:
vi /etc/rc.local
添加 usr/local/sbin/snmpd –c /usr/local/snmp/snmpd.conf &
10、关闭snmp服务
ps aux |grep snmp |grep -v grep |awk '{print $2}' |xargs kill
11出错处理机制
也许在执行第四不步make后,过了一会儿程序退出,并提示一下错误:
Grep /usr/lib/libbeecrypt.la: No such file or directory
/bin/sed: can't read /usr/lib/libbeecrypt.la: No such file or directory
libtool: link: `/usr/lib/libbeecrypt.la' is not a valid libtool archive
make[1]: *** [libnetsnmpmibs.la] Error 1
make[1]:Leavingdirectory /email/share/ceno_soft/net-snmp-5.4.1/agent'
make: *** [subdirs] Error 1
解决方法
说明缺少libbeecrypt.la ,libbeecrypt.so等共享库
如果确认系统中有libbeecrypt.la,也许他安装在/usr/local下面,可尝试:
ln -s /usr/local/lib/libbeecrypt.la /usr/lib/libbeecrypt.la
如果/usr/local下面没有,那么你必须安装beecrypt
下载路径
http://nchc.dl.sourceforge.net/sourceforge/beecrypt/beecrypt-4.1.2.tar.gz
解压并安装到/usr目录下:
tar -zxvf beecrypt-4.1.2.tar.gz
./configure -prefix=/usr
#默认是安装在/usr/local,我们需要安装在/usr目录下。如果没有加这个参数需要做连接
ln -s /usr/local/lib/libbeecrypt.la /usr/lib/libbeecrypt.la
编译并安装beecrypt库,先执行make编译源码包文件编译成功后执行安装命令make install,其命令如下:
#make
#make install
好,beecrypt安装完成后,我们继续NET-SNMP的编译,执行一下make 命令。
当我们继续make的时候,第一个错消逝了,但不幸的是出现了一个新的错误,错误提示如下:rpath -Wl,/usr/local/lib
/usr/bin/ld: cannot find –lelf
collect2: ld returned 1 exit status
make[1]: *** [snmpd] Error 1 make[1]: Leaving directory `/local/akazam/cacti/bak/net-snmp-5.4.2/agent'
make: *** [subdirs] Error 1
ke[1]: Leaving directory `/local/akazam/cacti/bak/net-snmp-5.4.2/agent
make: *** [subdirs] Error 1
解决方法
执行命令: ln -s /usr/lib/libelf.so.1 /usr/lib/libelf.so
现在估计该装的软件包都已经装上了,链接库也差不多了吧,我们现在可以大胆的回到net-snmp-5.4.2.1目录下,继续从第4步往下执行,这样就一路畅通了。





说明: 编写此文档时由于格式的原因,部分长指令被写在多行(其间以回车换行),安装配置时任何指令都不应该使用回车换行,可以使用反斜杆“/”换行或者让系统自动换行。

第一章 安装

1. 系统准备工作: 
·本系统需要的安装包:

beecrypt-4.1.2.tar.gz (Net-SNMP依赖文件)

net-snmp-5.4.2.1.tar.gz (Net-SNMP安装包)

解压各压缩包,使用 “tar -vzxf … ”指令解压。


2. 安装beecrypt 
·net-snmp安装时需要用到beecrypt,所以需要先安装。进入beecrypt解压目录执行以下指令: 
./configure --prefix=/usr 
默认是安装在/usr/local,我们需要安装在/usr目录下。若使用默认路径snmp可能找不到相关文件,需要另外建立符号链接。


·执行make与make install安装: 
make 
make install


注意:需要使用超级用户权限,否则安装过程会出错


3. 安装NET-SNMP 
·net-snmp用来获取目标机器的各种数据,可以直接使用,也可以通过MRTG画出图来。本系统直接使用net-snmp获取目标机器数据,不使用MRTG。

·假设本系统安装到以下位置:/ABC/soft/net-snmp 
进入snmp解压目录,执行以下指令: 
./configure --prefix=/ABC/soft/net-snmp --enable-mfd-rewrites 
--with-default-snmp-version=”2” --with-sys-location=”China” 
--with-logfile=”/ABC/log/snmpd.log” --with-persistent-directoiry=”/ABC/soft/snmp_persistent” (以上所有代码是一条指令)


·执行make 与 make install安装 
make 
make install

·安装过程中可能出现错误: cannot find –lelf

解决办法:#ln -s libelf.so.1 /usr/lib/libelf.so

第二章 配置

1. 配置snmpd.conf 
·将安装包中的EXAMPLE.conf复制到/ABC/soft/net-snmp/share/snmp下,并重命名为snmpd.conf。使用以下指令复制: 
cp EXAMPLE.conf /ABC/soft/net-snmp/share/snmp/snmpd.conf

·定义安全体 
在snmpd.conf中找到如下字段,修改为需要的参数。 
# sec.name source community

com2sec local localhost public

com2sec mynetwork IP地址 public


·参数简介: 
sec.name:安全体名称

source:定义请求的来源,在IP协议中,这个数据是IP地址。在net-snmp中用来对来源IP加以控制,但这个特性不是SNMP规定的,是net-snmp扩展的。 
community:共同体名称 
至此系统就可以使用了,其它参数使用默认值。更具体的配置请参考用户手册。 
·说明:对snmpd.conf的编辑只能用空格,不能用Tab键,否则会出错。 
每次改变snmpd.conf都必须重启snmp服务以使更改生效。


2. 启动snmp 
·每次改变snmpd.conf都必须重启snmp服务以使更改生效。 
·使用snmpd命令启动snmp守护进程,-c指定配置文件路径。 
本系统使用net-snmp,不使用系统自带的snmp,使用以下指令启动: 
/ABC/soft/net-snmp/sbin/snmpd -c /ABC/soft/net-snmp/share/snmp/snmpd.conf 
·若选择使用系统自带的snmp,可以使用以下指令启动:service snmpd start。但是以上的配置对此不起作用,需要另外的配置。


3. 测试snmp 
·启动snmp后可以使用以下指令测试snmp是否正常工作: 
snmpwalk -v 2c -c public localhost system 
这条指令用于查看本机系统信息,若正确返回信息则snmp正常工作。本文只介绍snmp的安装配置,关于指令的详细用法请参考用户手册。


附件

配置文件snmpd.conf简介

snmpd.conf的配置包括通道控制(Access Control)、系统联系人信息(System Contact Information)、进程检查(Process Check)、可执行脚本(Executables/Scripts)、磁盘检查(Disk Checks)、负载均衡检查(Load Average Checks)、可扩展部分(Extensible Sections)、通过控制(Pass Through Control)、其它等部分。一般情况下只需要修改Access Control就可以满足常规需求,其它使用默认配置。

通道控制配置(Access Control)配置简介

定义安全体名称 
sec.name:安全体名称 
source:定义请求的来源,在IP协议中,这个数据是IP地址。在net-snmp中用来对来源IP加以控制,但这个特性不是SNMP规定的,是net-snmp扩展的。 
community:共同体名称 

定义安全组 
第一个字段为安全组名称。 
sec.model:安全模式,可选值为v1/v2c/usm。 
sec.name:安全体名称 

定义视图 
第一个字段为视图名。 
incl/excl:对下面的MIB子树是包括还是排除。 
subtree:视图中涉及的MIB子树。 
mask:掩码 

向安全组授权相应的视图 
第一个字段为安全组名。 
context:上下文,v1、v2c中始终为空。

sec.model:安全模式,可选值为v1/v2c/usm。

sec.level:安全级别,可选值为auth/noauth/priv,v1、v2c中只能为noauth。

match:前缀,指定context如何与PDU中的context匹配,v3使用。

read:授权的读视图。

write:授权的写视图。

notif:授权的trap视图。 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值