即使已激活,Firewalld 也会阻止 http 流量

即使已激活,Firewalld 也会阻止 http 流量

我正在尝试使用 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

我认为这对你来说应该有用。如果没有用,请在评论中反馈,我会帮助你。这只是我刚刚想到的关于你的问题的想法。

相关内容