iptables
iptables是linux平臺(tái)下的包過濾防火墻,用于封包過濾,封包重定向和網(wǎng)絡(luò)地址轉(zhuǎn)換等功能
iptables和netfiflter的關(guān)系:
iptables是linux防火墻管理工具义桂,實(shí)現(xiàn)規(guī)則定義畴栖,刪除和修改随静。而真正實(shí)現(xiàn)防火墻功能的是netfilter,iptables是用戶態(tài)的工具,用戶通過iptables配置的規(guī)則燎猛,netfilter通過這些規(guī)則進(jìn)行防火墻操作過濾操作
iptables的四表五鏈:
四表:
raw表:用于配置數(shù)據(jù)包恋捆,其中的數(shù)據(jù)包不會(huì)被系統(tǒng)跟蹤,該表的配置的規(guī)則優(yōu)先級最高重绷,設(shè)置該表一般是為了不再讓iptables做數(shù)據(jù)包的跟蹤處理沸停,提高性能,對應(yīng)內(nèi)核模塊iptables_raw昭卓。
filter表:iptables的默認(rèn)表(沒有指定表的時(shí)候默認(rèn)為該表)愤钾,根據(jù)預(yù)定義的規(guī)則來過濾符合條件的數(shù)據(jù)包,在該表中只允許對數(shù)據(jù)包接收和丟棄等操作候醒,對應(yīng)內(nèi)核模塊iptables_filter
nat表:nat(network address Translation)表用于網(wǎng)絡(luò)地址轉(zhuǎn)換(例如:端口轉(zhuǎn)發(fā))可以實(shí)現(xiàn)一對一能颁,一對多和多對多等nat的工作,網(wǎng)絡(luò)地址轉(zhuǎn)換功能倒淫,主要用于修改數(shù)據(jù)包的IP地址伙菊、端口號等信息,對應(yīng)內(nèi)核模塊iptables_nat敌土;
mangle表:拆解報(bào)文占业,做出修改,并重新封裝纯赎,對應(yīng)內(nèi)核模塊iptables_mangle;
五鏈(默認(rèn)):
PREROUTING:在對數(shù)據(jù)包作路由選擇之前南蹂,應(yīng)用此鏈中的規(guī)則
INPUT:目的地為本機(jī)的包的犬金,應(yīng)用此鏈中的規(guī)則
FORWARD:目的地不是本機(jī)且不是本機(jī)產(chǎn)生的包,應(yīng)用此鏈中的規(guī)則
OUTPUT:本地協(xié)議棧發(fā)出去的包六剥,應(yīng)用此鏈中的規(guī)則
POSTROUTING:經(jīng)過選路后需要轉(zhuǎn)發(fā)出去的包晚顷,應(yīng)用此鏈中的規(guī)則
鏈的執(zhí)行流程
iptables開啟后,數(shù)據(jù)報(bào)文從進(jìn)入服務(wù)器到出來會(huì)經(jīng)過5道關(guān)卡疗疟,分別為Prerouting(路由前)该默、Input(輸入)、Outpu(輸出)策彤、Forward(轉(zhuǎn)發(fā))栓袖、Postrouting(路由后):
每道關(guān)卡中有多個(gè)規(guī)則,數(shù)據(jù)包文必須按照順序一個(gè)一個(gè)匹配規(guī)則店诗,這些規(guī)則串起來像條鏈裹刮,所以我們把這些關(guān)卡叫做“鏈”
為什么有鏈之后還有還需要表?
雖然每一條鏈上有多條規(guī)則庞瘸,但是有些規(guī)則的作用很相似捧弃,多條具有相同功能的規(guī)則在一起就成了一個(gè)表, 我們最終定義的防火墻規(guī)則,都會(huì)添加到這四張表中的其中一張表中
鏈和表的對應(yīng)關(guān)系:
并不是每條鏈都能應(yīng)用所有類型的表违霞,除了OUTPUT能同時(shí)擁有4種表其他鏈都只有2-3種表
每條鏈上對應(yīng)著多個(gè)表嘴办,但是數(shù)據(jù)包必須按照順序匹配每條鏈上的一個(gè)一個(gè)規(guī)則,按照表的規(guī)則來進(jìn)行匹配順序是:raw ——>mangle——>nat——>filter
表名 | 能應(yīng)用的鏈 | ||||
---|---|---|---|---|---|
raw | prerouting | output | |||
mangle | prerouting | input | forward | output | postrouting |
nat | prerouting | input(僅centos7) | output | postrouting | |
filter | input | forward | output |
鏈和表的體現(xiàn)
規(guī)則說明
匹配條件(五元組)
S_IP:source ip买鸽,源ip
S_PORT:source port涧郊,源端口
D_IP: destination ip,目標(biāo)ip
D_PORT: destination port癞谒,目標(biāo)端口
TCP/UDP:第四層(傳輸層)協(xié)議
處理動(dòng)作
ACCEPT:允許數(shù)據(jù)包通過
DROP:直接丟棄數(shù)據(jù)包底燎,不回應(yīng)任何信息,客戶端只有當(dāng)連接超時(shí)后才會(huì)有反應(yīng)
REJECT:拒絕數(shù)據(jù)包弹砚,會(huì)發(fā)送給客戶端一個(gè)數(shù)據(jù)包丟棄的響應(yīng)信息
SNAT:source NAT源地址轉(zhuǎn)換双仍,進(jìn)入路由后,出本網(wǎng)絡(luò)棧之前改寫源地址桌吃,目的地址不變朱沃,并在本機(jī)建立NAT表項(xiàng),當(dāng)數(shù)據(jù)返回時(shí)茅诱,根據(jù)NAT表將目的地址數(shù)據(jù)改寫為數(shù)據(jù)發(fā)送出去時(shí)候的源地址逗物,并發(fā)送給主機(jī)。解決私網(wǎng)用戶用同一個(gè)公網(wǎng)IP上網(wǎng)的問題瑟俭;
MASQUERADE:是SNAT的一種特殊形式翎卓,適用于動(dòng)態(tài)的、臨時(shí)會(huì)變的IP上摆寄;
DNAT:Destination NAT目的NAT失暴,解決私網(wǎng)服務(wù)端,接收公網(wǎng)請求的問題微饥。和SNAT相反逗扒,IP包經(jīng)過route之前,重新修改目標(biāo)地址欠橘,源地址不變矩肩,在本機(jī)建立NAT表項(xiàng),當(dāng)數(shù)據(jù)返回時(shí)肃续,根據(jù)NAT表將源地址修改為數(shù)據(jù)發(fā)送過來時(shí)的目標(biāo)地址黍檩,并發(fā)給遠(yuǎn)程主機(jī)∈济可以隱藏后端服務(wù)器的真實(shí)地址建炫;
REDIRECT:在本機(jī)做端口映射;
LOG:在/var/log/messages文件中記錄日志信息疼蛾,然后將數(shù)據(jù)包傳遞給下一條規(guī)則肛跌。 除去最后一個(gè)LOG,前3條規(guī)則匹配數(shù)據(jù)包后,該數(shù)據(jù)包不會(huì)再往下繼續(xù)匹配了衍慎,所以編寫的規(guī)則順序極其關(guān)鍵转唉。
iptables -n -v -L
-n:以數(shù)字的形式展示
-v:詳細(xì)的輸出
-L:指定查看的表(不指定則全部輸出)
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
13642 1034K ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
2 128 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
275 53284 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT 12516 packets, 1489K bytes)
pkts bytes target prot opt in out source destination
Chain INPUT: INPUT鏈上的規(guī)則,同理稳捆,后面的“Chain FORWARD”赠法、“Chain OUTPUT”分別是FORWARD鏈和OUTPUT鏈上的規(guī)則;
(policy ACCEPT): 表示默認(rèn)策略是接受乔夯,即假如我沒設(shè)置砖织,那就是允許,只有我設(shè)置哪個(gè)不允許末荐,才會(huì)不允許侧纯,示例中是安裝iptables后的默認(rèn)規(guī)則,由于默認(rèn)是ACCEPT甲脏,你規(guī)則也設(shè)置為ACCEPT按道理來說是沒什么意義的眶熬,因?yàn)槟悴辉O(shè)置也是ACCEPT呀,但事實(shí)上块请,是為了方便修改為REJECT/DROP等規(guī)則娜氏,說白了就是放在那,要設(shè)置的時(shí)候我們就可以直接修改墩新;
prot:表示協(xié)議贸弥,如tcp(傳輸控制協(xié)議)、udp(用戶數(shù)據(jù)報(bào)協(xié)議)海渊、icmp(互聯(lián)網(wǎng)控制報(bào)文協(xié)議)等茂腥。
opt:表示規(guī)則對應(yīng)的選項(xiàng)。
in:表示數(shù)據(jù)包由哪個(gè)接口(網(wǎng)卡)流入切省,可用于設(shè)置通過哪塊網(wǎng)卡流入的報(bào)文需要匹配當(dāng)前規(guī)則。
out:表示數(shù)據(jù)包由哪個(gè)接口(網(wǎng)卡)流出帕胆,可用于設(shè)置通過哪塊網(wǎng)卡流出的報(bào)文需要匹配當(dāng)前規(guī)則朝捆。
source:表示數(shù)據(jù)包的源 IP 地址,可以是一個(gè)具體的 IP 地址或一個(gè)網(wǎng)段懒豹。
destination:表示數(shù)據(jù)包的目標(biāo) IP 地址芙盘,也可以是一個(gè)具體的 IP 地址或一個(gè)網(wǎng)段。
pkts: packets脸秽,包的數(shù)量儒老;
bytes:流過的數(shù)據(jù)包的字節(jié)數(shù);
target: 英文意思是“目標(biāo)”记餐,但該列的值通常是動(dòng)作驮樊,比如ACCEPT(接受)、REJECT(拒絕)等等,但它確實(shí)可以是“目標(biāo)”囚衔,比如我們創(chuàng)建 一條鏈iptables -N July_filter挖腰,然后在INPUT鏈上添加一條規(guī)則,讓它跳轉(zhuǎn)到剛剛的新鏈-A INPUT -p tcp -j July_filter练湿,再用iptables -L查看猴仑,可以看到target此時(shí)已經(jīng)是真正的“target(July_filter)”而不再是動(dòng)作了
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT icmp -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
July_filter tcp -- anywhere anywhere
Chain FORWARD (policy ACCEPT)
target prot opt source destination
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain July_filter (1 references)
target prot opt source destination
參考鏈接:
https://blog.csdn.net/weixin_40579389/article/details/131397405