我运行自己的 sip 服务器(星号)。显然,我的 sip 服务器允许在不先进行任何注册的情况下执行邀请。这导致对我的服务器的许多不成功的攻击。有没有办法只允许来自成功注册的客户的邀请请求?通过星号或iptables?
4 回答
您需要在 sip.conf 中将 allowguest 参数更改为 no。
检查下面的链接以获取有关星号安全性的更多提示:
到目前为止,我的研究告诉我,REGISTER 仅用于星号到达或转发 INVITES,而不是验证 INVITE 请求。当 INVITE 到来时,asterisk 会尝试检查给定的用户名,如果它是有效的,它会向客户端发送 407(需要身份验证)。然后客户端在响应中插入密码(加密)并将 INVITE2 发送到服务器。现在服务器对用户进行身份验证,当凭据匹配时,继续建立调用。
结论:INVITE 与 REGISTER 无关,因此我限制仅 REGISTERED 客户端发送 INVITE 的想法是不可能的。
作为一种解决方法,我编写了自己的脚本。来源在https://github.com/naidu/JailMe
考虑一个真正的会话边界控制器,当您被黑客入侵时,它会迅速收回成本。但是,如果您想要一个“足够好”的选项,请继续阅读:
有一个名为“string”的 iptables 模块,它将在数据包中搜索给定的字符串。在 SIP 的情况下,我们希望在来自任何给定地址的第一个数据包中看到“REGISTER”,因此将其与-m state --state NEW
或类似的东西结合起来。之后,我们希望保持连接以确保连接跟踪保持打开状态(通常 Asterisk 发送 OPTIONS,但它可以发送空 UDP)。万一客户端在 NAT 之后,您无论如何都需要这样做。
这不是理想的解决方案,因为 iptables 无法确定注册是否成功,但至少我们可以坚持其他人尝试注册。下面链接的答案之一显示了 iptables 中字符串模块的使用:
https://security.stackexchange.com/questions/31957/test-firewall-rules-linux
您还可以将 AGI 脚本放入您的拨号计划中,该脚本会进行一些额外的检查,可能会查看 IP 地址以及分机是否已注册……确保 INVITE 来自相同的源 IP。
Fail2Ban 是一种阻止不需要的流量的简单方法!fail2ban 检查系统日志中的失败尝试,如果在指定时间内来自某个远程 IP 的失败尝试太多(超过定义的阈值),则 Fail2Pan 将其视为攻击,然后将该 IP 地址添加到 iptables 以阻止来自它的任何类型的流量. 以下链接可以提供帮助
http://www.voip-info.org/wiki/view/Fail2Ban+(with+iptables)+And+Asterisk
http://www.markinthedark.nl/news/ubuntu-linux-unix/70-configure-fail2ban-for-asterisk-centos-5.html