Iptables 介紹與使用

連接跟蹤(conntrack)

連接跟蹤是許多網絡應用的基礎。例如,Kubernetes Service、ServiceMesh sidecar、 軟件四層負載均衡器 LVS/IPVS、Docker network、OVS、iptables 主機防火牆等等,都依賴連接跟蹤功能。

**連接跟蹤,顧名思義,就是跟蹤(並記錄)連接的狀態。**例如,圖 1.1 是一臺 IP 地址爲 10.1.1.2 的 Linux 機器,我們能看到這臺機器上有三條 連接:

連接跟蹤所做的事情就是發現並跟蹤這些連接的狀態,具體包括:

需要注意的是,連接跟蹤中所說的 “連接”,概念和 TCP/IP 協議中“面向連接”(connection oriented)的“連接” 並不完全相同,簡單來說:

Netfilter

Linux 的連接跟蹤是在 Netfilter 中實現的。

Netfilter 是 Linux 內核中一個對數據 包進行控制、修改和過濾(manipulation and filtering)的框架。它在內核協議棧中設置了若干 hook 點,以此對數據包進行攔截、過濾或其他處理。

現在提到連接跟蹤(conntrack),可能首先都會想到 Netfilter,Netfilter 只是 Linux 內核中的一種連接跟蹤實現。換句話說,只要具備了 hook 能力,能攔截到進出主機的每個包,完全可以在此基礎上自己實現一套連接跟蹤。

雲原生網絡方案 Cilium 在 1.7.4+ 版本就實現了這樣一套獨立的連接跟蹤和 NAT 機制 (完備功能需要 Kernel 4.19+)。其基本原理是:

$ cilium bpf nat list
$ cilium bpf ct list global

Iptables

**Iptables 是配置 Netfilter 過濾功能的用戶空間工具。**netfilter 纔是防火牆真正的安全框架(framework),netfilter 位於內核空間。iptables 其實是一個命令行工具,位於用戶空間,我們用這個工具操作真正的框架。Iptable 根據規則所定義的方法來處理數據包,如放行(accept)、拒絕(reject)和丟棄(drop)等。

例如當客戶端訪問服務器的 web 服務時,客戶端發送報文到網卡,而 tcp/ip 協議棧是屬於內核的一部分,所以,客戶端的信息會通過內核的 TCP 協議傳輸到用戶空間中的 web 服務中,而此時,客戶端報文的目標終點爲 web 服務所監聽的套接字(IP:Port)上,當 web 服務需要響應客戶端請求時,web 服務發出的響應報文的目標終點則爲客戶端,這個時候,web 服務所監聽的 IP 與端口反而變成了原點,我們說過,netfilter 纔是真正的防火牆,它是內核的一部分,所以,如果我們想要防火牆能夠達到” 防火” 的目的,則需要在內核中設置關卡,所有進出的報文都要通過這些關卡,經過檢查後,符合放行條件的才能放行,符合阻攔條件的則需要被阻止。

iptables 包含 4 個表,5 個鏈。其中表是按照對數據包的操作區分(過濾, NAT 等)的,鏈是按照不同的 Hook 點來區分的,表和鏈實際上是 netfilter 的兩個維度。

iptables 的四個表分別是 filter,mangle,nat,raw,默認表是 filter。

iptables 的五個鏈分別是 PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING。

表和鏈的對應關係如下圖所示:

我們能夠想象出某些常用場景中,報文的流向:

我們可以將數據包通過防火牆的流程總結爲下圖:

查詢規則

#iptables -t filter -nvxL DOCKER  --line
Chain DOCKER (1 references)
num      pkts      bytes target     prot opt in     out     source               destination
1        5076   321478 ACCEPT     tcp  --  !docker0 docker0  0.0.0.0/0            172.17.0.2           tcp dpt:8443
2       37233 54082508 ACCEPT     tcp  --  !docker0 docker0  0.0.0.0/0            172.17.0.2           tcp dpt:22
3        1712   255195 ACCEPT     tcp  --  !docker0 docker0  0.0.0.0/0            172.17.0.3           tcp dpt:9000
4           0        0 ACCEPT     tcp  --  !docker0 docker0  0.0.0.0/0            172.17.0.3           tcp dpt:8000
5       40224  6343104 ACCEPT     tcp  --  !docker0 docker0  0.0.0.0/0            172.17.0.4           tcp dpt:3443
6       21034  2227009 ACCEPT     tcp  --  !docker0 docker0  0.0.0.0/0            172.17.0.5           tcp dpt:3306
7          58     5459 ACCEPT     tcp  --  !docker0 docker0  0.0.0.0/0            172.17.0.6           tcp dpt:80
8         826    70081 ACCEPT     tcp  --  !docker0 docker0  0.0.0.0/0            172.17.0.6           tcp dpt:443
9    10306905 1063612492 ACCEPT     tcp  --  !docker0 docker0  0.0.0.0/0            172.17.0.9           tcp dpt:3306
10     159775 12297727 ACCEPT     tcp  --  !docker0 docker0  0.0.0.0/0            172.17.0.7           tcp dpt:11111

