概述
iptables 透過定義進出網路封包的規則來實施系統的安全策略。每條規則都會為符合特定條件的封包指定一個動作(目標),例如 ACCEPT(允許)、DROP(忽略)或 REJECT(拒絕)。它主要使用 INPUT、OUTPUT 和 FORWARD 鏈,並利用 PREROUTING 和 POSTROUTING 鏈進行 NAT 功能。
主要功能
- 封包過濾(防火牆)
- 網路位址轉換(NAT)
- 連接埠轉發和重定向
- 基於特定 IP 位址、連接埠、協定控制流量
主要選項
iptables 命令與各種選項結合使用,用於新增、刪除、修改特定規則或查詢當前規則。
規則管理
匹配條件
目標(動作)
生成的命令:
請試著組合命令。
這個 Django 應用程序是一個技術指南文檔,旨在為用戶輕鬆解釋 Linux 的各種命令。
`iptables` 執行命令。
請將上述選項組合在一起,與 AI 一同虛擬執行命令。
使用範例
使用 iptables 設定常見防火牆規則的範例。建議在新增規則前備份當前規則。
查詢所有當前規則
sudo iptables -L -v -n
以詳細資訊和數字 IP 位址查詢規則。
允許 SSH(連接埠 22)
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
允許來自外部的 SSH 連線。
阻止特定 IP 位址
sudo iptables -A INPUT -s 192.168.1.100 -j DROP
阻止來自特定 IP 位址(例如 192.168.1.100)的所有傳入流量。
允許所有傳出流量
sudo iptables -P OUTPUT ACCEPT
將 OUTPUT 鏈的預設策略設定為允許所有從系統傳出的流量。
Web 伺服器連接埠轉發(80 -> 8080)
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
將傳入的連接埠 80 要求重定向到本地的連接埠 8080。(使用 NAT 表)
內部網路偽裝(NAT)
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
當內部網路流量通過外部介面(例如 eth0)離開時,更改來源 IP。(使用 NAT 表)
安裝
iptables 通常預設安裝在大多數 Linux 發行版中。如果尚未安裝,您可以使用以下命令進行安裝。
Debian/Ubuntu
sudo apt update
sudo apt install iptables
CentOS/RHEL/Fedora
sudo dnf install iptables
提示與注意事項
iptables 規則在系統重新啟動時可能會消失,因此了解如何永久儲存規則非常重要。此外,設定規則時應注意順序和預設策略。
永久儲存規則
iptables 規則預設是揮發性的,因此需要儲存才能在重新啟動後維持。不同發行版有不同的建議方法。
- **Debian/Ubuntu**:安裝 `sudo apt install iptables-persistent` 後,使用 `sudo netfilter-persistent save` 命令儲存規則。規則將儲存在 `/etc/iptables/rules.v4` 和 `/etc/iptables/rules.v6`。
- **CentOS/RHEL/Fedora**:安裝 `sudo dnf install iptables-services` 後,使用 `sudo systemctl enable iptables && sudo systemctl start iptables` 命令啟用服務,並使用 `sudo iptables-save > /etc/sysconfig/iptables` 命令儲存規則。
- **通用方法**:使用 `sudo iptables-save > /path/to/rules.v4` 將規則儲存到檔案,然後編寫一個腳本,在開機時使用 `sudo iptables-restore < /path/to/rules.v4` 命令載入該檔案。
規則順序的重要性
iptables 規則在鏈中從上到下按順序應用。當封包匹配特定規則時,將執行該規則的動作,並且不會檢查後續規則。因此,將更具體的規則(例如阻止特定 IP)放在一般規則(例如允許所有 HTTP)之上非常重要。
設定預設策略時的注意事項
設定鏈的預設策略(例如 `iptables -P INPUT DROP`)時必須非常謹慎。在將預設策略變更為 DROP 之前,應先新增允許 SSH 連線等必要服務的規則。否則,所有對系統的網路連線都將被阻止,導致無法存取。
轉向 nftables
在最新的 Linux 發行版中,許多發行版使用 `nftables` 作為預設防火牆框架,而不是 iptables。`nftables` 整合了 iptables 的功能並提供了改進的語法。`iptables` 命令可能在內部使用 `nftables` 的相容性層,因此最好確認系統的預設防火牆工具。