📖 Linux 防火牆設定

分類:資安與維運 | 作者:pake | 發布時間:2024-09-18 20:53

Linux 防火牆設定

防火牆是 Linux 系統安全防護的第一道防線,用於控制網路流量的允許與拒絕。本篇將介紹 firewalld(適用於 Fedora、RHEL、CentOS)、iptablesnftables,並提供多種實用範例來強化伺服器的安全性。


目錄


安裝與啟動防火牆

安裝 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

建立自訂服務

  1. 建立 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>
  1. 重新載入防火牆並啟用服務:
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)的完整設定指南,涵蓋基本管理、高級規則、日誌分析與最佳實踐。透過這些技巧,您可以確保伺服器的安全性與穩定性。

⬅ 上一篇 下一篇 ➡
🔙 返回 資安與維運 📚 返回教學列表 🏠 返回首頁