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