我尝试阻止除 22、80 和 443 之外的所有端口。我将以下规则添加到iptables
.
*filter
:INPUT ACCEPT [36878:18003219]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [33947:26518456]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -s MY_IP -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -j DROP
COMMIT
端口 22 工作正常,但 Cloudflare 无法连接到 Web 服务器。-A INPUT -j DROP
导致问题。事实上,443 连接直到列表末尾才匹配规则。
因此,经过长时间的评论会议,以下是我们汇总的内容:
当您启用自定义防火墙时,CloudFlare 报告了 504 网关超时。但值得注意的是,它说这是它从您的服务器收到的错误,而不是它尝试访问您的服务器时超时。区别很微妙但很重要:这意味着 CloudFlare 与您的服务器正常通信,但您的服务器没有与自己通信。
您有一个代理到在 localhost 上运行的内部 Web 应用程序的 Web 服务器。但是您的自定义防火墙不允许本地主机连接。这是 Web 服务器与 Web 应用程序通信以及许多其他内部服务相互通信所必需的,您可能使用的每个专业防火墙构建器都会毫无疑问地允许 localhost 流量。
(PS:您应该启用 ICMP 以防止其他类型的损坏,例如路径 MTU 发现。)