在 Linux 網絡領域,iptables 是一個強大的工具,用于管理和控制網絡流量等。它充當防火墻,使系統管理員能夠根據定義的規則過濾和操作數據包。本文旨在介紹 iptables及其在Linux 環境中的使用。
iptables是由表(“三表五鏈”)組成
三表:
filter表:負責過濾數據包。(規則鏈:input , outpt , forward)
nat表:用于網絡地址轉換(ip , 端口)。(規則鏈:prerouting , postrouting , output)
mangle表:用于修改數據包,流量整形,給數據包打標識。(規則鏈:INPUT , OUTPUT , forward , POSTROUTING , PREROUTING)
五鏈:
input:匹配目標IP是本機的數據包。(注:進來的流量)
output: 出口數據包。
forward: 匹配流經本機的數據包。(注:轉發的流量)
prerouting: 修改目的地址,用于做DNAT。(注:路由前的流量)
postrouting: 修改源地址,用于做SNAT。(注:路由后的流量)
常見命令
查看規則:ipatbles -L
查看已添加的iptables規則:iptables -vnL
刪除規則:iptables -D 規則鏈 序號
匹配條件:
-p:指定數據包的協議類型,如 TCP、UDP、ICMP 等。
-s:指定數據包的源地址。
-d:指定數據包的目標地址。
-i:指定數據包進入系統的網絡接口。
-o:指定數據包離開系統的網絡接口。
匹配選項:
--sport:指定數據包的源端口。
--dport:指定數據包的目標端口。
--state:指定數據包的連接狀態,如 NEW、ESTABLISHED、RELATED 等。
--mac-source:指定數據包的源 MAC 地址。
--mac-destination:指定數據包的目標 MAC 地址。
匹配動作
-j:指定匹配成功時要執行的動作,如 ACCEPT、DROP、REJECT 等。
語法格式:#ipatbles [選擇規則鏈] [選擇防火墻規則][選擇匹配服務] -j [選擇觸發條件]
舉例:比如限制源192.168.10.10地址訪問目標 192.168.10.100
iptables -A INPUT -p tcp -s 192.168.10.10 -j DROP
匹配多個端口
再比如:限制192.168.10.10地址訪問目標地址192.168.10.100的22、80、1000端口,其他拒絕
iptables -A INPUT -p tcp -m multiport --dports 22,80,1000 -s 92.168.10.10/32 -j DROP
示例:拒絕ping Echo請求
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
示例:拒絕訪問防火墻的新數據包,但允許響應連接或與已有連接相關的數據包
iptables -A INPUT -p tcp -m state --state NEW -j DROP
iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
說明:“ESTABLISHED”表示已經響應請求或者已經建立連接的數據包,“RELATED”表示與已建立的連接有相關性的,比如FTP數據連接等。
命令行執行后,想要持久化保存,則執行:iptables-save
或者直接修改/etc/sysconfig/iptables; 保存,然后執行systemctl reload iptables即可立即生效。