本文轉載自http://blog.coocla.org/207.html,感謝CooCla的分享!html
iptables防火牆能夠用於建立過濾(filter)與NAT規則。全部Linux發行版都能使用iptables,所以理解如何配置iptables將會幫助你更有效地管理Linux防火牆。若是你是第一次接觸iptables,你會以爲它很複雜,可是一旦你理解iptables的工做原理,你會發現其實它很簡單。linux
INPUT鏈 – 處理來自外部的數據。bash
OUTPUT鏈 – 處理向外發送的數據。服務器
FORWARD鏈 – 將數據轉發到本機的其餘網卡設備上。網絡
PREROUTING鏈 – 處理剛到達本機並在路由轉發前的數據包。它會轉換數據包中的目標IP地址(destination ip address),一般用於DNAT(destination NAT)。ssh
POSTROUTING鏈 – 處理即將離開本機的數據包。它會轉換數據包中的源IP地址(source ip address),一般用於SNAT(source NAT)。tcp
OUTPUT鏈 – 處理本機產生的數據包。ide
PREROUTING性能
OUTPUT測試
FORWARD
INPUT
POSTROUTING
PREROUTING chain
OUTPUT chain
Rules包括一個條件和一個目標(target)
若是知足條件,就執行目標(target)中的規則或者特定值。
若是不知足條件,就判斷下一條Rules。
ACCEPT – 容許防火牆接收數據包
DROP – 防火牆丟棄包
QUEUE – 防火牆將數據包移交到用戶空間
RETURN – 防火牆中止執行當前鏈中的後續Rules,並返回到調用鏈(the calling chain)中。
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
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服務
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
# 2.接收目標端口爲22的數據包
iptables -A INPUT -i eth0 -p tcp –dport 22 -j ACCEPT
# 3.拒絕全部其餘數據包
iptables -A INPUT -j DROP
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy DROP)
target prot opt source destination
Chain OUTPUT (policy DROP)
target prot opt source destination
# 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
# 2.接收的數據包源端口爲22
iptables -A INPUT -i eth0 -p tcp –sport 22 -m state –state ESTABLISHED -j ACCEPT
# 1.容許發送本地主機的HTTP響應
iptables -A OUTPUT -o eth0 -p tcp –sport 80 -m state –state ESTABLISHED -j ACCEPT
# 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