近期發現很多美國,英國,加拿大的IP在連接FS,肯定要對他們進行限制。一是可以使用防火牆控制這些垃圾國家的訪問(直接限制A類地址,哈哈),二是ESL只允許可信任的IP訪問。另外還有號碼的黑名單設置。
一、防火牆設置:最安全,直接限制於外:
二、ACL的IP設置:
在生產環境中,只考慮把電話接通還是不夠的,還得考慮安全性。上面的方法只使用5080端口從public Dialplan做互通,而發送到5080端口的INVITE是不需要鑑權的,這意味着任何人均可以向它發送INVITE從而按你設定的路由規則打電話。這種方式用在端局上問題可能不大,因爲你的public Dialplan僅將外面的來話路由到本地用戶。但在匯接局模式下,你可能將一個來話再轉接到其他局去,那你就需要好好考慮一下安全問題了,因爲你肯定不希望全世界的人都通過你的匯接局免費的往各端局打電話。
爲了防止這個問題,我們在匯接局上關閉5080端口,而讓所有來話都送到5060端口上(internal Profile)。5060端口上的來話是需要先鑑權才能路由的。在這種匯接局模式中,一般會使用IP地址鑑權的方式。而IP地址鑑權就會用到ACL。
ACL(Access Contorl List)即訪問控制列表,它通過一個列表矩陣來控制哪些用戶可以訪問哪些資源。在FreeSWITCH中,實現了基於ACL的鑑權(當然,ACL不僅用於SIP鑑權,還可以用在其他地方)。其中,internal Profile默認使用“domains”這個ACL進行鑑權。讀者可以在internal.xml配置中找到如下的配置:
<param name="apply-inbound-acl" value="domains"/>
上述配置說明,當收到呼叫(INVITE)請求時,要查看“domains”這個ACL,看是否允許來源IP地址進行呼叫。
ACL是在conf/autoload_configs/acl.conf.xml中配置的,其中domains的默認配置如下:
<list name="domains" default="deny">
<!-- domain=
ACL --> ACL -->
<node type="allow" domain="$${domain}"/>
<!--
IP IP
ACL ACL
cidr= cidr=
--> -->
<!-- <node type="allow" cidr="192.168.1.123/32"/> -->
</list>
其中,第1行說明該列表項的名稱是“domains”,可以在其他地方引用,默認(default)的規則是拒絕請求(deny)。其他幾行的的含義我們就不在這裏介紹了。
如果我們想在D上允許來自A、B、C的呼叫,就可以把A、B、C的地址加到上述配置裏面,如可以添加以下配置,以允許(allow)來自這些IP的呼叫 [2]。
<node type="allow" cidr="192.168.1.A/32"/>
<node type="allow" cidr="192.168.1.B/32"/>
<node type="allow" cidr="192.168.1.C/32"/>
通過設置上述ACL,我們就保證了只有授權的用戶才能從D上進行路由(當然要記得我們關閉了5080端口,因此所有呼叫要送到5060端口上)。
三、號碼黑名單:
FreeSWITCH黑名單功能設置
功能描述:對呼叫的號碼進行過濾
步驟:
1、編譯mod_blacklist 模塊:進入源目錄/usr/local/src/freeswitch --> make mod_blacklist-install
2、加載mod_blacklist模塊: fs_cli --> reload mod_blacklist 或 modules.conf.xml 添加 --> <load module="mod_blacklist"/> 重啓FS
3、設置mod_blacklist模塊:默認blacklist.conf.xml 如下:
<configuration name="mod_blacklist.conf" description="Blacklist module">
<lists>
<list name="example" filename="/usr/local/freeswitch/blacklists/blocked.list"/>
</lists>
</configuration>
在/usr/local/freeswitch/blacklists 目錄下創建blocked.list ,輸入黑名單號碼內容,一行一個,保存,修改該文件的用戶組以與FS相同,權限可讀寫。
4、設置撥號規則:
1> 如需呼出黑名單限制 ,在default.xml 中最前面增加如下規則
<extension name="blacklist_check">
<condition field="${blacklist(check example ${destination_number})}" expression="^true$">
<action application="answer" data=""/>
<action application="playback" data="$${base_dir}/sounds/music/city_of_sky.wav"/>
<action application="hungup" data=""/>
</condition>
</extension>
2> 如需呼入黑名單限制,在public.xml 中最前面增加如下規則
<extension name="blacklist_check">
<condition field="${blacklist(check example ${caller_id_number})}" expression="^true$">
<action application="answer" data=""/>
<action application="playback" data="$${base_dir}/sounds/music/Speak.wav"/>
<action application="hangup" data=""/>
</condition>
</extension>
注:如上的呼入呼出黑名單都放在list name= example 的黑名單中,也可以將呼入呼出拆分爲單獨的文件使用,配置僅需再撥號規則中修改對應的listname值即可。
5、Blacklist API:
1 2 3 4 5 6 7 |
|
更改FreeSWITCH的默認密碼:
FreeSWITCH的默認密碼爲1234,客戶端使用該密碼撥號時,會有10秒的延時。通過修改此默認密碼,可以避免這個延時。如把新密碼設爲2345,此時可以把conf目錄下的vars.xml中的:
<X-PRE-PROCESS cmd="set" data="default_password=1234"/>
修改爲
<X-PRE-PROCESS cmd="set" data="default_password=2345"/>