iptables包過濾防火牆
iptables是管理netfilter的唯一工具;(netfilter是網路過濾器,或者網頁內容過濾器),netfiletr直接巢狀在linux的核心上面。netfilter在核心中過濾,沒有守護程序。它的過濾速度非常快,因為只讀取資料包頭,不會給資訊流量增加負擔,也無需進行驗證。
netfiletr提供一系列的表(tables),每個表有若干個鏈組成,每條鏈可以有若干個規則(rules)組成。可以簡單的說:netfilter是表的容器,表是鏈的容器,鏈是規則的容器。
表分為3個分別為:filter表 , nat表 , mangle表;
filter表包含INPUT鏈,FORWARD鏈,OUTPUT鏈;
nat表包含INPUT鏈,OUTPUT鏈,PREROUTING鏈,POSTROUTING鏈;
mangle表包含INPUT鏈,OUTPUT鏈,PREROUTING鏈,POSTROUTING鏈 ,INPUT鏈,OUTPUT鏈,PREROUTING鏈,POSTROUTING鏈;
注意:filter表主要執行資料包過濾;nat表主要進行網路地址轉換;mangle表用於修改一些特殊規則;
PREROUTING鏈:路由之前剛達到的資料包; INPUT鏈:通過路由,目的地為本機的資料包; FORWARD鏈:需要通過本地系統進行轉發的資料包; OUTPUT鏈:由本機產生,向外轉發,處於postrouting之前的資料包; POSTROUTING鏈 :通過路由後,即將離開系統的資料包;
IPtables的基本語法:
1.iptables的服務
關閉防火牆服務,凍結防火牆服務;
開啟iptables服務,設定開機自啟;
vim /etc/sysconfig/iptables ####編輯iptables檔案進行設定;儲存iptables設定,對iptables規則編輯後一定要儲存;
儲存設定以後需要重新啟動否則相關設定不會生效;
2,iptables的基本命令
iptables 有三張表,-t 引數來設定是哪張表生效,如果沒有引數,系統預設對filter表進行操作;
iptables -L #####顯示filter表中的規則,後面需要指定表,否則預設為filter表;
iptables -t nat -L ####顯示nat表的所有規則;
iptables -F #####刪除預設filter表的所有規則;
#####刪除全部鏈的規則;
iptables -t nat -F #####刪除nat表的所有規則;
####為了方便我們在nat表裡面添加了一條規則;
iptables -t nat -F PSOTROUTING ####刪除nat表中PSOTROUTING鏈的所有規則;
iptables -t nat -F PSOTROUTING 2 ####刪除nat表中PSOTROUTING鏈的第二條規則;
注意:有時我們進行新增或者刪除,不一定會立刻生效,我們需要儲存service iptables save 儲存設定來生效;
-A ####在規則列表的最後增加1條規則
iptables -A INPUT -s 192.168.88.132 -j DROP
####丟棄來自192.168.88.132的資料包,預設為filter表;
注意:儲存設定重新啟動服務,該條規則在所有規則後面,則iptables的匹配是由順序的;
-I (注意是大寫的i) ######在指定位置插入一條規則;
-P 分配連結策略;P 是大寫的;
iptables -P INPUT DROP #### 禁止任何輸入的資料包;
iptables -P OUTPUT ACCEPT ####允許所有輸出的資料包;
-D 刪除某條規則;
iptables -t nat -D OUTPUT 2 ####刪除nat 表裡OUTPUT鏈的第二條規則;
-R ######替換規則列表中的某條規則
iptables -R INPUT 1 -s 192.168.88.129 -p tcp --dport 80 -j ACCEPT
####替換filter表INPUT鏈裡面的第二條規則為允許192.168.88.129客戶端通過80埠進行訪問;
3.iptables匹配選項
-i ####指定資料包從哪個網路介面進入
-o ######指定資料包從哪個網路介面輸出
-p #####指定資料包的匹配協議
-s ####指定資料包的匹配源地址
--sport<源埠號> ####指定資料包匹配的源埠號;
-d <目標地址或者子網> ####指定資料包的匹配目標地址;
--dport目標埠號 ####指定資料包匹配的目標埠號;
iptables -A INPUT -p tcp -s 192.168.88.132/24 -dport 22 -j ACCEPT
-p protocol ######匹配網路協議,我們匹配的是tcp協議;
-s IP地址或者網段 ######匹配源ip地址或者網段;
! -s ip地址或者網段 ######除了這個ip地址或者網段的所有網段;
-j ACCESPT/DROP/REJECT #####後面新增執行的動作,接受,丟棄,拒絕;
####允許192.168.88.132的主機通過22埠訪問該主機;
iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT ####開放ftp的20和21埠
iptables -A INPUT -p tcp --dport 80 -j ACCEPT #####開放http服務的80埠;
iptables -A INPUT -p tcp --dport 22 -j ACCEPT #####開放ssh服務的80埠
NAT(netwoek address translation)網路地址轉換器 是將一個地址域對映到另外一個地址域的標準方法。他是根據rfc1631開發的IETE標準,允許一個ip地址以一個公有的ip地址出現在網路上。nat可以將內部網路的所有節點的地址轉換成一個ip地址。
目的地 NAT(DNAT):DNAT修改包的目的地位置,必須在包即將被送到本機行程之前,或是要被轉送其它電腦之前;所以,使用DNAT為目標的規則,必須設置於nat表格的PREROUTING鏈結。
源NAT(SNAT):SNAT必須在封包即將離開核心的前一刻,即時修改其來源位址(或通訊埠),所以SNAT規則的設定地點必須是在nat表格的POSTROUTING鏈結。
設定iptables FORWARE規則
開啟轉發功能:編輯/etc/sysctl.conf檔案
net.ipv4.ip_forward = 1 #####開啟核心的轉發功能;
sysctl -p #####使得上面引數生效;
NAT轉發功能
1. 在虛擬主機裡面新增一塊網絡卡設定兩個不同的網段,例如:192.168.88.132和192.168.66.132
2.開啟nat的轉發功能;
####檢視轉發功能開啟沒有;
sysctl -p ####也可以查詢轉發功能開啟沒有
3.服務端新增地址轉換
iptables -t nat -A PREROUTING -i eno16777736 -j DNAT --to-dest 192.168.66.132
iptables -t nat -A POSTROUTING -o eno16777736 -j SNAT --to-source 192.168.88.132
4.客戶端測試;
####登入時顯示地址已經轉換;