如何让RHEL7的防火墙的SNMP连接通过?
当我在计算机上执行此命令时:
systemctl stop firewalld
所有 SNMP 数据包均顺利通过。当我重新启动防火墙时,所有数据包都被阻止。当然,我在防火墙运行的情况下尝试了几种配置,例如:
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 161 -j ACCEPT
或者
firewall-cmd --zone=public --add-port=161/tcp --permanent
我没有收到任何错误消息,但 SNMP 仍处于超时状态。
答案1
正确的方法是将 SNMP 配置文件添加到firewalld。使用 UDP 161 而不是 TCP
vim /etc/firewalld/services/snmp.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>SNMP</short>
<description>SNMP protocol</description>
<port protocol="udp" port="161"/>
</service>
那么你应该重新加载你的防火墙
firewall-cmd --reload
然后您需要将服务添加到您的公共区域
firewall-cmd --zone=public --add-service snmp --permanent
然后最后再次重新加载防火墙
firewall-cmd --reload
答案2
SNMP 是 udp 与 tcp 的对比。更改规则中的协议,它应该可以工作。
答案3
您需要打开 161/udp 端口(而不是 tcp):
firewall-cmd --zone=public --add-port=161/udp --permanent
firewall-cmd --reload
或者使用这些命令创建一个新的 SNMP 服务(改编自文档 - 操作方法 - 添加服务 |防火墙):
firewall-cmd --permanent --new-service=snmp
firewall-cmd --permanent --service=snmp --set-description="SNMP protocol"
firewall-cmd --permanent --service=snmp --set-short=SNMP
firewall-cmd --permanent --service=snmp --add-port=161/udp
firewall-cmd --permanent --service=snmp --add-protocol=udp
然后使用您全新的 SNMP 服务:
firewall-cmd --zone=public --add-service snmp --permanent
firewall-cmd --reload