我运行一个 SIP 服务器,它侦听 UDP 端口 5060,并且需要接受来自公共 Internet 的经过身份验证的请求。
问题是它偶尔会被扫描 SIP 服务器的人发现并利用,然后他们整天坐在那里试图对服务器进行暴力破解。我使用的凭据足够长,以至于这种攻击永远不会可行,但它很烦人,因为它占用了大量带宽。
我已经尝试设置 fail2ban 来读取 Asterisk 日志并禁止使用 iptables 执行此操作的 IP,这会阻止 Asterisk 在 10 次尝试失败后看到传入的 SIP REGISTER 尝试(这发生在不到一秒的攻击速度下)看到)。然而,SipVicious 派生脚本在获得 ICMP 目标主机无法访问后不会立即停止发送 - 它们会继续使用数据包敲击连接。他们停止的时间是可配置的,但不幸的是,似乎攻击者进行这些类型的蛮力攻击通常将超时设置得非常高(在 fail2ban 阻止他们获得任何 SIP 响应后,攻击继续以高速率持续数小时一旦他们看到 SIP 服务器的初始确认)。
有没有办法让它停止在我的连接上发送数据包?
a1k*_*kmm 11
如果收到没有 From: 行的无效 SIP 响应,许多攻击者使用的公开可用的 SipVicious 脚本会立即停止攻击。您可以识别 SipVicious,因为它将 SIP 请求中的用户代理设置为友好扫描程序。
使用这种技术对抗现实世界的攻击者,我已经能够立即阻止数据包的泛滥。您可以使用简单的脚本发送这样的数据包。例如:
cat >UnfriendlyScannerStopper.scala <<END
import java.net._
object UnfriendlyScannerStopper {
def main(args : Array[String]) : Unit = {
if (args.length < 2) {
System.out.println("Usage: FriendlyScannerStopper ipAddr port")
return
}
val udpSocket : DatagramSocket = new DatagramSocket();
val packetContents : String = "SIP/2.0 400 Go Away!!!\r\n\r\n"
udpSocket.send(new DatagramPacket(packetContents.getBytes("utf-8"), packetContents.size,
InetAddress.getByName(args(0)), Integer.parseInt(args(1))))
}
}
END
scala UnfriendlyScannerStopper.scala 188.138.107.179 5102
Run Code Online (Sandbox Code Playgroud)
您需要将 188.138.107.179 和 5102 替换为您在攻击中发送的 SIP 数据包的 Via 标头中的地址和端口。