在 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