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 使用数 ...
随机推荐
- PHP——基本使用(一)
Apache安装与配置 install 下载地址:https://www.apachelounge.com/download/,选择2.4.33版本64位 将程序解压到一个英文目录下,以管理身份打开c ...
- C# 调用带有输出参数的分页存储过程
一.创建带有输出参数的分页存储过程 use StudentMISDB go select * from Course alter table Course go --update Course set ...
- Codeforces_766_D_(并查集)
D. Mahmoud and a Dictionary time limit per test 4 seconds memory limit per test 256 megabytes input ...
- CSS 类名的问题
以下以数字开头的 CSS 类名不会生效: .1st{ color: red; } 一个合法的 CSS 类名必需以下面其中之一作为开头: 下划线 _ 短横线 - 字母 a-z 然后紧跟其他 _,- 数字 ...
- 学习SpringBoot中遇见的坑
1. 在搭建SpringBoot HelloWorld 时项目结构应该这样: 而不能这样: 否则访问时出现错误页面: 原因:此时还不知道,先记录下来. --已解决2018/12/11,因为Spring ...
- 攻破javascript面试的完美指南【译】
攻破javascript面试的完美指南(开发者视角) 0. 前言 本文适合有一定js基础的前端开发人员阅读.原文是我google时无意发现的, 被一些知识点清晰的解析所打动, 决定翻译并记录下来.这个 ...
- poj3061 Subsequence【尺取法】
Description A sequence of N positive integers (10 < N < 100 000), each of them less than or eq ...
- java开发掌握的Linux命令
linux命令是对Linux系统进行管理的命令.对于Linux系统来说,无论是中央处理器.内存.磁盘驱动器.键盘.鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命 ...
- Turtle-可视化界面画圣诞树
圣诞节(Christmas)又称耶诞节.耶稣诞辰,译名为“基督弥撒”,是西方传统节日,起源于基督教,在每年公历12月25日.弥撒是教会的一种礼拜仪式.圣诞节是一个宗教节,因为把它当作耶稣的诞辰来庆祝, ...
- 洛谷 3285 [JLOI2014]松鼠的新家
[题解] 给出一条路径,问树上的点被经过了几次. 显然树剖之后树上差分就好了. #include<cstdio> #include<algorithm> #define N 3 ...