防火墻在一個系統中就好像是一個國家的軍隊,所謂國無軍不安,在系統中也是這樣,防火墻可以保護系統被別人攻擊,過濾垃圾流量等,那么今天我們就來了解一下Linux系統中的一種防火墻iptables。
目錄
iptables概述
規則
鏈
表
iptables操作使用
iptables常用選項
具體操作
內部網絡中的pc1采用SNAT訪問外部互聯網,但是無法ping到內部網關。
內部網絡服務器s1通過DNAT發布服務到互聯網。
互聯網主機pc2能夠訪問s1服務器,但是不能夠進行ping和ssh連接。
iptables概述
iptables由表、鏈以及若干規則組成
規則
就是告訴iptables防火墻該做什么,等于是一個工作標準。
鏈
某些規則的集合就是鏈,每個鏈都有一定的相同點,分別為INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING,從字面上的意思也能大概理解。
- INPUT:入站的數據包應用此鏈中的規則
- OUTPUT:出站的數據包應用此鏈中的規則
- FORWARD:轉發的數據包應用此鏈中的規則
- PREROUTING:想要修改目的地址數據包應用此鏈中的規則
- POSTROUTING:想要修改源地址數據包應用此鏈中的規則
表
是若干規則和鏈的集合,分別為raw、mangle、nat、filter,這里我們重點了解常用的filter和nat
- filter:負責過濾數據包
- nat:負責地址轉換
- raw:確定是否進行轉臺跟蹤
- mangle:做流量整形,修改數據包內容
iptables操作使用
iptables常用選項
- -t??指定表名
- -j??指定控制類型
- -A??在指定鏈的末尾追加一條新的規則
- -I? ?在指定鏈的開頭插入一條新的規則
- -R? 修改、替換指定鏈中的某一條規則
- -P? 設置指定鏈的默認策略
- -D?刪除指定鏈中的某一條規則
- -F?清空指定鏈中的所有規則
- -L??列出指定鏈中所有的規則
- -n?使用數字形式顯示輸出結果
- -v?顯示詳細信息
- --line-numbers?顯示規則的序號
- -p 指定要匹配的數據包的協議類型
- -s 指定要匹配的數據包的源IP地址
- -d 指定要匹配的數據包的目的IP地址
- -i 指定數據包進入本機的網絡接口
- -o 指定數據包離開本機做使用的網絡接口
- --sport 指定源端口號
- --dport 指定目的端口號
命令的選項有點多,為了方便記憶,這里結合例子進行講解,會更加的簡單易懂。
具體操作
創建一個實驗環境,三個局域網互聯,一個為內部網絡,一個為外部網絡,一個為服務器網絡
內部網絡IP192.168.50.1 服務器網絡IP192.168.60.1 外部網絡IP192.168.70.1
與防火墻相連,防火墻開啟IP地址轉換
內部網絡中的pc1采用SNAT訪問外部互聯網,但是無法ping到內部網關。
分析一下,PC1采用SNAT訪問外部互聯網,就是在PC1訪問外部互聯網時,將IP地址轉換為公網IP,具體命令如下
?首先是PC1訪問外部互聯網,意思就是改變源地址,所以選擇nat表,POSTROUTING鏈,
從192.168.50.0/24這個網段出發,通過ens256(連接防火墻的網卡),通過SNAT將地址轉換成192.168.70.254即可實現前半個要求
無法ping到內部網關,命令如下
即來自192.168.50.1的icmp類型的請求數據會被丟棄,就無法ping通了
內部網絡服務器s1通過DNAT發布服務到互聯網。
邏輯與SNAT相反,將想要進來的IP地址轉換成內部網段,命令如下
即從外部網絡的從192.168.70.254地址,ens256,這里我的網絡服務是nginx服務因此端口為80號端口,目的網絡IP為192.168.60.1即服務器的IP地址。
互聯網主機pc2能夠訪問s1服務器,但是不能夠進行ping和ssh連接。
具體命令如下,
第一條即,從ens256到ens224的目的為192.168.60.1的tcp,接口為80的數據會被接收
第二條即,從ens256 目的是192.168.60.1的icmp的ping請求包會被丟掉
第三條即,從ens256目的是192.168.60.1的tcp,接口為22的(ssh)的包會被丟棄
這只是一個思路,通過不同的規則也可以達到同樣的效果,所以大家可以發散思路,多練多看就可以掌握iptables的設置方法了。