Linux 源码编译安装 net-snmp-5.9.1 并配置使用 SNMPv3

详细介绍 Linux 系统下源码编译安装 net-snmp-5.9.1 的全流程,以及 SNMPv3 的完整配置、服务启动和功能验证方法,适配 CentOS/RHEL/Debian/Ubuntu 等主流发行版。

一、前置准备:安装依赖 + 解压源码

1. 安装编译依赖(必须)

net-snmp 编译依赖 C 编译器、OpenSSL(SNMPv3 加密必需)、Perl 等,执行对应系统命令:

bash 复制代码
# CentOS/RHEL/Fedora(yum 包管理器)
yum install -y gcc gcc-c++ make libtool autoconf automake openssl-devel perl perl-devel net-tools

# Debian/Ubuntu(apt 包管理器)
apt update && apt install -y gcc g++ make libtool autoconf automake libssl-dev perl perl-dev net-tools

2. 下载并解压 net-snmp-5.9.1 源码

bash 复制代码
# 方式1:官网下载(推荐,校验完整性)
wget https://sourceforge.net/projects/net-snmp/files/net-snmp/5.9.1/net-snmp-5.9.1.tar.gz

# 方式2:本地已有包,直接解压
tar -zxvf net-snmp-5.9.1.tar.gz
cd net-snmp-5.9.1  # 进入源码目录

二、编译安装:启用 SNMPv3 核心功能

1. 配置编译参数(核心:启用 SNMPv3 + OpenSSL 加密)

执行 ./configure 时必须开启 --with-openssl(SNMPv3 认证/加密依赖),推荐自定义安装路径避免覆盖系统默认:

bash 复制代码
./configure \
--prefix=/usr/local/net-snmp  # 安装根目录(后续所有文件在此)
--with-sys-contact="admin@example.com"  # 系统联系人(自定义)
--with-sys-location="IDC-Server-Room"  # 系统位置(自定义)
--with-default-snmp-version="3"  # 默认 SNMP 版本为 v3
--with-openssl=/usr/local/openssl  # 启用 OpenSSL,支持 SNMPv3 加密/认证(必须)
--enable-shared  # 编译共享库
--enable-static  # 编译静态库
--with-mib-modules="ucd-snmp/diskio"  # 启用磁盘 IO 监控模块(可选)
--disable-ipv6  # 无需 IPv6 则禁用(可选)

即:./configure --prefix=/usr/local/net-snmp --with-sys-contact="admin@example.com" --with-sys-location="IDC-Server-Room" --with-default-snmp-version="3" --with-openssl=/usr/local/openssl --enable-shared --enable-static --with-mib-modules="ucd-snmp/diskio" --disable-ipv6 
配置成功标志(终端输出):
复制代码
---------------------------------------------------------
Net-SNMP configuration summary:
  SNMP Versions Supported:    1 2c 3  # 确认包含 v3
  Network transport support:  Callback Unix Alias TCP UDP
  SNMPv3 Security Modules:    usm     # USM 是 SNMPv3 认证核心
  Crypto support:             OpenSSL # 确认启用 OpenSSL
---------------------------------------------------------

若配置报错(如 OpenSSL not found),需检查 openssl-devel/libssl-dev 是否安装。

2. 编译 + 安装

bash 复制代码
make -j $(nproc)  # 多核编译($(nproc) 自动获取 CPU 核心数,加速编译)
make install      # 安装到 --prefix 指定的目录

三、环境配置:让系统识别 net-snmp 命令

编译安装后,工具默认在 /usr/local/net-snmp/bin,需添加环境变量避免「命令找不到」:

bash 复制代码
# 临时生效(当前会话)
export PATH=/usr/local/net-snmp/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/net-snmp/lib:$LD_LIBRARY_PATH

# 永久生效(全局所有用户)
echo "export PATH=/usr/local/net-snmp/bin:\$PATH" >> /etc/profile
echo "export LD_LIBRARY_PATH=/usr/local/net-snmp/lib:\$LD_LIBRARY_PATH" >> /etc/profile
source /etc/profile  # 立即生效

四、SNMPv3 核心配置:创建用户 + 配置文件

SNMPv3 依赖「用户认证 + 加密」,需创建 SNMPv3 用户并配置 snmpd.conf(服务配置文件)。

1. 生成默认配置文件

bash 复制代码
# 创建配置文件目录(若不存在)
mkdir -p /usr/local/net-snmp/etc/snmp

# 生成基础配置文件(交互式,按提示回车即可,或自定义)
/usr/local/net-snmp/bin/net-snmp-config --create-snmpd-conf > /usr/local/net-snmp/etc/snmp/snmpd.conf

2. 创建 SNMPv3 用户(关键:认证 + 加密)

使用 net-snmp-create-v3-user 工具创建 SNMPv3 用户,支持两种安全级别:

  • noAuthNoPriv:无认证 + 无加密(测试用,不安全);
  • authPriv:认证 + 加密(生产推荐,需指定算法:SHA/AES 等)。
