在线乱码卡一卡二卡新HD,最近韩国免费观看视频,国产色无码精品视频国产,亚洲男人的天堂久久香蕉

聊聊Iptables 的五表五鏈,你學會了嗎?
來源:洋芋編程    時間:2023-04-04 09:57:30
概述

iptables 是一個配置 Linux 內核防火墻的命令行工具,它基于內核的包過濾框架(packet filtering framework) netfilter, 主要用于管理數據包過濾和 NAT 規則。

圖片來源: https://upload.wikimedia.org/wikipedia/commons/3/37/Netfilter-packet-flow.svg

iptables?與協議棧內有包過濾功能的 hook 交 互來完成工作。這些內核 hook 構成了netfilter?框架。每個進入網絡系統的包(接收或發送)在經過協議棧時都會觸發這些 hook, 程序可以通過注冊 hook 函數的方式在一些關鍵路徑上處理網絡流量。iptables?相關的內核模塊在這些 hook 點注冊了處理函數,因此可以通過配置iptables規則來使得網絡流量符合防火墻規則。


(資料圖片僅供參考)

理解iptables?是學習Docker?,Kubernetes等開源項目中網絡功能實現的基礎。

規則

規則?就是網絡管理員預定義的條件,一般的定義為如果數據包頭符合當前條件,處理這個數據包,反之執行下一個判斷條件,規則?存儲在內核空間的過濾表中,這些規則分別指定了源地址、目的地址、傳輸協議?(如TCP、UDP、ICMP)和服務類型?(如 HTTP、FTP 和 SMTP)等, 當數據包與規則?匹配時,內核會執行具體的行為。

配置防火墻的主要工作就是添加、修改和刪除規則。

行為

動作

描述

ACCEPT

接收數據包

DROP

丟棄數據包,進行完此動作后,將直接中斷檢測過程,不再檢測其它規則

REDIRECT

將封包重新導向到另一個端口(PNAT),進行完此動作后,繼續比對其它規則,這個功能可以用來實現透明代理或用來保護應用服務器

SNAT

源地址轉換

DNAT

目的地址轉換

MASQUERADE

IP偽裝(NAT),用于 ADSL

LOG

日志記錄

SEMARK

添加 SEMARK 標記以供網域內強制訪問控制(MAC)

QUEUE

將數據包傳遞到用戶空間

REJECT

攔截數據包,并返回數據包通知對方

RETURN

防火墻停止執行當前鏈中的后續規則,并返回到調用鏈中繼續檢測

5鏈

鏈?是數據包傳播的路徑,每一個鏈?中可以有 N 個規則?(N >= 0)。當數據包到達一個鏈?時,iptables?就會從鏈中第一個規則開始檢測, 如果數據包滿足規則所定義的條件,系統會執行具體的行為?,否則iptables?繼續檢查下一個規則。 如果數據包不符合鏈中任一個規則,iptables就會根據該鏈預先定義的默認策略來處理數據包。

名稱

描述

INPUT

處理接收的數據包

OUTPUT

處理發送的數據包

FORWARD

處理轉發的數據包,常用于??網絡隔離???,??NAT???,??負載均衡??

PREROUTING

修改到達且還未轉發的數據包,常用于??DNAT???,??端口映射???,??源地址轉換??

POSTOUTING

修改發送前的的數據包,常用于??SNAT??

5 表

表有 N 個鏈,鏈有 N 個規則。

大部分場景僅需使用 Filter 表 和 NAT 表。

Raw 表

Raw表用于在連接跟蹤、NAT 和路由表處理之前對數據包進行處理,包含 2 種內置鏈:

?PREROUTING

?OUTPUT

因為優先級最高,所以如果使用了Raw?表,那么在Raw?表處理完后, 將跳過NAT?表和ip_conntrack處理, 也就是避免了連接跟蹤、NAT 和路由表前置處理。

Filter 表

Filter?是iptables?的默認表,用于過濾數據包,如果沒有定義表的情況下將使用Filter表,包含 3 種內置鏈:

?INPUT?OUTPUT?FORWARD

在Filter表中只允許對數據包進行接受,丟棄的操作,而無法對數據包進行更改。

NAT 表

NAT用于實現網絡地址轉換,包含 3 種內置鏈:

?PREROUTING

?POSTROUTING

?OUTPUT

Mangle 表

Mangle用于對指定數據包報頭進行修改、標記或重定向,包含 5 種內置鏈:

?INPUT

?OUTPUT

?FORWARD

?PREROUTING

?POSTROUTING

Security 表

