如何阻止net-snmp的snmpd服务监听默认端口161?
根据你提供的调试日志,能看到snmpd确实加载了你指定的1610端口,但同时保留了默认的udp:127.0.0.1:161,这通常是由以下几个原因导致的,对应的解决方法如下:
1. 配置文件中存在多个agentaddress指令
Ubuntu系统的net-snmp默认配置文件(/etc/snmp/snmpd.conf)里通常会自带一行默认的监听配置:
agentAddress udp:127.0.0.1:161
如果你只是在配置文件末尾添加了自己的agentaddress dtlsudp:localhost:1610,而没有注释掉默认的那一行,net-snmp会将多个agentaddress的端口列表合并,导致默认的161端口仍然被监听。
解决方法:
打开你的snmpd.conf,找到默认的agentAddress行,用#注释掉,然后只保留你需要的监听配置:
# 注释掉默认的监听配置 # agentAddress udp:127.0.0.1:161 # 仅保留你的自定义监听端口 agentaddress dtlsudp:localhost:1610
2. 系统启动脚本附加了默认监听参数
Ubuntu的net-snmp通常会通过/etc/default/snmpd文件设置启动参数,如果该文件中的SNMPDOPTS包含了-agentaddress参数,会覆盖配置文件中的设置,或者追加默认端口。
解决方法:
打开/etc/default/snmpd,检查SNMPDOPTS变量,确保其中没有包含-agentaddress udp:127.0.0.1:161这类参数。如果有,删除该部分内容,保存后重启snmpd。
3. 启动命令强制指定默认端口(可选)
如果上面的方法都无效,你可以在启动snmpd时直接通过命令行参数强制覆盖所有监听端口,确保只加载你需要的端口:
snmpd -f -r -DALL -c snmpd.conf -agentaddress dtlsudp:localhost:1610
命令行中的-agentaddress参数会优先于配置文件中的设置,直接替换默认的端口列表。
验证结果
修改完成后,重启snmpd,然后用以下命令检查监听端口:
ss -tulpn | grep snmpd
如果输出中只有1610端口,说明配置生效了。
内容的提问来源于stack exchange,提问作者David Jones

