Linux 上的 iptables 可能太難,我們不是專業的資安工程師,也不是什麼 Linux 老鳥。像我們這種菜鳥,還是用 ufw 就好了。這篇整理一些常用的 ufw 設定。

安裝 ufw

ufw 的全名是 Uncomplicated Firewall,意思是不複雜的防火牆。它的指令不但好記,寫好的規則也淺顯易懂,不會像 iptables 的裹腳布又臭又長。

大部分的 Ubuntu 系統應該都已經裝好 ufw。如果你是 Debian,或是什麼特別瘦身版的 Ubuntu 的話,可以透過以下指令安裝:

sudo apt-get install ufw

設定防火牆預設規則

如果你想要規則嚴一點,可以預設封鎖所有通訊埠,再選擇性打開幾個 port;你也可以預設開放所有 port,然後再封鎖幾個 port。預設允許/封鎖的指令如下:

sudo ufw default allow # 預設允許
sudo ufw default deny # 預設封鎖

允許/封鎖通訊埠(port)

如果你要允許 SSH port 的話,可以這樣下:

sudo ufw allow ssh

或是

sudo ufw allow 22

也可以允許或封鎖其他的 port:

sudo ufw allow 80 # 允許 80
sudo ufw allow 443 # 允許 443
sudo ufw deny 3389 # 封鎖 3389
sudo ufw deny 21 # 封鎖 21

甚至可以一次允許一個範圍的 port:

sudo ufw allow 6000:6007/tcp # 允許 TCP 6000~6007
sudo ufw allow 6000:6007/udp # 允許 UDP 6000~6007

來自特定 IP 的規則

上面的規則是針對所有 IP,如果你想要針對某些 IP 可以不受控管,你也可以這樣設定:

sudo ufw allow 192.168.11.10 # 允許 192.168.11.10 的所有連線
sudo ufw allow 192.168.11.0/24 # 允許 192.168.11.1~192.168.11.255 的所有連線
sudo ufw deny 192.168.11.4 # 封鎖 192.168.11.4 的所有連線

如果你只是不想讓某個小明偷偷連到你的 SSH Port,你也可以針對他封鎖:

sudo ufw deny from 192.168.11.7 to any port 22

查看目前設了什麼規則

推薦使用這個指令來看目前設了什麼規則:

sudo ufw status numbered

這個指令會幫你把規則前面加上編號:

Numbered Output:
Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 22                         ALLOW IN    Anywhere
[ 2] 80                         ALLOW IN    Anywhere
[ 3] 443                        ALLOW IN    Anywhere

如果你突然不喜歡某個規則了,可以直接刪除它:

sudo ufw delete 3

那個規則就不見囉!

開啟/關閉/重設防火牆

設定完所有規則後,記得把防火牆打開。

如果你是用 SSH 連線,別忘了要先 allow 自己的 SSH 連線。

sudo ufw enable # 啟用防火牆
sudo ufw disable # 停用防火牆

如果你把規則改爛了,想要重新來過的話,可以重設:

sudo ufw reset

以上就是常用的 ufw 指令,找台機器試試看吧!沒有機器卻躍躍欲試的話,快 開一臺 DigitalOcean 機器(介紹,贈免費額度)