--- tags: Linux, Ubuntu, ufw --- # Linux Firewall - ufw [![hackmd-github-sync-badge](https://hackmd.io/KvmXq49iTkWv7dBqO8fXqQ/badge)](https://hackmd.io/KvmXq49iTkWv7dBqO8fXqQ) :::warning Ubuntu系統 ::: ### 狀態 ```bash sudo ufw status sudo ufw enable sudo ufw disable ``` ### 預設 ```bash # 預設允許 sudo ufw default allow # 預設封鎖 sudo ufw default deny ``` ### 設定 port ``` bash # 允許 ssh sudo ufw allow ssh # 允許 22 port sudo ufw allow 22 # 封鎖 21 port sudo ufw deny 21 ``` ### 設定 port 範圍 ```bash # 允許 TCP 6000 ~ 6007 sudo ufw allow 6000:6007/tcp # 封鎖 UDP 6000 ~ 6007 sudo ufw deny 6000:6007/udp ``` ### 設定靜態 IP ```bash # 允許 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 ``` ### 查看與刪除設定的規則 ```bash # 查看 ufw 狀態(帶有順序) sudo ufw status numbered # 刪除某一項規則 sudo ufw delete [the rule number] # 重設所有規則 sudo ufw reset ``` :::warning ufw 在啟動狀態時才能夠使用```sudo ufw status numbered```查看目前設定的規則 ::: ### 使用時的狀況 1. > A: Server(有 ufw)[當 B 未被加入在 A 的 allow 名單時] > B: Client 當 A 未開啟 ufw,B 使用 ssh 連上後(連線中) A 開啟 ufw,B將當機無法輸入任何字元(連線中) 此時當 A 開啟 ufw,B 必須等待一段時間才能恢復正常狀態(連線中),才能夠輸入任何字元。 2. > A: Server(有 ufw)[當 B 被加入在 A 的 allow 名單時] > B: Client 當 A 未開啟 ufw,B 使用 ssh 連上後(連線中) A 開啟 ufw,B 依然正常運作(連線中)且可以輸入字元 即使後來 A 將 allow 移除後,A 再開啟 ufw,B 依然正常運作 直到登出 ssh 後 B 將無法連線(此時 A 的 ufw 是開啟狀態且未 allow ssh) 3. > A: Server(有 ufw)[當 B 未被加入在 A 的 allow 名單時] > B: Client 當 A 已開啟 ufw,B 正在使用 ssh 連線到 A 時候 此時將 B 加入到 allow 名單中(B 還未 time out) 即可順利連線