增加規則

在指定表的指定鏈的尾部添加一條規則,-A 選項表示在對應鏈的末尾添加規則,省略 -t 選項時,表示默認操作 filter 表中的規則:

命令語法:iptables -t 表名 -A 鏈名 匹配條件 -j 動作
示例:iptables -t filter -A INPUT -s 192.168.1.146 -j DROP

在指定表的指定鏈的首部添加一條規則,-I 選型表示在對應鏈的開頭添加規則:

命令語法:iptables -t 表名 -I 鏈名 匹配條件 -j 動作
示例:iptables -t filter -I INPUT -s 192.168.1.146 -j ACCEPT

在指定表的指定鏈的指定位置添加一條規則:

命令語法:iptables -t 表名 -I 鏈名 規則序號 匹配條件 -j 動作
示例:iptables -t filter -I INPUT 5 -s 192.168.1.146 -j REJECT

刪除規則

按照規則序號刪除規則,刪除指定表的指定鏈的指定規則,-D 選項表示刪除對應鏈中的規則。示例表示刪除 filter 表中 INPUT 鏈中序號爲 3 的規則。:

命令語法:iptables -t 表名 -D 鏈名 規則序號
示例:iptables -t filter -D INPUT 3

按照具體的匹配條件與動作刪除規則,刪除指定表的指定鏈的指定規則。示例表示刪除 filter 表中 INPUT 鏈中源地址爲 192.168.1.146 並且動作爲 DROP 的規則。:

命令語法:iptables -t 表名 -D 鏈名 匹配條件 -j 動作
示例:iptables -t filter -D INPUT -s 192.168.1.146 -j DROP

刪除指定表的指定鏈中的所有規則,-F 選項表示清空對應鏈中的規則:

命令語法:iptables -t 表名 -F 鏈名
示例:iptables -t filter -F INPUT

修改規則

修改指定表中指定鏈的指定規則,-R 選項表示修改對應鏈中的規則,使用 -R 選項時要同時指定對應的鏈以及規則對應的序號,並且規則中原本的匹配條件不可省略。示例表示修改 filter 表中 INPUT 鏈的第 3 條規則,將這條規則的動作修改爲 ACCEPT, -s 192.168.1.146 爲這條規則中原本的匹配條件,如果省略此匹配條件,修改後的規則中的源地址可能會變爲 0.0.0.0/0:

命令語法:iptables -t 表名 -R 鏈名 規則序號 規則原本的匹配條件 -j 動作
示例:iptables -t filter -R INPUT 3 -s 192.168.1.146 -j ACCEPT

設置指定表的指定鏈的默認策略(默認動作):

命令語法:iptables -t 表名 -P 鏈名 動作
示例:iptables -t filter -P FORWARD ACCEPT

保存規則

方式一

當我們對規則進行了修改以後,如果想要修改永久生效,必須使用下面命令保存規則:

service iptables save

當然,如果你誤操作了規則,但是並沒有保存,那麼使用 service iptables restart 命令重啓 iptables 以後,規則會再次回到上次保存 /etc/sysconfig/iptables 文件時的模樣。

centos7 中,已經不再使用 init 風格的腳本啓動服務,而是使用 unit 文件,所以,在 centos7 中已經不能再使用類似 service iptables start 這樣的命令了,所以 service iptables save 也無法執行,同時,在 centos7 中,使用 firewall 替代了原來的 iptables service,不過不用擔心,我們只要通過 yum 源安裝 iptables 與 iptables-services 即可(iptables 一般會被默認安裝,但是 iptables-services 在 centos7 中一般不會被默認安裝),在 centos7 中安裝完 iptables-services 後,即可像 centos6 中一樣,通過 service iptables save 命令保存規則了,規則同樣保存在 /etc/sysconfig/iptables 文件中。此處給出 centos7 中配置 iptables-service 的步驟:

#配置好yum源以後安裝iptables-service
yum install -y iptables-services
#停止firewalld
systemctl stop firewalld
#禁止firewalld自動啓動
systemctl disable firewalld
#啓動iptables
systemctl start iptables
#將iptables設置爲開機自動啓動,以後即可通過iptables-service控制iptables服務
systemctl enable iptables

上述配置過程只需一次,以後即可在 centos7 中使用 service iptables save 命令保存 iptables 規則了。

方式二

還可以使用另一種方法保存 iptables 規則,就是使用 iptables-save 命令。使用 iptables-save 並不能保存當前的 iptables 規則,但是可以將當前的 iptables 規則以” 保存後的格式” 輸出到屏幕上。

所以,我們可以使用 iptables-save 命令,再配合重定向,將規則重定向到 /etc/sysconfig/iptables 文件中即可。

iptables-save > /etc/sysconfig/iptables

加載規則

我們也可以將 /etc/sysconfig/iptables 中的規則重新載入爲當前的 iptables 規則,但是注意,未保存入 /etc/sysconfig/iptables 文件中的修改將會丟失或者被覆蓋。

使用 iptables-restore 命令可以從指定文件中重載規則,示例如下

iptables-restore < /etc/sysconfig/iptables

匹配條件

當規則中同時存在多個匹配條件時,多個條件之間默認存在” 與” 的關係,即報文必須同時滿足所有條件,才能被規則匹配。

-s 用於匹配報文的源地址, 可以同時指定多個源地址,每個 IP 之間用逗號隔開,也可以指定爲一個網段。

#示例如下
iptables -t filter -I INPUT -s 192.168.1.111,192.168.1.118 -j DROP
iptables -t filter -I INPUT -s 192.168.1.0/24 -j ACCEPT
iptables -t filter -I INPUT ! -s 192.168.1.0/24 -j ACCEPT

-d 用於匹配報文的目標地址, 可以同時指定多個目標地址,每個 IP 之間用逗號隔開,也可以指定爲一個網段。

#示例如下
iptables -t filter -I OUTPUT -d 192.168.1.111,192.168.1.118 -j DROP
iptables -t filter -I INPUT -d 192.168.1.0/24 -j ACCEPT
iptables -t filter -I INPUT ! -d 192.168.1.0/24 -j ACCEPT

-p 用於匹配報文的協議類型, 可以匹配的協議類型 tcp、udp、udplite、icmp、esp、ah、sctp 等(centos7 中還支持 icmpv6、mh)。

#示例如下
iptables -t filter -I INPUT -p tcp -s 192.168.1.146 -j ACCEPT
iptables -t filter -I INPUT ! -p udp -s 192.168.1.146 -j ACCEPT

-i 用於匹配報文是從哪個網卡接口流入本機的,由於匹配條件只是用於匹配報文流入的網卡,所以在 OUTPUT 鏈與 POSTROUTING 鏈中不能使用此選項。

#示例如下
iptables -t filter -I INPUT -p icmp -i eth4 -j DROP
iptables -t filter -I INPUT -p icmp ! -i eth4 -j DROP

-o 用於匹配報文將要從哪個網卡接口流出本機,於匹配條件只是用於匹配報文流出的網卡,所以在 INPUT 鏈與 PREROUTING 鏈中不能使用此選項。

#示例如下
iptables -t filter -I OUTPUT -p icmp -o eth4 -j DROP
iptables -t filter -I OUTPUT -p icmp ! -o eth4 -j DROP

擴展匹配條件

tcp 擴展模塊

常用的擴展匹配條件如下:

注意,-p tcp 與 -m tcp 並不衝突,-p 用於匹配報文的協議,-m 用於指定擴展模塊的名稱,正好,這個擴展模塊也叫 tcp。

