[轉] Linux下防火牆iptables用法規則詳及其防火牆配置

from: http://www.cnblogs.com/yi-meng/p/3213925.htmlhtml

備註: 排版還不錯,建議看以上的連接。linux

 

iptables規則web

規則--顧名思義就是規矩和原則,和現實生活中的事情是同樣的,國有國法,家有家規,因此要遵紀守法的嘛。固然在防火牆上的規則,在內核看來,規則就是決定如何處理一個包的語句。若是一個包符合全部的條件,咱們就用相應的處理動做來處理。書寫規則的語法格式爲:安全

iptables [-t table] command  chains [creteria]  -j  actionbash

-t table就是表名,filter/nat/mangle三個表中的一個,默認是filter表服務器

command告訴程序如何作,好比:插入一個規則,仍是刪除等網絡

chains 鏈,有五個,PREROUTING  POSTROUTING INPUT OUTPUT FORWARDapp

action 處理動做,有ACCEPT  DENY DROP REJECT  SNAT  DNATtcp

理一下思路工具

下面一點點的說

1、Tables

選項-t用來指定用哪一個表,它能夠是下面的任何一個,默認的是filter表

2、COMMANDS

command指定iptables對咱們提交的規則要作什麼樣的操做。這些操做多是在某個表裏增長或刪除一些東西,或其餘的動做。一下是iptables可用的command(如不作說明,默認表是filter)

和命令結合經常使用的選項

3、chains

簡單說一下五個鏈的做用:

PREROUTING 是在包進入防火牆以後、路由決策以前作處理

POSTROUTING 是在路由決策以後,作處理

INPUT  在包被路由到本地以後,但在出去用戶控件以前作處理

OUTPUT在去頂包的目的以前作處理

FORWARD在最初的路由決策以後,作轉發處理

4、匹配條件

4.1 基本匹配

4.2 隱含擴展匹配

這種匹配操做是自動的或隱含的裝入內核的。例如使用-p tcp時,不須要再裝入任何東西就能夠匹配只有IP包纔有的特色。隱含匹配針對三種不一樣的協議,即TCP   UDP ICMP。它們分別有一套適用於相應協議的判斷標準

TCP匹配 只能匹配TCP包的細節,必須有-p tcp做爲前提

--sport port   基於TCP包的源端口來匹配包

--dport port   基於TCP包的目的端口來匹配包

--tcp-flags tcp標誌位    有兩個參數列表。第一個是指定要檢查的標識位;第二個是指定爲1的標識位

UDP匹配

--sprot port

--dport  port

ICMP匹配

--icmp-type

8 request 請求

0 reply  回覆 響應

 

 

參考:http://www.cnblogs.com/itech/archive/2011/08/23/2150445.html

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

 

1、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

 

2、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,所以應當適當的安排規則順序。

  一般的法則是:拒絕全部 容許少數.

 

參考:http://blog.chinaunix.net/uid-20520466-id-1655741.html

 

