Show HN:基於mitmproxy的出口WAF,限制AI代理和npm惡意軟體
mitmwall是一個基於mitmproxy的出口Web應用防火牆(WAF),透過iptables和mitmproxy確保只有明確允許的HTTP(S)路由可訪問。它可防止資料洩露、後門連線等威脅,並提供即時監控、DNS過濾、憑證注入和Web管理介面。
mitmwall是一個專為Ubuntu設計的出口Web應用防火牆(WAF)。它巧妙地結合了iptables和mitmproxy,確保只有明確允許的HTTP(S)路由可以被訪問。任何不符合允許列表的網路連線都將被阻止,從而有效防止資料洩露、後門連線等安全威脅。
mitmwall的工作原理是透過systemd服務啟動mitmweb,執行在透明HTTP(S)代理模式和DNS代理模式下。iptables規則將出站TCP 80和443埠流量重定向到HTTP(S)代理,TCP/UDP 53埠流量重定向到DNS代理。同時,僅允許root使用者、專用mitmwall使用者、systemd-resolve以及已安裝的時間同步服務使用者進行必要的上行連線,而root使用者被保留用於主機管理和故障排除,其他應用程式無法繞過代理。
安裝過程簡單,可透過curl命令或本地安裝指令碼完成。安裝程式會建立系統使用者、安裝mitmproxy、生成配置檔案、建立規則目錄,並安裝systemd服務。安裝後,可以透過systemctl命令啟動、停止、重啟服務以及檢視日誌。
允許列表以TOML檔案形式儲存在/etc/mitmwall/rules.d目錄中。每個檔案可包含多個[[allow]]表,請求的主機名、HTTP方法和可選的路徑名模式必須至少匹配一個允許規則,否則被阻止。規則檔案按檔名順序載入,修改後需重啟服務。
憑證注入功能允許將自定義頭部透明地新增到請求中,避免向不受信任的使用者暴露憑證。典型工作流程是:先配置需要憑證的工具,透過mitmweb檢查憑證的使用方式,編寫匹配規則注入憑證頭部,最後用虛擬值替換真實憑證。
mitmwall還提供了Web介面(mitmweb),監聽在58081埠,可用於即時檢查流量並輕鬆建立規則。透過選項介面新增的規則會立即生效並持久化。
DNS過濾功能將普通使用者的TCP/UDP 53流量重定向到mitmproxy的本地DNS監聽器。預設情況下,代理外掛會應用相同的規則檔案來決定DNS查詢是否被允許。如果查詢的主機名不在允許列表中,則返回DNS REFUSED。可以透過配置關閉外掛級別的DNS過濾。
在安全性方面,mitmwall依賴於Linux使用者許可權。只有root和mitmwall使用者可自由訪問網路。如果攻擊者能夠提權到mitmwall使用者或root,則可能繞過保護。DNS過濾可防止基於DNS的資料洩露,但允許的域名仍需謹慎選擇。此外,允許的域名仍可能被用於憑證轉儲,尤其是在允許POST、PUT等寫操作的方法時。預設方法策略只允許GET和HEAD,以降低風險。普通非root程序無法使用原始套接字繞過iptables。
總之,mitmwall旨在防禦流氓AI代理和npm倉庫上常見的憑證轉儲惡意軟體,而非針對有目標的攻擊。它是一個實用的出口控制工具。