博客 / 詳情

返回

FreeSWITCH使用mod_fail2ban模塊來提升安全

操作系統:Debian 12.5_x64
FreeSWITCH版本: 1.10.11
fail2ban版本: 1.1.0
nftables版本: 1.0.6

FreeSWITCH系統部署在公網,大概率會碰到惡意註冊,今天整理下debian12環境下使用mod_fail2ban + fail2ban + nftables來提升系統安全性的筆記,並提供使用示例及相關資源下載。

相關資源可從如下渠道獲取:

關注微信公眾號(聊聊博文,文末可掃碼)後回覆 20251120 獲取。

一、原理説明

這裏描述下mod_fail2ban如何使用fail2ban軟件添加防護規則,實現ip地址封禁。
原理示意圖如下:

image

 

説明:
1)話機發起註冊時,防火牆程序默認放行,註冊請求會到達mod_sofia模塊;
2)mod_sofia模塊處理sip註冊請求的過程中,會生成註冊相關事件;
3)mod_fail2ban模塊監聽到註冊事件後,進行過濾,根據既定規則生成fail2ban.log日誌;
4)fail2ban程序解析fail2ban.log日誌文件,根據配置規則添加防火牆策略;
5)防火牆程序使用新規則阻擋惡意註冊;
 
fail2ban説明可參考GitHub描述,這裏就不多説了。
https://github.com/fail2ban/fail2ban

二、模塊安裝及配置 

1、添加模塊編譯項

文件:源碼根目錄的modules.conf文件
添加(或取消註釋)如下代碼:
event_handlers/mod_fail2ban

image

 

2、編譯及安裝

源碼目錄執行如下命令:

autoreconf -fiv
make clean
./devel-bootstrap.sh && ./configure && make && make install

説明:

1)會編譯mod_fail2ban模塊;

2)如果配置文件沒有找到,可以從源碼目錄複製過去;

cp src/mod/event_handlers/mod_fail2ban/fail2ban.conf.xml /usr/local/freeswitch/conf/autoload_configs/

image

 

3、加載mod_fail2ban模塊

編輯 conf/autoload_configs/modules.conf.xml 文件,添加如下內容:

<load module="mod_fail2ban"/>

image

 重啓FreeSWITCH或執行重新load操作:

load mod_fail2ban

image

 如果加載不報錯,則添加mod_fail2ban 模塊成功。

4、配置模塊

配置文件路徑:

/usr/local/freeswitch/conf/autoload_configs/fail2ban.conf.xml

配置文件內容如下(默認):

<configuration name="fail2ban.conf" description="fail2ban log configs">
  <bindings>
    <config name="settings" desription="configs">
      <param name="logfile" value="$${log_dir}/fail2ban.log"/>
    </config>
  </bindings>
</configuration>

image

5、模塊運行效果

模塊啓動後,會自動創建日誌文件,並寫入相關日誌。

默認日誌路徑:/usr/local/freeswitch/log/

image

 日誌效果如下:

image

 

三、安裝fail2ban軟件

GitHub地址:
https://github.com/fail2ban/fail2ban

image

 

需要注意的是apt 安裝的fail2ban軟件版本是1.0.2,不能使用nftables,這裏使用的是1.1.0版本,可從GitHub下載:
 
https://github.com/fail2ban/fail2ban/releases

image

 

如果下載過慢,可從如下渠道獲取:
關注微信公眾號(聊聊博文,文末可掃碼)後回覆 20251120 獲取。
 
安裝命令如下:
dpkg -i fail2ban_1.1.0-1.upstream1_all.deb

image

 配置文件目錄: /etc/fail2ban

image

四、使用示例

 這裏列舉下使用示例。

1、配置防火牆

 
這裏使用nftables來過濾ip地址,該軟件是debian12默認安裝的,如果沒有安裝,可用如下命令進行安裝:
 
apt install nftables
這裏使用的nftables v1.0.6版本。

image

2、配置fail2ban軟件使用nftable

/etc/fail2ban/action.d目錄默認有nttables的動作配置:

image

 /etc/fail2ban/jail.conf文件默認有freeswitch配置,默認未啓用:

image

 為了方便演示,這裏不使用默認的配置文件,修改後的 jail.conf 文件內容可從如下渠道獲取:

關注微信公眾號(聊聊博文,文末可掃碼)後回覆 20251120 獲取。

3、添加freeswitch過濾規則

文件: filter.d/freeswitch-fail2ban.conf

文件內容可從如下渠道獲取:

關注微信公眾號(聊聊博文,文末可掃碼)後回覆 20251120 獲取。
查看狀態:
fail2ban-client status freeswitch-fail2ban

image

4、開啓nftable服務

需要開啓nftables服務:

systemctl start nftables

image

5、使用分機模擬註冊失敗

分機: 1009

填寫錯誤的註冊密碼,執行註冊操作。

連續10次註冊失敗,會自動拉黑,運行效果如下:

bbe8de9acbd811216449533c8f7d6be4

 到時間後,會自動解除:

66df47961c65f06e728a446bb50ab8bb

 如需提前解除黑名單,可使用如下命令:

/usr/bin/fail2ban-client set freeswitch-fail2ban unbanip 192.168.137.1

運行效果如下:

f4a189e090a9040caa71deae2fd23548

該部分涉及的配置文件,可從如下渠道獲取:
關注微信公眾號(聊聊博文,文末可掃碼)後回覆 20251120 獲取。

五、模塊源碼説明

源碼目錄:
src/mod/event_handlers/mod_fail2ban/

ef0bce2e81ab1c6bff88507e14eeb377

源碼只有一個文件: mod_fail2ban.c

1、函數説明

該模塊有4個函數:

mod_fail2ban_do_config : 模塊配置解析函數
fail2ban_logger : 生成fail2ban日誌
fail2ban_event_handler : 模塊事件處理回調函數
mod_fail2ban_load  : 模塊加載函數
mod_fail2ban_shutdown : 模塊關閉函數 

image

2、關鍵函數説明

模塊的加載、關閉及配置解析沒什麼説的,這裏描述下該模塊的fail2ban_event_handler函數。

關於該函數的描述,可從如下渠道獲取:
關注微信公眾號(聊聊博文,文末可掃碼)後回覆 20251120 獲取。 

六、資源下載

本文相關資源及示例配置,可從如下渠道獲取:
關注微信公眾號(聊聊博文,文末可掃碼)後回覆 20251120 獲取。

image

 

【文件説明】
fail2ban-1.1.0 : fail2ban-1.1.0源碼及deb格式安裝包
etc_fail2ban.tar.gz : /etc/fail2ban目錄打包文件
fail2ban模塊.drawio : drawio格式框架圖
freeswitch-fail2ban.conf : mod_fail2ban模塊日誌的過濾規則
jail.conf : fail2ban配置
status1.sh :fail2ban結果查看腳本
 
user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.