Fedora Server 30 防火牆配置詳解
您在 Fedora Server 30 上遇到的遠程連接問題是許多初次接觸 firewalld
的用戶會遇到的典型障礙。以下是您解決問題的邏輯以及一些相關的說明:
1. 理解 firewalld
與 iptables
firewalld
(Firewall Daemon): 這是 Fedora 等 RHEL 系發行版推薦和預設的動態防火牆管理工具。它通過區域(zones)來管理網絡連接,並可以動態地添加或刪除規則,而無需重載整個防火牆。它的底層確實使用iptables
或nftables
。iptables
(IP Tables): 這是 Linux 核心自帶的網絡包過濾工具。它通過一系列的「規則鏈」來控制數據包的流向。iptables-services
是一個包,提供了管理這些規則的服務。
您遇到的問題: 默認情況下,firewalld
會啟用一些基本規則,阻止外部對大部分端口的訪問,這導致像 httpd
、plexmediaserver
這些服務無法從外部訪問。即使服務本身啟動了,防火牆也會攔截流量。
2. 您的解決步驟分析
您的操作思路是:禁用複雜的 firewalld
,回歸到更直接、可控的傳統 iptables
,並將其清空以解除所有限制。
systemctl stop firewalld
: 這是關鍵的第一步,它會立即停止firewalld
服務,並移除其當前的防火牆規則。dnf install iptables-services
: 安裝傳統的iptables
服務。這個包包含了iptables
命令工具和用於保存/載入規則的服務腳本。- 重啟系統: 這一點很重要。重啟系統後,
firewalld
不會再次啟動,而iptables-services
則會接管防火牆管理。通常情況下,新安裝的iptables-services
默認會從一個空的規則集開始。 systemctl restart iptables
: 確保iptables
服務啟動並載入任何已配置的規則(此時通常是空的)。systemctl stop iptables
: 這一步有點特別。它會停止iptables
服務,但不會清除當前生效的iptables
規則。換句話說,此時內核中的iptables
規則仍然是您停止服務前所設定的狀態。iptables -L -n
: 顯示當前內核中實際生效的iptables
規則。您的輸出顯示所有鏈的策略都是ACCEPT
,且沒有任何自定義規則。這意味著所有流量都被允許通過。
3. 您的結論與注意事項
您的結論:「這樣,就可以放心使用firewalld」
這句話可能存在筆誤,因為您實際上是禁用了 firewalld
並使用了 iptables
。在您完成這些步驟後,您的系統防火牆已經處於 完全開放 的狀態,任何端口的流量都可以進入或離開。
重要注意事項:
- 安全性風險: 您的當前配置 (
Chain INPUT (policy ACCEPT)
) 意味著您的伺服器對外部是完全開放的,沒有任何防火牆保護。這對於生產環境來說是非常危險的,因為它暴露了所有服務,可能成為攻擊的目標。 - 推薦做法:
- 如果傾向於使用
firewalld
: 建議重新啟用firewalld
(systemctl start firewalld && systemctl enable firewalld
),然後學習如何使用firewall-cmd
命令來開啟您需要的特定端口和服務。例如:Bashsudo firewall-cmd --permanent --add-service=http # 允許 HTTP (80 端口) sudo firewall-cmd --permanent --add-port=32400/tcp # 允許 Plex (默認 32400 端口) sudo firewall-cmd --reload # 重新載入規則
- 如果堅持使用
iptables
: 您應該學習如何添加必要的iptables
規則來只開放您需要的端口,並拒絕其他所有流量。這比firewalld
更複雜,需要手動管理規則文件。 例如,要允許 SSH 和 HTTP 流量: 請注意,上述Bash# 允許已建立的連接 iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT # 允許 SSH (22 端口) iptables -A INPUT -p tcp --dport 22 -j ACCEPT # 允許 HTTP (80 端口) iptables -A INPUT -p tcp --dport 80 -j ACCEPT # 允許 HTTPS (443 端口) iptables -A INPUT -p tcp --dport 443 -j ACCEPT # 允許 Plex (例如 32400 端口) iptables -A INPUT -p tcp --dport 32400 -j ACCEPT # 拒絕其他所有進入的流量 (非常重要!) iptables -P INPUT DROP # 保存規則 iptables-save > /etc/sysconfig/iptables # 啟用 iptables 服務以在重啟時載入這些規則 systemctl enable iptables systemctl start iptables
iptables
規則是示例,您需要根據實際需求進行調整。
- 如果傾向於使用