#示例如下
iptables -t filter -I OUTPUT -d 192.168.1.146 -p tcp -m tcp --sport 22 -j REJECT
iptables -t filter -I INPUT -s 192.168.1.146 -p tcp -m tcp --dport 22:25 -j REJECT
iptables -t filter -I INPUT -s 192.168.1.146 -p tcp -m tcp --dport :22 -j REJECT
iptables -t filter -I INPUT -s 192.168.1.146 -p tcp -m tcp --dport 80: -j REJECT
iptables -t filter -I OUTPUT -d 192.168.1.146 -p tcp -m tcp ! --sport 22 -j ACCEPT
iptables -t filter -I INPUT -p tcp -m tcp --dport 22 --tcp-flags SYN,ACK,FIN,RST,URG,PSH SYN -j REJECT
iptables -t filter -I OUTPUT -p tcp -m tcp --sport 22 --tcp-flags SYN,ACK,FIN,RST,URG,PSH SYN,ACK -j REJECT
iptables -t filter -I INPUT -p tcp -m tcp --dport 22 --tcp-flags ALL SYN -j REJECT
iptables -t filter -I OUTPUT -p tcp -m tcp --sport 22 --tcp-flags ALL SYN,ACK -j REJECT
iptables -t filter -I INPUT -p tcp -m tcp --dport 22 --syn -j REJECT

udp 擴展模塊

常用的擴展匹配條件:

#示例
iptables -t filter -I INPUT -p udp -m udp --dport 137 -j ACCEPT
iptables -t filter -I INPUT -p udp -m udp --dport 137:157 -j ACCEPT

icmp 擴展模塊

常用的擴展匹配條件:

#示例
iptables -t filter -I INPUT -p icmp -m icmp --icmp-type 8/0 -j REJECT
iptables -t filter -I INPUT -p icmp --icmp-type 8 -j REJECT
iptables -t filter -I OUTPUT -p icmp -m icmp --icmp-type 0/0 -j REJECT
iptables -t filter -I OUTPUT -p icmp --icmp-type 0 -j REJECT
iptables -t filter -I INPUT -p icmp --icmp-type "echo-request" -j REJECT

multiport 擴展模塊

常用的擴展匹配條件如下:

#示例如下
iptables -t filter -I OUTPUT -d 192.168.1.146 -p udp -m multiport --sports 137,138 -j REJECT
iptables -t filter -I INPUT -s 192.168.1.146 -p tcp -m multiport --dports 22,80 -j REJECT
iptables -t filter -I INPUT -s 192.168.1.146 -p tcp -m multiport ! --dports 22,80 -j REJECT
iptables -t filter -I INPUT -s 192.168.1.146 -p tcp -m multiport --dports 80:88 -j REJECT
iptables -t filter -I INPUT -s 192.168.1.146 -p tcp -m multiport --dports 22,80:88 -j REJECT

iprange 模塊

包含的擴展匹配條件如下:

#示例
iptables -t filter -I INPUT -m iprange --src-range 192.168.1.127-192.168.1.146 -j DROP
iptables -t filter -I OUTPUT -m iprange --dst-range 192.168.1.127-192.168.1.146 -j DROP
iptables -t filter -I INPUT -m iprange ! --src-range 192.168.1.127-192.168.1.146 -j DROP

string 模塊

常用擴展匹配條件如下:

我們想要達到的目的是,如果報文中包含”OOXX” 字符,我們就拒絕報文進入本機:

#示例
iptables -t filter -I INPUT -m string --algo bm --string "OOXX" -j REJECT

time 模塊

常用擴展匹配條件如下:

#示例
iptables -t filter -I OUTPUT -p tcp --dport 80 -m time --timestart 09:00:00 --timestop 19:00:00 -j REJECT
iptables -t filter -I OUTPUT -p tcp --dport 443 -m time --timestart 09:00:00 --timestop 19:00:00 -j REJECT
iptables -t filter -I OUTPUT -p tcp --dport 80  -m time --weekdays 6,7 -j REJECT
iptables -t filter -I OUTPUT -p tcp --dport 80  -m time --monthdays 22,23 -j REJECT
iptables -t filter -I OUTPUT -p tcp --dport 80  -m time ! --monthdays 22,23 -j REJECT
iptables -t filter -I OUTPUT -p tcp --dport 80  -m time --timestart 09:00:00 --timestop 18:00:00 --weekdays 6,7 -j REJECT
iptables -t filter -I OUTPUT -p tcp --dport 80  -m time --weekdays 5 --monthdays 22,23,24,25,26,27,28 -j REJECT
iptables -t filter -I OUTPUT -p tcp --dport 80  -m time --datestart 2017-12-24 --datestop 2017-12-27 -j REJECT

connlimit 模塊