linux下IPTABLES配置詳解
若是你的IPTABLES基礎知識還不瞭解,建議先去看看.
開始配置
咱們來配置一個filter表的防火牆.
(1)查看本機關於IPTABLES的設置狀況
[root@tp ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination        
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination        
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination        
Chain RH-Firewall-1-INPUT (0 references)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           icmp type 255 
ACCEPT     esp  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     ah   --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     udp  --  0.0.0.0/0            224.0.0.251         udp dpt:5353 
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0           udp dpt:631 
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22 
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:80 
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:25 
REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 
能夠看出我在安裝linux時,選擇了有防火牆,而且開放了22,80,25端口.
若是你在安裝linux時沒有選擇啓動防火牆,是這樣的
[root@tp ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination        
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination        
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination  
什麼規則都沒有.
(2)清除原有規則.
無論你在安裝linux時是否啓動了防火牆,若是你想配置屬於本身的防火牆,那就清除如今filter的全部規則.
[root@tp ~]# iptables -F      清除預設表filter中的全部規則鏈的規則
[root@tp ~]# iptables -X      清除預設表filter中使用者自定鏈中的規則
咱們在來看一下
[root@tp ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination        
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination        
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination     
什麼都沒有了吧,和咱們在安裝linux時沒有啓動防火牆是同樣的.(提早說一句,這些配置就像用命令配置IP同樣,重起就會失去做用),怎麼保存.
[root@tp ~]# /etc/rc.d/init.d/iptables save
 
這樣就能夠寫到/etc/sysconfig/iptables文件裏了.寫入後記得把防火牆重起一下,才能起做用.
[root@tp ~]# service iptables restart
 
如今IPTABLES配置表裏什麼配置都沒有了,那咱們開始咱們的配置吧
(3)設定預設規則
[root@tp ~]# iptables -p INPUT DROP
[root@tp ~]# iptables -p OUTPUT ACCEPT
[root@tp ~]# iptables -p FORWARD DROP
上面的意思是,當超出了IPTABLES裏filter表裏的兩個鏈規則(INPUT,FORWARD)時,不在這兩個規則裏的數據包怎麼處理呢,那就是DROP(放棄).應該說這樣配置是很安全的.咱們要控制流入數據包
而對於OUTPUT鏈,也就是流出的包咱們不用作太多限制,而是採起ACCEPT,也就是說,不在着個規則裏的包怎麼辦呢,那就是經過.
能夠看出INPUT,FORWARD兩個鏈採用的是容許什麼包經過,而OUTPUT鏈採用的是不容許什麼包經過.
這樣設置仍是挺合理的,固然你也能夠三個鏈都DROP,但這樣作我認爲是沒有必要的,並且要寫的規則就會增長.但若是你只想要有限的幾個規則是,如只作WEB服務器.仍是推薦三個鏈都是DROP.
注:若是你是遠程SSH登錄的話,當你輸入第一個命令回車的時候就應該掉了.由於你沒有設置任何規則.
怎麼辦,去本機操做唄!
(4)添加規則.
首先添加INPUT鏈,INPUT鏈的默認規則是DROP,因此咱們就寫須要ACCETP(經過)的鏈
爲了能採用遠程SSH登錄,咱們要開啓22端口.
[root@tp ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
[root@tp ~]# iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT  (注:這個規則,若是你把OUTPUT 設置成DROP的就要寫上這一部,好多人都是望了寫這一部規則致使,始終沒法SSH.在遠程一下,是否是好了.
其餘的端口也同樣,若是開啓了web服務器,OUTPUT設置成DROP的話,一樣也要添加一條鏈:
[root@tp ~]# iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT ,其餘同理.)
若是作了WEB服務器,開啓80端口.
[root@tp ~]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT
若是作了郵件服務器,開啓25,110端口.
[root@tp ~]# iptables -A INPUT -p tcp --dport 110 -j ACCEPT
[root@tp ~]# iptables -A INPUT -p tcp --dport 25 -j ACCEPT
若是作了FTP服務器,開啓21端口
[root@tp ~]# iptables -A INPUT -p tcp --dport 21 -j ACCEPT
[root@tp ~]# iptables -A INPUT -p tcp --dport 20 -j ACCEPT
若是作了DNS服務器,開啓53端口
[root@tp ~]# iptables -A INPUT -p tcp --dport 53 -j ACCEPT
若是你還作了其餘的服務器,須要開啓哪一個端口,照寫就好了.
上面主要寫的都是INPUT鏈,凡是不在上面的規則裏的,都DROP
容許icmp包經過,也就是容許ping,
[root@tp ~]# iptables -A OUTPUT -p icmp -j ACCEPT (OUTPUT設置成DROP的話)
[root@tp ~]# iptables -A INPUT -p icmp -j ACCEPT  (INPUT設置成DROP的話)
容許loopback!(否則會致使DNS沒法正常關閉等問題)
IPTABLES -A INPUT -i lo -p all -j ACCEPT (若是是INPUT DROP)
IPTABLES -A OUTPUT -o lo -p all -j ACCEPT(若是是OUTPUT DROP)
下面寫OUTPUT鏈,OUTPUT鏈默認規則是ACCEPT,因此咱們就寫須要DROP(放棄)的鏈.
減小不安全的端口鏈接
[root@tp ~]# iptables -A OUTPUT -p tcp --sport 31337 -j DROP
[root@tp ~]# iptables -A OUTPUT -p tcp --dport 31337 -j DROP
有些些特洛伊木馬會掃描端口31337到31340(即黑客語言中的 elite 端口)上的服務。既然合法服務都不使用這些非標準端口來通訊,阻塞這些端口可以有效地減小你的網絡上可能被感染的機器和它們的遠程主服務器進行獨立通訊的機會
還有其餘端口也同樣,像:3133五、2744四、2766五、20034 NetBus、970四、137-139(smb),2049(NFS)端口也應被禁止,我在這寫的也不全,有興趣的朋友應該去查一下相關資料.
 
固然出入更安全的考慮你也能夠包OUTPUT鏈設置成DROP,那你添加的規則就多一些,就像上邊添加
容許SSH登錄同樣.照着寫就好了.
 
下面寫一下更加細緻的規則,就是限制到某臺機器
如:咱們只容許192.168.0.3的機器進行SSH鏈接
[root@tp ~]# iptables -A INPUT -s 192.168.0.3 -p tcp --dport 22 -j ACCEPT
若是要容許,或限制一段IP地址可用 192.168.0.0/24 表示192.168.0.1-255端的全部IP.
24表示子網掩碼數.但要記得把 /etc/sysconfig/iptables 裏的這一行刪了.
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT 由於它表示全部地址均可以登錄.
或採用命令方式:
[root@tp ~]# iptables -D INPUT -p tcp --dport 22 -j ACCEPT
而後保存,我再說一邊,反是採用命令的方式,只在當時生效,若是想要重起後也起做用,那就要保存.寫入到/etc/sysconfig/iptables文件裏.
[root@tp ~]# /etc/rc.d/init.d/iptables save
這樣寫 !192.168.0.3 表示除了192.168.0.3的ip地址
其餘的規則鏈接也同樣這麼設置.
 
在下面就是FORWARD鏈,FORWARD鏈的默認規則是DROP,因此咱們就寫須要ACCETP(經過)的鏈,對正在轉發鏈的監控.
開啓轉發功能,(在作NAT時,FORWARD默認規則是DROP時,必須作)
[root@tp ~]# iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
[root@tp ~]# iptables -A FORWARD -i eth1 -o eh0 -j ACCEPT
丟棄壞的TCP包
[root@tp ~]#iptables -A FORWARD -p TCP ! --syn -m state --state NEW -j DROP
處理IP碎片數量,防止攻擊,容許每秒100個
[root@tp ~]#iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT
設置ICMP包過濾,容許每秒1個包,限制觸發條件是10個包.
[root@tp ~]#iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT
我在前面只因此容許ICMP包經過,就是由於我在這裏有限制.
二,配置一個NAT表放火牆
1,查看本機關於NAT的設置狀況
[root@tp rc.d]# iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination        
Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
SNAT       all  --  192.168.0.0/24       anywhere            to:211.101.46.235
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination   
個人NAT已經配置好了的(只是提供最簡單的代理上網功能,尚未添加防火牆規則).關於怎麼配置NAT,參考個人另外一篇文章
固然你若是尚未配置NAT的話,你也不用清除規則,由於NAT在默認狀況下是什麼都沒有的
若是你想清除,命令是
[root@tp ~]# iptables -F -t nat
[root@tp ~]# iptables -X -t nat
[root@tp ~]# iptables -Z -t nat
 
2,添加規則
添加基本的NAT地址轉換,(關於如何配置NAT能夠看個人另外一篇文章),
添加規則,咱們只添加DROP鏈.由於默認鏈全是ACCEPT.
防止外網用內網IP欺騙
[root@tp sysconfig]# iptables -t nat -A PREROUTING -i eth0 -s 10.0.0.0/8 -j DROP
[root@tp sysconfig]# iptables -t nat -A PREROUTING -i eth0 -s 172.16.0.0/12 -j DROP
[root@tp sysconfig]# iptables -t nat -A PREROUTING -i eth0 -s 192.168.0.0/16 -j DROP
  若是咱們想,好比阻止MSN,QQ,BT等的話,須要找到它們所用的端口或者IP,(我的認爲沒有太大必要)
例:
禁止與211.101.46.253的全部鏈接
  [root@tp ~]# iptables -t nat -A PREROUTING  -d 211.101.46.253 -j DROP
禁用FTP(21)端口 
[root@tp ~]# iptables -t nat -A PREROUTING -p tcp --dport 21 -j DROP
這樣寫範圍太大了,咱們能夠更精確的定義.
[root@tp ~]# iptables -t nat -A PREROUTING  -p tcp --dport 21 -d 211.101.46.253 -j DROP
這樣只禁用211.101.46.253地址的FTP鏈接,其餘鏈接還能夠.如web(80端口)鏈接.
按照我寫的,你只要找到QQ,MSN等其餘軟件的IP地址,和端口,以及基於什麼協議,只要照着寫就好了.
 
最後:
drop非法鏈接
[root@tp ~]# iptables -A INPUT   -m state --state INVALID -j DROP
[root@tp ~]# iptables -A OUTPUT  -m state --state INVALID -j DROP
[root@tp ~]# iptables-A FORWARD -m state --state INVALID -j DROP
容許全部已經創建的和相關的鏈接
[root@tp ~]# iptables-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
[root@tp ~]# iptables-A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

[root@tp ~]# /etc/rc.d/init.d/iptables save

這樣就能夠寫到/etc/sysconfig/iptables文件裏了.寫入後記得把防火牆重起一下,才能起做用.

[root@tp ~]# service iptables restart


別忘了保存,不行就寫一部保存一次.你能夠一邊保存,一邊作實驗,看看是否達到你的要求,
上面的全部規則我都試過,沒有問題.
寫這篇文章,用了我將近1個月的時間.查找資料,本身作實驗,但願對你們有所幫助.若有不全及不完善的地方還請提出.
由於本篇文章以配置爲主.關於IPTABLES的基礎知識及指令命令說明等我會盡快傳上,固然你能夠去網上搜索一下,仍是不少的.
 
 
 
 
----------------------------------------1111

 Linux防火牆介紹
摘  要:  本文介紹了LINUX下經常使用的防火牆規則配置軟件Iptables;從實現原理、配置方法以及功能特色的角度描述了LINUX防火牆的功能
關鍵字:  LINUX防火牆  Iptables  Ipchains  包過濾 
一  前言:
 Linux 爲增長系統安全性提供了防火牆保護。防火牆存在於你的計算機和網絡之間,用來斷定網絡中的遠程用戶有權訪問你的計算機上的哪些資源。一個正確配置的防火牆能夠極大地增長你的系統安全性。防火牆做爲網絡安全措施中的一個重要組成部分,一直受到人們的廣泛關注。LINUX是這幾年一款異軍突起的操做系統,以其公開的源代碼、強大穩定的網絡功能和大量的免費資源受到業界的廣泛讚賞。LINUX防火牆實際上是操做系統自己所自帶的一個功能模塊。經過安裝特定的防火牆內核,LINUX操做系統會對接收到的數據包按必定的策略進行處理。而用戶所要作的,就是使用特定的配置軟件(如iptables)去定製適合本身的「數據包處理策略」。
二  防火牆 包過濾:對數據包進行過濾能夠說是任何防火牆所具有的最基本的功能,而LINUX防火牆自己從某個角度也能夠說是一種「包過濾防火牆」。在LINUX防火牆中,操做系統內核對到來的每個數據包進行檢查,從它們的包頭中提取出所須要的信息,如源IP地址、目的IP地址、源端口號、目的端口號等,再與已創建的防火規則逐條進行比較,並執行所匹配規則的策略,或執行默認策略。 值得注意的是,在制定防火牆過濾規則時一般有兩個基本的策略方法可供選擇:一個是默認容許一切,即在接受全部數據包的基礎上明確地禁止那些特殊的、不但願收到的數據包;還有一個策略就是默認禁止一切,即首先禁止全部的數據包經過,而後再根據所但願提供的服務去一項項容許須要的數據包經過。通常說來,前者使啓動和運行防火牆變得更加容易,但卻更容易爲本身留下安全隱患。經過在防火牆外部接口處對進來的數據包進行過濾,能夠有效地阻止絕大多數有意或無心地網絡攻擊,同時,對發出的數據包進行限制,能夠明確地指定內部網中哪些主機能夠訪問互聯網,哪些主機只能享用哪些服務或登錄哪些站點,從而實現對內部主機的管理。能夠說,在對一些小型內部局域網進行安全保護和網絡管理時,包過濾確實是一種簡單而有效的手段。
代理:LINUX防火牆的代理功能是經過安裝相應的代理軟件實現的。它使那些不具有公共IP的內部主機也能訪問互聯網,而且很好地屏蔽了內部網,從而有效保障了內部主機的安全。
IP假裝:IP假裝(IP Masquerade)是LINUX操做系統自帶的又一個重要功能。經過在系統內核增添相應的假裝模塊,內核能夠自動地對通過的數據包進行「假裝」,即修改包頭中的源目的IP信息,以使外部主機誤認爲該包是由防火牆主機發出來的。這樣作,能夠有效解決使用內部保留IP的主機不能訪問互聯網的問題,同時屏蔽了內部局域網。
Linux下的包過濾防火牆管理工具:
在2.0的內核中,採用ipfwadm來操做內核包過濾規則。
在2.2的內核中,採用ipchains來控制內核包過濾規則。
在2.4的內核中,採用一個全新的內核包過濾管理工具——iptables。
包過濾防火牆的工做原理:
使用過濾器。數據包過濾用在內部主機和外部主機之間,過濾系統是一臺路由器或是一臺主機。過濾系統根據過濾規則原則來決定是否讓數據包經過。
過濾的實現。數據包過濾通常使用過濾路由器來實現,這種路由器與普通的路由器有所不一樣。


包過濾防火牆的工做層次:
應用層  應用層 
傳輸層  傳輸層 
網絡層 數據 路由器 數據 網絡層 
數據鏈路層  數據鏈路層  數據鏈路層 
物理層  物理層  物理層 
包過濾器操做的基本過程:

包過濾技術的優缺點
優勢:
對於一個小型的、不太複雜的站點,包過濾比較容易實現。
由於過濾路由器工做在IP層和TCP層,因此處理包的速度比代理服務器快。
過濾路由器爲用戶提供了一種透明的服務,用戶不須要改變客戶端的任何應用程序,也不須要用戶學習任何新的東西。
過濾路由器在價格上通常比代理服務器便宜。
缺點:
一些包過濾網關不支持有效的用戶認證。
規則表很快會變得很大並且複雜,規則很難測試。隨着表的增大和複雜性的增長,規則結構出現漏洞的可能性也會增長。
這種防火牆最大的缺陷是它依賴一個單一的部件來保護系統。
在通常狀況下,若是外部用戶被容許訪問內部主機,則他就能夠訪問內部網上的任何主機。
包過濾防火牆只能阻止一種類型的IP欺騙,即外部主機假裝內部主機的IP,對於外部主機假裝外部主機的IP欺騙卻不可能被阻止,並且它不能防止DNS欺騙。
在Linux系統上,支持包過濾的核心中有三個規則列表,這些列表稱爲防火牆鏈。三個鏈分別稱爲輸入鏈、輸出鏈和轉發鏈。當一個包經過以太網卡進來後,核心使用輸入鏈決定該包的取捨。若是該包沒有被丟棄,則核心要決定下面將向哪裏發送包,稱爲包的路由。若是要發給另外一個機器,核心經過轉發鏈來決定。最後,在包要被髮出以前,核心經過輸出鏈來作決定。一個鏈是一些規則的列表。每一個規則規定:若是包的包頭與規則相匹配,那麼對包進行相應的處理。若是該規則與包不匹配,則引入鏈中的下一個規則。最後,若是沒有要引入的規則,核心根據內置鏈策略決定如何作。在一個有安全意識的系統中,該規則一般告訴核心將包拒絕或丟棄。
在這先介紹Ipchains,以後再介紹Iptables。
Ipchains:
Ipchains 常用的命令行格式以下:Ipchains –A chain [–i interface] [–p protocol] [[!] -y][–s source-ip [port]] [-d destination-ip [port]] –j policy [-l]對各選項的說明以下表:-A <chain>      添加一規則到鏈尾。chain可爲input、output、forward。-i <interface>  指定本規則適用的網絡接口。一般有eth0、eth一、lo等。-p <protocol>   指定本規則適用的IP協議,如tcp、udp、icmp等。[!] –y         -y代表tcp握手中的鏈接請求標誌位SYN; ! –y 表示對該請求的響應。-s src-ip [port]   指明數據包的源IP地址,port表示本規則適用的端口號。-d dst-ip [port]   指明數據包的目的IP地址及端口號。-j policy     

; 指定本規則對匹配數據包的處理策略:ACCEPT、DENY或REJECT。-l            在系統日誌/var/log/messages中記錄與該規則匹配的數據包。
#ipchains –A input –s 201.202.203.58/32 www –p tcp –j DENY地址201.202.203.58送到www(HTTP)端口的任何TCP包都將被屏蔽。先建立一個名爲check的新鏈,而後再把全部發送到輸入鏈的包送到check鏈:#ipchains –N check#ipchains –A check –s 201.202.203.0/24 –j ACCEPT#ipchains –A check –s !201.202.203.0/24 –j DENY#ipchains –A input –j check系統會接受(只會接受)從201.202.203.0發送的全部軟件包,式中感嘆號(!)表明的意思是「非」,匹配「非201.202.203.0端口」。禁止telnet(端口23)鏈接:#ipchains –I forward –s 0.0.0.0 23 –j DENY
Iptables的規則要素:
指定表(table)
指定操做命令(command)
指定鏈(chains)
指定規則匹配器(matcher)
指定目標動做(target)
表。Iptables從其使用的3個表而得名,分別是filter、nat和mangle。對於包過濾防火牆只使用filter表。表filter是默認的表。
操做命令。包括添加、刪除、更新等。
鏈。對於包過濾防火牆可操做filter表中的INPUT鏈、OUTPUT鏈和FORWARD鏈。也能夠操做由用戶本身定義的自定義鏈。
規則匹配器。能夠指定各類規則匹配,如IP地址、端口、包類型等。
目標動做。當規則匹配一個包時,真正要執行的任務用目標標識。最經常使用的內置目標分別是:
ACCEPT表示容許包經過。
DROP表示被丟棄。
REJECT表示拒絕包,丟棄包的同時給發送者發送沒有接受的通知。
LOG表示包的有關信息被記錄入日誌。
TOS表示改寫包的ToS的值。
Iptables的語法一般能夠簡化爲:iptables[-t table]CMD[chain][rule-matcher][-j target]其中:table爲表名,CMD爲操做命令,chain爲鏈名,rule-matcher爲規則匹配器,target爲目標動做。
操做命令:
-A 或—append  在所選鏈的鏈尾加入一條或多條規則-D 或—delete  從所選鏈中刪除一條或多條匹配的規則-R 或—replace 在所選鏈中替換一條匹配的規則-I 或—insert  以給出的規則號在所選鏈中插入一條或多條規則。若是規則號是1,插入的規則在鏈的頭部-L 或—list  列出指定鏈的全部規則。若是沒有指定鏈,將列出全部鏈中的全部規則-F 或—flush  清除指定鏈和表中的全部規則。假如不指定鏈,那麼全部鏈都將被清空-N 或—new-chain 以給定的名字建立一條新的用戶自定義鏈。不能與已有的鏈同名-X 或—delete-chain 刪除指定的用戶定義鏈,必須保證鏈中的規則都不在使用時才能刪除鏈。若沒有指定鏈,則刪除全部的用戶鏈-P 或—policy  爲永遠鏈指定默認規則(內置鏈策略)。用戶定義鏈沒有缺省規則也是規則鏈中的最後一條規則,用-L命令顯時它在第一行顯示-C 或—check  檢查給定的包是否與指定鏈的規則相匹配-Z 或—zero  將指定鏈中全部的包字節記數器清零
規則匹配器:
-P,[!]protocol  指定要匹配的協議,能夠是tcp、udp、icmp、all。協議名前綴「!」爲邏輯非,表示除去該協議以外的全部協議。-s[!]address[/mask] 根據源地址或地址範圍肯定是否容許或拒絕數據包經過過濾器--sport[!]port[:port] 指定匹配規則的源端口或端口範圍。能夠用端口好,也能夠用/etc/services文件中的文字-d[!]address[/mask] 根據目的地址或地址範圍肯定是否容許或拒絕數據包經過過濾器--dport[!]port[:port] 指定匹配規則的目的端口或端口範圍。能夠用端口號,也能夠用/etc/services文件中的名字--icmp-type[1]typename  指定匹配規則的ICMP信息類型(可使用iptables –p icmp –h 查看有效的icmp類型名)
Iptables軟件包提供了兩個命令分別用於保存和恢復規則集。可使用命令轉儲在內存中的內核規則集。其中/etc/sysconfig/iptables是iptables守護進程調用的默認規則集文件:#/sbin/iptables-save>/etc/sysconfig/iptables要恢復原來的規則庫,需使用命令:#/sbin/iptables-restore</etc/sysconfog/iptables爲了使用得用iptables命令配置的規則在下次啓動機器時還能被使用,有兩種方法。
使用iptables得啓動腳本實現。Iptables的啓動腳本/etc/rc.d/init.d/iptables每次啓動時都使用/etc/sysconfig/iptables所提供的規則進行規則恢復,並可使用命令保存規則:#service iptables save
在自定義腳本中用iptables命令直接建立規則集。能夠直接用iptables命令編寫一個規則腳本,並在啓動時執行這個腳本。若規則腳本的文件名爲/etc/fw/rules,則能夠在啓動腳本/etc/rc.d/rc.local中加入的代碼:if[-x /etc/fw/rules];then /etc/fw/rules;fi;若是使用此種方式,建議使用ntsysv命令關閉系統的iptables守護進程。

 

創建包過濾防火牆

  這個網絡結構假設內部網有有效的Internet地址。爲了將內部網段198.168.80.0/24與Internet隔離,在內部網絡和 Internet之間使用了包過濾防火牆。防火牆的網接口是eth1(198.168.80.254),防火牆的Internet接口是eth0 (198.199.37.254)。加外,內網中有3臺服務器對外提供服務。分別爲:
WWW服務器:IP地址爲198.168.80.251
FTP服務器:IP地址爲198.168.80.252
E-mail服務器:IP地址爲198.168.80.253
防火牆的創建過程
#!/sbin/bash在屏幕上顯示信息:echo "Starting iptables rules..."#開啓內核轉發功能echo "1">;/proc/sys/net/

 

ipv4/ip_forward#定義變量IPT=/sbin/iptablesWWW-SERVER=198.168.80.251FTP-SERVER=198.168.80.252EMAIL-SERVER=198.168.80.253IP_RANGE="198.168.80.0/24"#刷新全部的鏈的規則$IPT –F#首先禁止轉發任何包,而後再一步步設置容許經過的包#因此首先設置防火牆FORWARD鏈的策略爲DROP$IPT -P FORWARD DROP#下面設置關於服務器的包過濾規則#因爲服務器/客戶機交互是雙向的,因此不只僅要設置數據包#出去的規則,還要設置數據包返回的規則
(1)WWW服務服務端口爲80,採用tcp或udp協議規則爲eth0=>;容許目的爲內部網WWW服務器的包$IPT -A FORWARD -p tcp -d $WWW-SERVER-dport www -i eth0 -j ACCEPT(2)FTP服務服務端口爲21,數據端口20FTP的傳輸模式有主動和被動之分,FTP服務採用tcp協議規則爲:eth0=>;僅容許目的爲內部網ftp服務器的包$IPT -A FORWARD -p tcp -d $FTP-SERVER -dport ftp -i eth0 -j ACCEPT(3)EMAIL服務包含兩個協議,一個是smtp,另外一個是pop3出於安全性考慮,一般只提供對內的pop3服務因此在這裏咱們只考慮對smtp的安全性問題smtp端口爲25,採用tcp協議規則爲etho=>;僅容許目的爲E-mail服務器的smtp請求$IPT -A FORWARD -p tcp -d $EMAIL-SERVER-dport smtp -i eth0 -j ACCEPT
 下面設置針對Internet客戶的過濾規則:
本例中防火牆位於網關的位置,因此主要是防止來自Internet的攻擊不能防止來自Intranet的攻擊假如網絡中的服務器都是基於Linux的,也能夠在每一部服務器上設置相關的過濾規則來防止來自Internet的攻擊
對於Internet對Intranet客戶的返回包,定義以下規則:(1)容許Intranet客戶採用被動模式訪問Internet的FTP服務器$IPT -A FORWARD -p tcp -s 0/0 --sport ftp-data -d $IP_RANGE -i eth0 -j ACCEPT(2)接收來自Internet的非鏈接請求tcp包$IPT -A FORWARD -p tcp -d 198.168.80.0/24 ! --syn -i eth0 -j ACCEPT(3)接收全部udp包,主要是針對oicq等使用udp的服務$IPT -A FORWARD -p udp -d 198.168.80.0/24 -i eth0 -j ACCEPT
而後接受來自整個Intranet的數據包過濾,咱們定義以下規則$IPT -A FORWARD -s 198.168.80.0/24 -i eth1 -j ACCEPT處理ip碎片接受全部的ip碎片,但採用limit匹配擴展對其單位時間能夠經過的ip碎片數量進行限制,以防止ip碎片攻擊$IPT -A FORWARD -f -m limit-limit 100/s-limit-burst 100 -j ACCEPT說明:對無論來自哪裏的ip碎片都進行限制,容許每秒經過100個ip碎片該限制觸發的條件是100個ip碎片設置icmp包過濾ipmp包一般用於網絡測試等,故容許全部的icmp包經過可是黑客經常採用icmp進行攻擊,如ping of death等因此咱們採用limit匹配擴展加以限制$IPT -A FORWARD -p icmp -m limit-limit 1/s-limit-burst 10 -j ACCEPT說明:對無論來自哪裏的icmp包都進行限制,容許每秒經過一個包該限制觸發的條件是10個包
三 結束語:
 對防火牆的不當配置可能形成安全漏洞。如處理TCP分段時,Ipchains須要查看包頭中的源端口、目的端口、ICMP代碼或「TCP SYN」標誌等信息,而這些信息只能在TCP分段的第一個IP包中才有。因而從第二個分段開始都不能匹配過濾規則。某些管理者將防火牆配置爲僅對第一個分段進行處理。一般,一個TCP鏈接的第一個TCP分段被防火牆阻擋後,其餘的TCP分段被認爲不會產生安全性問題,由於在目的主機上因爲缺乏第一個分段而沒法從新組裝報文。然而,因爲系統缺陷等緣由,發送的分段可能使機器癱瘓,甚至人爲精心設計的IP包可藉此缺陷繞過防火牆。所以配置防火牆須要仔細分析過濾規則如何處理各類類型的分組。對分段的處理最好將系統內核編譯爲從新組裝全部經過的分段,或在應用層另設安全機制。 
 對基於包過濾防火牆更常見的攻擊是利用IP欺騙的方法。IP欺騙是指主機發送自稱是另外一個主機發送的包。防止IP欺騙的方法是使用源地址確認,它經過配置路由器識別路由代碼實現,而不是防火牆。防火牆結合源地址確認能較好地加強系統的安全性

 

四 參考文獻
《Red Hat Linux 9網絡服務》機械工業出版社《Turbolinux 網絡管理教程》《Turbolinux 系統管理教程》

參考:http://biyelunwen.yjbys.com/fanwen/jisuanji/368996_3.html

 
分類:  Linux
標籤:  linux iptables
相關文章
相關標籤/搜索