2015-09-30 37 views
0

我試圖讓ejabberd只從一個特定的IP允許在通道註冊,使用mod_registerip_access條款。ejabberd mod_register允許註冊,只有指定的IP

要做到這一點,我添加了此行的mod_register塊在我ejabberd.cfg

{ip_access, [{allow, "the.allowed.ip.address"}]} 

...並通過ejabberdctl restart重啓ejabberd。服務器重新聯機,並且沒有任何警告或錯誤登錄/var/log/ejabberd/ejabberd.log

不幸的是,利用這一行代碼,我仍然可以使用Adium作爲客戶端從非白名單IP中執行通道內註冊。我決定修改上面的行加入:

{ip_access, [{allow, "the.allowed.ip.address"}, {deny, all}]} 

...運行導致所有註冊投擲403「未經授權」狀態的風險。奇怪的是,現在,當我嘗試從任何 IP(包括白名單的IP)註冊時,我得到503「服務不可用」狀態消息。

我該如何獲得ejabberd以允許通過特定IP進行通道內註冊,並且僅通過IP?

+0

您使用的是哪個版本的ejabberd? –

+0

@MickaëlRémond我正在使用2.1.11,這是通過Ubuntu的默認回購站提供的。我也嘗試過使用YAML作爲其配置文件的15.09,但遇到了同樣的問題。 – Jules

回答

1

這不是應該如何使用限制。你可以在ejabberd documentation for mod_register找到一個例子(在.yaml中):

這不是它在ejabberd 15.x中的工作方式。您需要三件事來限制IP註冊: - IP的ACL定義。 - 訪問規則,用於定義您希望允許或拒絕訪問哪個ACL。 - mod_register配置將ip_access連接到您的訪問規則。

對於(很舊的)2.1.11,它有很大的不同,但絕對不會使用all關鍵字來拒絕。

ejabberd 2.1.11文檔顯示例子爲:

{acl, shortname, {user_glob, "??"}}. 
%% The same using regexp: 
%%{acl, shortname, {user_regexp, "^..?$"}}. 

{access, register, [{deny, shortname}, 
        {allow, all}]}. 

{modules, 
[ 
    ... 
    {mod_register, [{access, register}, 
        {ip_access, [{allow, "127.0.0.0/8"}, 
           {deny, "0.0.0.0/0"}]} 
    ]}, 
    ... 
]}. 

正如你看到的拒絕應與IP地址塊否認。