在 CentOS 7 Web 服务器中,如何配置 firewalld 以阻止除特定 IP 地址列表之外的所有 IP 地址发出成功的 http 或 https 请求?
我知道我可以使用httpd.conf
ip限制,但是如何让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