Security用于給包打上 SELinux 標記,以此影響 SELinux 或其他可以解讀 SELinux 安全上下文的系統處理包的行為。這些標記可以基于單個包,也可以基于連接。

表和鏈關系圖

表和鏈關系圖

表的檢測優先級

Raw -> Mangle -> Nat -> Filter

圖片來源: https://www.frozentux.net/iptables-tutorial/images/tables_traverse.jpg

任何一個數據包必然經過 5 個鏈中的其中一個。

?一個數據包進入網卡時,首先進入PREROUTING鏈,內核根據數據包目的 IP 判斷是否需要轉發

?如果數據包是進入本機的,它就會沿著圖向下移動,到達INPUT?鏈,數據包到了INPUT鏈后,任何進程都會收到它,本機上程序可以發送數據包,這些數據包會經過OUTPUT?鏈,然后到達POSTROUTING鏈輸出

?如果數據包是轉發出去的,且內核允許轉發,數據包會經過FORWARD?鏈,然后到達POSTROUTING鏈輸出

常用命令查看類

# 查看所有防火墻規則$ iptables --list# 示例輸出如下Chain DOCKER (8 references)target prot opt source destinationACCEPT tcp -- anywhere 172.27.0.2 tcp dpt:10010ACCEPT tcp -- anywhere 172.22.0.2 tcp dpt:httpACCEPT tcp -- anywhere 172.29.0.4 tcp dpt:memcachedACCEPT tcp -- anywhere 172.17.0.2 tcp dpt:redisACCEPT tcp -- anywhere 172.17.0.2 tcp dpt:nginxACCEPT tcp -- anywhere 172.17.0.4 tcp dpt:8080ACCEPT tcp -- anywhere 172.17.0.5 tcp dpt:mysqlACCEPT tcp -- anywhere 172.17.0.5 tcp dpt:http# 查看 mangle 表規則$ iptables -t mangle --list# 查看 nat 表規則$ iptables -t nat --list

字段名稱

描述

target

規則行為

prot

協議

opt

選項

source

源 IP 地址

destination

目的 IP 地址

操作類

# 查看說明$ iptables --help# 查看命令iptables -L:查看規則鏈# 規則管理命令iptables -A:在規則鏈的末尾加入新規則iptables -D:刪除某個規則iptables -I:在規則鏈的頭部加入新規則iptables -R:替換規則鏈中的規則# 鏈管理命令iptables -F:清空規則鏈iptables -Z:清空規則鏈中的數據包計算器和字節計數器iptables -N:創建新的用戶自定義規則鏈iptables -P:設置規則鏈中的默認策略# 通用匹配參數-t 對指定的表 table 進行操作 如果不指定此選項,默認的是 filter 表-p 協議 指定規則的協議,如 tcp, udp, icmp 等,可以使用all來指定所有協議 如果不指定 -p 參數,默認的是 all 值-s 源地址 指定數據包的源地址 參數可以使IP地址、網絡地址、主機名 例如:-s 192.168.1.101 指定IP地址 例如:-s 192.168.1.10/24 指定網絡地址-d 目的地址 指定數據包的目的地址,規則和 -s 類似-j 執行目標 指定規則匹配時如何處理數據包 可能的值是ACCEPT, DROP, QUEUE, RETURN 等-i 輸入接口 指定要處理來自哪個接口的數據包,這些數據包將進入 INPUT, FORWARD, PREROUTE 鏈 例如:-i eth0指定了要處理經由eth0進入的數據包 如果不指定 -i參數,那么將處理進入所有接口的數據包 如果指定 ! -i eth0,那么將處理所有經由eth0以外的接口進入的數據包 如果指定 -i eth+,那么將處理所有經由eth開頭的接口進入的數據包-o 輸出 指定了數據包由哪個接口輸出,這些數據包將進入 FORWARD, OUTPUT, POSTROUTING鏈 如果不指定-o選項,那么所有接口都可以作為輸出接口 如果指定 ! -o eth0,那么將從eth0以外的接口輸出 如果指定 -i eth+,那么將僅從eth開頭的接口輸出 # 擴展參數-sport 源端口 針對 -p tcp 或者 -p udp,默認情況下,將匹配所有端口 可以指定端口號或者端口名稱、端口范圍,例如 –sport 22, –sport ssh,–sport 22:100 從性能上講,使用端口號更好, /etc/services 文件描述了映射關系-dport 目的端口 規則和 –sport 類似-tcp-flags TCP 標志 針對 -p tcp 可以指定由逗號分隔的多個參數 取值范圍:SYN, ACK, FIN, RST, URG, PSH, ALL, NONE-icmp-type ICMP 標志 針對 -p icmp icmp-type 0 表示 Echo Reply icmp-type 8 表示 Echo命令選項輸入順序

