SNMP 查询 - 操作不允许

SNMP 查询 - 操作不允许

SNMP我正在开发一个通过(路由、接口、QoS策略等)读取大量数据的 API 。最近,我经历了随机的错误说明:

Operation not permitted

现在,我使用SNMP4J核心库,但无法真正确定错误来源。一些 Stackoverflow 问题表明操作系统无法打开足够数量的文件句柄,但增加该参数并没有多大帮助。

奇怪的是发生错误仅有的何时iptables启动并运行。

可能是防火墙阻止了一些流量?我尝试编写JUnit模仿应用程序逻辑的测试,但没有引发任何错误...

任何帮助都将不胜感激!谢谢!

IPTABLES

*nat
:PREROUTING ACCEPT [2:96]
:POSTROUTING ACCEPT [68:4218]
:OUTPUT ACCEPT [68:4218]
# route redirect za SNMP Trap i syslog
-A PREROUTING -i eth0 -p udp -m udp --dport 514 -j REDIRECT --to-ports 33514 
-A PREROUTING -i eth0 -p udp -m udp --dport 162 -j REDIRECT --to-ports 33162
COMMIT

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]

-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT

.....

# SNMP
-A INPUT -p udp -m state --state NEW -m udp --dport 161 -j ACCEPT 

# SNMP trap
-A INPUT -p udp -m state --state NEW -m udp --dport 162 -j ACCEPT 
-A INPUT -p udp -m state --state NEW -m udp --dport 33162 -j ACCEPT 

.....

-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

答案1

您的问题不是 100% 清楚,但我认为您的Operation not permitted错误来自客户端的 SNMP 库,意味着目标主机拒绝。如果您知道不同,请澄清。

您正在接受来自外部的 SNMP 连接,因此状态模块无济于事。通常,它用于在没有传出连接的情况下丢弃传入数据包。这不适用,因此您可能希望关闭状态。使用 CT --notrack 选项(请参阅 man iptables-extensions)。完成此操作后,您将希望在两个方向上都设置规则。

-I INPUT -p udp -m udp --dport 161 -j ACCEPT
-I OUTPUT -p udp -m udp --sport 161 -j ACCEPT #仅当你有某些输出被阻止时才需要

这也许能解决你的问题。

如果您想排除故障,那么 iptables 阻止连接可能有多种原因,而规则似乎应该允许这些原因。例如:

  1. 状态已超时
  2. 该州不适合州表

由于你似乎只使用 UDP 连接,因此没有真正的国家。这意味着来自您的客户端系统的数据包应该被您的规则接受,即使这是一个“新”连接。

你肯定想知道你的 iptables 在哪里丢弃了数据包。使用

sudo iptables --list  --verbose

查看哪些规则获取了数据包。为了获得更清晰的视图,您可以使用

sudo iptables --zero

清除计数器,然后检查是否有一条特定的行在错误发生后立即上升。然后您可以添加日志记录规则(例如,参见https://wiki.archlinux.org/index.php/iptables#Logging) 并准确查看哪个数据包在何处被丢弃。

此时您还可以查看系统日志并找到一些解释。

相关内容