對於一個伺服器安全性的考量,都會需要設定防火牆避免伺服器被入侵,而 UFW (Uncomplicated Firewall) 是 ubuntu 伺服器預設的防火牆操作軟體,其主要功能是用容易懂的指令來設定 iptables,本篇將教學一些 UFW 常用的指令操作。
啟用防火牆
可以輸入指令檢查 ufw 是否為啟用狀態,在 ubuntu 伺服器預設是沒有啟用的狀態 Status: inactive
sudo ufw status verbose
在啟用前我們要先設定允許 ssh port (22) 可以連線,不然之後會無法 從外部 ssh 連到機器更改東西
sudo ufw allow 22
擋下全部其他 port 的連線,並允許機器能夠連到外面的網路
sudo ufw default deny incoming sudo ufw default allow outgoing
接著啟動 ufw
sudo ufw enable
當 ufw 啟動之後就能看到詳細的防火牆規則了
sudo ufw status verbose
Status: active Logging: on (low) Default: deny (incoming), allow (outgoing), disabled (routed) New profiles: skip To Action From -- ------ ---- 22 ALLOW IN Anywhere 22 (v6) ALLOW IN Anywhere (v6)
允許或拒絕連線指定 port
如果要允許連線指定 port 可以輸入指令:
sudo ufw allow <port-number> sudo ufw deny <port-number>
例如:假如要放網站能夠透過外部連線,可以輸入以下指令
sudo ufw allow 80 sudo ufw allow 443
允許或拒絕特定 IP 連線指定 port
而假如是只允許特定 IP 才能連線的話,可以輸入以下指令
sudo ufw allow from <IP> to any port <port-number> sudo ufw deny from <IP> to any port <port-number>
例如允許 159.66.109.6
連線 80 port
sudo ufw allow from 159.66.109.6 to any port 80
設定指定 subnet 可以允許或禁止連線指定 port
有時會設定需要允許子網路可以連線到,可以輸入以下指令
sudo ufw allow from <IP-with-mask> to any port <port-number> sudo ufw deny from <IP-with-mask> to any port <port-number>
例如允許要允許 159.66.109.0
~ 159.66.109.254
能夠連線 22 port
sudo ufw allow from 159.66.109.0/24 to any port 22
設定指定網路介面 (Network Interface) 連線指定 port
而如果不是想針對 IP 來設定連線,而是想針對網路介面進行設定的話,首先可以輸入查目前有哪些網路介面
ip addr
並且設定該網路介面能否允許連線至指定port
sudo ufw allow in on <network-interface-name> to any port <port-number>
例如允許介面 eth0 可以連線 80 port
sudo ufw allow in on eth0 to any port 80
刪除已經建立的規則
如果要刪除已經建立的防火牆規則,要先查看規則所對應的編號
sudo ufw status numbered
Status: active To Action From -- ------ ---- [ 1] 22 ALLOW IN Anywhere [ 2] 80 ALLOW IN Anywhere [ 3] 443 ALLOW IN Anywhere [ 4] 22 (v6) ALLOW IN Anywhere (v6) [ 5] 80 (v6) ALLOW IN Anywhere (v6) [ 6] 443 (v6) ALLOW IN Anywhere (v6)
知道指定編號可以輸入以下指令來刪除規則:
sudo ufw delete <rule-number>
例如:要刪除 IPv4 的 80 port 連線
sudo ufw delete 2
Deleting: allow 80 Proceed with operation (y|n)? y Rule deleted