示例:创建生产级 SNMPv3 用户(authPriv 级别)
bash 复制代码
# 格式:net-snmp-create-v3-user -ro(只读) -A 认证密码 -a 认证算法 -X 加密密码 -x 加密算法 用户名
/usr/local/net-snmp/bin/net-snmp-create-v3-user \
-ro \                  # 只读权限(生产推荐,避免篡改)
-A "AuthPass@123" \    # 认证密码(自定义,复杂度越高越好)
-a SHA \               # 认证算法(SHA/SHA256/MD5,推荐 SHA)
-X "PrivPass@123" \    # 加密密码(自定义,可与认证密码不同)
-x AES \               # 加密算法(AES/DES,推荐 AES)
snmpv3user             # 自定义用户名(如 snmpv3user)

或者
# 手动编辑 snmpd.conf 添加 SNMPv3 用户(最稳妥)
cat >> /usr/local/net-snmp/etc/snmp/snmpd.conf << EOF
# SNMPv3用户配置(authPriv级别:SHA认证 + AES加密)
createUser snmpv3user SHA "AuthPass@123" AES "PrivPass@123"
# 赋予该用户只读权限
rouser snmpv3user default -V default
EOF

执行后,工具会自动将用户信息写入 snmpd.conf,无需手动修改。

3. 调整 snmpd.conf 权限(可选,增强安全)

bash 复制代码
chmod 600 /usr/local/net-snmp/etc/snmp/snmpd.conf  # 仅 root 可读写
chown root:root /usr/local/net-snmp/etc/snmp/snmpd.conf

五、启动 snmpd 服务 + 设置开机自启

1. 启动 snmpd 服务

bash 复制代码
# 启动命令(指定配置文件路径)
/usr/local/net-snmp/sbin/snmpd -c /usr/local/net-snmp/etc/snmp/snmpd.conf -Lsd

# 检查服务是否启动(无报错则成功)
ps -ef | grep snmpd | grep -v grep

输出示例(进程存在则正常):

复制代码
root      12345      1  0 10:00 ?        00:00:00 /usr/local/net-snmp/sbin/snmpd -c /usr/local/net-snmp/etc/snmp/snmpd.conf -Lsd

2. 设置开机自启(可选,生产推荐)

bash 复制代码
# 创建 systemd 服务文件
cat > /usr/lib/systemd/system/snmpd.service << EOF
[Unit]
Description=Net-SNMP SNMP Daemon
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/net-snmp/sbin/snmpd -c /usr/local/net-snmp/etc/snmp/snmpd.conf -Lsd
ExecReload=/bin/kill -HUP \$MAINPID
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF

# 重载 systemd + 设置开机自启 + 启动服务 (实在不行就用snmp命令启动)
systemctl daemon-reload
systemctl enable snmpd
systemctl start snmpd
systemctl status snmpd  # 检查状态(active (running) 则正常)

六、SNMPv3 功能验证:使用 snmpwalk 测试

通过 snmpwalk 发送 SNMPv3 请求,验证配置是否生效,核心命令格式:

bash 复制代码
snmpwalk -v 3 \
-u 用户名 \          # 步骤四创建的 SNMPv3 用户名
-l 安全级别 \        # noAuthNoPriv/authPriv/authNoPriv
-a 认证算法 \        # SHA/SHA256/MD5(与创建用户时一致)
-A 认证密码 \        # 与创建用户时一致
-x 加密算法 \        # AES/DES(与创建用户时一致)
-X 加密密码 \        # 与创建用户时一致
目标IP \            # 本地测试用 127.0.0.1
系统OID             # 如 1.3.6.1.2.1.1.1.0(系统描述)
即:
snmpwalk -v 3 -u snmpv3user -l authPriv -a SHA -A "AuthPass@123" -x AES -X "PrivPass@123" 127.0.0.1 1.3.6.1.2.1.1.1.0

示例1:测试 authPriv 级别(生产推荐)

bash 复制代码
snmpwalk -v 3 \
-u snmpv3user \
-l authPriv \
-a SHA \
-A "AuthPass@123" \
-x AES \
-X "PrivPass@123" \
127.0.0.1 \
1.3.6.1.2.1.1.1.0  # 系统描述 OID
成功输出示例:
复制代码
SNMPv2-MIB::sysDescr.0 = STRING: Linux localhost 3.10.0-1160.92.1.el7.x86_64 #1 SMP Tue Jun 20 11:48:01 UTC 2023 x86_64

示例2:测试 noAuthNoPriv 级别(仅测试)

若创建用户时未指定认证/加密(net-snmp-create-v3-user -ro snmpv3test),可执行:

bash 复制代码
snmpwalk -v 3 -u snmpv3test -l noAuthNoPriv 127.0.0.1 1.3.6.1.2.1.1.1.0

七、添加 SNMPv2c 配置

SNMPv2c 依赖「社区字符串(Community String)」作为简单认证(默认只读为 public,读写为 private),需先在 snmpd.conf 中添加 v2c 配置(默认可能被注释 / 缺失)。

