UFW是一個簡化版的iptables,基於iptables,配置比iptables簡單
默認UFW是關閉狀態,即Ubuntu默認打開所有端口,比較危險。
檢測狀態
ufw status
設置默認狀態,默認禁止所有連接(所有入站連接)
ufw default deny
啟用某個端口
ufw allow 22
刪除某個規則
ufw delete allow 22
只打開使用tcp/ip協議的22端口:
ufw allow 22/tcp
打開來自192.168.0.1的tcp請求的80端口:
sudo ufw allow proto tcp 192.168.0.1 port 80 to 192.168.0.2 port 80
更詳細的使用說明見:
http://wiki.ubuntu.org.cn/Ufw%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97
其實調用的還是iptables,因為使用后生成了很多iptables的規則。
# 清空所有防火牆規則
iptables --flush
iptables --delete-chain
# 接受所有到達 22 端口的 TCP 請求
# 假如你改了 SSH 的端口,記得修改這里的端口號。
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 接受所有到達 8888 端口的 TCP 請求
# 記得將 8888 改為你為 Shadowsocks server 設定的端口
iptables -A INPUT -p tcp --dport 8888 -j ACCEPT
# 接受所有由 VPS 發出的請求收到的回應
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 允許 ping
iptables -A INPUT -p icmp -j ACCEPT
# 不接受其余一切網絡請求
iptables -A INPUT -j DROP
然后我發現 /etc/init.d 文件夾下不存在 iptables 服務文件,看來是要自行添加了,真麻煩。在 Google 了一下之后,沒有找到別人提供的服務文件,卻找到了利用開機網絡前的配置 hook 運行自定義腳本來實現的方法,聽說是因為 Debian 已經不再建議使用 /etc/init.d/iptables 服務了。
那么便添加 hook 吧,創建腳本 /etc/network/if-pre-up.d/iptables 並為其添加可執行屬性,文件內容如下:
#!/usr/bin/env bash
# 從 iptables.conf 中讀取防火牆配置
/sbin/iptables-restore < /etc/iptables.conf
接着,執行 bash iptables.sh 運行防火牆,然后執行 iptables-save > /etc/iptables.conf 生成配置文件。
最后,別忘了限制配置文件的讀寫權限,chmod 600 /etc/iptables.conf 足矣。搞定。