萬盛學電腦網

 萬盛學電腦網 >> 服務器教程 >> iptables建立規則和鏈的基本方法

iptables建立規則和鏈的基本方法

   通過向防火牆提供有關對來自某個源、到某個目的地或具有特定協議類型的信息包要做些什麼的指令,規則控制信息包的過濾。通過使用 netfilter/iptables 系統提供的特殊命令 iptables,建立這些規則,並將其添加到內核空間的特定信息包過濾表內的鏈中。關於添加/除去/編輯規則的命令的一般語法如下:

  代碼如下:

  $ iptables [-t table] command [match] [target]

  表(table)

  [-t table] 選項允許使用標准表之外的任何表。表是包含僅處理特定類型信息包的規則和鏈的信息包過濾表。有三種可用的表選項:filter、nat 和 mangle。該選項不是必需的,如果未指定,則 filter 用作缺省表。

  filter 表用於一般的信息包過濾,它包含 INPUT、OUTPUT 和 FORWARD 鏈。nat 表用於要轉發的信息包,它包含 PREROUTING、OUTPUT 和 POSTROUTING 鏈。如果信息包及其頭內進行了任何更改,則使用 mangle 表。該表包含一些規則來標記用於高級路由的信息包,該表包含 PREROUTING 和 OUTPUT 鏈。

  注:PREROUTING 鏈由指定信息包一到達防火牆就改變它們的規則所組成,而 POSTROUTING 鏈由指定正當信息包打算離開防火牆時改變它們的規則所組成。

  命令(command)

  上面這條命令中具有強制性的 command 部分是 iptables 命令的最重要部分。它告訴 iptables 命令要做什麼,例如,插入規則、將規則添加到鏈的末尾或刪除規則。以下是最常用的一些命令:

  -A 或 –append:該命令將一條規則附加到鏈的末尾。

  示例:

  代碼如下:

  $ iptables -A INPUT -s 205.168.0.1 -j ACCEPT

  該示例命令將一條規則附加到 INPUT 鏈的末尾,確定來自源地址 205.168.0.1 的信息包可以 ACCEPT。

  -D 或 –delete:通過用 -D 指定要匹配的規則或者指定規則在鏈中的位置編號,該命令從鏈中刪除該規則。下面的示例顯示了這兩種方法。

  示例:

  代碼如下:

  $ iptables -D INPUT –dport 80 -j DROP

  $ iptables -D OUTPUT 3

  第一條命令從 INPUT 鏈刪除規則,它指定 DROP 前往端口 80 的信息包。第二條命令只是從 OUTPUT 鏈刪除編號為 3 的規則。

  -P 或 –policy:該命令設置鏈的缺省目標,即策略。所有與鏈中任何規則都不匹配的信息包都將被強制使用此鏈的策略。

  示例:

  代碼如下:

  $ iptables -P INPUT DROP

  該命令將 INPUT 鏈的缺省目標指定為 DROP。這意味著,將丟棄所有與 INPUT 鏈中任何規則都不匹配的信息包。

  -N 或 –new-chain:用命令中所指定的名稱創建一個新鏈。

  示例:

  代碼如下:

  $ iptables -N allowed-chain

  -F 或 –flush:如果指定鏈名,該命令刪除鏈中的所有規則,如果未指定鏈名,該命令刪除所有鏈中的所有規則。此參數用於快速清除。

  示例:

  代碼如下:

  $ iptables -F FORWARD

  $ iptables -F

  -L 或 –list:列出指定鏈中的所有規則。

  示例:

  代碼如下:

  $ iptables -L allowed-chain

  匹配(match)

  iptables 命令的可選 match 部分指定信息包與規則匹配所應具有的特征(如源和目的地地址、協議等)。匹配分為兩大類:通用匹配和特定於協議的匹配。這裡,我將研究可用於采用任何協議的信息包的通用匹配。下面是一些重要的且常用的通用匹配及其示例和說明:

  -p 或 –protocol:該通用協議匹配用於檢查某些特定協議。協議示例有 TCP、UDP、ICMP、用逗號分隔的任何這三種協議的組合列表以及 ALL(用於所有協議)。ALL 是缺省匹配。可以使用 ! 符號,它表示不與該項匹配。

  示例:

  代碼如下:

  $ iptables -A INPUT -p TCP, UDP

  $ iptables -A INPUT -p ! ICMP

  在上述示例中,這兩條命令都執行同一任務 — 它們指定所有 TCP 和 UDP 信息包都將與該規則匹配。通過指定 ! ICMP,我們打算允許所有其它協議(在這種情況下是 TCP 和 UDP),而將 ICMP 排除在外。

  -s 或 –source:該源匹配用於根據信息包的源 IP 地址來與它們匹配。該匹配還允許對某一范圍內的 IP 地址進行匹配,可以使用 ! 符號,表示不與該項匹配。缺省源匹配與所有 IP 地址匹配。

  示例:

  代碼如下:

  $ iptables -A OUTPUT -s 192.168.1.1

  $ iptables -A OUTPUT -s 192.168.0.0/24

  $ iptables -A OUTPUT -s ! 203.16.1.89

  第二條命令指定該規則與所有來自 192.168.0.0 到 192.168.0.24 的 IP 地址范圍的信息包匹配。第三條命令指定該規則將與除來自源地址 203.16.1.89 外的任何信息包匹配。

  -d 或 –destination:該目的地匹配用於根據信息包的目的地 IP 地址來與它們匹配。該匹配還允許對某一范圍內 IP 地址進行匹配,可以使用 ! 符號,表示不與該項匹配。

  示例:

  代碼如下:

  $ iptables -A INPUT -d 192.168.1.1

  $ iptables -A INPUT -d 192.168.0.0/24

  $ iptables -A OUTPUT -d ! 203.16.1.89

  目標(target)

  我們已經知道,目標是由規則指定的操作,對與那些規則匹配的信息包執行這些操作。除了允許用戶定義的目標之外,還有許多可用的目標選項。下面是常用的一些目標及其示例和說明:

  ACCEPT:當信息包與具有 ACCEPT 目標的規則完全匹配時,會被接受(允許它前往目的地),並且它將停止遍歷鏈(雖然該信息包可能遍歷另一個表中的其它鏈,並且有可能在那裡被丟棄)。該目標被指定為 -j ACCEPT。

  DROP:當信息包與具有 DROP 目標的規則完全匹配時,會阻塞該信息包,並且不對它做進一步處理。該目標被指定為 -j DROP。

  REJECT:該目標的工作方式與 DROP 目標相同,但它比 DROP 好。和 DROP 不同,REJECT 不會在服務器和客戶機上留下死套接字。另外,REJECT 將錯誤消息發回給信息包的發送方。該目標被指定為 -j REJECT。

  示例:

  代碼如下:

  $ iptables -A FORWARD -p TCP –dport 22 -j REJECT

  RETURN:在規則中設置的 RETURN 目標讓與該規則匹配的信息包停止遍歷包含該規則的鏈。如果鏈是如 INPUT 之類的主鏈,則使用該鏈的缺省策略處理信息包。它被指定為 -jump RETURN。示例:

  代碼如下:

  $ iptables -A FORWARD -d 203.16.1.89 -jump RETURN

  還有許多用於建立高級規則的其它目標,如 LOG、REDIRECT、MARK、MIRROR 和 MASQUERADE 等。

  保存規則

  現在,您已經學習了如何建立基本的規則和鏈以及如何從信息包過濾表中添加或刪除它們。但是,您應該記住:用上述方法所建立的規則會被保存到內核中,當重新引導系統時,會丟失這些規則。所以,如果您將沒有錯誤的且有效的規則集添加到信息包過濾表,同時希望在重新引導之後再次使用這些規則,那麼必須將該規則集保存在文件中。可以使用 iptables-save 命令來做到這一點:

  代碼如下:

  $ iptables-save > iptables-script

  現在,信息包過濾表中的所有規則都被保存在文件 iptables-script 中。無論何時再次引導系統,都可以使用 iptables-restore 命令將規則集從該腳本文件恢復到信息包過濾表,如下所示:

  代碼如下:

  $ iptables-rest

copyright © 萬盛學電腦網 all rights reserved