久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

這次終于不再為 iptables 犯迷糊了

 springkaixin 2020-01-27

基礎(chǔ)概念

linux 的包過(guò)濾功能,,即 linux 防火墻,,它由 netfilter 和 iptables 兩個(gè)組件組成。netfilter 位于內(nèi)核空間,由一些信息包過(guò)濾表組成,,這些表包含內(nèi)核用來(lái)控制信息包過(guò)濾處理的規(guī)則集,。iptables 是一個(gè)命令行工具,位于用戶(hù)空間,,它使得插入、修改和刪除信息包過(guò)濾表中的規(guī)則變得容易,。

我們知道 iptables 是按照規(guī)則來(lái)辦事的,,規(guī)則其實(shí)就是網(wǎng)絡(luò)管理員預(yù)定義的條件,規(guī)則一般的定義為'如果數(shù)據(jù)包頭符合這樣的條件,,就這樣處理這個(gè)數(shù)據(jù)包',。規(guī)則存儲(chǔ)在內(nèi)核空間的信息包過(guò)濾表中,這些規(guī)則分別指定了源地址,、目的地址,、傳輸協(xié)議(如TCP、UDP,、ICMP)和服務(wù)類(lèi)型(如HTTP,、FTP和SMTP)等。當(dāng)數(shù)據(jù)包與規(guī)則匹配時(shí),,iptables 就根據(jù)規(guī)則所定義的方法來(lái)處理這些數(shù)據(jù)包,,如放行(ACCEPT)、拒絕(REJECT)和丟棄(DROP)等,。配置防火墻的主要工作就是添加,、修改和刪除這些規(guī)則。

當(dāng)客戶(hù)端訪問(wèn)服務(wù)器的服務(wù)時(shí),,客戶(hù)端發(fā)送報(bào)文到服務(wù)器的網(wǎng)卡,,而 TCP/IP 協(xié)議棧是屬于內(nèi)核的一部分,所以客戶(hù)端的信息會(huì)通過(guò)內(nèi)核的 TCP 協(xié)議傳輸?shù)接脩?hù)空間中的服務(wù)中,,而此時(shí)客戶(hù)端報(bào)文的目標(biāo)終點(diǎn)(destination)為服務(wù)所監(jiān)聽(tīng)的套接字(IP:PORT),,當(dāng)服務(wù)需要響應(yīng)客戶(hù)端請(qǐng)求時(shí),,服務(wù)發(fā)出的響應(yīng)報(bào)文的目標(biāo)終點(diǎn)則為客戶(hù)端,這個(gè)時(shí)候服務(wù)所監(jiān)聽(tīng)的IP與端口反而變成了原點(diǎn)(source),。netfilter才是真正的防火墻,,它是內(nèi)核的一部分,,如果我們想要防火墻能夠達(dá)到'防火'的目的,,則需要在內(nèi)核中設(shè)置關(guān)卡,所有進(jìn)出的報(bào)文都要通過(guò)這些關(guān)卡,,經(jīng)過(guò)檢查后,,符合放行條件的才能放行,符合阻攔條件的則需要被阻止,,于是就出現(xiàn)了 INPUT 關(guān)卡和 OUTPUT 關(guān)卡,。然而這些關(guān)卡在 iptables 中并不被稱(chēng)為'關(guān)卡',,而是被稱(chēng)為'鏈',。

這次終于不再為 iptables 犯迷糊了

其實(shí)我們上面描述的場(chǎng)景并不完善,因?yàn)榭蛻?hù)端發(fā)來(lái)的報(bào)文訪問(wèn)的目標(biāo)地址可能并不是本機(jī),,而是其他服務(wù)器,當(dāng)本機(jī)的內(nèi)核支持 IP_FORWARD 時(shí),,我們可以將報(bào)文轉(zhuǎn)發(fā)給其他服務(wù)器,。這個(gè)時(shí)候,我們就會(huì)提到 iptables 中的其他'關(guān)卡',,也就是其他'鏈',,它們就是 PREROUTING(“路由前”),、FORWARD(“轉(zhuǎn)發(fā)”),、POSTROUTING(“路由后”),。

