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

tom*_*lik 2 http httpd port-80 firewalld firewalld-zone

我正在尝试用 3 台机器配置一个简单的测试环境:

  • 一台Kali模拟互联网:IP = 10.99.0.2
  • 一台使用firewalld充当防火墙的CentOS:IP = 10.99.0.1, 10.4.1.1
  • 一台 CentOS,使用 httpd 作为 Web 服务器: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
Run Code Online (Sandbox Code Playgroud)

我可以从 10.99.0.2 ping 10.4.1.2,但是,只有当防火墙激活时,我无法从 10.99.0.2 获取 10.4.1.2 上的默认网页。

我尝试在固件上执行 tcpdump,我可以看到从 kali 到firewalld 的 http 请求,但随后firewalld 用 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:
Run Code Online (Sandbox Code Playgroud)

(这 2 个丰富的规则是尝试记录防火墙上阻止的连接)

Ber*_*ert 5

你把firewalld想得太简单了。它阻止您从 Kali 访问网络服务器,因为您不允许任何内容访问它。例如,您尚未将 ens192 NIC 添加到任何区域。如果我是你,我会这样做:

首先将您的 ens160 接口放入名为 external 的区域。我认为公众具有误导性。从网络服务器的角度来看,Kali 是一个外部网络。如果您的防火墙除了将来自 Kali 的传入流量转发到 Web 服务器之外没有其他目的,那么只需将接口设置为外部即可。确保仅允许外部服务 HTTP、HTTPS 和 SSH。还需要启用伪装。

其次,您必须设置内部接口。如果您有另一个由防火墙管理且不希望访客或其他人进入的网络,则可以使用 DMZ。就像我们的访客 WiFi 一样,它在 DMZ 防火墙区域中提供服务。对于您的设置,我会将其放入内部或受信任的状态。为了获得最大的安全性,请删除所有服务并仅重新添加 SSH、HTTP 和 HTTPS。另外,添加假面舞会也非常重要:再次是的。

第三步是将每个 HTTP 和 HTTPS 流量转发到您的网络服务器。你在这里有2次机会。

  • 不太专业的方法是将每个传入流量从外部接口第 80 个端口转发到内部第 80 个端口。这将使您的防火墙变得毫无意义。
  • 另一种是在上面设置代理转发服务器。这样会更专业、更安全。只需简单地安装 NginX(网络服务器)并设置您的配置文件即可将所有传入流量转发到您的网络服务器 IP 地址。

请记住,在 Kali 和 Web 服务器之间有一个防火墙服务器,您将永远无法从 Kali ping 到 Web 服务器,因为 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
  • 防火墙-cmd --运行时到永久

如果您决定安装 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;
  }
}
Run Code Online (Sandbox Code Playgroud)
  • 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

我认为这应该对你有用。如果没有,请在评论中报告,我会帮助您。这只是我关于你的问题的想法。