你如何动态地阻止 apache 内部的 ip 地址?

How do you block ip addresses inside of apache dynamically?

我在我的网络服务器前面使用负载平衡器,这意味着所有连接都来自 192.168.x.x(或其他内部 lan 网段)。我的用户都会在 x-forwarded-for header 中显示他们原来的 ip 地址。我正在尝试动态禁止用户(IP 地址),这样我就可以自动/悄悄地将黑名单列入黑名单,而无需管理员手动干预。

目前,我使用 htaccess 规则手动执行此操作。在应用程序级别自动阻止用户是不可接受的。

是否有任何 apache 模块或方法可以读取 ipset 列表、数据库或其他允许我根据 x-forwarded-for header 自动拒绝用户?

参见:Ban IPs from text file using htaccess

基本上,您可以利用 RewriteMap 从文本文件中读取,运行 脚本(可以访问数据库),甚至可以使用 dbd 执行 SQL 查询.请记住,您不能在 htaccess 文件中定义地图,但可以在一个文件中使用地图。

并且您将检查 %{HTTP:X-FORWARDED-FOR} 条件而不是 %{REMOTE_ADDR}:

RewriteEngine On 
RewriteCond ${access:%{HTTP:X-FORWARDED-FOR}} deny [NC]
RewriteRule ^ - [L,F]