iptables -t 表名 <-A/I/D/R> 規則鏈名 [規則號] <-i/o 網卡名> -p 協議名 <-s 源IP/源子網> --sport 源端口 <-d 目標IP/目標子網> --dport 目標端口 -j 動作示例

以下命令在生產環境中謹慎使用。

查看已添加的iptables規則

$ iptables -L -n -vChain INPUT (policy DROP 48106 packets, 2690K bytes) pkts bytes target prot opt in out source destination 5075 589K ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 191K 90M ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:221499K 133M ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:804364K 6351M ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 6256 327K ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 3382K packets, 1819M bytes) pkts bytes target prot opt in out source destination 5075 589K ACCEPT all -- * lo 0.0.0.0/0 0.0.0.0/0清空當前的所有規則和計數

$ iptables -F # 清空所有的防火墻規則$ iptables -X # 刪除用戶自定義的空鏈$ iptables -Z # 清空計數設置默認規則

$ iptables -P INPUT DROP # 配置默認的不讓進$ iptables -P FORWARD DROP # 默認的不允許轉發$ iptables -P OUTPUT ACCEPT # 默認的可以出去開放指定端口

$ iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT # 允許本地回環接口(即運行本機訪問本機)$ iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 允許已建立的或相關連的通行$ iptables -A OUTPUT -j ACCEPT # 允許所有本機向外的訪問$ iptables -A INPUT -p tcp --dport 22 -j ACCEPT # 允許訪問22端口$ iptables -A INPUT -p tcp --dport 80 -j ACCEPT # 允許訪問80端口$ iptables -A INPUT -p tcp --dport 21 -j ACCEPT # 允許ftp服務的21端口$ iptables -A INPUT -p tcp --dport 20 -j ACCEPT # 允許FTP服務的20端口$ iptables -A INPUT -j reject # 禁止其他未允許的規則訪問$ iptables -A FORWARD -j REJECT # 禁止其他未允許的規則訪問白名單

$ iptables -A INPUT -p all -s 192.168.1.0/24 -j ACCEPT # 允許機房內網機器可以訪問$ iptables -A INPUT -p all -s 192.168.140.0/24 -j ACCEPT # 允許機房內網機器可以訪問$ iptables -A INPUT -p tcp -s 183.121.3.7 --dport 3380 -j ACCEPT # 允許 183.121.3.7 訪問本機的 3380 端口黑名單

iptables -I INPUT -s 123.45.6.7 -j DROP # 屏蔽單個 IPiptables -I INPUT -s 123.0.0.0/8 -j DROP # 屏蔽 IP 網段 從 123.0.0.1 到 123.255.255.254iptables -I INPUT -s 124.45.0.0/16 -j DROP # 屏蔽 IP 網段 從 123.45.0.1 到 123.45.255.254iptables -I INPUT -s 123.45.6.0/24 -j DROP # 屏蔽 IP 網段 從 123.45.6.1 到 123.45.6.254防止 SYN 洪水攻擊

$ iptables -A INPUT -p tcp --syn -m limit --limit 5/second -j ACCEPT小結

撰寫本文過程中,筆者發現中文內容幾乎說的都是四表五鏈?,不知是作者刻意跳過Security?表,還是抄襲導致的同質化太嚴重。 雖然Security表不是常用功能,但是我們不能忽略其存在。

Reference?Traversing of tables and chains[1]?iptables(8) - Linux man page[2]?iptables[3]?iptables詳解[4]?iptables command[5]?深入理解 iptables 和 netfilter 架構[6]?iptables 基礎知識與命令速查引用鏈接

[1]?Traversing of tables and chains:??https://www.frozentux.net/iptables-tutorial/iptables-tutorial.html#TRAVERSINGOFTABLES[2]???iptables(8) - Linux man page:??https://linux.die.net/man/8/iptables??

[3]?iptables:??https://wiki.archlinuxcn.org/wiki/Iptables??

[4]?iptables詳解:??https://lixiangyun.gitbook.io/iptables_doc_zh_cn/??

[5]?iptables command:??https://wangchujiang.com/linux-command/c/iptables.html??

[6]?深入理解 iptables 和 netfilter 架構:https://arthurchiao.art/blog/deep-dive-into-iptables-and-netfilter-arch-zh/

關鍵詞:

上一篇:

下一篇:

X 關閉

X 關閉

<蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>