- INPUT鏈 – 處理來自外部的數據。
- OUTPUT鏈 – 處理向外發送的數據。
- FORWARD鏈 – 將數據轉發到本機的其他網卡設備上。
- PREROUTING鏈 – 處理剛到達本機並在路由轉發前的數據包。它會轉換數據包中的目標IP地址(destination ip address),通常用於DNAT(destination NAT)。
- POSTROUTING鏈 – 處理即將離開本機的數據包。它會轉換數據包中的源IP地址(source ip address),通常用於SNAT(source NAT)。
- OUTPUT鏈 – 處理本機產生的數據包。
- PREROUTING
- OUTPUT
- FORWARD
- INPUT
- POSTROUTING
- PREROUTING chain
- OUTPUT chain
- Rules包括一個條件和一個目標(target)
- 如果滿足條件,就執行目標(target)中的規則或者特定值。
- 如果不滿足條件,就判斷下一條Rules。
- ACCEPT – 允許防火牆接收數據包
- DROP – 防火牆丟棄包
- QUEUE – 防火牆將數據包移交到用戶空間
- RETURN – 防火牆停止執行當前鏈中的後續Rules,並返回到調用鏈(the calling chain)中。
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
(or)
# iptables –list
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 RH-Firewall-1-INPUT all — 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
1 RH-Firewall-1-INPUT all – 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
Chain RH-Firewall-1-INPUT (2 references)
num target prot opt source destination
1 ACCEPT all – 0.0.0.0/0 0.0.0.0/0
2 ACCEPT icmp – 0.0.0.0/0 0.0.0.0/0 icmp type 255
3 ACCEPT esp – 0.0.0.0/0 0.0.0.0/0
4 ACCEPT ah – 0.0.0.0/0 0.0.0.0/0
5 ACCEPT udp – 0.0.0.0/0 224.0.0.251 udp dpt:5353
6 ACCEPT udp – 0.0.0.0/0 0.0.0.0/0 udp dpt:631
7 ACCEPT tcp – 0.0.0.0/0 0.0.0.0/0 tcp dpt:631
8 ACCEPT all – 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
9 ACCEPT tcp – 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
10 REJECT all – 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
- num – 指定鏈中的規則編號
target – 前面提到的target的特殊值
prot – 協議:tcp, udp, icmp等
source – 數據包的源IP地址
destination – 數據包的目標IP地址
或者
iptables -F
iptables-restore < /etc/iptables.rules
service iptables save
# 重啓iptables服務
service iptables stop
service iptables start
- -A chain – 指定要追加規則的鏈
- firewall-rule – 具體的規則參數
- 指定規則的協議,如tcp, udp, icmp等,可以使用all來指定所有協議。
- 如果不指定-p參數,則默認是all值。這並不明智,請總是明確指定協議名稱。
- 可以使用協議名(如tcp),或者是協議值(比如6代表tcp)來指定協議。映射關係請查看/etc/protocols
- 還可以使用–protocol參數代替-p參數
- 指定數據包的源地址
- 參數可以使IP地址、網絡地址、主機名
- 例如:-s 192.168.1.101指定IP地址
- 例如:-s 192.168.1.10/24指定網絡地址
- 如果不指定-s參數,就代表所有地址
- 還可以使用–src或者–source
- 指定目的地址
- 參數和-s相同
- 還可以使用–dst或者–destination
- -j代表”jump to target”
- -j指定了當與規則(Rule)匹配時如何處理數據包
- 可能的值是ACCEPT, DROP, QUEUE, RETURN
- 還可以指定其他鏈(Chain)作爲目標
- -i代表輸入接口(input interface)
- -i指定了要處理來自哪個接口的數據包
- 這些數據包即將進入INPUT, FORWARD, PREROUTE鏈
- 例如:-i eth0指定了要處理經由eth0進入的數據包
- 如果不指定-i參數,那麼將處理進入所有接口的數據包
- 如果出現! -i eth0,那麼將處理所有經由eth0以外的接口進入的數據包
- 如果出現-i eth+,那麼將處理所有經由eth開頭的接口進入的數據包
- 還可以使用–in-interface參數
- -o代表”output interface”
- -o指定了數據包由哪個接口輸出
- 這些數據包即將進入FORWARD, OUTPUT, POSTROUTING鏈
- 如果不指定-o選項,那麼系統上的所有接口都可以作爲輸出接口
- 如果出現! -o eth0,那麼將從eth0以外的接口輸出
- 如果出現-i eth+,那麼將僅從eth開頭的接口輸出
- 還可以使用–out-interface參數
- 缺省情況下,將匹配所有端口
- 可以指定端口號或者端口名稱,例如”–sport 22″與”–sport ssh”。
- /etc/services文件描述了上述映射關係。
- 從性能上講,使用端口號更好
- 使用冒號可以匹配端口範圍,如”–sport 22:100″
- 還可以使用”–source-port”
- 參數和–sport類似
- 還可以使用”–destination-port”
- 可以指定由逗號分隔的多個參數
- 有效值可以是:SYN, ACK, FIN, RST, URG, PSH
- 可以使用ALL或者NONE
- –icmp-type 0 表示Echo Reply
- –icmp-type 8 表示Echo
iptables -F
# 2.接收目標端口爲22的數據包
iptables -A INPUT -i eth0 -p tcp –dport 22 -j ACCEPT
# 3.拒絕所有其他數據包
iptables -A INPUT -j DROP
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp – anywhere anywhere tcp dpt:ssh
DROP all – anywhere anywhere
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
iptables -A OUTPUT -j DROP
iptables -A FORWARD -j DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT tcp – anywhere anywhere tcp dpt:ssh
DROP all – anywhere anywhere
Chain FORWARD (policy DROP)
target prot opt source destination
Chain OUTPUT (policy DROP)
target prot opt source destination
iptables -A INPUT -i eth0 -p tcp –dport 22 -m state –state NEW,ESTABLISHED -j ACCEPT
# 2.允許發送本地主機的SSH響應
iptables -A OUTPUT -o eth0 -p tcp –sport 22 -m state –state ESTABLISHED -j ACCEPT
- -m state: 啓用狀態匹配模塊(state matching module)
- –-state: 狀態匹配模塊的參數。當SSH客戶端第一個數據包到達服務器時,狀態字段爲NEW;建立連接後數據包的狀態字段都是ESTABLISHED
- –sport 22: sshd監聽22端口,同時也通過該端口和客戶端建立連接、傳送數據。因此對於SSH服務器而言,源端口就是22
- –dport 22: ssh客戶端程序可以從本機的隨機端口與SSH服務器的22端口建立連接。因此對於SSH客戶端而言,目的端口就是22
iptables -A OUTPUT -o eth0 -p tcp –dport 22 -m state –state NEW,ESTABLISHED -j ACCEPT
# 2.接收的數據包源端口爲22
iptables -A INPUT -i eth0 -p tcp –sport 22 -m state –state ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp –dport 80 -m state –state NEW,ESTABLISHED -j ACCEPT
# 1.允許發送本地主機的HTTP響應
iptables -A OUTPUT -o eth0 -p tcp –sport 80 -m state –state ESTABLISHED -j ACCEPT
iptables -F
# 2.配置默認鏈策略
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
# 3.允許遠程主機進行SSH連接
iptables -A INPUT -i eth0 -p tcp –dport 22 -m state –state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp –sport 22 -m state –state ESTABLISHED -j ACCEPT
# 4.允許本地主機進行SSH連接
iptables -A OUTPUT -o eth0 -p tcp –dport 22 -m state –state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp –sport 22 -m state –state ESTABLISHED -j ACCEPT
# 5.允許HTTP請求
iptables -A INPUT -i eth0 -p tcp –dport 80 -m state –state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp –sport 80 -m state –state ESTABLISHED -j ACCEPT