1、FreeSWITCH VOIP 攻击防范说明1. 总体说明使用 fail2ban+iptables 相结合,防范 VOIP 攻击。2. Fail2ban 安装与配置2.1 安装 Fail2banA、 安装 yum。(略)B、 安装 EPEL 源#rpm -ivh http:/ fail2ban#yum install fail2ban2.2 配置 Fail2ban2.2.1 配置日志级别及路径文件:/etc/fail2ban/fail2ban.conf默认 fail2ban.conf 里面就三个参数,而且都有注释。#默认日志的级别loglevel = 3#日志的存放路径logtarget =
2、/var/log/fail2ban.log#socket 的位置socket = /tmp/fail2ban.sock我们主要修改日志的存放路径,修改为/var/log/fail2ban.log2.2.2 Fail2ban 全局配置文件:/etc/fail2ban/jail.conf# vi /etc/fail2ban/jail.conf#忽略 IP 的范围 如果有二组以上用空白做为间隔ignoreip = 127.0.0.1# 设定 IP 被封锁的时间( 秒),如果值为 -1,代表永远封锁bantime = 600# 设定在多少时间内达到 maxretry 的次数就封锁findtime =
3、600# 设定在多少时间内达到 maxretry 的次数就封锁maxretry = 3# 允许尝试的次数上面设置的意思是如果在 findtime 内达到 maxretry,则进行封锁,封锁时间是 bantime。即十分钟内重试 3 天都失败的话,客户端所在的 IP 会被封锁 10 分钟。3. FreeSWITCH 配置使用 fail2ban 时,需要开启 freeswitch 的注册错误日志,以便进行跟踪:文件:/usr/local/uswitch/conf/sip_profiles/internal.xml将下面的属性设置为 true,如下所示:4. 防火墙 iptables 配置4.1 开
4、启防火墙使用以下命令开启防火墙:# chkconfig iptables on注:如果需要关闭防火墙的话,使用命令 chkconfig iptables off 即可。4.2 开放 SIP 相关端口A、 修改防火墙配置文件: /etc/sysconfig/iptables-config将下面两个圈出来的属性修改为 yes,如下所示:B、 重启防火墙#service iptables restart C、 增加开放的 SIP 端口文件:/etc/sysconfig/iptables在 iptables 中添加如下的语句:#FreeSwith-A RH-Firewall-1-INPUT -m ud
5、p -p udp -dport 1719 -j ACCEPT-A RH-Firewall-1-INPUT -m state -state NEW -m tcp -p tcp -dport 1720 -j ACCEPT-A RH-Firewall-1-INPUT -m udp -p udp -dport 3478 -j ACCEPT-A RH-Firewall-1-INPUT -m udp -p udp -dport 3479 -j ACCEPT-A RH-Firewall-1-INPUT -m state -state NEW -m tcp -p tcp -dport 5002 -j ACCE
6、PT-A RH-Firewall-1-INPUT -m udp -p udp -dport 5003 -j ACCEPT-A RH-Firewall-1-INPUT -m udp -p udp -dport 5060 -j ACCEPT-A RH-Firewall-1-INPUT -m state -state NEW -m tcp -p tcp -dport 5060 -j ACCEPT-A RH-Firewall-1-INPUT -m udp -p udp -dport 5070 -j ACCEPT-A RH-Firewall-1-INPUT -m state -state NEW -m
7、tcp -p tcp -dport 5070 -j ACCEPT-A RH-Firewall-1-INPUT -m udp -p udp -dport 5080 -j ACCEPT-A RH-Firewall-1-INPUT -m state -state NEW -m tcp -p tcp -dport 5080 -j ACCEPT-A RH-Firewall-1-INPUT -m udp -p udp -m multiport -dports 16384:32768 -j ACCEPT#end of FreeSwitch注:上面的规则在防火墙中添加了 SIP 和 RTP 端口。D、 重启防
8、火墙需要重启防火墙,使上面的配置生效:#service iptables restart5. Fail2ban 防范攻击配置5.1 防范 SIP 注册失败攻击该攻击是由攻击方短时间内大量发起 SIP 注册消息,导致服务器瘫痪。5.1.1 增加规则匹配文件#vi /etc/fail2ban/filter.d/freeswitch.conf在/etc/fail2ban/filter.d 下新建 freeswitch.conf 文件,内容如下:# Fail2Ban configuration file# Author: Rupa SChomaker#Definition# Option: failr
9、egex# Notes.: regex to match the password failures messages in the logfile. The# host must be matched by a group named “host“. The tag “ can# be used for standard IP/hostname matching and is only an alias for# (?:f4,6:)?(?Pw-._+)# Values: TEXT#failregex = WARNING sofia_reg.c:d+ SIP auth failure (REG
10、ISTER) on sofia profile w+ for .* from ip WARNING sofia_reg.c:d+ SIP auth failure (INVITE) on sofia profile w+ for .* from ip # Option: ignoreregex# Notes.: regex to ignore. If this regex matches, the line is ignored.# Values: TEXT#ignoreregex =5.1.2 修改 jail.conf 文件#vi /etc/fail2ban/jail.conf在文件的最后添
11、加上如下的内容:freeswitch-tcpenabled = trueport = 5060,5061,5080,5081protocol = tcpfilter = freeswitchlogpath = /usr/local/freeswitch/log/freeswitch.logaction = iptables-allportsname=freeswitch-tcp, protocol=allsendmail-whoisname=FreeSwitch, dest=root, sender=fail2banexample.orgfreeswitch-udpenabled = true
12、port = 5060,5061,5080,5081protocol = udpfilter = freeswitchlogpath = /usr/local/freeswitch/log/freeswitch.logaction = iptables-allportsname=freeswitch-udp, protocol=allsendmail-whoisname=FreeSwitch, dest=root, sender=fail2banexample.org5.1.3 重启 fail2ban#/etc/init.d/fail2ban restart5.1.4 检查规则是否被加载进 i
13、ptables 中#iptables -L fail2ban-freeswitch-udp#iptables -L fail2ban-freeswitch-tcp如果出现如下结果,则证明配置正确:5.1.5 测试是否有效使用 easytalk,连续多次用错误的密码进行登录。超过三次后就会提示服务器无法连接,说明该 IP 已被服务器封锁。5.2 防范 SIP DOS 攻击当 freeswitch 的日志中连续大量出现相同号码的日志信息时,说明已被 DOS 攻击:在这种情况下,需要在 fail2ban 中增加新的规则,以避免该攻击:5.2.1 增加规则匹配文件#vi /etc/fail2ban/f
14、ilter.d/freeswitch-dos.conf在/etc/fail2ban/filter.d 下新建 freeswitch-dos.conf 文件,内容如下:# Fail2Ban configuration file# Author: soapee01#Definition# Option: failregex# Notes.: regex to match the password failures messages in the logfile. The# host must be matched by a group named “host“. The tag “ can# be
15、 used for standard IP/hostname matching and is only an alias for# (?:f4,6:)?(?Pw-._+)# Values: TEXT#failregex = WARNING sofia_reg.c:d+ SIP auth challenge (REGISTER) on sofia profile w+ for .* from ip # Option: ignoreregex# Notes.: regex to ignore. If this regex matches, the line is ignored.# Values:
16、 TEXT#ignoreregex =5.2.2 修改 jail.conf 文件#vi /etc/fail2ban/jail.conf在文件的最后添加上如下的内容:freeswitch-dosenabled = trueport = 5060,5061,5080,5081protocol = udpfilter = freeswitch-doslogpath = /usr/local/freeswitch/log/freeswitch.logaction = iptables-allportsname=freeswitch-dos, protocol=allmaxretry = 50findtime = 30bantime = 60005.2.3 重启 fail2ban#/etc/init.d/fail2ban restart6. 开机自启动使用下面的命令实现 fail2ban 的开机自启动:#chkconfig -level 345 fail2ban on#service fail2ban start7. 注意事项1)在重启 iptables 后,一定要记得重启 fail2ban。