linux防火墻規則設置的核心在于選擇合適的工具并正確配置允許或阻止的流量。1.首選工具為ufw或firewalld,前者適用于debian/ubuntu系統,后者多用于centos/rhel系統;2.ufw默認阻止所有入站流量、允許出站流量,啟用后需手動開放ssh端口(如22/tcp)及其他服務端口(如80/tcp、443/tcp),也可通過命令刪除特定規則;3.firewalld需手動啟動并設置開機自啟,使用–permanent參數添加或移除服務或端口,并通過重新加載使配置生效;4.高級配置如基于ip的訪問控制,ufw可通過allow/deny from指定源地址,firewalld則需創建zone并綁定網段與接口;5.常見錯誤包括誤封ssh端口導致無法連接及更改未生效,應確保ssh開放且配置重載。
linux防火墻規則的設置,核心在于允許或阻止特定的網絡流量進出你的系統。這可以通過 ufw 或 firewalld 這兩個工具來實現,選擇哪個取決于你的發行版和個人偏好。ufw 通常更簡單易用,而 firewalld 提供了更豐富的功能。
解決方案
首先,你需要選擇使用 ufw 還是 firewalld。大多數 Debian/Ubuntu 系統默認安裝了 ufw,而 centos/RHEL 系統則通常使用 firewalld。
使用 UFW (Uncomplicated Firewall)
-
安裝 UFW (如果未安裝):
sudo apt update sudo apt install ufw
-
啟用 UFW:
sudo ufw enable
默認情況下,ufw 會阻止所有傳入連接,允許所有傳出連接。
-
允許 SSH 連接 (重要!):
sudo ufw allow ssh # 或者,更明確地指定端口: sudo ufw allow 22/tcp
如果你使用非標準 SSH 端口,請將 22 替換為你的端口號。否則,你可能會把自己鎖在服務器之外。
-
sudo ufw allow http sudo ufw allow https # 或者,使用端口: sudo ufw allow 80/tcp sudo ufw allow 443/tcp
-
阻止特定端口:
sudo ufw deny 21/tcp # 阻止 FTP
-
查看 UFW 狀態:
sudo ufw status sudo ufw status verbose # 顯示更詳細的信息
-
刪除規則:
sudo ufw delete allow 80/tcp # 刪除允許 80 端口的規則
使用 Firewalld
-
安裝 Firewalld (如果未安裝):
sudo yum install firewalld # CentOS/RHEL sudo apt install firewalld # Debian/Ubuntu (可能需要手動啟動)
-
啟動 Firewalld 并設置為開機啟動:
sudo systemctl start firewalld sudo systemctl enable firewalld
-
允許 SSH 連接:
sudo firewall-cmd --permanent --add-service=ssh
-
允許其他服務 (例如 HTTP/HTTPS):
sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https
-
允許特定端口:
sudo firewall-cmd --permanent --add-port=8080/tcp # 允許 8080 端口
-
阻止特定端口:
sudo firewall-cmd --permanent --remove-port=21/tcp # 阻止 FTP
-
查看 Firewalld 狀態:
sudo firewall-cmd --state sudo firewall-cmd --list-all # 顯示所有規則
-
重新加載 Firewalld 配置 (使更改生效):
sudo firewall-cmd --reload
為什么要設置防火墻規則?
設置防火墻規則是為了保護你的 Linux 系統免受未經授權的訪問和潛在的網絡攻擊。沒有防火墻,你的系統就像一扇敞開的大門,任何人都可能進入。
UFW 和 Firewalld 的區別是什么?我應該選擇哪個?
ufw 相對簡單,易于學習和使用,適合個人用戶或對防火墻配置要求不高的場景。firewalld 更加靈活,功能更強大,適合服務器環境或需要更細粒度控制的場景。firewalld 使用區域 (zones) 的概念,可以針對不同的網絡環境應用不同的規則。如果你剛開始接觸 Linux 防火墻,建議先從 ufw 入手。
如何配置更復雜的防火墻規則,例如基于源 IP 地址的訪問控制?
UFW:
sudo ufw allow from 192.168.1.100 to any port 22 # 允許特定 IP 地址訪問 SSH sudo ufw deny from 10.0.0.0/24 to any port 80 # 阻止特定 IP 地址段訪問 HTTP
Firewalld:
首先,你需要創建一個新的 zone (如果需要):
sudo firewall-cmd --permanent --new-zone=internal sudo firewall-cmd --permanent --zone=internal --add-source=192.168.1.0/24 sudo firewall-cmd --permanent --zone=internal --add-service=ssh sudo firewall-cmd --reload
然后,你可以將網絡接口分配到該 zone:
sudo firewall-cmd --zone=internal --change-interface=eth0 --permanent sudo firewall-cmd --reload
這些命令允許 192.168.1.0/24 網段的設備訪問 SSH 服務,并將 eth0 網卡關聯到 internal zone。
防火墻配置錯誤可能導致什么問題?如何避免?
最常見的問題是意外地阻止了 SSH 訪問,導致無法遠程連接到服務器。為了避免這種情況,務必在啟用防火墻之前允許 SSH 連接。另一個常見問題是忘記重新加載防火墻配置,導致更改沒有生效。
在進行任何防火墻配置更改之前,最好先備份當前的配置。對于 ufw,沒有直接的備份命令,但你可以手動復制 /etc/ufw 目錄。對于 firewalld,配置文件位于 /etc/firewalld 目錄下。