故意向超时客户端发出 nginx 丢弃请求

信息安全 nginx
2021-08-15 10:58:38

我想避免 nginx 处理请求并通过根本不回答来隐藏它甚至存在于某个 IP 的事实。请求应该被丢弃,并且客户端的浏览器应该自己超时。那可能吗?

我的猜测是 aproxy_pass可能会有所帮助,但我不确定仅此一项是否能做到。

我可以配置一个return 50x;,但这会显示一个正在运行的服务器。

2个回答

故意向超时客户端发出 nginx 丢弃请求

无论是使用 nginx 还是其他服务器,都无法丢弃 HTTP 请求来隐藏服务器。只有在建立 TCP 连接后才会发送 HTTP 请求。然后只能在有或没有响应的情况下关闭此连接。您也可以保持打开状态,以便浏览器超时,但每个打开的连接都需要服务器上的资源。

您只能根据源 IP 为客户端隐藏服务器,而不是根据 HTTP 请求的内容(即特定 URL)。但这不会在网络服务器中完成,而是在防火墙中完成(即 iptables、ipfw、pf 或任何您拥有的)。

如果您的意图是惹恼典型的机器人测试可能的漏洞,那么您可以尝试重定向到不存在的 IP 或端口。然后,防火墙可能会丢弃对该端口的任何访问,从而使机器人超时。我在我的网站上这样做,根据我的经验,这会减慢机器人的速度,因为大多数人会很乐意遵循这样的重定向。

在只需要有限访问的服务器上,我只是iptables用来限制对允许查看该站点的 IP 地址的访问。其他 IP 地址将完全按照您的意愿行事,超时,就好像那里什么都没有。

对于允许定义和运行的每个(范围)IP 地址:

# /sbin/iptables -A INPUT -p tcp -s $ip --dport 80 -j ACCEPT

(替换$ip为所需的 IP(范围))

对于 IPv6,你可以做同样的事情,除了 run /sbin/ip6tables

然后丢弃其他所有内容:

# /sbin/iptables -P INPUT DROP
# /sbin/ip6tables -P INPUT DROP

当然,请确保也允许来自您的 IP 的 SSH,否则如果机器是远程的,您将自己锁定。

另请记住,默认情况下,这些规则在重新启动后无法保留。即使在 Linux 发行版之间保存规则的位置也不同,但在 Debian 上我使用:

# /sbin/iptables-save > /etc/iptables/rules.v4
# /sbin/ip6tables-save > /etc/iptables/rules.v6