Linux裡的防火牆:netfilter簡介與Iptables的使用(上)

來源:互聯網
上載者:User


什麼是防火牆?

防火牆可以是像360,金山,卡巴斯基等軟體,也可以是硬體,我們來用OSI七層模型來劃分的話。那麼分為:

1. 三層防火牆:它只負責檢查資料從進入到第三層,還有從第三層流出,是否符合它規定的條件,如果是,那麼就允許存取,反之就攔截。

2.七成防火牆:它負責資料輸入到第七層,與從第七層到流出,它的檢查範圍更加廣泛,但是消耗的系統資源也就更多。這也是為什麼現在市面上大多數防火牆方案都是兩者結合的原因


防火牆如何生效?

我們剛知道,防火牆分為3層和7層,那麼我們想讓防火牆生效,就必須放在特定的地方,例如:你的目的是防止入侵破壞,而你把防火牆放在了資料傳出的地方,那麼它就起不到作用,因為你的系統已經受到破壞了。如:


那麼Linux中的防火牆是什麼樣的?

linux1.0時代
ipfw:早期的freebsd,功能有限,它定義的規則基於核心,要想讓它生效,必須重啟
核心,就是重啟OS

linux2.0 後來的發展:軟體式的防火牆
ipchains : 做了很大的改進,可以定義N條規則成為一個鏈來工作

iptables: 現在,ipchains的發展,可以在鏈的基礎上定義表,裡面有多個鏈


注意:ipchains和iptables工作在使用者空間,是使用者定義的規則,它們本身不屬於防火牆基於連接埠,可以實現防火的功能


netfilter : 真正意義上的防火牆

所以要想讓防火牆生效,我們就需要將它放置在TCP/IP協議棧(TCP/IP stack)的幾個特殊的位置,作者設計了五個置放位置:在這五個位置上定義攔截,來實現防火牆的功能。這五個位置,分別是

INPUT(資料流入) 

 PREROUTING(路由前)

 POSTROUTING(路由後)

 FORWARD(轉寄) 

OUTPUT(資料流出)


理解了防火牆的概念,現在我們來學習iptables,iptables詳細用法由於比較長,放在下面一個文章中:

iptables的詳細用法:http://blog.csdn.net/deansrk/article/details/6704170


1.假設一台主機只允許172.16.0.0網段可以使用ssh遠端連線到本機,如何?

分析:

1)到本機內部訪問的最好定義在INPUT

2)從本機內部出去的最好定義在OUTPUT

iptables -t filter -A INPUT -s 172.16.0.0/16 172.16.100.1 -p tcp --dport 22 -j ACCEPTiptables -t filter -A OUTPUT -s 172.16.100.1 -d 172.16.0.0/16 -p tcp iptables -P INPUT DROPiptables -P OUTPUT DROPiptables -P FORWARD DROP

2.一台伺服器172.16.14.1隻允許172.16.0.0/16訪問80:22,且不允許172.16.0.1訪問80:22,並且只允許存取建立串連後的資料。(防止反彈性木馬)

ptabels -A INPUT -s 172.16.0.1 -p tcp --dport 22 -j DROP ptabels -A INPUT -s 172.16.0.1 -p tcp --dport 80 -j DROP ptabels -A INPUT -s 172.16.0.0/16 -p tcp --dport 22 -j ACCEPT iptabels -A INPUT -s 172.16.0.0/16 -p tcp --dport 80 -j ACCEPT iptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPTiptables -P INPUT DROPiptables -P OUTPUT DROPiptables -L -n -vChain INPUT (policy DROP 7013 packets, 660K bytes) pkts bytes target     prot opt in     out     source               destination             0     0 DROP       tcp  --  *      *       172.16.0.1           0.0.0.0/0           tcp dpt:22     0     0 DROP       tcp  --  *      *       172.16.0.1           0.0.0.0/0           tcp dpt:80  2548  200K ACCEPT     tcp  --  *      *       172.16.0.0/16        0.0.0.0/0           tcp dpt:22     0     0 ACCEPT     tcp  --  *      *       172.16.0.0/16        0.0.0.0/0           tcp dpt:80     3   484 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0           Chain FORWARD (policy ACCEPT 4180 packets, 4043K bytes) pkts bytes target     prot opt in     out     source               destination         Chain OUTPUT (policy DROP 6381 packets, 577K bytes) pkts bytes target     prot opt in     out     source               destination           556 64420            all  --  *      *       0.0.0.0/0            0.0.0.0/0           state ESTABLISHED 

3.伺服器A於用戶端C要經過防火牆B的轉寄來訪問,如下表對應的關係,要求C可以訪問到172網段,B有兩個地址192.168.0.28和172.16.14.10,只允許192.168.0.48可以訪問到伺服器A的80連接埠和22連接埠,其他的都不能訪問。(需要開啟3台虛擬機器)

伺服器A                      防火牆B                                       用戶端C
172.16.14.10:80     FORWARD C 80:22         192.168.0.48   
172.16.14.10:22     FORWARD policy DROP

1)配置C的預設閘道為192.168.0.28

route add default gw 192.168.0.28

2)開啟A的httpd和sshd服務,如果沒有請先安裝

service httpd startservice sshd start

3)配置B的iptables

iptables -A FORWARD -c 192.168.0.48 -p tcp --dport 80 -j ACCEPT iptables -A FORWARD -c 192.168.0.48 -p tcp --dport 80 -j ACCEPTiptables -P FORWARD DROP iptables -L -nChain INPUT (policy ACCEPT)target     prot opt source               destination    Chain FORWARD (policy DROP)target     prot opt source               destination         ACCEPT     tcp  --  192.168.0.48         172.16.14.10        tcp dpt:80 ACCEPT     tcp  --  192.168.0.48         172.16.14.10        tcp dpt:22 Chain OUTPUT (policy ACCEPT)target     prot opt source               destination    

4)在C上ping一下 172.16.14.10 應該不通,然後使用ssh串連A ,再使用elinks測試下A的httpd服務是否正常

ssh 172.16.1410elinsk http://172.16.14.10                #如果能串連到測試頁說明正常

5)將C的ip換為192.168.0.58看還能不能ssh或者訪問到測試頁

ifconfig eth0 192.168.0.58ssh 172.16.1410                               #應該臉不上elinsk http://172.16.14.10                #應該不能顯示任何內容,兩樣都滿足說明防火牆生效






相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.