CentOS 5.5 上的 iptables;我想允许来自远程机器的 snmp 查询

CentOS 5.5 上的 iptables;我想允许来自远程机器的 snmp 查询

我正在尝试允许将 snmp trap 发送到远程机器进行 cacti 绘图。这是我现在拥有的,但它不起作用:

链输入(政策删除)
接受 udp -- 0.0.0.0/0 xxxx udp dpt:161
接受 udp -- 0.0.0.0/0 xxxx udp dpt:162
接受 udp -- 0.0.0.0/0 xxxx udp spts:1023:2999

最后一行是有人建议的,但没有帮助。我以为这会很简单,我也在谷歌上搜索了很多次,但还是遇到了麻烦。

谢谢您的指点!

编辑:这是 iptables -L -n -v 的输出:

链输入(策略丢弃 0 个数据包,0 字节)
 pkts 字节数 目标 协议 选择加入 退出 源 目标         
    0 0 接受 udp -- * * 0.0.0.0/0 184.105.134.14 udp spts:1023:2999
    0 0 接受 udp -- * * 0.0.0.0/0 184.105.135.57 udp spts:1023:2999
    0 0 接受 udp -- * * 0.0.0.0/0 184.105.135.57 udp dpt:161
    0 0 接受 udp -- * * 0.0.0.0/0 184.105.134.14 udp dpt:161
 2678 195K fail2ban-SSH tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
 2585 188K fail2ban-ssh tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
37790 5151K 接受全部 -- lo * 0.0.0.0/0 0.0.0.0/0           
    0 0 全部拒绝 -- * * 67.210.96.146 0.0.0.0/0 拒绝,ICMP 端口不可达
 2585 188K 接受 tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
   27 8856 删除 udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:67
    0 0 删除 udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:68
 229K 77M 接受全部 -- * * 0.0.0.0/0 0.0.0.0/0 状态相关,已建立
    0 0 接受 tcp -- * * 0.0.0.0/0 0.0.0.0/0 状态 新 tcp dpt:20
    0 0 接受 tcp -- * * 0.0.0.0/0 0.0.0.0/0 状态 新 tcp dpt:21
 5096 256K 接受 tcp -- * * 0.0.0.0/0 0.0.0.0/0 状态 新 tcp dpt:25
  695 44360 接受 tcp -- * * 0.0.0.0/0 0.0.0.0/0 状态 新 tcp dpt:53
  125 6648 接受 tcp -- * * 0.0.0.0/0 0.0.0.0/0 状态 新 tcp dpt:80
    4 160 接受 tcp -- * * 0.0.0.0/0 0.0.0.0/0 状态 新 tcp dpt:123
   10 600 接受 tcp -- * * 0.0.0.0/0 0.0.0.0/0 状态 新 tcp dpt:443
    0 0 接受 tcp -- * * 0.0.0.0/0 0.0.0.0/0 状态 新 tcp dpt:514
   63 3780 接受 tcp -- * * 0.0.0.0/0 0.0.0.0/0 状态 新 tcp dpt:110
    0 0 接受 tcp -- * * 0.0.0.0/0 0.0.0.0/0 状态 新 tcp dpt:143
    0 0 接受 tcp -- * * 0.0.0.0/0 0.0.0.0/0 状态 新 tcp dpt:220
    0 0 接受 tcp -- * * 0.0.0.0/0 0.0.0.0/0 状态 新 tcp dpt:993
    0 0 接受 udp -- * * 0.0.0.0/0 0.0.0.0/0 状态 新 udp dpt:143
    0 0 接受 udp -- * * 0.0.0.0/0 0.0.0.0/0 状态 新 udp dpt:220
    0 0 接受 udp -- * * 0.0.0.0/0 0.0.0.0/0 状态 新 udp dpt:993
    3 144 接受 tcp -- * * 0.0.0.0/0 0.0.0.0/0 状态 新 tcp dpt:995
   50 3088 接受 tcp -- * * 0.0.0.0/0 0.0.0.0/0 状态 新 tcp dpt:587
    0 0 接受 tcp -- * * 0.0.0.0/0 0.0.0.0/0 状态 新 tcp dpt:873
    0 0 接受 tcp -- * * 0.0.0.0/0 0.0.0.0/0 状态 新 tcp dpt:5038
    1 40 接受 tcp -- * * 0.0.0.0/0 0.0.0.0/0 状态 新 tcp dpts:32768:65535
    0 0 接受 udp -- * * 0.0.0.0/0 0.0.0.0/0 状态 新 udp dpt:20
    0 0 接受 udp -- * * 0.0.0.0/0 0.0.0.0/0 状态 新 udp dpt:21
