ufw === Linux 下的簡易防火牆 ## 基本指令 * 安裝 ``` sudo apt install ufw ``` * 啟用 關閉 重載 ``` sudo ufw disable|enable|reload ``` * 初始化 ``` sudo ufw disable sudo ufw reset ``` ## 測試 * 顯示結果不實際執行 ``` sudo ufw --dry-run {rule} ``` * 狀態 ``` //狀態 sudo ufw status //詳細 sudo ufw status verbose //目前設置的規則,這個指令會幫你把規則前面加上編號 sudo ufw status numbered //如果你突然不喜歡某個規則了,可以直接刪除它 sudo ufw delete 3 ``` ## 預設防火牆規則 outgoing = 就是你內部伺服要連外的 目的地port. incoming = 就是外部連內部伺服器 port. allow 允許 deny 拒絕 ``` sudo ufw default deny Default: deny (incoming), allow (outgoing), disabled (routed) sudo ufw default allow Default: allow (incoming), allow (outgoing), disabled (routed) sudo ufw default deny outgoing Default: deny (incoming), deny (outgoing), disabled (routed) ``` ## 設定單一服務防火牆規則 ``` sudo ufw allow ssh sudo ufw allow http sudo ufw allow ftp ``` ## 根據PORT設定規則 * 單一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設定規則 sudo ufw allow|deny proto {protocol} from {address} {option:#port} sudo ufw allow|deny proto {protocol} from {address} {option:#port} to {address} {option:#port} ``` ## 允許 192.168.11.10 的所有連線 sudo ufw allow from 192.168.11.10 ## 允許 192.168.11.1~192.168.11.255 的所有連線 sudo ufw allow from 192.168.11.0/24 ## 封鎖 192.168.11.4 的所有連線 sudo ufw deny from 192.168.11.4 ## 允許 tcp 協定 192.168.226.195 的連線 sudo ufw allow proto tcp from 192.168.226.195 ## 與許 sudo ufw allow proto tcp from 192.168.226.195 to any port 22 ``` ## 連習題 ### 設定主機阻擋192.168.226.x 來的任何連線 ``` sudo ufw deny from 192.168.226.0/24 ``` ### 設定僅允許你的電腦可以ssh ``` ## 開啟所有ssh連線 sudo ufw allow ssh ## 允許特定SSH連入 sudo ufw allow from 15.15.15.0/24 to any port 22 ``` ### 設定只有192.168.15.x可以連結你的http or 80 ``` sudo ufw allow from 192.168.15.0/24 to any port 80 ``` ### 如果希望主機可以擋ping,在ufw可以怎麼做? 1. 編輯 /etc/ufw/before.rules ``` cd /etc/ufw/ sudo vi before.rules ``` 3. 找到以下這段內容: ``` # ok icmp codes -A ufw-before-input -p icmp --icmp-type destination-unreachable -j ACCEPT -A ufw-before-input -p icmp --icmp-type source-quench -j ACCEPT -A ufw-before-input -p icmp --icmp-type time-exceeded -j ACCEPT -A ufw-before-input -p icmp --icmp-type parameter-problem -j ACCEPT -A ufw-before-input -p icmp --icmp-type echo-request -j ACCEPT ``` 3. 把每一行最後的「ACCEPT」都改成「DROP」 4. 最後再重新啟動 ufw 即可: ``` sudo ufw disable sudo ufw enable ``` 5. 接著會問你以下的問題: ``` Firewall stopped and disabled on system startup Command may disrupt existing ssh connections. Proceed with operation (y|n)? ``` 6. 如果你確定你的 ssh 連線的 port 號,在 ufw 有設定,就直接按「y」執行。 * vi文字編輯器常用指令 ``` x : 刪除游標上的字元。 dd: 刪除該行。 d$: 刪除自游標至行尾之所有字元。 u : 回覆上一個動作。 i : 進入編輯模式 esc : 離開編輯模式 :q :不儲存直接退出vi :wq : 儲存後退出vi ```