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
```