1. 介紹
防火墻就是實(shí)現(xiàn)Linux下訪問(wèn)控制功能的,分為軟件防火墻和硬件防火墻兩種。
我們需要得定義防火墻的規(guī)則和策略去實(shí)現(xiàn)網(wǎng)絡(luò)的IP,數(shù)據(jù)的檢測(cè)。
目前市場(chǎng)上常見的有3,4層的防火墻,叫做網(wǎng)絡(luò)層的防火墻,還有7層的防火墻,其實(shí)是代理層的網(wǎng)關(guān)。
對(duì)于TCP/IP的七層模型來(lái)講,我們知道第三層是網(wǎng)絡(luò)層,三層的防火墻會(huì)在這層對(duì)源地址和目標(biāo)地址進(jìn)行檢測(cè)。但是對(duì)于七層的防火墻,不管你源端口或者目標(biāo)端口,源地址或者目標(biāo)地址是什么,都將對(duì)你所有的東西進(jìn)行檢查。所以,對(duì)于設(shè)計(jì)原理來(lái)講,七層防火墻更加安全,但是這卻帶來(lái)了效率更低。所以市面上通常的防火墻方案,都是兩者結(jié)合的。而又由于我們都需要從防火墻所控制的這個(gè)口來(lái)訪問(wèn),所以防火墻的工作效率就成了用戶能夠訪問(wèn)數(shù)據(jù)多少的一個(gè)最重要的控制,配置的不好甚至有可能成為流量的瓶頸。
2. iptables的工作機(jī)制
netfilter的五個(gè)規(guī)則鏈
- PREROUTING(路由前)
- INPUT(數(shù)據(jù)包流入口)
- FORWARD(數(shù)據(jù)包轉(zhuǎn)發(fā))
- OUTPUT(數(shù)據(jù)包流出口)
- POSTROUTING(路由后)
任何一個(gè)數(shù)據(jù)包只要經(jīng)過(guò)本機(jī),必須經(jīng)過(guò)這五個(gè)鏈中的其中一個(gè)鏈
3. 防火墻策略
防火墻策略一般分為兩種:
- 通策略:必須定義誰(shuí)可以進(jìn)
- 堵策略:必須有身份認(rèn)證,否則不能進(jìn)
當(dāng)我們定義的策略的時(shí)候,要分別定義多條功能,其中:定義數(shù)據(jù)包中允許或者不允許的策略,filter過(guò)濾的功能,而定義地址轉(zhuǎn)換的功能的則是nat選項(xiàng)。為了讓這些功能交替工作,我們制定出了“表”這個(gè)定義,來(lái)定義、區(qū)分各種不同的工作功能和處理方式。
我們比較常用的功能主要有三個(gè):
- filter:定義允許或者不允許
- nat:定義地址轉(zhuǎn)換
- mangle:修改報(bào)文原數(shù)據(jù)
filter:INPUT,F(xiàn)ORWARD,OUTPUT
nat:PREROUTING,OUTPUT,POSTROUTING
mangle:PREROUTING,INPUT,F(xiàn)ORWARD,OUTPUT,POSTROUTING
iptables/netfilter(這款軟件)是工作在用戶空間的,它可以讓規(guī)則進(jìn)行生效的,本身不是一種服務(wù),而且規(guī)則是立即生效的。而我們iptables現(xiàn)在被做成了一個(gè)服務(wù),可以進(jìn)行啟動(dòng),停止的。啟動(dòng),則將規(guī)則直接生效,停止,則將規(guī)則撤銷。
注意:規(guī)則的次序非常關(guān)鍵,誰(shuí)的規(guī)則越嚴(yán)格,應(yīng)該放的越靠前,而檢查規(guī)則的時(shí)候,是按照從上往下的方式進(jìn)行檢查的。
iptables定義規(guī)則的方式比較復(fù)雜:
格式:iptables [-t table] COMMAND chain CRETIRIA -j ACTION
-t table :filter nat mangle
COMMAND:定義如何對(duì)規(guī)則進(jìn)行管理
chain:指定你接下來(lái)的規(guī)則到底是在哪個(gè)鏈上操作的
CRETIRIA:指定匹配標(biāo)準(zhǔn)
-j ACTION :指定如何進(jìn)行處理
iptables命令詳解
當(dāng)然可以通過(guò)man iptables來(lái)查看詳細(xì)的解釋。常用的命令選項(xiàng)有:
-P:設(shè)置默認(rèn)策略的(設(shè)定默認(rèn)門是關(guān)著的還是開著的)如:iptables -P INPUT (DROP|ACCEPT)
-F: FLASH,清空規(guī)則鏈的(注意每個(gè)鏈的管理權(quán)限)
-N:NEW 支持用戶新建一個(gè)鏈,比如:iptables -N inbound_tcp_web 表示附在tcp表上用于檢查web的。
-X:用于刪除用戶自定義的空鏈
-Z:清空鏈
-A:追加
-I num : 插入,把當(dāng)前規(guī)則插入為第幾條
-R num:Replays替換/修改第幾條規(guī)則
-D num:刪除,明確指定刪除第幾條規(guī)則
-L:查看規(guī)則詳細(xì)信息,比如"iptables -L -n -v"