FreeSwitch安装在云服务器禁止国外IP访问

项目上使用到FreeSwitch放到阿里云上,但是不可避免,被扫描盗打,运气不好,第一天放上去测试,就被打了2K+话费。

不管是阿里云,腾讯云,华为云等等,他们的ACL规则都是比较弱的,有项目曾经用过SBC来管制当然简单多了,不过也要一笔不小的费用,于是只有在系统防火墙上下手。

首先,扫描的基本上都是国外的IP,我们先禁止他们的访问,这里用到了iptables和ipset,本来我们的系统环境是CentOS7,没有iptables的,因为7开始已经改为firewalld了。

iptables和ipset的配合使用先检查安装环境:

yum install ipset
yum install iptables-services

#建表

ipset create china hash:net hashsize 10000 maxelem 1000000


#批量增加中国IP到ipset的china表
#以下内容保存成脚本执行即可,执行需要更改权限

#!/bin/bash
rm -f cn.zone
wget http://www.ipdeny.com/ipblocks/data/countries/cn.zone
for i in `cat cn.zone`
do
ipset add china $i 
done
ipset list china #查看一下
ipset save
#ipset命令建表和插IP数据都是直接写内存,所以需要让内存的数据持久化,各发行版的服务调用命令可能不太一样,这里用Redhat系列的命令
#iptables的filter表INPUT链根据需求加入相应的规则,以下是实例
#全部接受中国IP
-A INPUT -m set --match-set china src -j ACCEPT
#接受中国IP访问本机特定端口特定协议(例如5060UDP协议),freeswitch一般要用这条,直接具体到端口协议
-A INPUT -m set --match-set china src -p udp -m udp --dport 5060 -j ACCEPT
#接受中国IP的ping响应
-A INPUT -m set --match-set china src -p icmp -j ACCEPT
service iptables save

————————————————
如果对命令不是太熟悉,可以把以下内容写到 /etc/sysconfig/iptables 文件里,增加或者修改对应的端口 

*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -m set --match-set china src -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -m set --match-set china src -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -m set --match-set china src -p udp -m udp --dport 5060 -j ACCEPT
-A INPUT -p udp -m udp --dport 16384:32768 -j ACCEPT
-A INPUT -s 172.18.0.0/16 -j ACCEPT
-A INPUT -s 47.107.xxx.xxx/32 -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
COMMIT

systemctl restart iptables

重启就生效。

最后,大家会发现,这种方式firewalld被关闭了,iptables服务起来了,实则是centos 7中已经默认不再支持iptables防火墙,而推荐使用firewalld防火墙。

后面有空再来对比一下,另外ipset是内存中存在的数据,一旦重启,将会被清空,个人建议是在脚本中启动,下一篇介绍一下。

原文地址:https://www.cnblogs.com/cash/p/13280800.html