![即使已激活,Firewalld 也会阻止 http 流量](https://linux22.com/image/714618/%E5%8D%B3%E4%BD%BF%E5%B7%B2%E6%BF%80%E6%B4%BB%EF%BC%8CFirewalld%20%E4%B9%9F%E4%BC%9A%E9%98%BB%E6%AD%A2%20http%20%E6%B5%81%E9%87%8F.png)
我正在尝试使用 3 台机器配置一个简单的测试环境:
- 一个 Kali 模拟互联网:IP = 10.99.0.2
- 一个使用firewalld作为防火墙的CentOS:IPs = 10.99.0.1,10.4.1.1
- 一个使用 httpd 充当 Web 服务器的 CentOS:IP = 10.4.1.2
环境的一个小表示:
|Kali|------------------(ens160) |Firewalld| (ens192)------------------- |Web Server|
10.99.0.2 10.99.0.1 | 10.4.1.1 10.4.1.2
我可以从 10.99.0.2 ping 10.4.1.2,但是,仅当激活了 Firewalld 时,我才无法从 10.99.0.2 获取 10.4.1.2 上的默认网页。
我尝试在 FW 上执行 tcpdump,我可以看到 http 请求从 kali 发送到防火墙,但防火墙会使用 ICMP 数据包进行响应:ICMP host 10.4.1.2 unreachable - admin prohibited
。据我了解,如果请求被阻止,则从防火墙发送此 icmp 消息。
以下是两个区域的配置:public 和 dmz
public (active)
target: default
icmp-block-inversion: no
interfaces: ens160
sources:
services: http https
ports: 443/tcp 80/tcp
protocols:
masquerade: yes
forward-ports:
sourceports:
icmp-blocks:
rich rules:
rule service name="https" log level="info"
rule service name="http" log level="info"
dmz (active)
target: default
icmp-block-inversion: no
interfaces:
sources: 10.4.1.2
services: http https
ports:
protocols:
masquerade: no
forward-ports:
sourceports:
icmp-blocks:
rich rules:
(这 2 条丰富的规则尝试记录防火墙上被阻止的连接)
答案1
您对防火墙的看法过于简单。它阻止您从 Kali 访问 Web 服务器,因为您不允许任何内容进入它。例如,您没有将 ens192 NIC 添加到任何区域。如果我是您,我会这样做:
首先将您的 ens160 接口放入名为 external 的区域。我认为 public 具有误导性。从 Web 服务器的角度来看,Kali 是一个外部网络。如果您的防火墙除了将来自 Kali 的传入流量转发到 Web 服务器之外没有其他用途,那么只需将接口放入 external 即可。确保您只允许 external 上的 HTTP、HTTPS 和 SSH 服务。还需要启用伪装。
其次,您必须设置内部接口。如果您有另一个由防火墙管理的网络,而您不希望访客或其他人进入该网络,则可以使用 DMZ。例如,我们的访客 WiFi 是在 DMZ 防火墙区域提供的。对于您的设置,我会将其放入内部或受信任的区域中。为了获得最大的安全性,请删除所有服务,然后再次添加 SSH、HTTP 和 HTTPS。添加伪装也非常重要:再次确认。
第三步是将所有 HTTP 和 HTTPS 流量转发到您的网络服务器。您有 2 次机会。
- 不太专业的做法是将所有传入流量从外部接口的第 80 个端口转发到内部接口的第 80 个端口。这将使你的防火墙变得毫无意义。
- 另一种方法是在其上设置代理转发服务器。这样会更专业、更安全。只需安装 NginX(Web 服务器)并设置配置文件,将所有传入流量转发到 Web 服务器的 IP 地址即可。
请记住,如果 Kali 和 Webserver 之间有防火墙服务器,您将永远无法从 Kali ping 到 Webserver,因为 ping 不允许越过防火墙。这是正常现象,您不应更改它。
以下是您可能需要的命令:
- 防火墙cmd --zone=external --change-interface=ens160
- 防火墙cmd --zone=external --add-service=http
- 防火墙 cmd --zone=external --add-service=https
- 防火墙cmd --zone=external --add-service=ssh
- 防火墙cmd --zone=external --add-masquerade
- 防火墙cmd --zone=trusted --change-interface=ens192
- 防火墙cmd --zone=trusted --add-service=http
- 防火墙 cmd --zone=trusted --add-service=https
- 防火墙cmd --zone=trusted --add-service=ssh
- 防火墙cmd --zone=trusted --add-masquerade
- 防火墙命令——运行时到永久
如果您决定安装NginX,只需执行以下操作:
- mkdir /etc/nginx/sites-available /etc/nginx/sites-enabled
- vim /etc/nginx/sites-available/com.website.your.conf
server { server_name your.website.com; listen 80; location / { proxy_pass http://10.4.1.2$request_uri; proxy_set_header Host $host; } }
- ln -s /etc/nginx/sites-available/com.website.your.conf /etc/nginx/sites-enabled
vim /etc/nginx/nginx.conf
#include /etc/nginx/conf.d/*.conf; 包括/etc/nginx/sites-enabled/*.conf;
systemctl 重启 nginx
我认为这对你来说应该有用。如果没有用,请在评论中反馈,我会帮助你。这只是我刚刚想到的关于你的问题的想法。