iptables的結構:
iptables由上而下,由Tables,Chains,Rules組成。
一、iptables的表tables與鏈chains
iptables有Filter, NAT, Mangle, Raw四種內建表:
1. Filter表
Filter是iptables的默認表,它有以下三種內建鏈(chains):
INPUT鏈?– 處理來自外部的數據。
OUTPUT鏈?– 處理向外發送的數據。
FORWARD鏈?– 將數據轉發到本機的其他網卡設備上。
2. NAT表
NAT表有三種內建鏈:
PREROUTING鏈?– 處理剛到達本機并在路由轉發前的數據包。它會轉換數據包中的目標IP地址(destination ip address),通常用于DNAT(destination NAT)。
POSTROUTING鏈?– 處理即將離開本機的數據包。它會轉換數據包中的源IP地址(source ip address),通常用于SNAT(source NAT)。
OUTPUT鏈?– 處理本機產生的數據包。
3. Mangle表
Mangle表用于指定如何處理數據包。它能改變TCP頭中的QoS位。Mangle表具有5個內建鏈(chains):
-
PREROUTING
-
OUTPUT
-
FORWARD
-
INPUT
-
POSTROUTING
4. Raw表
Raw表用于處理異常,它具有2個內建鏈:
PREROUTING chain
OUTPUT chain
5.小結
二、IPTABLES 規則(Rules)
規則的關鍵知識點:
Rules包括一個條件和一個目標(target)
如果滿足條件,就執行目標(target)中的規則或者特定值。
如果不滿足條件,就判斷下一條Rules。
目標值(Target Values)
在target里指定的特殊值:
ACCEPT?– 允許防火墻接收數據包
DROP?– 防火墻丟棄包
QUEUE?– 防火墻將數據包移交到用戶空間
RETURN?– 防火墻停止執行當前鏈中的后續Rules,并返回到調用鏈(the calling chain)中。
實戰
1.丟棄80端口的tcp連接
iptables -t filter -I INPUT -p tcp --dport 80 -j DROP
2.丟棄ssh不需要的包
iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED,RELATED -j ACCEPT
-m state --state ESTABLISHED,RELATED
?是一個iptables規則中的匹配條件,用于匹配特定的連接狀態。這個條件允許通過已建立或相關狀態的連接。在iptables中,連接狀態用于確定數據包在網絡連接中的當前狀態,以便過濾器可以根據這些狀態來決定是否允許或拒絕數據包通過。
ESTABLISHED
:表示數據包屬于已建立的連接,即已經通過三次握手建立起連接的數據包。
RELATED
:表示數據包與已建立的連接相關,例如某些協議(如FTP)會在數據連接之外建立一個控制連接,這些數據包就可以被標記為RELATED狀態。通過在輸出鏈中添加這個條件,你的iptables規則將允許出站SSH連接的響應數據包通過,確保SSH會話的正常運行。
3. 阻止無效的出站HTTP連接(80端口)
iptables -A OUTPUT -p tcp --sport 80 -m state --state NEW -j DROP
new 代表tcp三次握手中的第一次握手
這種連接狀態的匹配可用于識別尚未建立的連接,從而可以應用適當的策略來控制是否允許它們通過防火墻。
在你的情景中,
-m state --state NEW -j DROP
?這樣的規則將阻止新建立的、未經請求回應的連接通過,幫助增加服務器的安全性。這樣做可以防止未經授權的數據流量進入服務器。