項目上使用到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 1024 maxelem 65536
#批量增加中國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是內存中存在的數據,一旦重啟,將會被清空,個人建議是在腳本中啟動,下一篇介紹一下。