淮北網(wǎng)站三合一建設(shè)百度官方網(wǎng)站網(wǎng)址
iptables鏈的概念:
當(dāng)客戶端訪問(wèn)服務(wù)器端的Web服務(wù)的時(shí)候,客戶端發(fā)送請(qǐng)求報(bào)文到網(wǎng)卡,而TCP/IP協(xié)議棧是屬于內(nèi)核的一部分??蛻舳说恼?qǐng)求報(bào)文會(huì)通過(guò)內(nèi)核的TCP協(xié)議傳輸?shù)接脩艨臻g的Web服務(wù),而客戶端報(bào)文的目的地址為Web服務(wù)器所監(jiān)聽(tīng)的套接字ip:port上,當(dāng)Web服務(wù)器響應(yīng)客戶端請(qǐng)求的時(shí)候,Web服務(wù)所回應(yīng)的響應(yīng)報(bào)文的目的地址為客戶端地址。
netfilter是真正的防火墻,屬于內(nèi)核的一部分,所以,我們要想讓netfilter起到作用,我們就需要在內(nèi)核中設(shè)置關(guān)口,所有進(jìn)出的數(shù)據(jù)報(bào)文都要通過(guò)這些關(guān)口,經(jīng)過(guò)檢查,符合放行條件的則允許放行,符合阻攔條件的則被阻止,于是就出現(xiàn)了input和output關(guān)口,然后在iptables,我們把關(guān)口叫做鏈。
input:有一串規(guī)則。
output:有一串規(guī)則。
如果客戶端發(fā)到本機(jī)的報(bào)文中包含的服務(wù)器地址并不是本機(jī),而是其他服務(wù)器,此時(shí)本機(jī)就應(yīng)該能夠轉(zhuǎn)發(fā),那么這個(gè)轉(zhuǎn)發(fā)就是本機(jī)內(nèi)核所支持的ip_forward功能,此時(shí)我們的主機(jī)類似于路由器功能。所以我們會(huì)看到iptables中,所謂的關(guān)口并不是只是上面提到的input和output這兩個(gè)關(guān)口,應(yīng)該還有路由前、轉(zhuǎn)發(fā)和路由后,他們對(duì)應(yīng)的英文分別是prerouting/forward/postrouting,這就是我們所說(shuō)的5鏈。
prerouting: 路由前
forward: 轉(zhuǎn)發(fā)
postrouting: 路由后
那么這臺(tái)服務(wù)器就起到了路由轉(zhuǎn)發(fā)的功能。
ip_forward的開(kāi)啟方法:
find / -name "ip_forward"
/proc/sys/net/ipv4/ip_forward
當(dāng)這個(gè)文件里的值是1表示開(kāi)啟,為0表示關(guān)閉。
臨時(shí)的:
echo 0 > ip_forward永久更改:
vim /etc/sysctl.conf
輸入:
net.ipv4.ip_forward=1sysctl -p
再總結(jié):
鏈:很多規(guī)則放在一起,就是鏈。鏈上有很多規(guī)則。
1)input:從內(nèi)核空間到用戶空間;
2)output:從用戶空間到內(nèi)核空間;
3)prerouting:? 路由前;
4)forward:轉(zhuǎn)發(fā);
5)postrouting:路由后;
?
常用場(chǎng)景中,報(bào)文的流向:
1)到本機(jī)某服務(wù)進(jìn)程的報(bào)文:prerouting->input
2)由本機(jī)轉(zhuǎn)發(fā)的報(bào)文:prerouting->forward->postrouting
3)由本地的某個(gè)服務(wù)進(jìn)程發(fā)出的報(bào)文,通常為響應(yīng)報(bào)文:output->postrouting
規(guī)則鏈:
防火墻的作用在于對(duì)經(jīng)過(guò)的數(shù)據(jù)報(bào)文進(jìn)行匹配規(guī)則,然后執(zhí)行對(duì)應(yīng)的動(dòng)作,所以數(shù)據(jù)包經(jīng)過(guò)這些關(guān)口的時(shí)候,必須匹配這個(gè)關(guān)口的規(guī)則,當(dāng)時(shí)關(guān)口規(guī)則可能不止一條,可能會(huì)有很多,當(dāng)我們把眾多的規(guī)則配置在一個(gè)關(guān)口上時(shí),所有的數(shù)據(jù)包經(jīng)過(guò)都必須進(jìn)行匹配,那就形成了一個(gè)要匹配的規(guī)則鏈條,因此我們把鏈叫做規(guī)則鏈。
總結(jié):
input:處理入站數(shù)據(jù)包;
output:處理出站數(shù)據(jù)包
forward:處理轉(zhuǎn)發(fā)數(shù)據(jù)包,主要是將數(shù)據(jù)包轉(zhuǎn)發(fā)至本機(jī)其他網(wǎng)卡;
當(dāng)數(shù)據(jù)報(bào)文經(jīng)過(guò)本機(jī)的時(shí)候,網(wǎng)卡接收數(shù)據(jù)報(bào)文至緩沖區(qū),內(nèi)核讀取報(bào)文ip首部,發(fā)現(xiàn)報(bào)文不是送到本機(jī)時(shí),目的IP地址不是本機(jī),由內(nèi)核直接送到forward鏈做匹配,匹配之后若符合forward的規(guī)則,再經(jīng)由postrouting送往下一跳或目的主機(jī)。
prerouting:在進(jìn)行路由選擇前處理數(shù)據(jù)包,修改到達(dá)防火墻數(shù)據(jù)包目的IP地址,用于判斷目標(biāo)主機(jī)(改目的IP地址 DNAT)
postrouting:在進(jìn)行路由選擇后處理數(shù)據(jù)包,修改要離開(kāi)防火墻數(shù)據(jù)包的的源IP地址,判斷經(jīng)由哪一個(gè)接口送往下一跳。(改源IP地址 SNAT)