iptables 初步入門

jopen 10年前發布 | 41K 次閱讀 iptables 路由器/防火墻

iptables

防火墻簡述

新的防火墻子系統/包過濾引擎 Nftables 將在 Linux 3.13 中替代有十多年歷史的iptables。iptables/netfilter在2001年加入到2.4內核中。誕生于2008年的 NFTables 設計替代 iptables, 它提供了一個更簡單的kernel ABI,減少重復代碼,改進錯誤報告,更有效的支持過濾規則。除了iptables,NFTables還將替代ip6tables、arptables和 ebtables。Linux內核的第一代包過濾機制是ipfwadm(1.2.1內核,1995年),之后是ipchains(1999 年),Netfilter,Nftables是第四代。

iptables基礎

Netfilter/IPTables是繼2.0.x的IPfwadm、2.2.x的IPchains之后,新一代的Linux防火墻機制。 Netfilter采用模塊化設計,具有良好的可擴充性。其重要工具模塊IPTables連接到Netfilter的架構中,并允許使用者對數據報進行過濾、地址轉換、處理等操作。
Netfilter提供了一個框架,將對網絡代碼的直接干涉降到最低,并允許用規定的接口將其他包處理代碼以模塊的形式添加到內核中,具有極強的靈活性。

Netfilter/IPTables的體系結構可以分為三個大部分:

  • Netfilter的HOOK機制
    Netfilter的通用框架不依賴于具體的協議,而是為每種網絡協議定義一套HOOK函數。這些HOOK函數在數據報經過協議棧的幾個關鍵點時被調用,在這幾個點中,協議棧將數據報及HOOK函數標號作為參數,傳遞給Netfilter框架。
    對于它在網絡堆棧中增加的這些HOOK,內核的任何模塊可以對每種協議的一個或多個HOOK進行注冊,實現掛接。這樣當某個數據報被傳遞給 Netfilter框架時,內核能檢測到是否有任何模塊對該協議和HOOK函數進行了注冊。若注冊了,則調用該模塊的注冊時使用的回調函數,這樣這些模塊就有機會檢查、修改、丟棄該數據報及指示Netfilter將該數據報傳入用戶空間的隊列。
    這樣,HOOK提供了一種方便的機制:在數據報通過Linux內核的不同位置上截獲和操作處理數據報。
  • IPTables基礎模塊
    IPTables基礎模塊實現了三個表來篩選各種數據報,具體地講,Linux2.4內核提供的這三種數據報的處理功能是相互間獨立的模塊,都基于Netfilter的HOOK函數和各種表、鏈實現。這三個表包括:filter表,nat表以及mangle表。
  • 具體功能模塊
    數據報過濾模塊
    連接跟蹤模塊(Conntrack)
    網絡地址轉換模塊(NAT)
    數據報修改模塊(mangle)
    ** 其它高級功能模塊
  • </ul>

    iptables 的啟動停止

    ubuntu中啟動及關閉iptables,在ubuntu中由于不存在 /etc/init.d/iptales文件,所以無法使用service等命令來啟動iptables,需要用modprobe命令。

    啟動iptables

    modprobe ip_tables
    iptable-restore < /etc/iptables.rule

    關閉iptables

    iptables -F
    iptables -X
    iptables -Z
    iptables -P INPUT ACCEPT
    iptables -P OUTPUT ACCEPT
    iptables -P FORWARD ACCEPT
    modprobe -r ip_tables

    命令基本格式

    iptables 語法分成三部分:

    命令本身            條件準則            處置方式
    iptables -A INPUT  -p tcp --dport 22   -j ACCEPT
    • 列出當前iptables的策略和規則
      iptables -L      # --list 列出當前所有table的配置規則
      iptables -L -n   # -n: 用數字形式顯示
      iptables -L -v   # -v: 打印詳細的信息
      iptables -F      # 清除規則
      iptables -X      #

    實例:限定指定IP段訪問服務器的80端口

    • 命令操作:
    iptables -A INPUT -s 118.144.38.90/32 -p tcp -m multiport --dports 80 -j ACCEPT
    iptables -A INPUT -s -p tcp -m multiport --dports 80 -j DROP
    • 查看狀態 iptables -L
    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination
    ACCEPT     tcp  --  118.144.38.90        anywhere             multiport dports http
    DROP       tcp  --  anywhere             anywhere             multiport dports http
    
    Chain FORWARD (policy ACCEPT)
    target     prot opt source               destination
    
    Chain OUTPUT (policy ACCEPT)
    target     prot opt source               destination
    • 查看狀態 iptables-save
    # Generated by iptables-save v1.4.12 on Tue Apr 22 14:55:51 2014
    *filter
    :INPUT ACCEPT [1689:106559]
    :FORWARD ACCEPT [0:0]
    :OUTPUT ACCEPT [1608:154769]
    -A INPUT -s 118.144.38.90/32 -p tcp -m multiport --dports 80 -j ACCEPT
    -A INPUT -p tcp -m multiport --dports 80 -j DROP
    COMMIT
    # Completed on Tue Apr 22 14:55:51 2014
    # Generated by iptables-save v1.4.12 on Tue Apr 22 14:55:51 2014
    *raw
    :PREROUTING ACCEPT [2498:166654]
    :OUTPUT ACCEPT [2298:219551]
    COMMIT
    # Completed on Tue Apr 22 14:55:51 2014
 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!