Linux:阻止大量 IP 列表?

Mik*_*iko 4 linux debian nginx iptables

阻止访问 8-10k IP 地址的最有效方法是什么?

我的服务器在 Debian 上运行 EngineX。

如果可能,我想将所有地址显示为内部服务器错误 (500)。

IP 是分散的,不属于任何特定的子集。

pQd*_*pQd 6

如果地址被分组在一个或几个连续的子网中 [例如几个 /24s] - 我将创建简单的预路由规则,将端口 80 上的所有流量从它们 DNAT 到侦听端口 81 的某些内容 [例如来自 nginx 的 vhost] 将只提供服务错误页面:

iptables -t nat -A PREROUTING -p tcp -s 194.88.0.0/16 --dport 80 -j REDIRECT --to 81
Run Code Online (Sandbox Code Playgroud)

如果这是散布在“周围”的 8-10k 唯一 ips ......那会很有趣;-] - 我仍然会使用上述场景,但为了匹配,我会使用ipset。像这样:

ipset --create ban iphash
ipset --add ban 80.1.2.3
ipset --add ban 90.4.5.6
ipset --add ban 153.17.18.19
# ....
iptables -t nat -A PREROUTING -p tcp -m set --set ban src --dport 80 -j REDIRECT --to 81
Run Code Online (Sandbox Code Playgroud)