保护Asterisk和FreePBX免受VoIP欺诈和暴力攻击

时间:2020-02-23 14:30:59  来源:igfitidea点击:

在本指南中,我们将介绍如何通过使用地理位置过滤设置有效的VoIP黑名单来保护Asterisk和FreePBX设置。如今,针对Internet上的Asterisk,FreePBX和任何其他PBX系统,有许多蛮力攻击和VoIP欺诈尝试。

任何系统管理员的任务都是确保将此类尝试的成功率最小化为接近零。保护Asterisk和FreePBX免受此类攻击的一种方法是使用Fail2ban和VoIP黑名单。

这将节省带宽并保护业务。为了使我们的工作更轻松,我们将使用VoIPBL,这是分布式VoIP黑名单,旨在防止VoIP欺诈并最大程度地减少对具有可公共访问的PBX的网络的滥用。

VoIPBL如何安全?

VoIPBL Geolocation功能使我们可以阻止来自网络不需要与之通信或者已知为恶意活动发起者的国家/地区的所有网络流量。从他们的站点,我们可以检查IP地址是否在黑名单中。

如何安装VoIPBL

VoIP黑名单依赖于Fail2ban才能在PBX服务器上生效黑名单。确保已安装fail2ban软件包并正在运行服务:

sudo yum install epel-release
sudo yum install fail2ban fail2ban-systemd

对于Ubuntu和其他Debian系列,运行:

sudo apt-get -y install fail2ban ufw

如果我们运行的是CentOS 6或者任何其他RHEL 6系列,请安装iptables-services和fail2ban,而无需使用fail2ban-systemd。

sudo yum install iptables-services fail2ban

在/etc/fail2ban/jail.conf中配置Fail2ban的默认设置。

基本的fail2ban配置将具有shs监控。让我们将其添加到/etc/fail2ban/jail.local文件中。

$sudo vim /etc/fail2ban/jail.local

添加以下内容:

[postfix]
enabled  = true
port     = smtp
filter   = postfix
logpath  = /var/log/mail.log
maxretry = 3

[ssh]
enabled = true
port    = ssh
filter  = sshd
logpath  = /var/log/auth.log
maxretry = 3

[vsftpd]
enabled = false
port = ftp
filter = vsftpd
logpath = /var/log/auth.log
maxretry = 5

[pure-ftpd]
enabled = true
port = ftp
filter = pure-ftpd
logpath = /var/log/syslog
maxretry = 3

然后启动并启用fail2ban服务:

sudo systemctl enable fail2ban.service
sudo systemctl start fail2ban.service

下载voipbl.sh脚本并将其放在/usr/local/bin /

wget http://www.voipbl.org/voipbl.sh -O /usr/local/bin/voipbl.sh

使脚本可执行:

chmod +x /usr/local/bin/voipbl.sh

上面使用iptables。如果系统支持ipset,则可以改用以下脚本:

#!/bin/bash

URL="http://www.voipbl.org/update/"

set -e
echo "Downloading rules from VoIP Blacklist"
wget -qO - $URL -O /tmp/voipbl.txt

echo "Loading rules..."

# Check if rule set exists and create one if required
if ! $(/usr/sbin/ipset list voipbl > /dev/null 2>&1); then
  ipset -N voipbl iphash
fi
  
#Check if rule in iptables
if ! $(/sbin/iptables -w --check INPUT -m set --match-set voipbl src -j DROP > /dev/null 2>&1); then
 /sbin/iptables -I INPUT 1 -m set --match-set voipbl src -j DROP
fi
 
# Create temporary chain
ipset destroy voipbl_temp > /dev/null 2>&1 || true
ipset -N voipbl_temp iphash
 
cat /tmp/voipbl.txt |\
  awk '{ print "if [ ! -z \"""\" -a \"""\"  != \"#\" ]; then /usr/sbin/ipset  -A voipbl_temp \"""\" ;fi;"}' | sh
 
ipset swap voipbl_temp voipbl
ipset destroy voipbl_temp || true
 
echo "Done! Rules loaded"

然后在/etc/fail2ban/jail.conf上添加一个新的Fail2ban Jail:

[asterisk-iptables]
action = iptables-allports[name=ASTERISK, protocol=all]
         voipbl[serial=XXXXXXXXXX]

现在,在/etc/fail2ban/action.d/voipbl.conf上为Fail2ban定义VoIP黑名单操作。

sudo vim  /etc/fail2ban/action.d/voipbl.conf

加:

# Description: Configuration for Fail2Ban

[Definition]

actionban   = <getcmd> "<url>/ban/?serial=<serial>&ip=<ip>&count=<failures>"
actionunban = <getcmd> "<url>/unban/?serial=<serial>&ip=<ip>&count=<failures>"

[Init]

getcmd = wget --no-verbose --tries=3 --waitretry=10 --connect-timeout=10 \
              --read-timeout=60 --retry-connrefused --output-document=- \
	      --user-agent=Fail2Ban

url = http://www.voipbl.org

现在,我们可以创建cron作业文件以每3小时更新一次规则:

$sudo vim /etc/cron.d/voipbl

# update blacklist each 4 hours
0 */4 * * * * root /usr/local/bin/voipbl.sh

完成后,重新启动fail2bandaemon以防VoIP欺诈:

sudo systemct restart fail2ban