1. 程式人生 > >iptables包過濾防火牆

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.客戶端測試;



####登入時顯示地址已經轉換;