20839 1442K 接受 udp -- * * 0.0.0.0/0 0.0.0.0/0 状态 新 udp dpt:53
86707 6588K 接受 udp -- * * 0.0.0.0/0 0.0.0.0/0 状态 新 udp dpt:123
    1 48 接受 tcp -- * * 0.0.0.0/0 0.0.0.0/0 状态 新 tcp dpt:10000
 4244 619K 接受 icmp -- * * 0.0.0.0/0 0.0.0.0/0 状态 新
18386 1220K LOGDROP 全部 -- * * 0.0.0.0/0 0.0.0.0/0           

链转发(策略接受 0 个数据包,0 字节)
 pkts 字节数 目标 协议 选择加入 退出 源 目标         
    0 0 接受全部 -- * * 0.0.0.0/0 0.0.0.0/0 状态 RELATED,ESTABLISHED

链输出(策略接受 0 个数据包,0 字节)
 pkts 字节数 目标 协议 选择加入 退出 源 目标         
    0 0 接受 udp -- * * 0.0.0.0/0 184.105.134.14 udp dpt:161
    0 0 接受 udp -- * * 0.0.0.0/0 184.105.134.14 udp dpt:162
    0 0 接受 udp -- * * 0.0.0.0/0 184.105.135.57 udp dpt:161
    0 0 接受 udp -- * * 0.0.0.0/0 184.105.135.57 udp dpt:162
37790 5151K 接受全部 -- * lo 0.0.0.0/0 0.0.0.0/0           
 279K 82M 接受全部 -- * eth0 0.0.0.0/0 0.0.0.0/0 状态相关,已建立
29306 2262K 接受全部 -- * eth0 0.0.0.0/0 0.0.0.0/0           

Chain LOGDROP (1 引用)
 pkts 字节数 目标 协议 选择加入 退出 源 目标         
18386 1220K LOG 全部 -- * * 0.0.0.0/0 0.0.0.0/0 LOG 标志 0 级别 4 前缀“\'*IPT*\''
18386 1220K 全部删除 -- * * 0.0.0.0/0 0.0.0.0/0           

Chain fail2ban-SSH (1 引用)
 pkts 字节数 目标 协议 选择加入 退出 源 目标         
 2585 188K 返回全部 -- * * 0.0.0.0/0 0.0.0.0/0           

链 fail2ban-ssh (1 引用)
 pkts 字节数 目标 协议 选择加入 退出 源 目标         
 2585 188K 返回全部 -- * * 0.0.0.0/0 0.0.0.0/0           

答案1

据我理解,您的问题您希望这台机器(我们在其上使用 iptables 进行对抗的机器)能够向远程服务器发送陷阱,对吗?

在这种情况下,有趣的部分是 OUTPUT 链,因为它决定了源自盒子的数据包的命运。

调试第一步:关闭 iptables 并验证陷阱发送是否有效。如果无效,则问题不在于 SNMP 陷阱源的防火墙配置。在 iptables 停止工作之前,请勿继续执行第二步。

调试第二步:grep -i /etc/services显示大量与各种 SNMP 相关的条目。您可以阅读文档并找出您的软件在哪些端口上进行通信,或者发挥自己的聪明才智。假设后者在 OUTPUT 链配置的末尾添加一行,将所有内容发送到 LOGDROP 链。然后启动 iptables,验证规则是否存在于 OUTPUT 链中并创建要发送的陷阱。然后查看您的 /var/log/messages,您将看到由 LOGDROP 生成的条目,它将告诉您,从本地计算机到远程计算机使用协议 UDP 发送到端口 XXX 的数据包已被丢弃。Bingo!

调试步骤三。在 OUTPUT 链规则(LOGDROP 条目上方)中添加一行,接受通过调试步骤三中确定的端口 XXX( )-p udp向远程服务器()发送的 UDP 数据包() 。验证( )规则是否存在。发送一个陷阱并查看它是否安全到达目的地。如果没有到达,您的软件可能在多个端口上进行通信,但随后转到调试步骤二。在病理情况下,您应该确定软件正在使用大型(数十、数百……)端口,并且如果您的安全策略允许,您可能只允许从此框到远程计算机的所有(或所有 UDP)传出流量。-d <IP_ADDRESS>--dport XXXiptables -L -n -v

利润 ;)

答案2

我从 INPUT 规则中删除了特定的 IP 地址,只向全世界开放了 161 和 162 udp,现在就可以正常工作了。所以这告诉我,应该接收陷阱的人给了我错误的机器 IP 地址。哎呀!谢谢大家,感谢你们尝试帮助解决我没有考虑到的变量问题。

丹尼尔

相关内容