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 到 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
我認為這應該對你有用。如果沒有,請在評論中報告,我會幫助你。這只是我對你的問題的想法。