Http

Firewalld 會阻止 http 流量,即使已啟動

  • December 8, 2017

我正在嘗試用 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 到 firewalld,但隨後 firewalld 以 ICMP 數據包響應:ICMP host 10.4.1.2 unreachable - admin prohibited。據我所知,如果請求被阻止,則此 icmp 消息是從 FW 發送的。

這是兩個區域的配置: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條豐富的規則試圖在防火牆上記錄被阻止的連接)

你認為firewalld太簡單了。它阻止了你從 Kali 訪問網路伺服器,因為你不允許任何東西進入它。例如,您尚未將 ens192 NIC 添加到任何區域。如果我是你,我會這樣做:

首先將您的 ens160 介面放到名為 external 的區域。在我看來,公眾具有誤導性。從網路伺服器的角度來看,Kali 是一個外部網路。如果您的防火牆除了將傳入的流量從 Kali 轉發到 Webserver 之外沒有其他目的,那麼只需將介面設置為外部。確保只允許外部服務 HTTP、HTTPS 和 SSH。還需要啟用偽裝。

其次,您必須設置內部介面。如果您有另一個由防火牆管理的網路,您不希望訪客或其他人進入,則使用 DMZ。與我們的訪客 WiFi 一樣,它在 DMZ 防火牆區域提供服務。對於您的設置,我會將其放入內部或信任中。為了獲得最大的安全性,請刪除所有服務並再次僅添加 SSH、HTTP 和 HTTPS。此外,添加偽裝也非常重要:再次是的。

第三步是將每個 HTTP 和 HTTPS 流量轉發到您的網路伺服器。您在這裡有 2 次機會。

  • 不太專業的是將來自外部介面第 80 埠的所有傳入流量轉發到內部第 80 埠。這將使您的防火牆變得毫無意義。
  • 另一種是在其上設置代理轉發伺服器。這樣會更專業,更安全。只需簡單地安裝 NginX(網路伺服器)並設置您的配置文件以將所有傳入流量轉發到您的網路伺服器 IP 地址。

請記住,在 Kali 和 Webserver 之間有一個防火牆伺服器,你將永遠無法從 Kali ping 到 Webserver,這僅僅是因為 ping 不會被允許通過防火牆。這是正常行為,您不應更改它。

以下是您可能需要的命令:

  • 防火牆-cmd –zone=external –change-interface=ens160
  • 防火牆-cmd –zone=external –add-service=http
  • firewall-cmd –zone=external –add-service=https
  • 防火牆-cmd –zone=external –add-service=ssh
  • 防火牆-cmd –zone=external –add-masquerade
  • 防火牆-cmd –zone=trusted –change-interface=ens192
  • firewall-cmd –zone=trusted –add-service=http
  • firewall-cmd –zone=trusted –add-service=https
  • firewall-cmd –zone=trusted –add-service=ssh
  • firewall-cmd –zone=trusted –add-masquerade
  • 防火牆-cmd –runtime-to-permanent

如果您決定安裝 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

我認為這應該對你有用。如果沒有,請在評論中報告,我會幫助你。這只是我對你的問題的想法。

引用自:https://serverfault.com/questions/887186