我有一个 PBX(VOIP 服务器),可以连接电话以拨打电话。我使用的 pbx 是Asterisk。该服务器未被使用,它的唯一目的是分析攻击。
PBX 服务并不重要,如果我有不同的服务,例如 mongodb,我相信互联网上的机器人会搜索漏洞来攻击该数据库。
无论如何,我正在分析所有到达我服务器的 UDP 端口 5060(asterisk 监听的端口)的数据包,到达的数据包如下所示:
IP (tos 0x0, ttl 113, id 654, offset 0, flags [none], proto UDP (17), length 521)
43.249.129.89.58255 > 171.21.78.225.5060: SIP, length: 493
REGISTER sip:54.84.215.2:5060 SIP/2.0
To: <sip:[email protected]>
From: <sip:[email protected]>;tag=824e5f4a7221279e4f7a
Via: SIP/2.0/UDP 10.4.1.117:58255;branch=z9hG4bK183d5a24-59ec-4f05-8325-747389112824;rport
Call-ID: e5f4a722128024e4f7a824
CSeq: 1 REGISTER
Contact: <sip:[email protected]:58255>
Expires: 3600
Max-Forwards: 70
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO
User-Agent: PolycomSoundPointIP SPIP_550 UA 3.3.2.0413
Content-Length: 0
该数据包来自机器人,因为我没有向我的服务器发送任何数据包。
请注意,该服务器的唯一目的是了解机器人如何工作并查看它们如何攻击我的服务器。我没有使用那个 PBX;因此,任何到达该服务器的请求都必须来自恶意机器人。每次我收到发送到端口 5060 的 UDP 数据包时,我都会阻止该 IP 地址。
现在我的问题是:
我已经运行该服务器一个月了,而且每隔一分钟左右我仍然会受到攻击。我已经屏蔽了超过 15,000 个 IP!互联网上有多少机器人?他们是否在更改源 IP 地址,这就是他们不断访问我的服务器的原因?如果他们能够更改源 IP,是因为我使用的是 UDP 协议吗?我应该使用 TCP 而不是 UDP 来解决这个问题吗?
同样有趣的是,来自不同 ip 的攻击如此相似。例如,他们使用与电话相同的用户代理,而攻击来自不同的 ip。就好像所有的机器人都有相同的代码。
一旦我解决了这个问题并了解了机器人的工作原理,我想在我的真实服务器上实施该解决方案。我没有为此使用真正的服务器,因为从坏数据包中过滤好数据包会很困难。一种解决方案是在我的防火墙上使用 ips 白名单,但我不希望我的用户必须进行一些额外形式的身份验证,特别是如果他们使用手机的服务,其 ip 地址可能会发生很大变化。
我现在明白了为什么人们试图尽可能多地关闭端口。就我而言,我想打开端口并阻止攻击者。我发现这是一场永无止境的战斗。
我为解决问题所做的是了解 iptables 的工作原理。我的规则是这样的:
有了这个规则,我最初只允许通过 TCP 连接到端口 5060。
如果电话尝试错误地连接到该端口,则该 ip 将被添加到 MyBlackList。如果是这种情况,攻击者将无法发出进一步的请求。
如果电话连接正确,它将被添加到 MyWhiteList。如果是这种情况,它将能够访问其他端口并拨打电话。如果将来它发出许多无效请求,它仍然可以添加到 MyBlackList 中。
使用这种方法后,我很少受到攻击。现在我只有 10 个 ips 被阻止而不是数千个。