我运行自己的sip服务器(星号)。显然我的sip服务器允许执行INVITE而不先进行任何REGISTER。这会导致我的服务器遭受大量不成功的攻击。有没有办法只允许来自成功注册的客户端的INVITE请求?通过星号或iptables?
答案 0 :(得分:1)
您需要在sip.conf中将allowguest参数更改为no。
请查看以下链接,了解有关星号安全性的更多提示:
答案 1 :(得分:0)
到目前为止,我的研究告诉我,REGISTER仅用于星号来达到或转发INVITES,但不用于验证INVITE请求。当INVITE到来时,星号会尝试检查给定的用户名,如果是有效的用户名,则会向客户端发送407(需要验证)。然后客户端在响应中插入密码(加密)并将INVITE2发送到服务器。现在,服务器对用户进行身份验证,并在凭据匹配时继续建立呼叫。
结论:INVITE与REGISTER无关,因此我无法限制仅限注册客户端发送INVITE。
作为一种解决方法,我编写了自己的脚本。来源位于https://github.com/naidu/JailMe
答案 2 :(得分:0)
考虑一个真正的会话边界控制器,当你被黑客攻击时,它可以快速收回成本。但是,如果您想要一个“足够好”的选项,请继续阅读:
有一个名为“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。
答案 3 :(得分:-1)
Fail2Ban是阻止不必要流量的简单方法! fail2ban检查系统日志是否有失败的尝试,如果在某个远程IP的指定时间内有太多(超过定义的阈值)失败尝试,则Fail2Pan将其视为攻击,然后在iptables中添加该IP地址以阻止来自它的任何类型的流量。以下链接可以提供帮助
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