Linux 防火牆設定
防火牆是 Linux 系統安全防護的第一道防線,用於控制網路流量的允許與拒絕。本篇將介紹 firewalld
(適用於 Fedora、RHEL、CentOS)、iptables
和 nftables
,並提供多種實用範例來強化伺服器的安全性。
目錄
安裝與啟動防火牆
安裝 Firewalld
sudo dnf install firewalld -y
啟動並設定開機自動啟動
sudo systemctl enable --now firewalld
檢查 Firewalld 狀態
sudo systemctl status firewalld
Firewalld 基本操作
列出當前防火牆規則
sudo firewall-cmd --list-all
列出所有開放的服務
sudo firewall-cmd --list-services
允許 HTTP (80) 和 HTTPS (443) 連接
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
允許特定連接埠(如 2222)
sudo firewall-cmd --permanent --add-port=2222/tcp
sudo firewall-cmd --reload
移除規則
sudo firewall-cmd --permanent --remove-port=2222/tcp
sudo firewall-cmd --reload
拒絕所有進入流量(預設拒絕模式)
sudo firewall-cmd --set-default-zone=drop
Firewalld 高級設定
允許特定 IP 存取 SSH
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" service name="ssh" accept'
sudo firewall-cmd --reload
阻擋特定 IP
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.50" drop'
sudo firewall-cmd --reload
設定 Port Forwarding(例如 8080 轉發到 80)
sudo firewall-cmd --permanent --add-forward-port=port=8080:proto=tcp:toport=80
sudo firewall-cmd --reload
設定 DMZ(隔離區域)
sudo firewall-cmd --zone=dmz --add-service=http --permanent
sudo firewall-cmd --reload
建立自訂服務
- 建立 XML 設定檔
/etc/firewalld/services/custom-service.xml
:
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>Custom Service</short>
<description>Custom TCP service on port 12345</description>
<port protocol="tcp" port="12345"/>
</service>
- 重新載入防火牆並啟用服務:
sudo firewall-cmd --permanent --add-service=custom-service
sudo firewall-cmd --reload
Iptables 設定
檢視現有規則
sudo iptables -L -v -n
允許 SSH
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
阻擋特定 IP
sudo iptables -A INPUT -s 203.0.113.50 -j DROP
存儲規則
sudo iptables-save | sudo tee /etc/sysconfig/iptables
Nftables 設定
檢查 nftables 狀態
sudo systemctl status nftables
建立基本防火牆規則
sudo nano /etc/nftables.conf
新增:
table inet filter {
chain input {
type filter hook input priority 0;
iif lo accept
ip saddr 203.0.113.50 drop
ip protocol tcp dport 22 accept
counter drop
}
}
啟動 nftables
:
sudo systemctl restart nftables
防火牆最佳實踐
最低權限原則(Deny All, Allow Specific)
sudo firewall-cmd --set-default-zone=drop
sudo firewall-cmd --permanent --add-service=ssh
限制 SSH 嘗試次數(結合 Fail2Ban)
sudo dnf install fail2ban -y
sudo systemctl enable --now fail2ban
限制 ICMP(避免 Ping 掃描攻擊)
sudo firewall-cmd --permanent --add-icmp-block=echo-request
sudo firewall-cmd --reload
日誌與錯誤排除
啟用 Firewalld 日誌
sudo firewall-cmd --set-log-denied=all
sudo systemctl restart firewalld
檢查 Firewalld 日誌
sudo journalctl -xe | grep firewalld
檢查 iptables 記錄
sudo iptables -L -v -n
測試規則
nmap -p 22 server-ip
結語
本篇提供了 Linux 防火牆(Firewalld、Iptables、Nftables)的完整設定指南,涵蓋基本管理、高級規則、日誌分析與最佳實踐。透過這些技巧,您可以確保伺服器的安全性與穩定性。