首页 > 代码库 > SNMP安全配置的两种方法(也可同一时候兼顾配置两种方法)
SNMP安全配置的两种方法(也可同一时候兼顾配置两种方法)
方法一(最简单安装):
安装 Net-SNMP
CentOS及其他RedHat系列产品提供了net-snmp的二进制包。我们能够直接从源里安装。
shell> yum install net-snmp net-snmp-devel net-snmp-utils
说明:net-snmp-devel是为了使用net-snmp-config, net-snmp-utils是为了使用snmpwalk。
配置 Net-SNMP
在笔者的试验环境下,CentOS下的net-snmp无法在selinux环境下正常使用v3。 假设您想使用snmp v3,请先禁用selinux。
shell> net-snmp-config --create-snmpv3-user -ro -A snmp@jiankongbao -a MD5 jiankongbao
以上命令,创建一个snmpv3用户,仅仅读,使用MD5。username为jiankongbao。password为snmp@jiankongbao。
注意:执行之前请先停用net-snmp服务。
shell> service snmpd stop
执行 Net-SNMP
执行 Net-SNMP 服务的方法比較简单,只是Net-SNMP服务的名字是snmpd。
shell> service snmpd start
您可能须要把它增加开机自己主动执行服务列表。
shell> chkconfig snmpd on
检測 Net-SNMP
我们能够使用 snmpwalk 来检測snmp服务是否正常开启。
shell> snmpwalk -v 3 -u jiankongbao -a MD5 -A "snmp@jiankongbao" -l authNoPriv 127.0.0.1 sysDescr
假设一切正常。就会返回正常结果。 有关snmpwalk的參数说明,请參见其man文档。
配置 防火墙
Net-SNMP 使用 udp 协议,161port。 同一时候,我们会从下面三个IP訪问您的server。
60.195.249.83自2012年2月21日起监控宝的这个IP不再使用了,假设实用监控宝的用户能够使用下列IP组合- 60.195.252.107
- 60.195.252.110
一个可能的配置文件是:
# iptables -A INPUT -i eth0 -p udp -s 60.195.249.83 --dport 161 -j ACCEPT 自2012年2月21日起,不再使用 iptables -A INPUT -i eth0 -p udp -s 60.195.252.107 --dport 161 -j ACCEPT iptables -A INPUT -i eth0 -p udp -s 60.195.252.110 --dport 161 -j ACCEPT
说明:以上仅仅是一个可能的配置。请您在写之前明确每一句话的含义,而不是直接复制。要不然假设这里异常的出现
-I INPUT -j DROP
时,您就仅仅能哭着骂我了,嘻嘻。
方法二:
二、snmp.conf文件介绍 (/etc/snmp/snmp.conf)
1.经常使用配置
community名字都不变,组名字也不变。仅仅加个view的范围,给他配置个权限。
name | incl/excl | subtree | mask(optional) | |
view | all | included | .1 | 80 |
view all included .1 80
access notConfigGroup "" any noauth exact systemview none none 改为
access notConfigGroup "" any noauth exact all none none
2.具体解释
# sec.name source community
com2sec notConfigUser default public
#定义community名称为 public。映射到安全名 notConfigUser。
# groupName securityModel securityName
group notConfigGroup v1 notConfigUser
group notConfigGroup v2c notConfigUser
#定义安全usernamenotConfigUser映射到notConfigGroup组。
# Third, create a view for us to let the group have rights to:
#定义一个view,来决定notConfigUser能够操作的范围。
# Make at least snmpwalk -v 1 localhost -c public system fast again.
#定义可查看的snmp的范围。
# name incl/excl subtree mask(optional)
view systemview included .1.3.6.1.2.1.1
view systemview included .1.3.6.1.2.1.25.1.1
# Finally, grant the group read-only access to the systemview view.
#给notConfigGroup组所定义view名 all 以仅仅读权限
#access MyROGroup "" any noauth 0 all none none
3 配置步骤
1)首选是定义一个共同体名(community)。
这里是public,及能够訪问这个public的username(sec name)。这里是notConfigUser。Public相当于用户notConfigUser的password:)
# sec.name source community
com2sec notConfigUser default public
2)定义一个组名(groupName)
这里是notConfigGroup。及组的安全级别。把notConfigGroup这个用户加到这个组中。
groupName securityModel securityName
group notConfigGroup v1 notConfigUser
group notConfigGroup v2c notConfigUser
3)定义一个可操作的范围(view)名
这里是all,范围是 .1
# name incl/excl subtree mask(optional)
view all included .1
4)定义notConfigUser这个组在all这个view范围内可做的操作,这时定义了notConfigUser组的成员可对.1这个范围做仅仅读操作。
# group context sec.model sec.level prefix read write notif
access notConfigGroup "" any noauth exact all none none
ok,这样我们的snmpd.conf文件就基本配成了
启动/关闭 重新启动:/etc/init.d/snmpd start/stop/restart
关闭进程:ps aux |grep snmp |grep -v grep |awk ‘{print $2}‘ |xargs kill
常见问题
错误1:
# snmpwalk -v 1 -c public localhost system
Cannot find module (IP-MIB): At line 0 in (none)
Cannot find module (IF-MIB): At line 0 in (none)
...
Cannot find module (SNMPv2-TM): At line 0 in (none)
system: Unknown Object Identifier (Sub-id not found: (top) -> system)
错误2:
qu@ubuntu:~$ snmpwalk -v 2c -c public 192.168.4.12
Timeout: No Response from 192.168.4.12
dunkel :
>
> The original problem was:
> "However if I run "snmpwalk -v 1 -c public 192.168.1.36 system" on the
> stable box, with 192.168.1.36 the IP address of the testing box, i get:
> Timeout: No Response from 192.168.1.36
>
> snmpd is up and running, I can ping both ways, there are no firewalls
> in place. What could be wrong?"
>
> The solution is:
> open snmpd.conf with your favourite editor and
> add these 2 lines:
> interface eth0
> agentaddress [ip address of your host]:[listening port - 161 is the default]
错误3:
sarge:/# snmpwalk -v 2c -c public localhost
Timeout: No Response from localhost
错误排除:
步骤1:
sarge:/# snmpd -f -Le
屏幕显示(net-snmpd的log文件里是相同内容)
Warning: no access control information configured.
It is unlikely this agent can serve any useful purpose in this state.
Run "snmpconf -g basic_setup" to help you configure the snmpd.conf file for this agent.
Error opening specified endpoint "udp:161"
Server Exiting with code 1
新建文件夹
拷贝现有snmpd.conf 到/root/.snmp/snmpd.conf
步骤2:
snmpd -f -Le -Dread_config
读配置文件,开头显示了默认的配置文件的路径。
sarge:/# snmpd -f -Le -Dread_config
read_config: reading premib configuration tokens
read_config: config path used: /nfsroot/cq8401/bin/net-snmp/etc/snmp:/nfsroot/cq8401/bin/net-snmp/sh
are/snmp:/nfsroot/cq8401/bin/net-snmp/lib/snmp:/root/.snmp:/var/net-snmp
中间显示了配置文件的内容。
首先查看在默认配置文件的路径中是否有你的配置文件。
假设有,再在配置文件里配置权限。
小技巧:能够使用snmpd -f -Le -Dread_config 命令来查看日志文件信息。排错。
snmpd命令的实用选项:
-c FILE 指定文件为配置文件
-C 不读取默认的配置文件
-d dump接收和发送SNMP数据包
-D TOKEN 对于给定的TOKEN(标志)打开调试信息 ( -Dmib_init)
-I [-]INITLIST 对于要初始化的MIB列表显示
-M DIRLIST 指定MIB库的路径
-V 显示具体信息
-Le 把错误信息输出到日志中
-Lf FILE 把错误信息输出到指定文件里
-m MIBLIST use MIBLIST instead of the default MIB list
或许在运行第四不步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
測试SNMP
1.查看port是否打开
netstat -ln | grep 161 |
2.安装SNMP測试工具
yum install net-snmp-utils |
3.本机測试SNMP数据(改动meidahua为配置的团体名(Community))
snmpwalk -v 2c -c meidahua localhost system |
4.远程測试SNMP数据(改动ip为serverip,snmpwalk命令须要安装net-snmp)
snmpwalk -v 2c -c meidahua ip system |
或者能够用法一中的 snmpwalk snmp账户password 登录 来检測snmp服务是否正常开启。IP切换成实际IP就可以。
shell> snmpwalk -v 3 -u jiankongbao -a MD5 -A "snmp@jiankongbao" -l authNoPriv 127.0.0.1 sysDescr
错误排除
防火墙禁止訪问
假设本地測试SNMP有数据,远程測试SNMP无数据则因为server防火墙禁止了外部訪问serverudp 161port,则:
改动 /etc/sysconfig/iptables (或者:/etc/sysconfig/iptables-config ) 。添加例如以下规则:
限制仅仅同意特定IP訪问使用例如以下改动方式:
# iptables -A INPUT -i eth0 -p udp -s 60.195.249.83 --dport 161 -j ACCEPT 自2012年2月21日起,不再使用 iptables -A INPUT -i eth0 -p udp -s 60.195.252.107 --dport 161 -j ACCEPT iptables -A INPUT -i eth0 -p udp -s 60.195.252.110 --dport 161 -j ACCEPT不限制IP泽使用下列方式改动防火墙
-A RH-Firewall-1-INPUT -p udp -m state --state NEW -m udp --dport 161 -j ACCEPT |
重新启动iptables
/etc/init.d/iptables restart |
SNMPport安全配置-改动默认port:
最简单的实现例如以下:
/usr/sbin/snmpd tcp:port号 或/usr/sbin/snmpd udp:port号
或vi /etc/rc.d/init.d/snmpd
改动前 OPTIONS="-Lsd -Lf /dev/null -p /var/run/snmpd.pid -a"
改动后 OPTIONS=" tcp:9999 -Lsd -Lf /dev/null -p /var/run/snmpd.pid -a"
/etc/rc.d/init.d/snmpd start即可了。
Linux SNMP安全加固设置
下面的演示样例採用SUSE10 Linux环境,但它相同适用于其他Linux发行版。
编译和安装
首先我们须要下载Net-SNMP的源码,选择一个版本号,比方5.7.1,地址例如以下:
http://sourceforge.net/projects/net-snmp/files/net-snmp/5.7.1/
接下来对下载的源码包进行解压缩,例如以下:
suse10:~ # tar xzvf net-snmp-5.7.1.tar.gz
然后通过configure来生成编译规则,例如以下:
suse10:~ # cd net-snmp-5.7.1 suse10:~ # ./configure --prefix=/usr/local/snmp --with-mib-modules=ucd-snmp/diskio
注意。以上的
--with-mib-modules=ucd-snmp/diskio
选项,能够让server支持磁盘I/O监控。
接下来,開始编译和安装:
suse10:~ # make suse10:~ # make install
到如今为止,我们已经有了能够执行的SNMP代理程序,它位于/usr/local/snmp/sbin/snmpd,在启动它之前。我们还要进行一些必要的设置。
设置安全的验证方式
将SNMP代理程序暴露给网络上的全部主机是非常危急的,为了防止其他主机訪问你的SNMP代理程序,我们须要在SNMP代理程序上增加身份验证机制。SNMP支持不同的验证机制。这取决于不同的SNMP协议版本号,监控宝眼下支持v2c和v3两个版本号,当中v2c版本号的验证机制比較简单。它基于明文password和授权IP来进行身份验证,而v3版本号则通过username和password的加密传输来实现身份验证,我们建议使用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 自2012年2月21日起。此ip不再使用 rocommunity jiankongbao 60.195.252.107 rocommunity jiankongbao 60.195.252.110 # 假设您使用的是插件 此处的ip 应该安装採集器的机器的ip
注意:加入用户时,请确保snmp服务没有执行,否则无法加入。
注意,这里的“rocommunity”表示这是一个仅仅读的訪问权限,监控宝仅仅能够从你的server上获取信息,而不能对server进行不论什么设置。
紧接着的“jiankongbao”相当于password。非常多平台喜欢使用“public”这个默认字符串。这里的“jiankongbao”仅仅是一个样例,你能够设置其他字符串作为password。
最右边的“60.195.249.83,60.195.252.107,60.195.252.110”代表指定的监控点IP,这些IP地址是监控宝专用的监控点,这意味着仅仅有监控宝有权限来訪问你的SNMP代理程序。
所以,以上这段配置中,仅仅有“jiankongbao”是须要你进行改动的,同一时候在监控宝上加入server的时候。须要提供这个字符串。
v3
当然。我们建议您使用v3版本号来进行身份验证。对于一些早期版本号的Linux分发版。其内置的SNMP代理程序可能并不支持v3,所以我们建议您依照前边介绍的方法。编译和安装最新的Net-Snmp。
v3支持还有一种验证方式,须要创建一个v3的帐号。我们相同改动下面配置文件:
suse10:~ # vi /usr/local/snmp/share/snmp/snmpd.conf
然后加入一个仅仅读帐号,例如以下:
rouser jiankongbao auth
注意:加入用户时,请确保snmp服务没有执行,否则无法加入。
能够看到。在v3中,“rouser”用于表示仅仅读帐号类型,随后的“jiankongbao”是指定的username,后边的“auth”指明须要验证。
接下来,我们还要加入“jiankongbao”这个用户。这就是v3中的特殊机制,我们打开下面配置文件:
suse10:~ # vi /var/net-snmp/snmpd.conf
这个文件会在snmpd启动的时候被自己主动调用,我们须要在它里边加入创建用户的指令,例如以下:
createUser jiankongbao MD5 mypassword
这行配置的意思是创建一个名为“jiankongbao”的用户。密码为“mypassword”。而且用MD5进行加密传输。这里要提醒的是:
password至少要有8个字节
这是SNMP协议的规定。假设小于8个字节。通信将无法进行。
值得注意的是,一旦snmpd启动后,出于安全考虑,以上这行配置会被snmpd自己主动删除,当然。snmpd会将这些配置以密文的形式记录在其他文件里,又一次启动snmpd是不须要再次加入这些配置的,除非你希望创建新的用户。
以上配置中的username、password和加密方式,在监控宝加入server的时候须要加入。
启动SNMP代理程序
经过配置后,如今能够启动snmpd,例如以下:
/usr/local/snmp/sbin/snmpd
假设要关闭。则能够直接kill这个进程,例如以下:
killall -9 snmpd
增强的安全机制
有了以上的验证机制。你就能够放心的使用SNMP代理了。可是,假设你的SNMP代理程序版本号较低。可能会有一些别实用心的破坏者利用一些固有的漏洞进行破坏。比方发送较长的数据导致SNMP代理程序内存泄漏或者拒绝服务等,为此。你还能够使用防火墙(iptables)来进行增强的安全过滤。
在Linux中,我们用iptables来实现防火墙,普通情况下,除了流入指定port的数据包以外,我们应该将其他流入的IP数据包抛弃。
你可能已经配置了一定的防火墙规则,那么仅仅要添加针对SNMP的规则就可以。
SNMP代理程序默认监控在udp161port,为你的iptables添加下面规则:
# iptables -A INPUT -i eth0 -p udp -s 60.195.249.83 --dport 161 -j ACCEPT 自2012年2月21日起,不再使用 iptables -A INPUT -i eth0 -p udp -s 60.195.252.107 --dport 161 -j ACCEPT iptables -A INPUT -i eth0 -p udp -s 60.195.252.110 --dport 161 -j ACCEPT
以上设置中如果server外网网卡是eth0,你能够依据实际情况来改动。
这样一来,仅仅有监控宝的专用监控器能够发送UDP数据包到你的server的161port。与SNMP代理程序进行通信。
SNMP安全配置的两种方法(也可同一时候兼顾配置两种方法)