要配置linux防火墻需先確認使用的是iptables還是firewalld。1.查看當前防火墻工具:運行systemctl status firewalld或systemctl status iptables確定;2.用firewalld開放端口:如添加80端口執行sudo firewall-cmd –permanent –add-port=80/tcp并重載;3.用iptables開放端口:如允許22端口執行sudo iptables -a input -p tcp –dport 22 -j accept及保存規則;4.常見問題排查順序:檢查服務監聽、防火墻規則、其他安全策略。理解規則邏輯和保存機制是關鍵。
配置Linux防火墻其實不難,但得搞清楚自己用的是哪個工具。常見的兩種是iptables和firewalld,它們的使用方式不太一樣。先說結論:如果你用的是centos 7或更新版本,默認一般用的是firewalld;而老一點的系統可能還在用iptables。下面我分幾個常用場景來說明怎么操作。
如何查看當前使用的防火墻工具?
你可以先運行以下命令看看有沒有安裝firewalld:
systemctl status firewalld
如果提示找不到服務,那可能是用的iptables。也可以檢查是否有iptables服務在運行:
systemctl status iptables
確定好用的是哪個之后,再按對應的工具來配置。別混著用,容易出問題。
怎么用firewalld開放端口?
firewalld的好處是支持動態配置,不需要重啟服務就能生效。比如你想讓外部訪問你的Web服務(80端口),可以這樣操作:
sudo firewall-cmd --permanent --add-port=80/tcp sudo firewall-cmd --reload
上面第一條命令是永久添加規則,第二條是重新加載生效。如果不加–permanent,重啟后規則就沒了。
常見錯誤:忘了加協議(tcp/udp),或者沒執行reload,改完沒生效還以為寫錯了。
iptables怎么設置允許特定端口?
如果你還在用傳統的iptables,比如在CentOS 6或者某些Debian系統上,可以用下面的方法添加規則。比如開放22端口ssh:
sudo iptables -A input -p tcp --dport 22 -j ACCEPT sudo iptables -A INPUT -j DROP
第一行是允許22端口進來的流量,第二行是默認拒絕其他所有入站請求。注意順序很重要,因為iptables是按規則順序匹配的。
保存配置也很關鍵,否則重啟就沒了:
sudo service iptables save
常見問題:為什么設置了規則還是不通?
這通常不是防火墻沒配對,而是順序寫錯了、沒重載、或者被其他安全策略擋住了。比如:
- firewalld里開了80端口,但SELinux或者AppArmor攔了;
- iptables規則順序不對,前面一條DROP直接把包丟了;
- 沒有保存配置,重啟后還原了;
- 用了docker等容器工具,自動修改了iptables規則。
遇到這種情況,建議一步步排查:先確認服務本身正常監聽端口,再查防火墻是否放行,最后看是否有其他安全機制攔截。
基本上就這些。不管是用firewalld還是iptables,關鍵是理解規則的邏輯順序和保存機制。別急著一頓操作,先想清楚要放哪些流量,再測試驗證一遍,基本就不會出錯。