常用的擴展匹配條件如下:

#示例
iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 2 -j REJECT
iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 20 --connlimit-mask 24 -j REJECT
iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 10 --connlimit-mask 27 -j REJECT

limit 模塊

connlimit 模塊是對連接數量進行限制的,limit 模塊是對” 報文到達速率” 進行限制的。用大白話說就是,如果我想要限制單位時間內流入的包的數量,就能用 limit 模塊。我們可以以秒爲單位進行限制,也可以以分鐘、小時、天作爲單位進行限制。常用的擴展匹配條件如下:

示例表示限制外部主機對本機進行 ping 操作時,本機最多每 6 秒中放行一個 ping 包

#示例,注意,如下兩條規則需配合使用
#令牌桶中最多能存放3個令牌,每分鐘生成10個令牌(即6秒鐘生成一個令牌)。
iptables -t filter -I INPUT -p icmp -m limit --limit-burst 3 --limit 10/minute -j ACCEPT
#默認將icmp包丟棄
iptables -t filter -A INPUT -p icmp -j REJECT

state 擴展模塊

當我們通過 http 的 url 訪問某個網站的網頁時,客戶端向服務端的 80 端口發起請求,服務端再通過 80 端口響應我們的請求,於是,作爲客戶端,我們似乎應該理所應當的放行 80 端口,以便服務端迴應我們的報文可以進入客戶端主機,於是,我們在客戶端放行了 80 端口,同理,當我們通過 ssh 工具遠程連接到某臺服務器時,客戶端向服務端的 22 號端口發起請求,服務端再通過 22 號端口響應我們的請求,於是我們理所應當的放行了所有 22 號端口,以便遠程主機的響應請求能夠通過防火牆,但是,作爲客戶端,如果我們並沒有主動向 80 端口發起請求,也沒有主動向 22 號端口發起請求,那麼其他主機通過 80 端口或者 22 號端口向我們發送數據時,我們可以接收到嗎?應該是可以的,因爲我們爲了收到 http 與 ssh 的響應報文,已經放行了 80 端口與 22 號端口,所以,不管是” 響應” 我們的報文,還是” 主動發送” 給我們的報文,應該都是可以通過這兩個端口的,那麼仔細想想,這樣是不是不太安全呢?此時 state 擴展模塊就派上用場了。

對於 state 模塊的連接而言,” 連接” 其中的報文可以分爲 5 種狀態,分別爲:

剛纔舉例中的問題即可使用 state 擴展模塊解決,我們只要放行狀態爲 ESTABLISHED 的報文即可,因爲如果報文的狀態爲 ESTABLISHED,那麼報文肯定是之前發出的報文的迴應,這樣,就表示只有迴應我們的報文能夠通過防火牆,如果是別人主動發送過來的新的報文,則無法通過防火牆:

iptables -t filter -I INPUT -m state --state ESTABLISHED -j ACCEPT

mangle 表

mangle 表的主要功能是根據規則修改數據包的一些標誌位,以便其他規則或程序可以利用這種標誌對數據包進行過濾或策略路由。mangle 表主要有以下 3 種操作:

例如內網的客戶端通過 Linux 主機連入 Internet,而 Linux 主機與 Internet 連接時有兩條線路,它們的網關如圖所示。現要求對內網進行策略路由,所有通過 TCP 協議訪問 80 端口的數據包都從 ChinaNet 線路出去,而所有訪問 UDP 協議 53 號端口的數據包都從 Cernet 線路出去。

這是一個策略路由的問題,爲了達到目的,在對數據包進行路由前,要先根據數據包的協議和目的端口給數據包做上一種標誌,然後再指定相應規則,根據數據包的標誌進行策略路由。爲了給特定的數據包做上標誌,需要使用 mangle 表,mangle 表共有 5 條鏈,由於需要在路由選擇前做標誌,因此應該使用 PREROUTING 鏈,下面是具體的命令:

iptables -t mangle -A PREROUTING -i eth0 -p tcp --dport 80 -j MARK --set-mark 1;
iptables -t mangle -A PREROUTING -i eth0 -p udp --dprot 53 -j MARK --set-mark 2;

數據包經過 PREROUTING 鏈後,將要進入路由選擇模塊,爲了對其進行策略路由,執行以下兩條命令,添加相應的規則:

ip rule add from all fwmark 1 table 10
ip rule add from all fwmark 2 table 20

