阻止除指定范围之外的所有 ip 输入到特定端口

阻止除指定范围之外的所有 ip 输入到特定端口

在 CentOS 7 Web 服务器中,如何配置 firewalld 以阻止除特定 IP 地址列表之外的所有 IP 地址发出成功的 http 或 https 请求?

我知道我可以使用httpd.confip限制,但是如何让firewalld限制ip呢?什么文件?我用吗firewall-cmd?什么语法?

我想这涉及创建一个或多个丰富的规则,这些规则在文档。但我想确保我正确地做到了这一点。例如,是否有一条规则指定拒绝任何人的所有 http/s 请求?那么是否需要另一条规则来批准每个特定 ip 的 http/s 请求?该规则是针对服务 http/s,还是针对端口 443?或者某种组合?记录拒绝和接受怎么样?

答案1

我不喜欢 FirewallD,所以我用旧的 iptables 服务替换它,

我会这样做,

  • 创建一个新链,让我们调用它ALLOW_TO_HTTP

    iptables -N ALLOW_TO_HTTP

  • 然后将您想要允许的所有 IP 地址添加到该链中

    iptable -I ALLOW_TO_HTTP -j ACCEPT -s 1.2.3.4

  • 然后在您的 INPUT 表中添加指向上述链的行,以在端口 80 和 443 上建立新连接。

    iptables -I INPUT -p tcp -m multiport --dports 80,443 -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j ALLOW_TO_HTTP

上述规则会将端口 443 和 80 上的所有新连接重定向到 ALLOW_TO_HTTP 链,如果有任何 IP 匹配,则连接将被接受。

为了获得最佳实践,您需要找到正确的行来放置第三条规则,因为您不希望将其作为 iptables 中的第一条规则。您可以通过指定要插入规则的行来完成此操作:例如

iptables -I INPUT 4 ... 

这会将规则插入到第 4 行。

您可以使用以下命令列出规则行号:

iptables -nvL --line-numbers

相关内容