也就是說(shuō),當(dāng)我們啟用了防火墻功能時(shí),,報(bào)文需要經(jīng)過(guò)如下關(guān)卡,,也就是說(shuō),,根據(jù)實(shí)際情況的不同,,報(bào)文經(jīng)過(guò)'鏈'可能不同。如果報(bào)文需要轉(zhuǎn)發(fā),,那么報(bào)文則不會(huì)經(jīng)過(guò) INPUT 鏈發(fā)往用戶(hù)空間,,而是直接在內(nèi)核空間中經(jīng)過(guò) FORWARD 鏈和 POSTROUTING 鏈轉(zhuǎn)發(fā)出去的。

這次終于不再為 iptables 犯迷糊了

iptables的結(jié)構(gòu)

iptables 由表(table),、鏈(chain)和規(guī)則(rule)組成,,其中表包含鏈,鏈包含規(guī)則,。

我們把具有相同功能的規(guī)則集合叫做“表”,,對(duì)于不同功能的規(guī)則,,我們可以放置在不同的表中進(jìn)行管理,。iptables 中具有 filter、nat,、mangle,、raw等幾種內(nèi)建表:

  • filter 表:iptables的默認(rèn)表。負(fù)責(zé)過(guò)濾功能,、防火墻,,也就是由 filter 表來(lái)決定一個(gè)數(shù)據(jù)包是否繼續(xù)發(fā)往它的目的地址或者被丟棄。對(duì)應(yīng)的內(nèi)核模塊為 iptables_filter,。filter表具有三種內(nèi)建鏈:INPUT、OUTPUT,、FORWARD,。
  • nat 表:nat 是 network address translation的簡(jiǎn)稱(chēng),具備網(wǎng)絡(luò)地址轉(zhuǎn)換的功能,。對(duì)應(yīng)的內(nèi)核模塊為 iptables_nat,。nat 表有三種內(nèi)建鏈:PREROUTING、POSTROUTING,、OUTPUT(CentOS 7中還包含INPUT,,但是在CentOS 6中沒(méi)有),。
  • mangle 表:用于指定如何處理數(shù)據(jù)包,具備拆解報(bào)文,、修改報(bào)文以及重新封裝的功能,可用于修改IP頭部信息,,如TTL,。對(duì)應(yīng)的內(nèi)核模塊為 iptables_mangle,。mangle 表具有5種內(nèi)建鏈:PREROUTING、INPUT,、FORWARD,、OUTPUT,、POSTROUTING,。
  • raw 表:用于處理異常。對(duì)應(yīng)的內(nèi)核模塊為 iptables_raw,。raw 表包含2個(gè)內(nèi)建鏈:PREROUTING 和 OUTPUT,。
  • 對(duì)于各個(gè)具體的鏈而言:

    • INPUT 鏈:處理來(lái)自外部的數(shù)據(jù)。
    • OUTPUT 鏈:處理向外發(fā)送的數(shù)據(jù)。
    • FORWARD 鏈:數(shù)據(jù)轉(zhuǎn)發(fā),。通過(guò)路由表后發(fā)現(xiàn)目的地址非本機(jī),則匹配該鏈中的規(guī)則,。
    • PREROUTING 鏈:處理剛到達(dá)本機(jī)并在路由轉(zhuǎn)發(fā)前的數(shù)據(jù)包,。
    • POSTROUTING 鏈:處理即將離開(kāi)本機(jī)的數(shù)據(jù)包,。

    數(shù)據(jù)包的流轉(zhuǎn)流程可以參考下圖:

    這次終于不再為 iptables 犯迷糊了

    iptables 命令格式

    iptables 命令格式為:

    iptables [ -t 表名] 命令選項(xiàng) [鏈名] [條件匹配] [-j 處理動(dòng)作或跳轉(zhuǎn)]

    如果沒(méi)有顯式設(shè)置表名,,那么默認(rèn)為 filter表,即默認(rèn) -t filter,。

    命令選項(xiàng)

    • -L 列出一個(gè)或所有鏈的規(guī)則
    • -v 顯示詳細(xì)信息,,包括每條規(guī)則的匹配句數(shù)量和匹配字節(jié)數(shù)
    • -x 在v的基礎(chǔ)上,,禁止自動(dòng)換算單位(K,M)
    • -n 只顯示ip地址和端口號(hào),,不顯示域名和服務(wù)名稱(chēng)
    • -I 插入到防火墻第一條生效
    • -A 添加鏈?zhǔn)翘砑拥阶詈笠粭l
    • -D 刪除指定鏈中的某一條規(guī)則,,按規(guī)則序號(hào)或內(nèi)容確定要?jiǎng)h除的規(guī)則
    • -F 清空指定鏈中的所有規(guī)則,默認(rèn)清空表中所有鏈的內(nèi)容
    • -X 刪除指定表中用戶(hù)自定義的規(guī)則鏈

    匹配條件

    • -i 入站請(qǐng)求interface(網(wǎng)卡)
    • -o 出站請(qǐng)求interface(網(wǎng)卡)
    • -s 入站源地址
    • -d 目標(biāo)地址
    • -p 指定規(guī)則協(xié)議,,如tcp, udp,icmp等,,可以使用 all 來(lái)指定所有協(xié)議
    • --dport 目的端口,數(shù)據(jù)包的目的(dport)地址是80,,就是要訪問(wèn)我本地的80端口
    • --sport 來(lái)源端口 數(shù)據(jù)包的來(lái)源端口是(sport)80,就是對(duì)方的數(shù)據(jù)包是80端口發(fā)送過(guò)來(lái)的,。

    動(dòng)作

    • ACCEPT:允許數(shù)據(jù)包通過(guò),。
    • DROP:直接丟棄數(shù)據(jù)包,不給任何回應(yīng)信息,,這時(shí)候客戶(hù)端會(huì)感覺(jué)自己的請(qǐng)求泥牛入海了,,過(guò)了超時(shí)時(shí)間才會(huì)有反應(yīng)。
    • REJECT:拒絕數(shù)據(jù)包通過(guò),,必要時(shí)會(huì)給數(shù)據(jù)發(fā)送端一個(gè)響應(yīng)的信息,,客戶(hù)端剛請(qǐng)求就會(huì)收到拒絕的信息。(一般不使用REJECT(拒絕)行為,,REJECT會(huì)帶來(lái)安全隱患,。)
    • SNAT:源地址轉(zhuǎn)換,解決內(nèi)網(wǎng)用戶(hù)用同一個(gè)公網(wǎng)地址上網(wǎng)的問(wèn)題。
    • MASQUERADE:是SNAT的一種特殊形式,,適用于動(dòng)態(tài)的,、臨時(shí)會(huì)變的ip上。
    • DNAT:目標(biāo)地址轉(zhuǎn)換,。
    • REDIRECT:在本機(jī)做端口映射,。
    • LOG:在/var/log/messages文件中記錄日志信息,然后將數(shù)據(jù)包傳遞給下一條規(guī)則,,也就是說(shuō)除了記錄以外不對(duì)數(shù)據(jù)包做任何其他操作,,仍然讓下一條規(guī)則去匹配。

    規(guī)則

    在上述描述中我們一直在提規(guī)則,,可是沒(méi)有細(xì)說(shuō),。那么規(guī)則具體指什么呢?

    規(guī)則:根據(jù)指定的匹配條件來(lái)嘗試匹配每個(gè)流經(jīng)此處的報(bào)文,,一旦匹配成功,,則由規(guī)則后面指定的處理動(dòng)作進(jìn)行處理。

    規(guī)則大致又兩個(gè)邏輯單元組成:匹配條件和動(dòng)作,。最常用的匹配條件是“源地址”,、“目標(biāo)地址”、“源端口”,、“目標(biāo)端口”,;最常用的動(dòng)作有 ACCEPT(接受)、DROP(丟棄),、REJECT(拒絕),。

    在實(shí)際操作iptables 的過(guò)程中,是以“表”作為操作入口的,,如果你經(jīng)常操作關(guān)系型的數(shù)據(jù)庫(kù),,那么當(dāng)你聽(tīng)到“表”這個(gè)詞的時(shí)候,你可能會(huì)聯(lián)想到另一個(gè)詞——“增刪改查”,,當(dāng)我們定義 iptables 規(guī)則時(shí),,所做的操作其實(shí)類(lèi)似于“增刪改查”。我們不妨從最簡(jiǎn)單的“查”操作入手,。

    filter 表是我們最常用到的表,,我們這里以 filter表為例來(lái)說(shuō)明具體的操作。下面的命令展示如何查看 filter 表中的規(guī)則:

    iptables -t filter -L
    Chain INPUT (policy ACCEPT)
    target prot opt source destination
    Chain FORWARD (policy ACCEPT)
    target prot opt source destination
    ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
    Chain OUTPUT (policy ACCEPT)
    target prot opt source destination

    上面我們使用-t選項(xiàng)指定要操作的表,,使用-L選項(xiàng)查看-t選項(xiàng)對(duì)應(yīng)表的規(guī)則,。-L 對(duì)應(yīng) List,意為列出規(guī)則,。上面命令的含義為列出filter表的所有規(guī)則,。

    我們可以查看指定表中指定鏈的規(guī)則,。比如,我們只查看 filter 表中 INPUT 鏈的規(guī)則:

    iptables -L INPUT
    Chain INPUT (policy ACCEPT)
    target prot opt source destination

    上面只顯示了 filter 表中 INPUT 鏈的規(guī)則(省略 -t 選項(xiàng)默認(rèn)為 filter 表),,當(dāng)然,,你也可以指定只查看其它鏈。我們還可以使用-v選項(xiàng)查看出更多,、更詳細(xì)的信息,,示例如下:

    iptables -vL INPUT
    Chain INPUT (policy ACCEPT 1509K packets, 851M bytes)
     pkts bytes target prot opt in out source destination

    這里我們看到多了一些字段,這些字段就是規(guī)則對(duì)應(yīng)的屬性,,具體的含義歸納如下:

    • pkts: 匹配到的報(bào)文的個(gè)數(shù)
    • bytes: 匹配到的報(bào)文包的大小總和
    • target: 表示規(guī)則對(duì)應(yīng)的“動(dòng)作”,,即規(guī)則匹配成功后需要采取的措施
    • prot: 對(duì)應(yīng)的協(xié)議,是否只針對(duì)某些協(xié)議應(yīng)用此規(guī)則
    • opt: 表示規(guī)則對(duì)應(yīng)的選項(xiàng)
    • in: 表示數(shù)據(jù)包由哪個(gè)interface(網(wǎng)卡)流入,,我們可以設(shè)置通過(guò)哪塊網(wǎng)卡流入的報(bào)文需要匹配當(dāng)前規(guī)則
    • out:表示數(shù)據(jù)包由哪個(gè)interface(網(wǎng)卡)流出,,我們可以設(shè)置通過(guò)哪塊網(wǎng)卡流出的報(bào)文需要匹配當(dāng)前規(guī)則
    • source: 表示規(guī)則對(duì)應(yīng)的源頭地址,可以是一個(gè) IP,,也可以是一個(gè)網(wǎng)段
    • destination: 表示規(guī)則對(duì)應(yīng)的目標(biāo)地址

    上面鏈(Chain INPUT)的背后還有一個(gè)括號(hào),,括號(hào)里包含了policy ACCEPT、1509K packets,、851M bytes三部分,。

    • policy: 表示當(dāng)前鏈的默認(rèn)策略,policy ACCEPT 表示上面 INPUT 鏈中的默認(rèn)動(dòng)作為 ACCEPT, 換句話(huà)說(shuō)就是,,默認(rèn)接受通過(guò)INPUT的所有請(qǐng)求。
    • packets: 表示當(dāng)前鏈的默認(rèn)策略匹配到的包的數(shù)量,。
    • bytes:表示當(dāng)前鏈的默認(rèn)策略匹配到的所有包的大小總和,。

    如果需要,我們可以使用iptables -F INPUT 命令來(lái)清空 filter 表 INPUT 鏈中的規(guī)則,。

    假設(shè)我們有2臺(tái)測(cè)試機(jī),,IP地址分別為 host1 和 host2, 我們可以在 host1 上使用 ping 命令來(lái)查看一下網(wǎng)絡(luò)連通情況:

    ping host2

    64 bytes from host2: icmp_seq=512 ttl=49 time=213 ms

    64 bytes from host2: icmp_seq=513 ttl=49 time=213 ms

    64 bytes from host2: icmp_seq=514 ttl=49 time=213 ms

    然后我們?cè)?host1 上配置一條規(guī)則,拒絕 host2 上的所有報(bào)文訪問(wèn) host1,。對(duì)應(yīng)的命令如下:

    iptables -t filter -I INPUT -s host2 -j DROP

    使用-I選項(xiàng),,指明將“規(guī)則”插入哪個(gè)鏈中,I 表示 Insert,,即插入的意思,,這里表示添加規(guī)則之意。使用-s選項(xiàng),,指明匹配條件中的“源地址”,,即如果報(bào)文的源地址屬于 -s對(duì)應(yīng)的地址,那么報(bào)文則滿(mǎn)足匹配條件,。s 表示 source,,即源地址,。使用-j選項(xiàng),指明當(dāng)匹配條件滿(mǎn)足時(shí),,所對(duì)應(yīng)的動(dòng)作,,上面指定了動(dòng)作為 DROP,當(dāng)報(bào)文的源地址為 host2 時(shí),,報(bào)文則被 DROP,。

    再來(lái)查看一下 filter 表中的 INPUT 鏈:

    iptables -nvL INPUT

    Chain INPUT (policy ACCEPT 1421 packets, 344K bytes)

    pkts bytes target prot opt in out source destination

    114 7992 DROP all -- * * host2 0.0.0.0/0

    可以看到相應(yīng)的規(guī)則已經(jīng)添加了,在 iptables 中,,動(dòng)作被稱(chēng)之為 “target”, 所以上面的 target 字段對(duì)應(yīng)的動(dòng)作為 DROP,。

    現(xiàn)在 INPUT 鏈中已經(jīng)存在了一條規(guī)則,它拒絕了所有來(lái)自 host2 的報(bào)文,,如果此時(shí)我們?cè)谶@條規(guī)則之后再配置一條規(guī)則—— 接受所有來(lái)自 host2 的報(bào)文,,那么此時(shí) iptables 的表現(xiàn)如何呢?

    使用如下命令在 filter 表中追加一條規(guī)則:

    iptables -nvL INPUT

    Chain INPUT (policy ACCEPT 355 packets, 133K bytes)

    pkts bytes target prot opt in out source destination

    3960 274K DROP all -- * * host2 0.0.0.0/0

    0 0 ACCEPT all -- * * host2 0.0.0.0/0

    上面并沒(méi)有繼續(xù)使用-I選項(xiàng),,而是使用了-A選項(xiàng),,A代表 Append,也是表示在 INPUT 鏈中追加規(guī)則,。-I與-A之間的區(qū)別在于:-I表示在鏈的首部插入規(guī)則,,而-A表示在鏈的頭部插入規(guī)則。

    上面的信息中也顯示了新添加的 ACCEPT 規(guī)則在原先的 DROP 之后,。

    此時(shí)再在 host1 上嘗試去 ping 通 host2 時(shí)會(huì)發(fā)現(xiàn)還是 ping 不通,。看來(lái)新添加的規(guī)則沒(méi)有生效,。我們這里再次添加一條相同的規(guī)則,,不過(guò)此時(shí)使用-I選項(xiàng)來(lái)添加。

    iptables -I INPUT -s host2 -j ACCEPT

    iptables -nvL INPUT

    Chain INPUT (policy ACCEPT 57 packets, 6438 bytes)

    pkts bytes target prot opt in out source destination

    16 2274 ACCEPT all -- * * host2 0.0.0.0/0

    7319 507K DROP all -- * * host2 0.0.0.0/0

    0 0 ACCEPT all -- * * host2 0.0.0.0/0

    如果我們此時(shí)再?lài)L試 ping 通 host2 時(shí),,發(fā)現(xiàn)已經(jīng)可以正常ping 通了,。如果觀察仔細(xì),我們可以發(fā)現(xiàn),,剛剛添加的 ACCEPT 規(guī)則在 DROP 規(guī)則之前了,。可見(jiàn),,規(guī)則的順序很重要,。

    如果報(bào)文已經(jīng)被前面的規(guī)則匹配到,iptables 則會(huì)對(duì)報(bào)文執(zhí)行對(duì)應(yīng)的動(dòng)作,,即使后面的規(guī)則也能匹配到當(dāng)前報(bào)文,,很有可能也沒(méi)有機(jī)會(huì)再對(duì)報(bào)文執(zhí)行相應(yīng)的動(dòng)作了。就以上面的例子來(lái)說(shuō),,報(bào)文先被第一條規(guī)則匹配到了,,于是當(dāng)前報(bào)文被“放行”了,。也正因?yàn)閳?bào)文已經(jīng)被放行了,后面的第二條規(guī)則及時(shí)能夠匹配到放行的報(bào)文,,也沒(méi)有機(jī)會(huì)在對(duì)剛才的報(bào)文進(jìn)行丟棄操作了,。這就是 iptables 的工作機(jī)制。

    使用 iptables 是可以通過(guò) --line-number 選項(xiàng)來(lái)列出規(guī)則的序號(hào),,如下所示:

    iptables --line-number -nvL INPUT

    Chain INPUT (policy ACCEPT 13186 packets, 6606K bytes)

    num pkts bytes target prot opt in out source destination

    1 1568 278K ACCEPT all -- * * host2 0.0.0.0/0

    2 7319 507K DROP all -- * * host2 0.0.0.0/0

    3 0 0 ACCEPT all -- * * host2 0.0.0.0/0

    我們?cè)谔砑右?guī)則的時(shí)候,,還可以指定新增規(guī)則的編號(hào),這樣我們就能在任意位置插入規(guī)則了,,我們只要把剛才的命令稍作修改即可,,如下:

    iptables t fileter -I INPUT 2 -s host2 -j DROP

    這里仍舊使用-I選項(xiàng)進(jìn)行插入規(guī)則的操作,-I INPUT 2表示在 INPUT 鏈中新增規(guī)則,,新增規(guī)則的編號(hào)為2,。

    在刪除規(guī)則時(shí),我們可以使用規(guī)則的編號(hào)去刪除,,也可以使用具體的匹配條件和動(dòng)作去刪除,。

    舉例,我們刪除第三條規(guī)則:

    iptables -t filter -D INPUT 3

    iptables --line-number -nvL INPUT

    Chain INPUT (policy ACCEPT 87 packets, 9870 bytes)

    num pkts bytes target prot opt in out source destination

    1 5115 594K ACCEPT all -- * * host2 0.0.0.0/0

    2 7319 507K DROP all -- * * host2 0.0.0.0/0

    我們?cè)賱h除第一條規(guī)則:

    iptables -D INPUT -s host2 -j ACCEPT

    iptables --line-number -nvL INPUT

    Chain INPUT (policy ACCEPT 228 packets, 26328 bytes)

    num pkts bytes target prot opt in out source destination

    1 7325 507K DROP all -- * * host2 0.0.0.0/0

    如果要一下子全部清空怎么操作,?這個(gè)在前面已經(jīng)提及過(guò)了,,使用iptables -t 表名 -F 鏈名。-F選項(xiàng)為 flush 之意,,即沖刷指定的鏈,,即刪除指定鏈中的所有規(guī)則。此操作相當(dāng)于刪除操作,,在沒(méi)有保存 iptables 規(guī)則的情況下慎用,。如果不指定鏈名,那么會(huì)刪除表中的所有規(guī)則,,即iptables -t 表名 -F。

    此處省略修改規(guī)則,、保存規(guī)則的具體操作,。

      本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
      轉(zhuǎn)藏 分享 獻(xiàn)花(0

      0條評(píng)論

      發(fā)表

      請(qǐng)遵守用戶(hù) 評(píng)論公約

      類(lèi)似文章 更多