由於 Hinet 年初更換了我的光世代固定 IP, 趁過年期間將 Mapleboard 主機重開機取得新的固定 IP 後到 Namecheap 將 tony1966.cc 域名綁定到新的固定 IP 恢復了此域名的運作, 接下來要安裝 ufw 防火牆來加強主機安全性, 做法參考 :
本系列測試文章參考 :
1. 啟用 ufw 防火牆 :
ufw 是 Uncomplicated FireWall 的縮寫, 具有指令簡單好記, 設定規則淺顯易懂優點, Ubuntu 通常已預設安裝 ufw, 可用下列指令查看防火牆狀態 :
sudo ufw status
one@LX2438:~$ sudo ufw status
[sudo] one 的密碼:
狀態:不活動 (inactive)
Inactive 狀態表示雖然 ufw 已安裝卻尚未啟用, 須使用下列指令啟用 (activate) :
sudo ufw enable
tony1966@LX2438:~$ sudo ufw enable
[sudo] tony1966 的密碼:
在系統啟動時啟用防火牆
在下次啟動時才會啟用 ufw 防火牆. 這時再次檢視防火牆狀態會顯示已啟用 (active) :
tony1966@LX2438:~$ sudo ufw status
狀態: 啓用
若執行上述指令出現未找到 ufw 錯誤, 表示系統尚未安裝 ufw (例如屬於 Debian 系統的樹莓派預設並未安裝 ufw), 要先用下列指令安裝 :
udo apt-get install ufw
2. 設定防火牆規則 :
下列指令會顯示目前的防火牆規則 :
sudo ufw status verbose
tony1966@LX2438:~$ sudo ufw status verbose
[sudo] tony1966 的密碼:
狀態: 啓用
日誌: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
新建設定檔案: skip
可見 ufw 預設會拒絕所有進入主機的連線, 但允許所有出去的連線; 預設關閉封包轉送功能 (作為路由器與 VPN 時才需要打開). 日誌功能已開啟, 紀錄等級預設為 low (等級有五個等級 : off/low/medium/high/full), 可用下列指令更改等級 :
sudo ufw logging medium
如果要更改預設規則可用下列指令 :
sudo ufw default allow (不安全, 不建議)
sudo ufw default deny (較安全, 預設)
接下來要設定主機的允入連線埠號, 由於我這台 Mapleboard MP510-50 主機主要是作為網頁伺服器與 API 測試之用, 因此只要開啟 TCP 協定的埠口即可, UDP 目前用不到不需要開啟. 未來如果要做 DNS 伺服器 (53 埠), NTP 伺服器 (123 埠), 或 VPN 伺服器 (OpenVPN 1194 埠) 等用途再開啟各埠之 UDP.
首先是埠號 22 的 ssh 遠端連線服務 :
sudo ufw allow ssh/tcp 或 sudo ufw allow 22/tcp
tony1966@LX2438:~$ sudo ufw allow 22/tcp
[sudo] tony1966 的密碼:
已添加規則
已添加規則 (v6)
埠號 80 的 HTTP 連線是作為網頁伺服器主機一定要開啟此埠 :
sudo ufw allow 80/tcp
tony1966@LX2438:~$ sudo ufw allow 80/tcp
已添加規則
已添加規則 (v6)
埠號 443 的 HTTPS 連線也是作為網頁伺服器主機一定要開啟的埠號 (雲端的遠端連線服務 RealVNC Cloud 也是透過 443 埠連線) :
sudo ufw allow 443/tcp
tony1966@LX2438:~$ sudo ufw allow 443/tcp
已添加規則
已添加規則 (v6)
另外直連的 VNC 使用 5900/5901 埠 (TCP) 也要打開 :
sudo ufw allow 5900/tcp
tony1966@LX2438:~$ sudo ufw allow 5900/tcp
已添加規則
已添加規則 (v6)
tony1966@LX2438:~$ sudo ufw allow 5901/tcp
[sudo] tony1966 的密碼:
已添加規則
已添加規則 (v6)
顯示目前的防火牆規則 :
tony1966@LX2438:~$ sudo ufw status verbose
狀態: 啓用
日誌: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
新建設定檔案: skip
至 動作 來自
- -- --
22/tcp ALLOW IN Anywhere
80/tcp ALLOW IN Anywhere
443/tcp ALLOW IN Anywhere
5900/tcp ALLOW IN Anywhere
5901/tcp ALLOW IN Anywhere
22/tcp (v6) ALLOW IN Anywhere (v6)
80/tcp (v6) ALLOW IN Anywhere (v6)
443/tcp (v6) ALLOW IN Anywhere (v6)
5900/tcp (v6) ALLOW IN Anywhere (v6)
5901/tcp (v6) ALLOW IN Anywhere (v6)
如果要刪除規則重新設定, 要先用下列指令查詢規則編號 :
sudo ufw status numbered
tony1966@LX2438:~$ sudo ufw status numbered
狀態: 啓用
至 動作 來自
- -- --
[ 1] 22/tcp ALLOW IN Anywhere
[ 2] 80/tcp ALLOW IN Anywhere
[ 3] 443/tcp ALLOW IN Anywhere
[ 4] 5900/tcp ALLOW IN Anywhere
[ 5] 5901/tcp ALLOW IN Anywhere
[ 6] 22/tcp (v6) ALLOW IN Anywhere (v6)
[ 7] 80/tcp (v6) ALLOW IN Anywhere (v6)
[ 8] 443/tcp (v6) ALLOW IN Anywhere (v6)
[ 9] 5900/tcp (v6) ALLOW IN Anywhere (v6)
[10] 5901/tcp (v6) ALLOW IN Anywhere (v6)
然後以下列指令刪除指定編號之規則 :
sudo ufw delete 規則編號
tony1966@LX2438:~$ sudo ufw delete 1
刪除中:
allow 22/tcp
繼續執行(y|n)? y
已刪除規則 (v6)
如果想要全部重設, 可用下列指令 :
sudo ufw reset
防火牆規則設定好後毋須重開機, 只要用下列指令重新載入即可 :
sudo ufw reload
tony1966@LX2438:~$ sudo ufw reload
已經重新載入防火牆
3. 使用應用程式設定防火牆規則 :
除了上面利用 port/protocol 方式設定防火牆規則外, 也可以用應用程式名稱來設定, 先用下面指令顯示 ufw 預設的應用程式列表 :
sudo ufw app list
one@LX2438:~$ sudo ufw app list
[sudo] one 的密碼:
可用套用程序:
CUPS
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSH
我們可以直接用這些應用名稱來設定其防火牆規則, 不用手動輸入連接埠號碼.
首先用下列指令查詢應用程式的描述 :
sudo ufw app info "應用程式名稱"
例如 :
tony1966@LX2438:~$ sudo ufw app info "Nginx Full"
設定: Nginx Full
標題:Web Server (Nginx, HTTP + HTTPS)
描述: Small, but very powerful and efficient web server
tony1966@LX2438:~$ sudo ufw app info "Nginx HTTP"
設定: Nginx HTTP
標題:Web Server (Nginx, HTTP)
描述: Small, but very powerful and efficient web server
埠號:
80/tcp
tony1966@LX2438:~$ sudo ufw app info "Nginx HTTPS"
設定: Nginx HTTPS
標題:Web Server (Nginx, HTTPS)
描述: Small, but very powerful and efficient web server
埠號:
443/tcp
tony1966@LX2438:~$ sudo ufw app info "OpenSSH"
設定: OpenSSH
標題:Secure shell server, an rshd replacement
描述: OpenSSH is a free implementation of the Secure Shell protocol.
埠號:
22/tcp
tony1966@LX2438:~$ sudo ufw app info "CUPS"
設定: CUPS
標題:Common UNIX Printing System server
描述: CUPS is a printing system with support for IPP, samba, lpd, and other
protocols.
如果使用應用程式名稱來設定防火牆規則只要用下列兩個指令即可, 做用與上面指定埠號/協定之效果一樣 :
sudo ufw allow "OpenSSH" # 開啟 SSH
sudo ufw allow "Nginx Full" # 開啟 HTTP 和 HTTPS
第一個指令相當於 sudo ufw allow 22/tcp; 第二個指令相當於 sudo ufw allow 80/tcp 與 sudo ufw allow 443/tcp.
4. 檢視 ufw 防火牆日誌 :
防火牆日誌檔放在 /var/log 下的 ufw.log, 可以用 less 指令按上下鍵一列一列瀏覽 (輸入 q 跳出) :
sudo less /var/log/ufw.log
我擷取了一部分 log 請 ChatGPT 說明如下 :
🔹 Feb 4 08:40:43 → 記錄發生的時間
🔹 LX2438 → 你的主機名稱
🔹 kernel: → 這是來自 Linux 核心的訊息
🔹 [UFW BLOCK] → 這表示 UFW 防火牆封鎖了這個封包
🔹 IN=ppp0 → 這個封包來自 ppp0(你的撥接網路介面)
🔹 OUT= → 空白,代表這個封包沒有要轉發到其他網路介面
🔹 SRC=195.230.103.249 → 封包來源 IP(可疑來源)
🔹 DST=1xx.xxx.xxx.x2 → 你的主機 IP(目標 IP)
🔹 LEN=40 → 封包長度(40 bytes)
🔹 PROTO=TCP → 傳輸協定(這是 TCP 封包)
🔹 SPT=50878 → 來源埠(50878,這是動態隨機埠)
🔹 DPT=52217 → 目標埠(52217,通常是隨機端口,可能是掃描攻擊)
🔹 WINDOW=65535 → TCP 視窗大小(這是典型的 TCP 參數)
🔹 RES=0x00 → 預留欄位(一般無特別意義)
🔹 SYN → 這是 SYN 封包(表示有人嘗試建立 TCP 連線)
🔹 URGP=0 → 緊急指標(通常為 0,表示非緊急封包)
這些 log 顯示這些封包可能是惡意掃描或試圖入侵, 但 ufw 防火牆已阻擋了這些試圖連入主機的外部 IP. 目標埠 DPT=81 的連線可能是自動化掃描工具正在尋找開放的 Web 服務 (81 是 HTTP 常用的替代埠號), DPT=8081 表示有人試圖存取 API 或 Web 管理介面 (8081 通常是 HTTP 代理伺服器或管理介面); 而隨機埠 (例如 21804, 1039) 則可能是惡意掃描工具嘗試連線.
如果要連續監看即時的防火牆 log 可用下列指令 :
sudo tail -f /var/log/ufw.log
此時終端機會被此程序占用, 欲停止監看可按 Ctrl + c (注意是小寫).
如果只想檢視最近幾筆日誌可用 tail 指令, 例如查看最近 50 筆 :
sudo tail -n 50 /var/log/ufw.log
可以搭配 grep 指令過濾日誌, 例如過濾最近 20 筆 SSH (22 埠) 連線 :
sudo grep "DPT=22 " /var/log/ufw.log | tail -n 20
注意 22 後面要加一個空格才不會抓到 22 開頭的埠號.
或者來自特定 IP 的連線 :
sudo grep "189.144.115.217" /var/log/ufw.log | tail -n 20
以上 ufw 指令摘要如下表 :
ufw 指令 | 說明 |
sudo ufw enable | 啟用 ufw 防火牆 |
sudo ufw disable | 停用 ufw 防火牆 |
sudo ufw status | 檢查防火牆狀態 |
sudo ufw status verbose | 顯示詳細的防火牆狀態 |
sudo ufw allow 22/tcp | 允許 SSH ( 22 埠 / TCP ) |
sudo ufw deny 80/tcp | 拒絕 HTTP ( 80 埠 / TCP ) |
sudo ufw allow from 192.168.1.100 | 允許來自 192.168.1.100 的所有連線 |
sudo ufw delete allow 22/tcp | 刪除允許 SSH 的規則 |
sudo ufw reset | 重設 ufw 設定,回復到預設狀態 |
sudo ufw reload | 重新載入防火牆規則 |
參考 :
沒有留言:
張貼留言