黑客绕过 iptables

黑客绕过 iptables

(从 SO 移出)

我有 iptables 保护 sip 服务器。它会阻止除我专门打开的 IP 之外的所有 IP,而且它似乎对几乎所有人都有效。我已经从许多不在白名单中的 IP 地址进行了测试,它们都被丢弃了,这是理所当然的。

但是,我遇到了一个似乎能够绕过 iptables 规则的“黑客”。他的探测 INVITE 成功通过,我不知道他是如何做到的,甚至不知道这是否可能。十年来我从未见过这种情况。

我想这肯定是我做了什么事,但我看不出来。

iptables 是这样创建的(MYIP 在顶部定义 - 已删除):

iptables -F
iptables -X
iptables -N ALLOWEDSIP
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp -d $MYIP --dport 22 -j ACCEPT
iptables -t filter -A INPUT -j ALLOWEDSIP

# This is my white list.
iptables -A ALLOWEDSIP -j RETURN

现在,ALLOWEDSIP 中没有任何内容,我应该能做的就是 SSH 接入(我可以)。如果我向它发出调用,它们都会被丢弃。但 wireshark 向我显示了以下内容(我的 IP 被删除):

89.163.146.25 -> x.x.x.x SIP/SDP 805 Request: INVITE sip:[email protected] |
x.x.x.x -> 89.163.146.25 SIP 417 Status: 100 Giving a try |
x.x.x.x -> 89.163.146.25 SIP 875 Status: 407 Proxy Authentication Required |

他的电话打到了我的交换机上,虽然最终被 ACL 拒绝,但根本就不应该到达那里。其他电话都打不通。我抓狂了。有人知道吗?

为了完整起见,这里是 iptables -L 的结果:

# iptables -L --line-numbers -v
Chain INPUT (policy DROP 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination
1       10   640 ACCEPT     all  --  any    any     anywhere             anywhere             state RELATED,ESTABLISHED
2        0     0 ACCEPT     all  --  lo     any     anywhere             anywhere
3        0     0 ACCEPT     tcp  --  any    any     anywhere             <redacted>.com  tcp dpt:6928
4        0     0 ALLOWEDSIP  all  --  any    any     anywhere             anywhere

Chain FORWARD (policy DROP 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 6 packets, 544 bytes)
num   pkts bytes target     prot opt in     out     source               destination

Chain ALLOWEDSIP (1 references)
num   pkts bytes target     prot opt in     out     source               destination
1        0     0 RETURN     all  --  any    any     anywhere             anywhere

编辑:刚刚从 wireshark 上看到这个。他们是不是在做一些可怕的事情,比如以其他方式建立,而不是按照既定的规则行事?也许他们在利用 RELATED 中的一些漏洞?

89.163.146.25 -> <redacted> RTCP 806 Source port: tag-pm  Destination port: sip

编辑 2:UDP 是这里的关键。当我将 OpenSIPS 设置为仅侦听 TCP 时,问题似乎消失了。尽管他们发送了更多“tag-pm”消息,但他们的尝试都无法通过。但这并不能解释为什么数据包甚至会到达 opensips。iptables 应该先阻止它们。我很想知道我在这里做错了什么。

编辑 3:如果我删除 RELATED,我将停止回复他们,所以这与此有关。但我认为我需要 related。有什么解决方法吗?

答案1

对于其如何工作,唯一合理的解释是,有问题的 UDP 数据报以某种方式通过了--state ESTABLISHED,RELATED

鉴于 UDP 是一种无状态协议,我怀疑该state模块是否对其进行了有效的跟踪。

为了解决这个问题,我将状态检查限制在 TCP 协议上,方法如下:

-A INPUT -m tcp -m state -p tcp --state ESTABLISHED,RELATED -j ACCEPT`

并使用 UDP 协议进行预过滤ALLOWEDSIP(最好也使用目标端口):

iptables -t filter -A INPUT -m udp -p udp --dport 5060 -j ALLOWEDSIP

答案2

你可以使用 nullroute。这应该可以绕过 iptables。

route add 89.163.146.25 gw 127.0.0.1 lo

核实

netstat -nr

或者

route -n

相关内容