Linux 網(wǎng)絡(luò)數(shù)據(jù)包處理流程
iptables 用法
- 注意事項(xiàng)
iptables 設(shè)置是有順序的,如果數(shù)據(jù)包滿足前面制定的規(guī)則械巡,那么后面的規(guī)則將不被采用,所以對(duì)于舍棄的數(shù)據(jù)包盡可能的放在接收數(shù)據(jù)包的前面饶氏,這樣可以避免本來要舍棄的數(shù)據(jù)被接收讥耗。 - 表
- filter
內(nèi)建三個(gè)鏈,INPUT 疹启、OUTPUT 古程、FORWARD;對(duì)數(shù)據(jù)包進(jìn)行DROP、ACCEPT喊崖、LOG挣磨、REJECT等操作菲宴。 - nat
僅用于NAT,用來轉(zhuǎn)換源或者目的地址,用來解決ipv4地址空間不夠問題趋急,搭建局域網(wǎng)等喝峦,只有NAT主機(jī)具有公網(wǎng)ip地址,局域網(wǎng)內(nèi)的其他主機(jī)通過重定向源或目的地址來實(shí)現(xiàn)外網(wǎng)的訪問呜达,當(dāng)然也提高可內(nèi)網(wǎng)主機(jī)的安全性谣蠢,可通過防火墻禁止外網(wǎng)主機(jī)主動(dòng)聯(lián)機(jī)內(nèi)網(wǎng)主機(jī)。
- filter
注意事項(xiàng):
屬于一個(gè)流的數(shù)據(jù)包只經(jīng)過nat表一次查近。如果第一個(gè)包被允許做NAT或者M(jìn)asqueraded眉踱, 那么余下的數(shù)據(jù)包會(huì)自動(dòng)得做相同的操作。這也是為什么不推薦在nat表中做過濾的原因霜威。
DNAT
改變目的地址谈喳,以使包能重路由到某臺(tái)主機(jī)。SNAT
改變包的源地址戈泼,可以用來復(fù)用ipv4地址婿禽。-
MASQUERADE
ip地址是動(dòng)態(tài)的,類似于DHCP大猛,與DNAT和SNAT固定的ip地址不同扭倾。- mangle
可以使用mangle匹配改變包的TOS 等特性,注意事項(xiàng):不要在這個(gè)表中做任何過濾挽绩。mangle 表僅有的操作:
- mangle
TOS
TTL
可以讓所有數(shù)據(jù)包只有一個(gè)特殊的TTL膛壹。 某些ISP可能會(huì)通過TTL來判斷計(jì)算機(jī)是否共享網(wǎng)絡(luò),可以用來欺騙ISP-
MARK
- raw
鏈
- INPUT
網(wǎng)絡(luò)數(shù)據(jù)包的目的地是本地Linux主機(jī)唉堪。 - OUTPUT
網(wǎng)絡(luò)數(shù)據(jù)包的原是本地Linux 主機(jī)模聋。 - FORWARD
由一個(gè)本地Linux 主機(jī)的一個(gè)網(wǎng)卡接收到的數(shù)據(jù)發(fā)到另一個(gè)網(wǎng)卡。 - PREROUTING
路由前 - POSTROUTING
路由后 - 自定義鏈
-
狀態(tài)機(jī)制
狀態(tài)機(jī)制只是一種連接狀態(tài)跟蹤機(jī)制唠亚,能提供更嚴(yán)密的安全機(jī)制链方。NEW
INVAILD
不能識(shí)別屬于哪個(gè) 連接或者沒有任何狀態(tài)的數(shù)據(jù)包,通常的措施是DROP趾撵。
ESTABLISHED
只要發(fā)送的數(shù)據(jù)有應(yīng)答吭服,即標(biāo)記為ESTABLISHED狀態(tài)兵拢,無論是發(fā)往防火墻還是由防火墻轉(zhuǎn)發(fā)辞嗡。ICMP等數(shù)據(jù)包也看作是珊佣,只有所發(fā)出的數(shù)據(jù)包有應(yīng)答信息篙挽。
RELATED
前提是已經(jīng)有一個(gè)端口實(shí)現(xiàn)ESTABLISHED狀態(tài)婴氮,然后這個(gè)ESTABLISHED再建立另外一個(gè)連接言津,這個(gè)新的連接就是RELATED。 典型的是FTP協(xié)議取试,一個(gè)控制端口和一個(gè)數(shù)據(jù)端口悬槽。
所有狀態(tài)的改變和計(jì)算都是在nat表中的PREROUTING鏈和OUTPUT鏈里完成的: 如果本地發(fā)送一個(gè)數(shù)據(jù)包,那么會(huì)在OUTPUT鏈里標(biāo)記狀態(tài)為NEW瞬浓,當(dāng)本地接收到回應(yīng)的包時(shí)初婆,會(huì)在PREROUTING中標(biāo)記為ESTABLISHED狀態(tài)。
- 常用命令
-
觀察規(guī)則
iptables [-t tables] -L [-nv]
-t : 省略此項(xiàng)猿棉,默認(rèn)是filter; 還可使nat磅叛、 filter
-L : 列出當(dāng)前tables的規(guī)則
-n : 不進(jìn)行IP 和 HOSTNAME 的 反查,顯示速度比較快
-v : 顯示詳細(xì)信息
--line-numbers 查看規(guī)則時(shí)顯示相應(yīng)的序號(hào)
刪除規(guī)則
其中的filter可以換成其他表萨赁。
iptables -t filter -F #刪除所有已定的規(guī)則
iptables -t filter -X #除掉所有用戶“自定義”的鏈(tables)
iptables -t filter -Z #所有鏈的計(jì)數(shù)與流量統(tǒng)計(jì)清零
-D 刪除鏈內(nèi)指定序號(hào)或內(nèi)容的規(guī)則-
默認(rèn)策略
iptables [-t nat] -P [INPUT, OUTPUT, FORWARD] [DROP, ACCEPT]
-P : 定義策略policy
DROP :偷偷丟棄數(shù)據(jù)包
ACCEPT: 接收數(shù)據(jù)包
當(dāng)數(shù)據(jù)包不在制定的規(guī)則中弊琴,則采用默認(rèn)策略。 一般嚴(yán)格設(shè)置的話杖爽,將輸入的數(shù)據(jù)包全部丟棄敲董,輸出的數(shù)據(jù)包和轉(zhuǎn)發(fā)的數(shù)據(jù)包全部接收。iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT
-
TCP連接
UDP
-
ICMP
ICMP包有很多類型慰安,但只有四種類型有應(yīng)答包臣缀,它們是回顯請(qǐng)求和應(yīng)答(Echo request and reply),時(shí)間戳請(qǐng)求和應(yīng)答(Timestamp request and reply)泻帮,信息請(qǐng)求和應(yīng)答(Information request and reply),還有地址掩碼請(qǐng)求和應(yīng)答(Address mask request and reply)锣杂,這些包有兩種狀態(tài)脂倦,NEW和ESTABLISHED 。
ICMP的另一個(gè)非常重要的作用是赖阻,告訴UDP、TCP連接或正在努力建立的連接發(fā)生了什么,這時(shí)ICMP應(yīng)答被認(rèn)為是RELATED的企锌。主機(jī)不可達(dá)和網(wǎng)絡(luò)不可達(dá)就是這樣的例子。當(dāng)試圖連接某臺(tái)機(jī) 子不成功時(shí)(可能那臺(tái)機(jī)子被關(guān)上了)烘浦,數(shù)據(jù)包所到達(dá)的最后一臺(tái)路由器就會(huì)返回以上的ICMP信息萍鲸,它們就 是RELATED的握侧,如下圖:
參考文獻(xiàn)
鳥哥的Linux 私房菜 服務(wù)器架設(shè)篇
iptables 指南 1.1.19