我想将flooder IP地址重定向到“无法验证设备”等消息到我的perl脚本。
我在“chan_sip.c”之后添加:
ast_log(LOG_NOTICE, "Failed to authenticate device %s [IP: %s]\n", sip_get_header(req, "From"), ast_sockaddr_stringify(addr));
此代码:
execl("/bad-ip.pl", "bad-ip", sip_get_header(req, "From"), ast_sockaddr_stringify(addr), (char *)NULL);
但是如果flooder连接到星号服务器,则会显示消息:
与Asterisk服务器断开连接 执行最后一分钟清理
请告知。
答案 0 :(得分:0)
通过iptable规则检测并记录此类泛滥的正确方法。
使用iptables limit target和LOG target。
将数据包级别速率限制放入应用程序级别(星号)并不是一个好主意。
还有一些合适的工具,如fail2ban.org
这样的东西可以提供帮助(注意,它是防火墙的一部分,还需要进行多项检查,例如检查ssh攻击和友好扫描仪邀请)
# INVITE limit
$IPTABLES -A sipdos -m string --string "INVITE sip:" --algo bm --to $OFFSET -j sipdosinvite
$IPTABLES -A sipdosinvite \
-m hashlimit --hashlimit $IRATE --hashlimit-burst $BURST \
--hashlimit-mode srcip,dstport --hashlimit-name sip_i_limit -j ACCEPT
# REGISTER limit
$IPTABLES -A sipdos -m string --string "REGISTER sip:" --algo bm --to $OFFSET -j sipdosregister
$IPTABLES -A sipdosregister \
-m hashlimit --hashlimit $RRATE --hashlimit-burst $BURST \
--hashlimit-mode srcip,dstport --hashlimit-name sip_r_limit -j ACCEPT
# All other SIP packets...
$IPTABLES -A sipdos -m hashlimit --hashlimit $ORATE --hashlimit-burst $BURST \
--hashlimit-mode srcip,dstport --hashlimit-name sip_o_limit -j ACCEPT
# Take action on everything else
if [ $LOG ]
then
$IPTABLES -A sipdosregister -j LOG --log-prefix SIP_TO_MANY
$IPTABLES -A sipdosinvite -j LOG --log-prefix SIP_TO_MANY
fi