前面介紹的ufw和firewall-config均為iptables的前端,
分別適合個人用戶和服務器網絡管理
下面介紹底層——ipables
iptables是一個強大的工具,用于配置Linux系統的防火墻。以下是一些基本的使用方法和示例,幫助您入門:
基本語法
1. 查看當前規則
要查看當前的iptables規則,可以使用以下命令:
sudo iptables -L -v -n
2. 添加規則
允許特定端口的流量
例如,允許HTTP(端口80)和HTTPS(端口443)的流量:
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
拒絕特定IP的流量
例如,拒絕來自特定IP地址的流量:
sudo iptables -A INPUT -s 192.168.1.100 -j DROP
3. 刪除規則
要刪除特定的規則,可以使用-D
選項。例如,刪除剛才添加的HTTP規則:
sudo iptables -D INPUT -p tcp --dport 80 -j ACCEPT
4. 保存規則
在Ubuntu中,iptables的規則在重啟后不會自動保存。您可以使用以下命令保存當前規則:
sudo iptables-save > /etc/iptables/rules.v4
要在系統啟動時自動加載這些規則,您可以安裝iptables-persistent
:
sudo apt install iptables-persistent
在安裝過程中,系統會詢問您是否要保存當前的iptables規則。
5. 清空規則
如果您想清空所有的iptables規則,可以使用以下命令:
sudo iptables -F
6. 設置默認策略
您可以設置默認策略來處理未匹配的流量。例如,設置默認策略為拒絕所有流量:
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT
7. 其他常用選項
- -A:添加規則到鏈的末尾。
- -I:在鏈的開頭插入規則。
- -D:刪除規則。
- -F:清空鏈中的所有規則。
- -P:設置默認策略。
- -s:指定源IP地址。
- -d:指定目標IP地址。
- -p:指定協議(如tcp、udp等)。
- –dport:指定目標端口。
注意事項
- 使用iptables時,請小心操作,尤其是在遠程管理服務器時,錯誤的規則可能會導致您失去對服務器的訪問。
- 在進行更改之前,建議備份當前的iptables規則。
通過這些基本命令,您可以開始使用iptables來管理Linux系統的網絡流量。
基礎配置示例
http(s)服務器的防火墻配置
#檢查是否安裝了iptables
whereis iptables
#安裝iptables
apt-get install iptables
#查看iptables現有規則
iptables -L -n
#先允許所有,不然有可能會杯具
iptables -P INPUT ACCEPT
#清空所有默認規則
iptables -F
#清空所有自定義規則
iptables -X
#所有計數器歸0
iptables -Z
#允許來自于lo接口的數據包(本地訪問)
iptables -A INPUT -i lo -j ACCEPT
#開放dhcp客戶端(可刪除)
iptables -A INPUT -p udp --sport 67 --dport 68 -j ACCEPT
#開放995端口(POP3s)
iptables -A INPUT -p tcp --dport 995 -j ACCEPT
#開放80端口(HTTP)
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
#開放443端口(HTTPS)
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
#允許ping
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
#其他入站一律丟棄
iptables -P INPUT DROP
#所有出站一律綠燈
iptables -P OUTPUT ACCEPT
#所有轉發一律丟棄
iptables -P FORWARD DROP
#允許接受本機請求之后的返回數據 RELATED,是為軟件設置的
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
#保存上述規則
service iptables save
服務器內網管理進階配置
#如果要添加內網ip信任(接受其所有TCP請求)
iptables -A INPUT -p tcp -s 45.96.174.68 -j ACCEPT
#過濾所有非以上規則的請求
iptables -P INPUT DROP
#要封停一個IP,使用下面這條命令:
iptables -I INPUT -s ***.***.***.*** -j DROP
#要解封一個IP,使用下面這條命令:
iptables -D INPUT -s ***.***.***.*** -j DROP
客戶端基礎配置
- 非副取其,不用提供http,https,
- 不遠程登陸,也不用提供ssh,
- 配置非常簡單
#檢查是否安裝了iptables
whereis iptables
#安裝iptables
apt-get install iptables
#查看iptables現有規則
iptables -L -n
#先允許所有,不然有可能會杯具
iptables -P INPUT ACCEPT
#清空所有默認規則
iptables -F
#清空所有自定義規則
iptables -X
#所有計數器歸0
iptables -Z
#允許來自于lo接口的數據包(本地訪問)
iptables -A INPUT -i lo -j ACCEPT
#開放dhcp客戶端(可刪除)
iptables -A INPUT -p udp --sport 67 --dport 68 -j ACCEPT
#其他入站一律丟棄
iptables -P INPUT DROP
#所有出站一律綠燈
iptables -P OUTPUT ACCEPT
#所有轉發一律丟棄
iptables -P FORWARD DROP
#允許接受本機請求之后的返回數據 RELATED,是為軟件設置的
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
、
iptables -A INPUT -i lo -j ACCEPT的作用是什么
- 這條命令的作用是允許本地回環接口(lo)接收進入的數據包,并將其接受并進行處理。
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT的作用是什么
- 這條規則的作用是允許已建立的連接和相關的連接通過防火墻的INPUT鏈。通過使用RELATED和ESTABLISHED狀態,可以讓服務器響應之前的請求,并且能夠正常進行通信。
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT可能會導致與發起連接相關的、但由攻擊者發起的報文攻擊嗎?
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
這條規則的作用是允許已經建立的連接和相關的連接通過防火墻。雖然這條規則本身是為了允許正常的流量,但在某些情況下,它可能會與攻擊者的行為相關聯。
-
攻擊者利用已建立連接:如果攻擊者能夠成功建立與目標系統的連接(例如,通過合法的身份驗證),那么后續的流量可能會被這條規則接受。這意味著,如果攻擊者已經獲得了某種形式的訪問權限,他們可以利用這條規則進行進一步的攻擊。
-
相關流量:如果攻擊者發起的連接是與某個合法連接相關的(例如,某個應用程序的回調或數據流),那么這條規則也可能允許這些流量通過。
為了降低風險,建議采取以下措施:
-
限制入站流量:在允許已建立連接的流量之前,先明確允許哪些特定的入站流量(如 SSH、HTTP、HTTPS 等),并拒絕其他所有流量。
-
使用其他防護措施:結合使用其他安全措施,如入侵檢測系統(IDS)、入侵防御系統(IPS)和應用層防火墻,以監控和防止潛在的攻擊。
-
定期審查規則:定期審查和更新防火墻規則,以確保它們符合當前的安全需求。
總之,雖然這條規則本身并不會直接導致攻擊,但在不當配置或缺乏其他安全措施的情況下,可能會被攻擊者利用。因此,合理配置防火墻規則和采取綜合的安全措施是非常重要的。
iptables規則保存,用于開機自啟動
- 有兩種方式
1. iptables-persistent&netfilter-persistent
工具比較
-
iptables-persistent 是一個用于保存和恢復 iptables 規則的工具。它可以在系統啟動時自動加載之前保存的規則。
-
netfilter-persistent 是一個更通用的工具,旨在管理與 Linux 內核中的 Netfilter 框架相關的所有類型的規則,包括 iptables、ip6tables(用于 IPv6)和 arptables(用于 ARP).
-
iptables-persistent通過netfilter-persisitent重新保存和開機加載iptables規則
-
netfilter保存
sudo netfilter-persistent save
- netfilter加載
sudo netfilter-persistent reload
2. 使用 iptables-save
和 iptables-restore
您也可以使用 iptables-save
和 iptables-restore
命令手動保存和加載規則。
-
iptables-save 命令會輸出當前所有的 iptables 規則,包括所有鏈(如 INPUT、OUTPUT、FORWARD)和規則的詳細信息。
-
同樣,iptables-store 命令會輸出當前所有存儲的 iptables 規則,包括所有鏈(如 INPUT、OUTPUT、FORWARD)和規則的詳細信息。
-
保存規則
sudo iptables-save > /etc/iptables/rules.v4
- 加載規則
在系統啟動時,您可以通過創建一個啟動腳本來加載規則。可以將以下內容添加到/etc/rc.local
文件中(確保該文件可執行):
#!/bin/sh -e
iptables-restore < /etc/iptables/rules.v4
exit 0
鏈接
- 華為云教程:https://bbs.huaweicloud.com/blogs/300487
- 大佬的基礎配置:https://blog.csdn.net/weixin_36032459/article/details/125147050
- 新奇的防火墻配置:https://www.digitalocean.com/community/tutorials/how-to-implement-a-basic-firewall-template-with-iptables-on-ubuntu-20-04