Skip to content

[iptables] 如何看 iptables 的阻擋紀錄

Published: at 04:01 PM (3 min read)

在 Linux 常見的防火牆套件為 iptables,相信有當過網管或管理伺服器的管理人員都相當熟悉。

(曾經設定完 iptables 就再也連不進去遠端機器的經驗

這篇就不說明如何設定 iptables,這方面的說明在網路上有相當多教學,也可以參考 鳥哥私房菜-防火牆

紀錄一下時常設定完後,如何觀察有哪些嘗試連線而被阻擋的紀錄


首先舉個例子:

透過以下指令我們限制僅有 x.x.x.x ip 可以透過 ssh 連線進入主機

# 限制 x.x.x.x 可以 ssh 連線
iptables -A INPUT -p tcp -s x.x.x.x --dport 22 -j ACCEPT
# 限制其餘 ip 皆不可 ssh 連線
iptables -A INPUT -p tcp -s 0.0.0.0/0 --dport 22 -j DROP

這時候除了 x.x.x.x ip ssh 連線至主機會顯示

OpenSSH_8.6p1, LibreSSL 3.3.6
debug1: Reading configuration data /Users/camel/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 21: include /etc/ssh/ssh_config.d/* matched no files
debug1: /etc/ssh/ssh_config line 54: Applying options for *
debug1: Authenticator provider $SSH_SK_PROVIDER did not resolve; disabling
debug1: Connecting to x.x.x.x [x.x.x.x] port 22.
debug1: connect to address x.x.x.x port 22: Operation timed out
ssh: connect to host x.x.x.x port 22: Operation timed out

這時候我們可以藉由以下指令新增 iptables rule,查看主機上是否有相關的阻擋紀錄

# 建立新的 LOGGING chain
iptables -N LOGGING
# 設定所有 INPUT 都會經過 LOGGING chain
iptables -A INPUT -j LOGGING
# 設定所有 OUTPUT 都會經過 LOGGING chain (這行請謹慎使用,可能你設定下去後你就連不到你的機器,因為機器可能完全無法對外連線)
iptables -A OUTPUT -j LOGGING
# log 封包紀錄在預設 log 位置:/var/log/kern.log
iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables-Dropped: " --log-level 4

接下來在 /var/log/kern.log 就可以看到封包相關的阻擋紀錄

Sep 19 11:56:22 camel-test kernel: [22925331.327363] IPTables-Dropped: IN=eth0 OUT= MAC=04:01:a8:51:9e:01:fe:00:00:00:01:01:08:00 SRC=162.158.162.228 DST=x.x.x.x LEN=40 TOS=0x00 PREC=0x00 TTL=58 ID=39948 DF PROTO=TCP SPT=12854 DPT=22 WINDOW=8 RES=0x00 ACK URGP=0
Sep 19 11:56:52 camel-test kernel: [22925361.532369] IPTables-Dropped: IN=eth0 OUT= MAC=04:01:a8:51:9e:01:fe:00:00:00:01:01:08:00 SRC=162.158.162.228 DST=x.x.x.x LEN=40 TOS=0x00 PREC=0x00 TTL=58 ID=39949 DF PROTO=TCP SPT=12854 DPT=22 WINDOW=8 RES=0x00 ACK URGP=0
Sep 19 11:57:21 camel-test kernel: [22925390.641665] IPTables-Dropped: IN=eth0 OUT= MAC=04:01:a8:51:9e:01:fe:00:00:00:01:01:08:00 SRC=172.71.158.56 DST=x.x.x.x LEN=40 TOS=0x00 PREC=0x00 TTL=55 ID=49888 DF PROTO=TCP SPT=42750 DPT=22 WINDOW=8 RES=0x00 ACK URGP=0


參考資料


Previous Post
[htop] 如何看 cpu load 狀態
Next Post
[git] 如何預設讓 branch / tag list 依照更新日期顯示