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安全配置的两种方法(也可同一时候兼顾配置两种方法)的更多相关文章
- 调用init方法 两种方式 一个是浏览器方法 一个是 xml中手工配置(load-on-startup)
调用init方法 两种方式 一个是浏览器方法 一个是 xml中手工配置(load-on-startup)
- FMX有两种消息处理的实现方式,一种是用TMessageManager来实现自定义的消息,另外一种象TEdit中的实现,直接声明消息方法(firemonkey messaging)
看FMX代码,发现有两种消息处理的实现方式,一种是用TMessageManager来实现自定义的消息,另外一种象TEdit中的实现,直接声明消息方法. 早前,看过文章说TMessageManage ...
- 一种M2M业务的架构及实现M2M业务的方法
http://www.cnblogs.com/coryxie/p/3849764.html 技术领域 [0001] 本发明涉及通信技术领域,尤其涉及一种M2M业务的架构及实现M2M业务的方法. 背景技 ...
- resin4配置之一个resin下多个app的正确配置方法
可能是因为resin4出来不久的原因,很多人对一个resin配置多个app不是很了解,经过几个小时的研究,有了一些小的成果,在此分享一下: 在开发的时候很多人习惯了一个resin下配置多个app,习惯 ...
- 服务器文档下载zip格式 SQL Server SQL分页查询 C#过滤html标签 EF 延时加载与死锁 在JS方法中返回多个值的三种方法(转载) IEnumerable,ICollection,IList接口问题 不吹不擂,你想要的Python面试都在这里了【315+道题】 基于mvc三层架构和ajax技术实现最简单的文件上传 事件管理
服务器文档下载zip格式 刚好这次项目中遇到了这个东西,就来弄一下,挺简单的,但是前台调用的时候弄错了,浪费了大半天的时间,本人也是菜鸟一枚.开始吧.(MVC的) @using Rattan.Co ...
- 在JS方法中返回多个值的三种方法
在使用JS编程中,有时需要在一个方法返回两个个或两个以上的数据,用下面的几种方法都可以实现: 1 使用数组的方式,如下: <html> <head> <title> ...
- Android自定义“图片+文字”控件四种实现方法之 二--------个人最推荐的一种
http://blog.csdn.net/yanzi1225627/article/details/8633872 第二种方法也要新建一个图片+文字的xml布局文件,然后写一个类继承自LinearLa ...
- 介绍一种很棒的wince 如何替换系统声音的方法
Topic:介绍一种很棒的wince 如何替换系统声音的方法(作者:Baiduluckyboy) //------------------------------------------------- ...
- 在JS方法中返回多个值的三种方法(转载)
来源:https://www.cnblogs.com/gxsyj/p/6004574.html 在使用JS编程中,有时需要在一个方法返回两个个或两个以上的数据,用下面的几种方法都可以实现: 1 使用数 ...
随机推荐
- (转)金蝶KIS迷你版、标准版在查询数量金额明细账时提示“发生未知错误,系统当前操作被取消,请与金蝶公司联系”
金蝶KIS迷你版.标准版在查询数量金额明细账时提示“发生未知错误,系统当前操作被取消,请与金蝶公司联系” 2013-07-10 12:17:51| 分类: 金蝶专题|举报|字号 订阅 金 ...
- Mysql5.7多源复制,过滤复制一段时间后增加复制一个库的实现方法
多源复制如果是整个实例级别的复制,那不存在下面描述的情况. 如果是对其中一个或多个主实例都是过滤复制,并且运行一段时间后,想在这个源上再增加一个库怎么实现? 主1:192.168.1.10 330 ...
- CSS——改变浏览器滚动条样式
https://www.cnblogs.com/sun-rain/p/5789417.html
- centos上安装supervisor来管理dotnetcore等应用程序
supervisor 介绍: 这是一款用python编写的进程管理工具,可以守护他管理的所有进程,防止异常退出,以及提供一个可视化的web界面来手动管理,打开关闭重启各种应用,界面如下: 关于在cen ...
- (转) 淘淘商城系列——redis-desktop-manager的使用
http://blog.csdn.net/yerenyuan_pku/article/details/72849791 实际工作环境中,redis会安装在服务器上,我们想使用redis服务就要使用re ...
- HDU_1584_(DFS)
蜘蛛牌 Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- vue组件---组件注册
(1)组件名 在注册一个组件的时候,我们始终需要给它一个名字.比如在全局注册的时候我们已经看到了: Vue.component('my-component-name', { /* ... */ }) ...
- 03JavaScript运算符与表达式
JavaScript运算符与表达式 2.5运算符与表达式 2.5.1赋值运算符 运算符 意义 运算符 意义 = x=5 /= x=x/y += x=x+y %= 求余赋值 -= x=x-y *= x= ...
- 真机测试报错ERROR/AndroidRuntime: java.lang.RuntimeException: setParameters failed解决办法
这个错误是和调用相机摄像头相关的. 产生这个错误的原因主要在于代码控制分辨率的显示和真机测试分辨率不一样. 一:解决办法 WindowManager wm = (WindowManager) getS ...
- DH密钥交换算法
DH密钥交换算法:DH的全称为Diffie-Hellman ,该算法可以在需要安全传输的前提下,确定双方的对称密钥,该算法的核心在于双方的私钥没有进入网络传输流程,根据对方的公钥和己方的私钥,可以计算 ...