歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux服務器

使用Linux系統Iptables防火牆

Linux 的內置firewall機制,是通過kernel中的netfilter模塊實現的(www.netfilter.ort)。Linux kernel使用netfilter對進出的數據包進行過濾,netfilter由三個規則表組成,每個表又有許多內建的鏈組成。通過使用iptables命令可以對這些表鏈進行操作,如添加、刪除和列出規則等。

  一、Netfilter規則表—filter nat mangle

  filter,用於路由網絡數據包。是默認的,也就是說如果沒有指定-t參數,當創建一條新規則時,它會默認存放到該表內。

  INPUT 網絡數據包流向服務器

  OUTPUT 網絡數據包從服務器流出

  FORWARD 網絡數據包經服務器路由

  nat,用於NAT表.NAT(Net Address Translation )是一種IP地址轉換方法。

  PREROUTING 網絡數據包到達服務器時可以被修改

  OUTPUT 網絡數據包由服務器流出

  POSTROUTING 網絡數據包在即將從服務器發出時可以被修改

  mangle,用於修改網絡數據包的表,如TOS(Type Of Service),TTL(Time To Live),等

  INPUT 網絡數據包流向服務器

  OUTPUT 網絡數據包流出服務器

  FORWARD 網絡數據包經由服務器轉發

  PREROUTING 網絡數據包到達服務器時可以被修改

  POSTROUTING 網絡數據包在即將從服務器發出時可以被修改

  1.配置Iptables

  當數據包進入服務器時,Linux Kernel會查找對應的鏈,直到找到一條規則與數據包匹配。如果該規則的target是ACCEPT,就會跳過剩下的規則,數據包會被繼續發送。如果該規則的target是DROP,該數據包會被攔截掉,kernel不會再參考其他規則。

  Note:如果從始至終都沒有一條規則與數據包匹配,而且表末尾又沒有drop all的規則,那末該數據包會被accept。Cisco則相反,在表末尾會因含deny all的規則。

  1.) Iptables的命令選項

  iptables [-t tables] command option parameter target

  -A 在鏈尾添加一條規則

  -C 將規則添加到用戶定義鏈之前對其進行檢查

  -D 從鏈中刪除一條規則

  -E 重命名用戶定義的鏈,不改變鏈本身

  -F 清空鏈,刪除鏈上的所有規則

  -I 在鏈中插入一條規則

  -L 列出某個鏈上的規則,如iptables –L INPUT 列出INPUT鏈的規則

  -N 創建一個新鏈

  -P 定義某個鏈的默認策略

  -R 替換鏈上的某條規則

  -X 刪除某個用戶相關的鏈

  -Z 將所有表的所有鏈的字節和數據包計數器清零

  2.) Iptables的命令參數

  -p –protocol

  應用於數據包的協議類型,可以是TCP UDP ICMP或ALL。!也可使用。

  當使用-p tcp時,還可使用其他可以選項,以便允許進一步定義規則。選項包括:

  ——sport 允許指定匹配數據包源端口.port1:port ,表示port1和port2之間的所有端口

  ——dport 目的端口,和——sport雷同。

  當使用-p !udp時,也有特殊的選項供使包括:

  ——sport,——dport,與-p tcp 相同,只不過用以用於UDP包。

  使用-p icmp參數時,只有一個選項可用。

  ——icmp-type,允許在過濾規則中指定icmp類型。

  -s –source 指定數據包的源地址。該參數後跟一個IP地址,一個帶有sub-net mask的網絡地址,或一個主機名。(不建議使用主機名)

  -d,- - destination 數據包的目的地址,同-s.

  -j,——jump 用於指定一個target,告訴規則將該匹配的數據包發送到該 target。Target可以是ACCEPT,DROP,QUEUE,RETURN.如果沒有-j,那麼不會對數據包進行任何操作,只是將計數器加1。

  -i - - in-interface ,對於INPUT FORWARD PREROUTING鏈,該參數指定數據包到達服務器時所使用的端口。

  -o - - out-interface,對於OUTPUT FORWARD POSTROUTING鏈,該參數指定數據包離開服務器時使用的端口。

  3.) Iptables的命令target

  創建規則的最後一步是指定Iptables對數據包的操作。只要某一規則匹配該數據包,就不會再有別的規則的操作。內建的target有:ACCEPT DROP QUEUE RETURN。

  ACCEPT:允許數據包通過,到達目的地。

  DROP:拒絕數據包通過,丟棄該包。

  QUEUE:將數據包發送回到用戶應用程序處理。

  RETURN:不再根據當前鏈的其他規則來檢查數據包,而是直接返回,繼續被發送到其目的地址,或下一個鏈。

2.應用Iptables規則 示例

  允許WWW

  iptables –A INPUT –p tcp –dport 80 –j ACCEPT

  該規則被添加到filter表的INPUT鏈,允許目的端口是80的數據包。

  在內部接口上允許DHCP

  iptables –A INPUT –i eth0 –p tcp - - sport 68 - -dport 67 ACCEPT

  iptables –A INPUT –i eth0 –p ucp - -sport 68 - -dport 67 ACCEPT

  以上同時允許TCP和UDP協議。

  3.保存和恢復Iptables

  保存Iptables

  使用iptables-save可將現行的iptables規則保存,

  iptables-save > iptables保存路徑,如# iptables-save > /etc/iptables.up.rule

  恢復Iptables

  使用iptables-restore 可從配置文檔恢復iptables表到現行iptables表.

  iptables-restore < /etc/iptables.up.rule

  二、Ubuntu Server中的Iptables

  Ubuntu Server6.06中已經默認安裝iptables,版本是1.3.3.默認狀態是關閉。

  通過修改/etc/network/interfaces可將iptables打開:

  auto lo

  Iface lo inet loopback

  auto eth0

  iface eth0 inet dhcp

  #添加以下內容

  pre-up iptables-restore < /etc/iptables.up.rule

  #call the restored rule when active the eth0

  post-down iptables-save > /etc/iptables.up.rule

  #restore the iptables rule when shutdown the interface eth0

  然後重新激活eth0即可。

  另外,可隨時修改/etc/iptables.up.rule配置文件,來更改iptables的規則。Iptables.up.rule格式如下:

  #Generated by iptables-save V1.3.3 on Tue Jul 31 14:18:44 2007

  *filter

  :INPUT ACCEPT [73:8213]

  :FORWARD ACCEPT [0:0]

  :OUTPUT ACCEPT [8:825]

  -A INPUT –i lo –p icmp –j DROP

  -A INPUT –i eth0 –p icmp –j DROP

  COMMIT

  #Completed on Tue Jul 31 14:10:44 2007

  行與行之間不能有空行。

  三.Summary

  iptables表鏈中每條規則的順序很重要,如果首條是accept all,那末所有的數據包都會被允許通過firewall,因此應當適當的安排規則順序。

  通常的法則是:拒絕所有 允許少數.

 

Copyright © Linux教程網 All Rights Reserved