Linux

啟用 IPTables 時無法建立出站 SNMP 連接

  • June 14, 2020

我有一堆配置了 windows SNMP 代理的 windows 伺服器。每台伺服器都有四個 IP 地址,SNMP 監聽所有這些地址。

我的監控伺服器(它是帶有 net-snmp 5.3.2.2 的 Centos 5.5 32 位)有些奇怪。如果我已經iptables關閉,那麼我在任何這些伺服器上的任何 IP 地址上執行 snmp 查詢都沒有問題。

如果我打開 IPtables,那麼我只能查詢每台伺服器上似乎只有一個特定 IP 地址的內容。snmpget只是Timeout: No Response from x.x.x.x超時。

關於允許我連接到哪些 IP 地址,這種行為沒有模式。但每台機器只有一個 IP 地址。

這是我的 iptables 配置:

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT

-A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT

-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

-A RH-Firewall-1-INPUT -s 172.16.3.0/24 -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -i lo -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

-A RH-Firewall-1-INPUT -s 172.16.3.0/24 -m state --state NEW -m tcp -p tcp --dport 5668 -j ACCEPT
-A RH-Firewall-1-INPUT -i lo -m state --state NEW -m tcp -p tcp --dport 5668 -j ACCEPT

-A RH-Firewall-1-INPUT -s 172.16.3.0/24 -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -i lo -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

-A RH-Firewall-1-INPUT -s 172.16.3.0/24 -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
-A RH-Firewall-1-INPUT -i lo -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT

-A RH-Firewall-1-INPUT -s 172.16.3.0/24 -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
-A RH-Firewall-1-INPUT -i lo -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT

我可以毫無問題地將出站連接到任何其他伺服器,例如使用wget抓取 RPM。

我確實嘗試將其添加為最後的手段,但也沒有任何樂趣:

-A OUTPUT -p udp -s 0/0 --sport 1024:65535 -d 0/0 --dport 161:162 -m state --state NEW,ESTABLISHED -j ACCEPT
-A INPUT -p udp -s 0/0 --sport 161:162 -d 0/0 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT

這是來自的輸出iptables -L

鏈輸入(策略接受)
目標 prot opt 源目標
RH-Firewall-1-INPUT all -- 任何地方任何地方
接受 udp -- 任何地方 udp spts:snmp:snmptrap dpts:1024:65535 state ESTABLISHED

Chain FORWARD(政策接受)
目標 prot opt 源目標
RH-Firewall-1-INPUT all -- 任何地方任何地方

鏈輸出(策略接受)
目標 prot opt 源目標
接受 udp -- 隨時隨地 udp spts:1024:65535 dpts:snmp:snmptrap state NEW,ESTABLISHED

鏈 RH-Firewall-1-INPUT(2 個參考)
目標 prot opt 源目標
接受所有——任何地方的任何地方
接受 icmp -- 任何地方 任何地方 icmp 任何地方
接受 udp -- 任何地方 224.0.0.251 udp dpt:mdns
接受所有 - 任何地方任何地方狀態相關,已建立
接受 tcp -- 172.16.3.0/24 任何狀態新的 tcp dpt:ssh
接受 tcp -- 任何地方的任何地方都有新的 tcp dpt:ssh
接受 tcp -- 172.16.3.0/24 任何狀態新 tcp dpt:5668
接受 udp -- 172.16.3.0/24 任何狀態新的 udp dpt:5668
接受 tcp -- 任何地方的任何地方都有新的 tcp dpt:5668
接受 udp - 任何地方的任何地方狀態新的 udp dpt:5668
接受 tcp -- 172.16.3.0/24 任何狀態新的 tcp dpt:http
接受 tcp -- 任何地方的任何地方都有新的 tcp dpt:http
接受 tcp -- 172.16.3.0/24 任何狀態新的 tcp dpt:https
接受 tcp -- 任何地方的任何地方都有新的 tcp dpt:https
接受 tcp -- 172.16.3.0/24 任何狀態新的 tcp dpt:mysql
ACCEPT tcp -- 任何地方狀態 NEW tcp dpt:mysql
REJECT all - 任何地方都拒絕 - 使用 icmp-host-prohibited

你必須把

ACCEPT     udp  --  anywhere             anywhere            udp spts:snmp:snmptrap dpts:1024:65535 state ESTABLISHED

之前RH-Firewall-1-INPUT因為RH-Firewall-1-INPUT規則有REJECT行尾,iptables從上往下讀。

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
1 RH-Firewall-1-INPUT  all  --  anywhere             anywhere
2 ACCEPT     udp  --  anywhere             anywhere            udp spts:snmp:snmptrap dpts:1024:65535 state ESTABLISHED

如果要使用命令行添加,可以使用:

iptables -I OUTPUT 1 -p udp -s 0/0 --sport 1024:65535 -d 0/0 --dport 161:162 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -I INPUT 1 -p udp -s 0/0 --sport 161:162 -d 0/0 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT

它應該是這樣的:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
1 ACCEPT     udp  --  anywhere             anywhere            udp spts:snmp:snmptrap dpts:1024:65535 state ESTABLISHED
2 RH-Firewall-1-INPUT  all  --  anywhere             anywhere

引用自:https://serverfault.com/questions/276117