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仓库上常见的凭证转储恶意软件,而非针对有目标的攻击。它是一个实用的出口控制工具。