Ubuntu防火墻(UFW)故障排查指南
首先檢查UFW是否處于運行狀態,這是排查故障的基礎。使用以下命令查看狀態:
sudo ufw status
若顯示Status: active,說明防火墻已啟用;若顯示Status: inactive,則表示防火墻未啟動。如需更詳細的信息(如默認策略、開放端口),可添加verbose參數:
sudo ufw status verbose
默認策略決定了未被明確允許的流量的處理方式。UFW的推薦默認策略為:拒絕所有傳入連接,允許所有傳出連接。查看默認策略的命令:
sudo ufw default
若默認策略不符合預期(如傳入流量被允許),可通過以下命令修改:
sudo ufw default deny incoming(拒絕傳入)
sudo ufw default allow outgoing(允許傳出)
檢查已添加的規則是否正確,是否有誤攔截或放行不必要的流量。常用命令:
sudo ufw list:列出所有已啟用的規則;sudo ufw show added:顯示已添加但未激活的規則;sudo ufw status numbered:按端口排序顯示規則(便于定位)。sudo ufw delete [規則編號]刪除日志是排查故障的關鍵,它能記錄所有被允許或拒絕的連接嘗試。啟用日志記錄:
sudo ufw logging on
查看實時日志:
sudo tail -f /var/log/ufw.log
若需更詳細的信息(如源IP、目的端口),可添加-v參數:
sudo ufw logs -v
通過日志可快速定位問題(如頻繁被拒絕的IP、異常端口訪問)
若防火墻開啟后出現網絡連接問題(如無法SSH、訪問網頁),需測試端口是否正常放行。例如,測試SSH端口(22)是否可達:
telnet [服務器IP] 22 或 nc -zv [服務器IP] 22
若連接失敗,需檢查是否添加了正確的允許規則:
sudo ufw allow 22/tcp
若使用非標準端口(如2222),需替換為實際端口
若防火墻規則配置正確但仍無法訪問某端口,可能是端口被其他進程占用。使用以下命令查看端口占用情況:
sudo netstat -tulpn | grep [端口號] 或 sudo ss -tulpn | grep [端口號]
若端口被占用,可通過kill [進程ID]終止進程,或修改服務端口
若同時運行多個防火墻工具(如iptables-persistent、firewalld),可能導致規則沖突。需禁用其他防火墻服務:
sudo systemctl stop netfilter-persistentsudo systemctl disable netfilter-persistentsudo systemctl stop firewalldsudo systemctl disable firewalldsudo ufw enable若以上步驟均無法解決問題,可嘗試重啟UFW以恢復默認狀態:
sudo ufw disable && sudo ufw enable
若仍無法解決,可重置UFW(清除所有規則,恢復初始狀態):
sudo ufw reset
重置后需重新配置規則
UFW依賴于netfilter內核模塊和iptables工具,需確保這些依賴正常。檢查netfilter模塊是否加載:
lsmod | grep nf_conntrack
若未加載,可通過sudo modprobe nf_conntrack加載。檢查iptables是否安裝:
sudo apt install iptables
若未安裝,需安裝后重啟UFW