以上兩條命令表示所有標誌是 1 的數據包使用路由表 10 進行路由,而所有標誌是 2 的數據包使用路由表 20 進行路由。路由表 10 和 20 分別使用了 ChinaNet 和 Cernet 線路上的網關作爲默認網關,具體設置命令如下所示:

ip route add default via 10.10.1.1 dev eth1 table 10
ip route add default via 10.10.2.1 dev eth2 table 20

以上兩條命令在路由表 10 和 20 上分別指定了 10.10.1.1 和 10.10.2.1 作爲默認網關,它們分別位於 ChinaNet 和 Cernet 線路上。於是,使用路由表 10 的數據包將通過 ChinaNet 線路出去,而使用路由表 20 的數據包將通過 Cernet 線路出去。

自定義鏈

當默認鏈中的規則非常多時,不方便我們管理。想象一下,如果 INPUT 鏈中存放了 200 條規則,這 200 條規則有針對 httpd 服務的,有針對 sshd 服務的,有針對私網 IP 的,有針對公網 IP 的,假如,我們突然想要修改針對 httpd 服務的相關規則,難道我們還要從頭看一遍這 200 條規則,找出哪些規則是針對 httpd 的嗎?這顯然不合理。

所以,iptables 中,可以自定義鏈,通過自定義鏈即可解決上述問題。假設,我們自定義一條鏈,鏈名叫 IN_WEB,我們可以將所有針對 80 端口的入站規則都寫入到這條自定義鏈中,當以後想要修改針對 web 服務的入站規則時,就直接修改 IN_WEB 鏈中的規則就好了,即使默認鏈中有再多的規則,我們也不會害怕了,因爲我們知道,所有針對 80 端口的入站規則都存放在 IN_WEB 鏈中。

創建自定義鏈

#在filter表中創建IN_WEB自定義鏈
iptables -t filter -N IN_WEB

引用自定義鏈

#在INPUT鏈中引用剛纔創建的自定義鏈
iptables -t filter -I INPUT -p tcp --dport 80 -j IN_WEB

重命名自定義鏈

#將IN_WEB自定義鏈重命名爲WEB
iptables -E IN_WEB WEB

刪除自定義鏈

刪除自定義鏈需要滿足兩個條件:

#第一步:清除自定義鏈中的規則
iptables -t filter -F WEB
#第二步:刪除自定義鏈
iptables -t filter -X WEB

LOG 動作

LOG 動作默認會將報文的相關信息記錄在 / var/log/message 文件中,當然,我們也可以將相關信息記錄在指定的文件中,以防止 iptables 的相關信息與其他日誌信息相混淆,修改 /etc/rsyslog.conf 文件(或者 /etc/syslog.conf),在 rsyslog 配置文件中添加如下配置即可:

kern.warning /var/log/iptables.log

完成上述配置後,重啓 rsyslog 服務(或者 syslogd):

service rsyslog restart

LOG 動作也有自己的選項,常用選項如下:

比如,我想要將主動連接 22 號端口的報文的相關信息都記錄到日誌中,並且把這類記錄命名爲”want-in-from-port-22″, 則可以使用如下命令:

iptables -I INPUT -p tcp --dport 22 -m state --state NEW -j LOG --log-prefix "want-in-from-port-22"

完成上述配置後,我在 IP 地址爲 192.168.1.98 的客戶端機上,嘗試使用 ssh 工具連接上例中的主機,然後查看對應的日誌文件(已經將日誌文件設置爲 /var/log/iptables.log):

如上圖所示,ssh 連接操作的報文的相關信息已經被記錄到了 iptables.log 日誌文件中,而且這條日誌中包含” 標籤”:want-in-from-port-22,如果有很多日誌記錄,我們就能通過這個” 標籤” 進行篩選了,這樣方便我們查看日誌,同時,從上述記錄中還能夠得知報文的源 IP 與目標 IP,源端口與目標端口等信息,從上述日誌我們能夠看出,192.168.1.98 這個 IP 想要在 14 點 11 分 連接到 192.168.1.139(當前主機的 IP)的 22 號端口,報文由 eth4 網卡進入,eth4 網卡的 MAC 地址爲 00:0c:29:b7:f4:d1,客戶端網卡的 MAC 地址爲 f4:8e:38:82:b1:29。

參考鏈接

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/XRL1io-cGeljgU7880MB1A