步骤1:添加 SNMPv2c 配置到 snmpd.conf
bash 复制代码
# 编辑配置文件
vi /usr/local/net-snmp/etc/snmp/snmpd.conf

# 添加以下内容(允许本地/远程访问的社区字符串)
# 格式:rocommunity 社区字符串 允许访问的IP(0.0.0.0/0 允许所有IP,生产不推荐)
rocommunity public 127.0.0.1  # 本地只读访问(推荐)
# rocommunity public 192.168.1.0/24  # 允许指定网段访问(可选)
# rwcommunity private 127.0.0.1      # 本地读写访问(谨慎开启)
步骤2:重启 snmpd 服务(加载 v2c 配置)
bash 复制代码
pkill snmpd
/usr/local/net-snmp/sbin/snmpd -c /usr/local/net-snmp/etc/snmp/snmpd.conf -Lsd

执行 SNMPv2c 命令(示例)

SNMPv2c 的核心命令格式(以 snmpwalk 为例):

bash 复制代码
# 基本格式:snmpwalk -v 2c -c 社区字符串 目标IP OID
snmpwalk -v 2c -c public 127.0.0.1 1.3.6.1.2.1.1.1.0
常用 SNMPv2c 命令示例:
功能 命令示例
查看系统描述 snmpwalk -v 2c -c public 127.0.0.1 1.3.6.1.2.1.1.1.0
查看网络接口列表 snmpwalk -v 2c -c public 127.0.0.1 1.3.6.1.2.1.2.2.1.1
批量获取数据(v2c专属) snmpbulkwalk -v 2c -c public 127.0.0.1 1.3.6.1.2.1.2.2(效率比snmpwalk高)
获取单个OID值 snmpget -v 2c -c public 127.0.0.1 1.3.6.1.2.1.1.5.0(系统名称)
执行结果示例(成功):
复制代码
SNMPv2-MIB::sysDescr.0 = STRING: Linux localhost 3.10.0-1160.92.1.el7.x86_64 #1 SMP Tue Jun 20 11:48:01 UTC 2023 x86_64

八、常见问题排查

1. snmpwalk 提示「Timeout」

  • 检查 snmpd 服务是否启动(systemctl status snmpd);

  • 检查防火墙/SELinux 是否拦截 161 端口(SNMP 服务端口):

    bash 复制代码
    # 临时关闭防火墙(测试)
    systemctl stop firewalld  # CentOS
    ufw disable              # Ubuntu
    # 永久开放 161 端口
    firewall-cmd --add-port=161/udp --permanent && firewall-cmd --reload

2. 提示「Authentication failure」

  • 检查用户名、认证密码、加密密码是否与创建时一致;
  • 检查认证/加密算法是否匹配(如创建时用 SHA,测试时不能用 MD5)。

3. 编译时提示「Perl not found」

  • 重新安装 Perl 依赖:yum install perl perl-devel / apt install perl perl-dev

八、核心总结

  1. 编译时必须开启 --with-openssl,否则 SNMPv3 加密/认证功能不可用;
  2. SNMPv3 推荐使用 authPriv 级别(认证+加密),避免 noAuthNoPriv(不安全);
  3. 生产环境中,SNMPv3 用户密码需高复杂度,且配置文件需限制权限(600);
  4. 常用 OID 参考:
    • 系统描述:1.3.6.1.2.1.1.1.0
    • 系统名称:1.3.6.1.2.1.1.5.0
    • 接口流量:1.3.6.1.2.1.2.2.1.10(入流量)/ 1.3.6.1.2.1.2.2.1.16(出流量)。

最后,谢谢各位读者的耐心阅读,如有语句不通顺或者不准确的地方,还请指正!谢谢!( ^ _ ^ )

相关推荐
维核科技2 小时前
AI Agent从“玩具“进化成“劳动力“:2026年智能体商业化元年
运维·人工智能·服务器维修·gpu维修
RuiZN2 小时前
Muduo---Channel类
运维·服务器·c++
一直在努力学习的菜鸟2 小时前
阿里云2G2核的服务器可以做什么?
linux·运维
ShineWinsu2 小时前
对于Linux:自定义协议(基于TCP)实现网络计算器的解析
linux·网络·c++·网络协议·tcp/ip·面试·网络计算器
可涵不会debug2 小时前
【LangChain系列】 零基础入门实战:从环境搭建到 LCEL 链式完整 Demo 详解
运维·服务器·langchain·vibe coding
tedcloud1233 小时前
Orca 部署指南:开源 AI 推理服务的 Linux 部署实践
linux·运维·服务器·人工智能·开源·自动化·excel
公众号:fuwuqiBMC3 小时前
(转自“服务器BMC”)服务器BMC芯片——AST2800
运维·服务器
HiDev_3 小时前
【非标自动化】2、认识元器件(流量传感器)
运维·自动化
小生不才yz3 小时前
Linux设备与存储精读 · L01-03 | 验证环境:Android 设备 + 远程 Linux 服务器怎么分工练
linux