Linux系统的iptables防火墙、SNAT、DNAT原理与设置规则
Linux的iptables防火墻、SNAT、DNAT
- 一、iptables概述
- 1.netfilter/iptables關系
- 2.四表五鏈
- 四表
- 五鏈
- 規則表之間的優先順序
- 規則鏈之間的匹配順序
- 二、iptables的安裝
- iptables防火墻的配置方法
- iptables命令行配置方法
- 注意事項
- 常用的控制類型
- 常用的管理選項
- 三、iptables的使用方法
- 1.添加新的規則
- 2.查看規則列表
- 3.設置默認策略
- 4.刪除規則
- 5.清空規則
- 四、規則的匹配
- 1.通用匹配
- 2.隱含匹配
- 3.顯式匹配
- 五、SNAT原理與應用
- 1.SNAT 應用環境
- 2.SNAT原理
- 3.SNAT轉換前提條件
- 4.打開SNAT
- 臨時打開
- 永久打開
- 5.SNAT轉換
- 固定的公網IP地址
- 非固定的公網IP地址(共享動態IP地址)
- 六、DNAT原理與應用
- 1.DNAT 應用環境
- 2.DNAT原理
- 3.DNAT轉換前提條件
- 4.打開DNAT
- 5.DNAT轉換
- 發布內網的Web服務
- 發布時修改目標端口
- 七、防火墻規則的備份和還原
- 1.導出(備份)所有表的規則
- 2.導入(還原)規則
- 3.將iptables規則文件保存在 /etc/sysconfig/iptables 中,iptables服務啟動時會自動還原規則
一、iptables概述
Linux系統的防火墻:IP信息包過濾系統,它實際上由兩個組件netfilter和iptables組成。
主要工作在網絡層,針對IP數據包。體現在對包內的IP地址、端口等信息的處理上。
1.netfilter/iptables關系
-
netfilter:netfilter屬于“內核態”(Kernel Space,又稱為內核空間)的防火墻功能體系。
是內核的一部分,由一些數據包過濾表組成,這些表包含內核用來控制數據包過濾處理的規則集。 -
iptables:iptables屬于“用戶態”(User Space,又稱為用戶空間)的防火墻管理體系。
是一種用來管理Linux防火墻的命令程序,它使插入、修改和刪除數據包過濾表中的規則變得容易,通常位于/sbin/iptables目錄下。 -
netfilter/iptables后期簡稱為iptables。iptables是基于內核的防火墻,其中內置了raw、mangle、nat和 filter 四個規則表。表中所有規則配置后,立即生效,不需要重啟服務。
2.四表五鏈
- 規則表的作用:容納各種規則鏈
- 規則鏈的作用:容納各種防火墻規則
- 總結:表里有鏈,鏈里有規則
四表
- raw表:確定是否對該數據包進行狀態跟蹤。包含兩個規則鏈,OUTPUT、PREROUTING。
- mangle表:修改數據包內容,用來做流量整形的,給數據包設置標記。包含五個規則鏈,INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING。
- nat表:負責網絡地址轉換,用來修改數據包中的源、目標IP地址或端口。包含三個規則鏈,OUTPUT、PREROUTING、POSTROUTING。
- filter表:負責過濾數據包,確定是否放行該數據包(過濾)。包含三個規則鏈,INPUT、FORWARD、OUTPUT。
注:在 iptables 的四個規則表中,mangle 表和 raw 表的應用相對較少。
五鏈
- INPUT:處理入站數據包,匹配目標IP為本機的數據包。
- OUTPUT:處理出站數據包,一般不在此鏈上做配置。
- FORWARD:處理轉發數據包,匹配流經本機的數據包。
- PREROUTING鏈:在進行路由選擇前處理數據包,用來修改目的地址,用來做DNAT。相當于把內網中的80端口映射到路由器外網端口上。
- POSTROUTING鏈:在進行路由選擇后處理數據包,用來修改源地址,用來做SNAT。相當于內網通過路由器NAT轉換功能實現內網主機通過一個公網IP地址上網。
規則表之間的優先順序
數據包到達防火墻時,規則表之間的優先順序:raw > mangle > nat > filter
規則鏈之間的匹配順序
主機型防火墻:
- 入站數據(來自外界的數據包,且目標地址是防火墻本機)
PREROUTING --> INPUT --> 本機的應用程序 - 出站數據(從防火墻本機向外部地址發送的數據包)
本機的應用程序 --> OUTPUT --> POSTROUTING
網絡型防火墻:
- 轉發數據(需要經過防火墻轉發的數據包)
PREROUTING --> FORWARD --> POSTROUTING
規則鏈內的匹配順序:
- 自上向下按順序依次進行檢查,找到相匹配的規則即停止(LOG策略例外,表示記錄相關日志)
若在該鏈內找不到相匹配的規則,則按該鏈的默認策略處理(未修改的狀況下,默認策略為允許)
二、iptables的安裝
- CentOS 7默認使用firewalld防火墻,沒有安裝 iptables,若想使用iptables防火墻。必須先關閉firewalld防火墻,再安裝 iptables
iptables防火墻的配置方法
iptables命令行配置方法
命令格式:
iptables [-t 表名] 管理選項 [鏈名] [匹配條件] [-j 控制類型]注意事項
- 不指定表名時,默認指filter表
- 不指定鏈名時,默認指表內的所有鏈
- 除非設置鏈的默認策略,否則必須指定匹配條件
- 選項、鏈名、控制類型使用大寫字母,其余均為小寫
常用的控制類型
| ACCEPT | 允許數據包通過。 |
| DROP | 直接丟棄數據包,不給出任何回應信息。 |
| REJECT | 拒絕數據包通過,會給數據發送端一個響應信息。 |
| SNAT | 修改數據包的源地址。 |
| DNAT | 修改數據包的目的地址。 |
| MASQUERADE | 偽裝成一個非固定公網IP地址。 |
| LOG | 在/var/log/messages文件中記錄日志信息,然后將數據包傳遞給下一條規則。 LOG只是一種輔助動作,并沒有真正處理數據包。 |
常用的管理選項
-A :在指定鏈的末尾追加(--append)一條新的規則 -I :在指定鏈的開頭插入(--insert)一條新的規則,未指定序號時默認作為第一條規則 -R :修改、替換(--replace)指定鏈中的某一條規則,可指定規則序號或具體內容 -P :設置指定鏈的默認策略(--policy) -D :刪除(--delete)指定鏈中的某一條規則,可指定規則序號或具體內容 -F :清空(--flush)指定鏈中的所有規則,若未指定鏈名,則清空表中的所有鏈 -L :列出(--list)指定鏈中所有的規則,若未指定鏈名,則列出表中的所有鏈 -n :使用數字形式(--numeric)顯示輸出結果,如顯示 IP 地址而不是主機名 -v :顯示詳細信息,包括每條規則的匹配包數量和匹配字節數 --line-numbers:查看規則時,顯示規則的序號三、iptables的使用方法
1.添加新的規則
舉例: iptables -t filter -A INPUT -p icmp -j REJECT iptables -I INPUT 2 -p tcp --dport 22 -j ACCEPT2.查看規則列表
iptables [-t 表名] -n -L [鏈名] [--line-numbers] 或 iptables -[vn]L #注意:不可以合寫為 -Ln舉例: iptables -n -L --line-numbers3.設置默認策略
iptables [-t 表名] -P <鏈名> <控制類型>iptables -P INPUT DROP iptables -P FORWARD DROP #一般在生產環境中設置網絡型防火墻、主機型防火墻時都要設置默認規則為DROP,并設置白名單4.刪除規則
舉例: iptables -D INPUT 2 iptables -t filter -D INPUT -p icmp -j REJECT注意: 1.若規則列表中有多條相同的規則時,按內容匹配只刪除的序號最小的一條 2.按號碼匹配刪除時,確保規則號碼小于等于已有規則數,否則報錯 3.按內容匹配刪數時,確保規則存在,否則報錯5.清空規則
iptables [-t 表名] -F [鏈名] iptables -F INPUT iptables -F注意: 1.-F 僅僅是清空鏈中的規則,并不影響 -P 設置的默認規則,默認規則需要手動進行修改 2.-P 設置了DROP后,使用 -F 一定要小心! #防止把允許遠程連接的相關規則清除后導致無法遠程連接主機,此情況如果沒有保存規則可重啟主機解決 3.如果不寫表名和鏈名,默認清空filter表中所有鏈里的所有規則四、規則的匹配
1.通用匹配
可直接使用,不依賴于其他條件或擴展,包括網絡協議、IP地址、網絡接口等條件。
協議匹配:-p 協議名 地址匹配:-s 源地址、-d 目的地址 #可以是IP、網段、域名、空(任何地址) 接口匹配:-i 入站網卡、-o 出站網卡 舉例: iptables -A FORWARD ! -p icmp -j ACCEPT iptables -A INPUT -s 192.168.80.11 -j DROP iptables -I INPUT -i ens33 -s 192.168.80.0/24 -j DROP2.隱含匹配
要求以特定的協議匹配作為前提,包括端口、TCP標記、ICMP類型等條件
- 端口匹配:–sport 源端口、–dport 目的端口
- TCP標記匹配
- ICMP類型匹配:–icmp-type ICMP類型
3.顯式匹配
- 要求以“-m 擴展模塊”的形式明確指出類型,包括多端口、MAC地址、IP范圍、數據包狀態等條件
多端口匹配
多端口匹配:-m multiport --sport 源端口列表-m multiport --dport 目的端口列表 舉例: iptables -A INPUT -p tcp -m multiport --dport 80,22,21,20,53 -j ACCEPT iptables -A INPUT -p udp -m multiport --dport 53 -j ACCEPTMAC地址匹配
MAC地址匹配:-m mac --mac-source MAC地址 iptables -A FORWARD -m mac --mac-source xx:xx:xx:xx:xx:xx -j DROP #禁止來自某MAC 地址的數據包通過本機轉發IP范圍匹配
IP范圍匹配:-m iprange --src-range IP范圍 iptables -A FORWARD -p udp -m iprange --src-range 192.168.80.100-192.168.80.200 -j DROP #禁止轉發源地址位于192.168.80.100-192.168.80.200的udp數據包狀態匹配
狀態匹配:-m state --state 連接狀態 常見的連接狀態: NEW :與任何連接無關的,還沒開始連接 ESTABLISHED :響應請求或者已建立連接的,連接態 RELATED :與已有連接有相關性的(如FTP 主被動模式的數據連接),衍生態,一般與ESTABLISHED 配合使用 INVALID :不能被識別屬于哪個連接或沒有任何狀態iptables -A FORWARD -m state --state NEW -p tcp ! --syn -j DROP #禁止轉發與正常 TCP 連接無關的非--syn 請求數據包(如偽造的網絡攻擊數據包) 舉例: iptables -I INPUT -p tcp -m multiport --dport 80,22,21,20,53 -j ACCEPT iptables -A INPUT -p udp -m multiport --dport 53 -j ACCEPT iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT #對進來的包的狀態進行檢測。已經建立tcp連接的包以及該連接相關的包允許通過。 #比如我和你做生意,我們談成了生意,到了支付的時候,就可以直接調用與這筆生意相關的支付功能 iptables -P INPUT DROP五、SNAT原理與應用
1.SNAT 應用環境
局域網主機共享單個公網IP地址接入Internet(私有IP不能在Internet中正常路由)
2.SNAT原理
修改數據包的源地址
3.SNAT轉換前提條件
- 1.局域網各主機已正確設置IP地址、子網掩碼、默認網關地址
- 2.Linux網關開啟IP路由轉發
4.打開SNAT
臨時打開
echo 1 > /proc/sys/net/ipv4/ip_forward 或 sysctl -w net.ipv4.ip_forward=1永久打開
vim /etc/sysctl.conf net.ipv4.ip_forward = 1 #將此行寫入配置文件sysctl -p #讀取修改后的配置5.SNAT轉換
固定的公網IP地址
iptables -t nat -A POSTROUTING -s 192.168.80.0/24 -o ens33 -j SNAT --to 12.0.0.1 或 iptables -t nat -A POSTROUTING -s 192.168.80.0/24 -o ens33 -j SNAT --to-source 12.0.0.1-12.0.0.10內網IP 出站 外網網卡 外網IP或地址池非固定的公網IP地址(共享動態IP地址)
iptables -t nat -A POSTROUTING -s 192.168.80.0/24 -o ens33 -j MASQUERADE六、DNAT原理與應用
1.DNAT 應用環境
在Internet中發布位于局域網內的服務器
2.DNAT原理
修改數據包的目的地址
3.DNAT轉換前提條件
- 1.局域網的服務器能夠訪問Internet
- 2.網關的外網地址有正確的DNS解析記錄
- 3.Linux網關開啟IP路由轉發
4.打開DNAT
vim /etc/sysctl.conf net.ipv4.ip_forward = 1 sysctl -p5.DNAT轉換
發布內網的Web服務
#把從ens33進來的要訪問web服務的數據包目的地址轉換為 192.168.80.11 iptables -t nat -A PREROUTING -i ens33 -d 12.0.0.1 -p tcp --dport 80 -j DNAT --to 192.168.80.11 或 iptables -t nat -A PREROUTING -i ens33 -d 12.0.0.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.80.11入站 外網網卡 外網IP 內網服務器IPiptables -t nat -A PREROUTING -i ens33 -p tcp --dport 80 -j DNAT --to 192.168.80.11-192.168.80.20發布時修改目標端口
#發布局域網內部的OpenSSH服務器,外網主機需使用250端口進行連接 iptables -t nat -A PREROUTING -i ens33 -d 12.0.0.1 -p tcp --dport 250 -j DNAT --to 192.168.80.11:22#在外網環境中使用SSH測試 ssh -p 250 root@12.0.0.1yum -y install net-tools #若沒有 ifconfig 命令可提前使用 yum 進行安裝 ifconfig ens33注意:使用DNAT時,同時還有配合SNAT使用,才能實現響應數據包的正確返回七、防火墻規則的備份和還原
1.導出(備份)所有表的規則
iptables-save > /opt/ipt.txt2.導入(還原)規則
iptables-restore < /opt/ipt.txt3.將iptables規則文件保存在 /etc/sysconfig/iptables 中,iptables服務啟動時會自動還原規則
iptables-save > /etc/sysconfig/iptables systemctl stop iptables #停止iptables服務會清空掉所有表的規則 systemctl start iptables #啟動iptables服務會自動還原/etc/sysconfig/iptables 中的規則總結
以上是生活随笔為你收集整理的Linux系统的iptables防火墙、SNAT、DNAT原理与设置规则的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: i7 6700k主板内存价格大降!游戏玩
- 下一篇: linux 其他常用命令