Uncomplicated Firewall 心得整理

UFW 是 Ubuntu 內建一個相對對使用者友善的防火牆設定工具,底層實際上仍是操作 iptables,但相比一堆 chain 來說,UFW 用起來真的直覺又簡單。
如果發行版中沒有內建的話可以輸入 sudo apt install ufw 來進行安裝。

使用

ufw 預設是關閉的,可以輸入下列之一來查看 ufw 目前的狀態:

1
2
sudo ufw status
sudo ufw status verbose # 較詳細

如果是遠端連線的話,在啟動 ufw 之前必須先設定允許 ssh,因為 ufw 預設是拒絕所有連進伺服器的要求。請輸入 sudo ufw allow ssh 建立允許 ssh 連線的規則;如果是使用其他方法進入伺服器者請自行查詢使用的 port 及服務來設定規則。

遠端連線者請務必確認遠端連線服務使用的連接埠號是否已經加入允許名單中才啟用 UFW!

設定需要的規則後可以啟動 ufw 了,請輸入:sudo ufw enable。之後就可以輸入步驟 2 的指令確認 ufw 現在的狀態。除了已啟動的訊息外,還會列出剛剛設定的規則。

之後就可以開始設定常用的各項服務會需要用到的 port:

新增規則

UFW 規則動作有四種:

  1. allow:允許
  2. deny:拒絕,直接丟棄封包
  3. reject:拒絕,會回傳封包
  4. limit:throttle,可以限制在 30 秒內只能允許 5 次(含)以下的連線嘗試。man 說明如下:

    ufw supports connection rate limiting, which is useful for protecting against brute-force login attacks. When a limit rule is used, ufw will normally allow the connection but will deny connections if an IP address attempts to initiate 6 or more connections within 30 seconds. See http://www.debian-administration.org/articles/187 for details.

基本語法為:

1
sudo ufw [動作] [port/app]

對於服務 / port

不指定的時候,預設為針對連入(in)做設定。
如果要指定的話,請在動作後面加上 in/out

針對 IP

基礎語法為 ufw [動作] from [ip],支援子網路遮罩,例如:ufw allow from 192.168.1.0/24
如果想針對 port 的話在最後加上 to any port [埠號] 即可

刪除規則

先使用下列指令找到要刪除的規則編號:

1
sudo ufw status numbered

確認要刪除的規則編號後,請下:

1
sudo ufw delete [規則編號]

插入規則

由於底層也是操作 iptables,對於規則的順序也和 iptables 一樣。有些時候會需要調整規則的順序,這時就會使用到下面的指令:

1
sudo ufw insert [希望插入的規則位置編號] [剩下指令同一般操作]

執行後這條規則就會插入到指定的位置,原先位置的規則則會往下調整。

可以利用此特性做各種規則的搭配,避免防火牆找了大半張表才找到符合的規則。

規則註解

有些時候規則一多或是早期設定好,但後來就不曉得為什麼會有那條規則出現,加上註解就可以幫助你恢復記憶。

加上註解的方式很簡單,不管是在新增規則的時候就加上,還是想更新規則的註解,語法都是一樣的:

1
sudo ufw [原本針對該規則的設定] comment '[註解內容]'

此時使用詳細列出狀態指令就可以看到規則後方出現 # 為首、剛剛加上的註解了。

如果想移除註解,直接把註解變成空字串即可:

1
sudo ufw [原本針對該規則的設定] comment ''

常用指令

功能 指令
啟動ufw sudo ufw enable
關閉 ufw sudo ufw disable
允許服務 sudo ufw allow [服務/port]
拒絕服務(不會回傳封包) sudo ufw deny [服務/port]
拒絕服務(會回傳封包) sudo ufw reject [服務/port]
限制嘗試連線頻率 sudo ufw limit [服務/port]
查看 ufw 狀態 sudo ufw status
查看 ufw 狀態(詳細) sudo ufw status verbose
查看 ufw 狀態(規則有編號) sudo ufw status numbered
刪除規則(編號方式) sudo ufw delete [規則編號]
列出全部的可用應用程式設定 sudo ufw app list
顯示指定的應用程式設定 sudo ufw app info '[應用程式設定名稱]'
開啟日誌紀錄功能 sudo ufw logging on
關閉日誌紀錄功能 sudo ufw logging off
查看 ufw 版本 ufw version
為規則加上註解 sudo ufw [rule setting] comment '[註解內容]'

日誌

日誌檔案存放在 /var/log/ufw.log
因為擁有者和群組都是 root,建議複製出來比較容易閱讀和保存:

1
sudo cp /var/log/ufw.log [你想放的路徑]

因為程式產生的日誌檔比較不容易閱讀或紀錄,可使用「這個」來轉換成 csv 格式。

參考