配置linux防火墻規(guī)則需先查看當(dāng)前規(guī)則,使用sudo iptables -l -n -v;可選擇清除現(xiàn)有規(guī)則sudo iptables -f和-x;設(shè)置默認(rèn)策略拒絕所有并按需放行;添加常用服務(wù)規(guī)則如允許回環(huán)訪(fǎng)問(wèn)、已建立連接、ssh及http/https端口;最后保存規(guī)則并確保開(kāi)機(jī)生效。
配置linux防火墻規(guī)則,其實(shí)并不復(fù)雜,但得清楚自己要放行什么、阻擋什么。iptables 是 Linux 系統(tǒng)中非常基礎(chǔ)且強(qiáng)大的防火墻工具,雖然現(xiàn)在有 nftables 逐漸替代的趨勢(shì),但在很多老系統(tǒng)和一些嵌入式環(huán)境中,它仍然在廣泛使用。掌握基本的 iptables 配置,能讓你更靈活地控制服務(wù)器的安全策略。
1. 查看當(dāng)前防火墻規(guī)則
在動(dòng)手修改之前,先看看當(dāng)前的規(guī)則是什么樣的:
sudo iptables -L -n -v
- -L 表示列出規(guī)則;
- -n 顯示 IP 和端口而不是域名和服務(wù)名;
- -v 顯示詳細(xì)信息,比如數(shù)據(jù)包數(shù)量等。
你可能會(huì)看到一堆鏈(chain)和規(guī)則(rules),比如 input, FORWARD, OUTPUT 這三個(gè)默認(rèn)鏈。大多數(shù)時(shí)候我們只需要調(diào)整 INPUT 鏈,也就是進(jìn)入本機(jī)的數(shù)據(jù)包。
2. 清除現(xiàn)有規(guī)則(可選)
如果你是剛配置,或者想從頭開(kāi)始,可以清空已有規(guī)則:
sudo iptables -F sudo iptables -X
- -F 是 flush,清空所有規(guī)則;
- -X 刪除用戶(hù)自定義的鏈。
?? 注意:清空規(guī)則后如果沒(méi)有及時(shí)設(shè)置新的允許規(guī)則,可能會(huì)把自己關(guān)在外面,尤其是遠(yuǎn)程服務(wù)器。建議操作前先添加一條允許 SSH 的規(guī)則。
3. 設(shè)置默認(rèn)策略:拒絕所有,再按需放行
這是比較安全的做法:
sudo iptables -P INPUT DROP sudo iptables -P FORWARD DROP sudo iptables -P OUTPUT ACCEPT
- INPUT 默認(rèn)拒絕,只允許特定流量進(jìn)來(lái);
- FORWARD 拒絕,除非你在做路由器或NAT;
- OUTPUT 接受,讓本機(jī)主動(dòng)發(fā)出的請(qǐng)求沒(méi)問(wèn)題。
接下來(lái)就是一個(gè)個(gè)添加允許的規(guī)則了。
4. 添加常用服務(wù)規(guī)則
允許本地回環(huán)訪(fǎng)問(wèn)(很重要)
sudo iptables -A INPUT -i lo -j ACCEPT
這條規(guī)則允許本機(jī)內(nèi)部通信,很多服務(wù)都依賴(lài)這個(gè)接口。
允許已建立連接的流量通過(guò)
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
這樣可以讓已經(jīng)建立的連接繼續(xù)通信,比如你訪(fǎng)問(wèn)網(wǎng)頁(yè)時(shí)返回的數(shù)據(jù)就能順利回來(lái)。
允許SSH訪(fǎng)問(wèn)(別把自己鎖在外面)
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
如果改過(guò)SSH端口,記得把 –dport 22 改成你的實(shí)際端口號(hào)。
允許HTTP/HTTPS訪(fǎng)問(wèn)
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
網(wǎng)站服務(wù)常用的端口,需要開(kāi)放才能被訪(fǎng)問(wèn)到。
5. 保存并開(kāi)機(jī)生效
不同發(fā)行版保存方式略有不同,以 centos/RHEL 為例:
sudo service iptables save
ubuntu 可以用 iptables-save 命令保存到文件,并在啟動(dòng)時(shí)加載:
sudo iptables-save > /etc/iptables/rules.v4
或者寫(xiě)個(gè)腳本在開(kāi)機(jī)時(shí)自動(dòng)執(zhí)行。
基本上就這些。
剛開(kāi)始配的時(shí)候容易漏掉某些規(guī)則,比如忘記允許 established 連接,結(jié)果連不上服務(wù)器;或者沒(méi)開(kāi) loopback 導(dǎo)致本地服務(wù)出問(wèn)題。
只要一步步來(lái),理解每個(gè)規(guī)則的作用,就能避免踩坑。