2025年2月2日 星期日

Mapleboard MP510-50 測試 (二十二) : 安裝 ufw 防火牆

由於 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. 

參考 : 


沒有留言 :