iptables 是一個配置Linux 內(nèi)核防火墻 的命令行工具污朽,是netfilter 項目的一部分秉剑。術語iptables 也經(jīng)常代指該內(nèi)核級防火墻

iptables 表(Tables)與鏈(Chains)
iptables具有Filter,NAT,Mangle,Raw四種內(nèi)建表。
1. filter表
Filter
表示iptables的默認表罚渐,它具有三種內(nèi)建鏈:
- INPUT鏈 - 處理來自外部的數(shù)據(jù)。
- OUTPUT鏈 - 處理向外發(fā)送的數(shù)據(jù)。
- FORWARD鏈 - 將數(shù)據(jù)轉發(fā)到本機的其他網(wǎng)卡設備上启绰。
2. nat表
nat
表有三種內(nèi)建鏈:
- PREROUTING鏈 - 處理剛到達本機并在路由轉發(fā)前的數(shù)據(jù)包。它會轉換數(shù)據(jù)包中的目標IP地址沟使,通常用于DNAT委可。
- POSTROUTING鏈 - 處理即將離開本機的數(shù)據(jù)包。它會轉換數(shù)據(jù)包中的源IP地址腊嗡,通常用于SNAT着倾。
- OUTPUT鏈 - 處理本機產(chǎn)生的數(shù)據(jù)包拾酝。
3. mangle表
mangle
表用于指定如何處理數(shù)據(jù)包。它能改變TCP頭中的QoS位卡者。mangle
表具有5個內(nèi)建鏈蒿囤。
- PREROUTING
- OUTPUT
- FORWARD
- INPUT
- POSTROUTING
下面是iptables的三個內(nèi)建表:
鏈的操作
1. mangle表
強烈建議你不要在這個表里做任何過濾,不管是DNAT崇决,SNAT或者Masquerade蟋软。
以下是mangle表中僅有的幾種操作:
- TOS
- TTL
- MARK
TOS操作用來設置或改變數(shù)據(jù)包的服務類型域。這常用來設置網(wǎng)絡上的數(shù)據(jù)包如何被路由等策略嗽桩。它在Internet上還不能使用岳守,而且很多路由器不會注意到這個域值。
TTL操作用來改變數(shù)據(jù)包的生存時間域碌冶,我們可以讓所有數(shù)據(jù)吧只有一個特殊的TTL湿痢。可以欺騙一些ISP扑庞。
MARK用來給包設置特殊的標記譬重。它并不改變包的內(nèi)容,只是在內(nèi)核中對相應的包加入標記罐氨。
2. nat表
此表僅用于NAT臀规,也就是轉換包的源或者目標地址。注意栅隐,只有流的第一個包會被這個鏈匹配塔嬉,其后的包會被自動做相同的處理。實際操作分類:
- DNAT
- SNAT
- MASQUERADE
DNAT操作主要用在這樣一種情況租悄,你有一個合法的IP地址谨究,要把對防火墻的訪問重定向到其他的機子上。也就是說泣棋,我們改變的是數(shù)據(jù)包的目標地址胶哲,以使包能重路由到某臺主機。
SNAT改變包的源地址潭辈,這極大程度上可以隱藏你的本地網(wǎng)絡鸯屿。一個很好的例子是我們知道防火墻的外部地址,但必須用這個地址替換本地網(wǎng)絡地址把敢。如果使用類似192.168.0.0/24這樣的地址寄摆,是不會從Internet得到任何回應的。
MASQUERADE的作用如其名字一樣技竟,只是計算機的符合稍微多一點冰肴。因為對每個匹配的包屈藐,MASQUERADE都要查找可用的IP地址榔组,而不是像SNAT用的IP地址是配置好的熙尉。當然,這也有好好處搓扯,就是我們可以通過PPP检痰、PPPOE\SLIP等撥號得到的地址,這些地址可能是由ISP的DHCO隨機分配的锨推。
3. filter表
filter表用來過濾數(shù)據(jù)包铅歼,我們可以在任何時候匹配包并過濾它們。我們就是在這里根據(jù)包的內(nèi)容對包做DROP或者ACCEPT的换可。當然椎椰,我們也可以預先在其他地方做些過濾,但是這個表才是設計用來過濾的沾鳄。幾乎所有的target都可以在這兒使用慨飘。
數(shù)據(jù)包流程
iptables 規(guī)則(Rules)
- Rules包括一個條件和一個目標(Target)。
- 如果滿足條件译荞,就執(zhí)行目標中的規(guī)則或者待定值瓤的。
- 如果不滿足條件,就判斷下一條規(guī)則吞歼。
目標值(Target Values)
下面是你可以在target里指定的特殊值:
- ACCEPT - 允許防火墻接收數(shù)據(jù)包
- DROP - 防火墻丟棄包
- QUEUE - 防火墻將數(shù)據(jù)包移交到用戶空間
- RETURN - 防火墻停止執(zhí)行當前鏈中的后續(xù)Rules圈膏,并返回到調(diào)用鏈中
如果你執(zhí)行iptables -t filter --list
你將看到防火墻上的可用規(guī)則。
下面的例子說明當前系統(tǒng)沒有定義防火墻篙骡。你可以看到稽坤,它顯示了默認的filter表,以及表內(nèi)默認的input鏈糯俗,forward鏈慎皱,output鏈。
<pre class="prettyprint linenums prettyprinted">
# iptables -t filter –list
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
</pre>
注意叶骨,如果不指定-t
選項茫多,默認就是filter表。
規(guī)則語法
書寫規(guī)則的語法格式是:
iptables [-t table] command [match] [target/jump]
查看ip connenction信息
cat /proc/net/ip_conntrack