关于linux防火墙
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
????事實(shí)上,每一個主要的Linux版本中都有不同的防火墻軟件套件。Iptabels(netfilter)應(yīng)用程序被認(rèn)為是Linux中實(shí)現(xiàn)包過慮功能的第四代應(yīng)用程序。第一代是Linux 內(nèi)核1.1版本所使用的Alan Cox從BSD Unix中移植過來的ipfw。
????在2.0版的內(nèi)核中,Jos Vos和其它一些程序員對ipfw進(jìn)行了擴(kuò)展,并且添加了ipfwadm用戶工具。在2.2版內(nèi)核中, Russell和Michael Neuling做了一些非常重要的改進(jìn),也就是在該內(nèi)核中,Russell添加了幫助用戶控制過慮規(guī)則的ipchains工具。后來,Russell又完成了其名為netfilter(http://www.netfilter.org)的內(nèi)核框架。這些防火墻軟件套件一般都比其前任有所改進(jìn),表現(xiàn)越來越出眾。
????Netfilter/iptables已經(jīng)包含在了2.4以后的內(nèi)核當(dāng)中,它可以實(shí)現(xiàn)防火墻、NAT(網(wǎng)絡(luò)地址翻譯)和數(shù)據(jù)包的分割等功能。 netfilter工作在內(nèi)核內(nèi)部,而iptables則是讓用戶定義規(guī)則集的表結(jié)構(gòu)。netfilter/iptables是從ipchains和 ipwadfm(IP防火墻管理)演化而來的,為了簡單起見,下文中,我就將其統(tǒng)一稱為iptables。
iptables的其它一些好的用法是為Unix、Linux和BSD個人工作站創(chuàng)建一個防火墻,當(dāng)然也可以為一個子網(wǎng)創(chuàng)建防火墻以保護(hù)其它的系統(tǒng)平臺。 iptables只讀取數(shù)據(jù)包的頭,所以不會給信息流增加負(fù)擔(dān),此外它也無需進(jìn)行驗(yàn)證。如果要想獲得更好的安全性,可以將其和一個代理服務(wù)器(比如 squid)相結(jié)合。
????概述
在眾多的網(wǎng)絡(luò)防火墻產(chǎn)品中,Linux操作系統(tǒng)上的防火墻軟件特點(diǎn)顯著。它們和Linux一樣,具有強(qiáng)大的功能,大多是開放軟件,不僅可免費(fèi)使用而且源代碼公開。這些優(yōu)勢是其他防火墻產(chǎn)品不可比擬的。選用這類軟件確實(shí)是最低硬件需求的可靠、高效的解決方案。但用戶最關(guān)心的還是安全系統(tǒng)的性能,有關(guān)部門根據(jù)網(wǎng)絡(luò)安全調(diào)查和分析曾得出結(jié)論:網(wǎng)絡(luò)上的安全漏洞和隱患絕大部分是因網(wǎng)絡(luò)設(shè)置不當(dāng)引起的。使用Linux平臺上的這些優(yōu)秀軟件同樣也存在這樣的問題。要使系統(tǒng)安全高效地運(yùn)行,安裝人員和管理人員必須能夠理解該軟件產(chǎn)品的運(yùn)行機(jī)制并能深入分析所采用的防火墻設(shè)置策略會不會被人利用。本文僅對Linux平臺上的IP包過濾防火墻軟件Ipchains進(jìn)行探討。
一。防火墻的基本模型
????基于TCP/IP協(xié)議簇的Internet網(wǎng)際互聯(lián)完全依賴于網(wǎng)絡(luò)層以上的協(xié)議棧(網(wǎng)絡(luò)層的IP協(xié)議、傳輸控制協(xié)議TCP/UDP協(xié)議和應(yīng)用層協(xié)議)。考慮到網(wǎng)絡(luò)防火墻是為了保持網(wǎng)絡(luò)連通性而設(shè)立的安全機(jī)制,因此防火墻技術(shù)就是通過分析、控制網(wǎng)絡(luò)以上層協(xié)議特征,實(shí)現(xiàn)被保護(hù)網(wǎng)絡(luò)所需安全策略的技術(shù)。構(gòu)建防火墻有三類基本模型:即應(yīng)用代理網(wǎng)關(guān)、電路級網(wǎng)關(guān)(Circuit Level Gateway)和網(wǎng)絡(luò)層防火墻。它們涉及的技術(shù)有應(yīng)用代理技術(shù)和包過濾技術(shù)等。
????應(yīng)用代理網(wǎng)關(guān)允許內(nèi)部網(wǎng)絡(luò)上的用戶通過防火墻非直接地訪問Internet。它根據(jù)用戶的請求代替用戶與目的地進(jìn)行連接。由于應(yīng)用代理網(wǎng)關(guān)在應(yīng)用層進(jìn)行代理,所以它可以對應(yīng)用協(xié)議進(jìn)行控制,而且還可以在應(yīng)用級進(jìn)行記錄。它比網(wǎng)絡(luò)級防火墻的安全措施更加嚴(yán)格,因?yàn)樗芴峁└敿?xì)的審計報告、跟蹤用戶和應(yīng)用進(jìn)程以及IP包的參數(shù)。然而,采用應(yīng)用層防火墻對網(wǎng)絡(luò)性能有較大影響。由于對任何用戶的請求都要求應(yīng)用代理進(jìn)程為其提供應(yīng)用服務(wù),所以速度較慢,并且不如網(wǎng)絡(luò)層防火墻那樣透明以及維護(hù)不便等。在Linux上實(shí)現(xiàn)這種防火墻模型的軟件有squid等。
????電路級網(wǎng)關(guān)與應(yīng)用代理網(wǎng)關(guān)類似,但進(jìn)行的代理通常與應(yīng)用無關(guān)。這樣就失去了詳盡記錄和精確定義規(guī)則的能力。電路級網(wǎng)關(guān)是一臺運(yùn)行網(wǎng)關(guān)應(yīng)用程序的設(shè)備,它只支持TCP/IP應(yīng)用,使用TCP端口實(shí)現(xiàn)網(wǎng)絡(luò)資源和用戶應(yīng)用程序之間的通信。它還要求客戶端使用特殊軟件才能為應(yīng)用到應(yīng)用的通信服務(wù)。SOCKS是Linux上實(shí)現(xiàn)這類防火墻模型的軟件。
????網(wǎng)絡(luò)層的IP包過濾防火墻在IP包水平上工作。它根據(jù)在每個包中的源地址、目的地址和包類型等信息控制包的流動。更徹底的過濾過程是檢查包中的源、目的端口號以及連接狀態(tài)等信息。這種防火墻比較安全,但缺少足夠的記錄信息。它可以阻止外部網(wǎng)絡(luò)訪問被保護(hù)的內(nèi)部網(wǎng)絡(luò),但不能記錄誰訪問了公開的系統(tǒng),以及誰從內(nèi)部網(wǎng)絡(luò)訪問Internet。在Linux內(nèi)核中支持IP包過濾,所以不需要增加其他軟件就可以構(gòu)建包過濾防火墻,Ipchains軟件包是Linux平臺上一個功能強(qiáng)大的包過濾策略管理軟件,用于設(shè)置可靠的防火墻系統(tǒng)。
二、不應(yīng)該過濾的包
在開始過濾某些不想要的包之前要注意以下內(nèi)容:
● ICMP包
????ICMP包可用于檢測TCP/IP失敗的情形。如果阻擋這些包將導(dǎo)致不能得到“Host unreachable”或“No route to host”等信息。ICMP包還用于MTU發(fā)現(xiàn),某些TCP實(shí)現(xiàn)使用了MTU發(fā)現(xiàn)來決定是否進(jìn)行分段。MTU發(fā)現(xiàn)通過發(fā)送設(shè)置了不進(jìn)行分段的位的包探測,當(dāng)?shù)玫降腎CMP應(yīng)答表示需要分段時,再發(fā)送較小的包。如果得不到ICMP包(“destination unreachable”類型的包),則本地主機(jī)不減少M(fèi)TU大小,這將導(dǎo)致測試無法停止或網(wǎng)絡(luò)性能下降。
● 到DNS的TCP連接
????如果要攔阻出去的TCP連接,那么要記住DNS不總是使用UDP。如果從DNS服務(wù)器過來的回答超過512字節(jié),客戶端將使用TCP連接,并仍使用端口53接收數(shù)據(jù)。若禁止了TCP連接,DNS大多數(shù)情況下會正常工作,但可能會有奇怪的延時故障出現(xiàn)。如果內(nèi)部網(wǎng)絡(luò)的DNS查詢總是指向某個固定的外部DNS服務(wù)器,可以允許本地域端口到該服務(wù)器的域端口連接。
● 主動式FTP的TCP連接
????FTP有兩種運(yùn)作方式,即傳統(tǒng)的主動式(active)方式和目前流行的被動式(passive)方式。在主動式FTP模式下,FTP 服務(wù)器發(fā)送文件或應(yīng)答LS命令時,主動和客戶端建立TCP連接。如果這些TCP連接被過濾,則主動方式的FTP將被中斷。如果使用被動方式,則過濾遠(yuǎn)地的TCP連接沒有問題。因?yàn)閿?shù)據(jù)連接是從客戶端到服務(wù)器進(jìn)行的(包括雙向的數(shù)據(jù))。
三、針對可能的網(wǎng)絡(luò)攻擊
????防火墻的性能是否優(yōu)良關(guān)鍵在于其配置能否防護(hù)來自外界的各種網(wǎng)絡(luò)攻擊。這要求網(wǎng)絡(luò)管理者能針對可能的網(wǎng)絡(luò)攻擊特點(diǎn)設(shè)定完善的安全策略。以網(wǎng)絡(luò)常見的“ping of death”攻擊為例,“ping of death”攻擊通過發(fā)送一個非法的大ICMP包使接收者的TCP堆棧溢出從而引起混亂。針對這種攻擊可將防火墻配置為阻擋ICMP分段。因?yàn)槠胀ǖ腎CMP包大都不需要到分段的程度,阻擋ICMP分段只攔阻大的“ping”包。 這種防護(hù)策略也可用于針對其他協(xié)議安全缺陷的網(wǎng)絡(luò)攻擊。
什么是Iptables??
iptables 是建立在 netfilter 架構(gòu)基礎(chǔ)上的一個包過濾管理工具,最主要的作用是用來做防火墻或透明代理。Iptables 從 ipchains 發(fā)展而來,它的功能更為強(qiáng)大。Iptables 提供以下三種功能:包過濾、NAT(網(wǎng)絡(luò)地址轉(zhuǎn)換)和通用的 pre-route packet mangling。包過濾:用來過濾包,但是不修改包的內(nèi)容。Iptables 在包過濾方面相對于 ipchians 的主要優(yōu)點(diǎn)是速度更快,使用更方便。NAT:NAT 可以分為源地址 NAT 和目的地址 NAT。?
Iptables 可以追加、插入或刪除包過濾規(guī)則。實(shí)際上真正執(zhí)行這些過慮規(guī)則的是 netfilter 及其相關(guān)模塊(如 iptables 模塊和 nat 模塊)。Netfilter 是 Linux 核心中一個通用架構(gòu),它提供了一系列的 “表”(tables),每個表由若干 “鏈”(chains)組成,而每條鏈中可以有一條或數(shù)條 “規(guī)則”(rule)組成。?
系統(tǒng)缺省的表為 “filter”,該表中包含了 INPUT、FORWARD 和 OUTPUT 3 個鏈。?
????每一條鏈中可以有一條或數(shù)條規(guī)則,每一條規(guī)則都是這樣定義的:如果數(shù)據(jù)包頭符合這樣的條件,就這樣處理這個數(shù)據(jù)包。當(dāng)一個數(shù)據(jù)包到達(dá)一個鏈時,系統(tǒng)就會從第一條規(guī)則開始檢查,看是否符合該規(guī)則所定義的條件: 如果滿足,系統(tǒng)將根據(jù)該條規(guī)則所定義的方法處理該數(shù)據(jù)包;如果不滿足則繼續(xù)檢查下一條規(guī)則。最后,如果該數(shù)據(jù)包不符合該鏈中任一條規(guī)則的話,系統(tǒng)就會根據(jù)該鏈預(yù)先定義的策略來處理該數(shù)據(jù)包。?
? table,chain,rule?
iptables 可以操縱3 個表:filter 表,nat 表,mangle 表。?
NAT 和一般的 mangle 用 -t 參數(shù)指定要操作哪個表。filter 是默認(rèn)的表,如果沒有 -t 參數(shù),就默認(rèn)對 filter 表操作。?
Rule 規(guī)則:過濾規(guī)則,端口轉(zhuǎn)發(fā)規(guī)則等,例如:禁止任何機(jī)器 ping 我們的服務(wù)器,可以在服務(wù)器上設(shè)置一條規(guī)則:
iptables -A INPUT -s ! 127.0.0.1 -p icmp -j DROP?
從 –s 開始即是一條規(guī)則,-j 前面是規(guī)則的條件,-j 開始是規(guī)則的行為(目的)。整條命令解釋為,在filter 表中的 INPUT 規(guī)則鏈中插入一條規(guī)則,所有源地址不為 127.0.0.1 的 icmp 包都被拋棄。?
Chain 規(guī)則鏈:由一系列規(guī)則組成,每個包順序經(jīng)過 chain 中的每一條規(guī)則。chain 又分為系統(tǒng) chain和用戶創(chuàng)建的 chain。下面先敘述系統(tǒng) chain。?
filter 表的系統(tǒng) chain: INPUT,FORWAD,OUTPUT?
nat 表的系統(tǒng) chain: PREROUTING,POSTROUTING,OUTPUT?
mangle 表的系統(tǒng) chain: PREROUTING,OUTPUT?
每條系統(tǒng) chain 在確定的位置被檢查。比如在包過濾中,所有的目的地址為本地的包,則會進(jìn)入INPUT 規(guī)則鏈,而從本地出去的包會進(jìn)入 OUTPUT 規(guī)則鏈。?
所有的 table 和 chain 開機(jī)時都為空,設(shè)置 iptables 的方法就是在合適的 table 和系統(tǒng) chain 中添相應(yīng)的規(guī)則。?
--------------------------------------------------------------?
IPTABLES 語法:?
表: iptables從其使用的三個表(filter、nat、mangle)而得名, 對包過濾只使用 filter 表, filter還是默認(rèn)表,無需顯示說明.?
操作命令: 即添加、刪除、更新等。?
鏈:對于包過濾可以針對filter表中的INPUT、OUTPUT、FORWARD鏈,也可以操作用戶自定義的鏈。?
規(guī)則匹配器:可以指定各種規(guī)則匹配,如IP地址、端口、包類型等。?
目標(biāo)動作:當(dāng)規(guī)則匹配一個包時,真正要執(zhí)行的任務(wù),常用的有:?
ACCEPT 允許包通過?
DROP 丟棄包?
一些擴(kuò)展的目標(biāo)還有:?
REJECT 拒絕包,丟棄包同時給發(fā)送者發(fā)送沒有接受的通知?
LOG 包有關(guān)信息記錄到日志?
TOS 改寫包的TOS值?
為使FORWARD規(guī)則能夠生效,可使用下面2種方法的某種:?
[root@rhlinux ?root]# vi /proc/sys/net/ipv4/ip_forward?
[root@rhlinux ?root]# echo "1" > /proc/sys/net/ipv4/ip_forward?
[root@rhlinux ?root]# vi /etc/sysconfig/network?
[root@rhlinux ?root]# echo "FORWARD_IPV4=true" > /etc/sysconfig/network?
--------------------------------------------------------?
iptables語法可以簡化為下面的形式:?
iptables [-t table] CMD [chain] [rule-matcher] [-j target]?
--------------------------------------------------------?
常用操作命令:?
-A 或 -append 在所選鏈尾加入一條或多條規(guī)則?
-D 或 -delete 在所選鏈尾部刪除一條或者多條規(guī)則?
-R 或 -replace 在所選鏈中替換一條匹配規(guī)則?
-I 或 -insert 以給出的規(guī)則號在所選鏈中插入一條或者多條規(guī)則. 如果規(guī)則號為1,即在鏈頭部.?
-L 或 -list 列出指定鏈中的所有規(guī)則,如果沒有指定鏈,將列出鏈中的所有規(guī)則.?
-F 或 -flush 清除指定鏈和表中的所由規(guī)則, 假如不指定鏈,那么所有鏈都將被清空.?
-N 或 -new-chain 以指定名創(chuàng)建一條新的用戶自定義鏈,不能與已有鏈名相同.?
-X 或 -delete-chain 刪除指定的用戶定義簾,必需保證鏈中的規(guī)則都不在使用時才能刪除,若沒有指定鏈,則刪除所有用戶鏈.?
-P 或 -policy 為永久簾指定默認(rèn)規(guī)則(內(nèi)置鏈策略),用戶定義簾沒有缺省規(guī)則,缺省規(guī)則也使規(guī)則鏈中的最后一條規(guī)則,用-L顯示時它在第一行顯示.?
-C 或 -check 檢查給定的包是否與指定鏈的規(guī)則相匹配.?
-Z 或 -zero 將指定簾中所由的規(guī)則包字節(jié)(BYTE)計數(shù)器清零.?
-h 顯示幫助信息.?
-------------------------------------------------------------?
常用匹配規(guī)則器:?
-p , [!] protocol 指出要匹配的協(xié)議,可以是tcp, udp, icmp, all, 前綴!為邏輯非,表示除該協(xié)議外的所有協(xié)議.?
-s [!] address[/mask] 指定源地址或者地址范圍.?
-sport [!] port[:port] 指定源端口號或范圍,可以用端口號也可以用/ETC/SERVICES文件中的名子.?
-d [!] address[/mask] 指定目的地址或者地址范圍.?
-dport [!] port[:port] 指定目的端口號或范圍,可以用端口號也可以用/ETC/SERVICES文件中的名子.?
-icmp-type [!] typename 指定匹配規(guī)則的ICMP信息類型(可以使用 iptables -p icmp -h 查看有效的ICMP類型名)?
-i [!] interface name[+] 匹配單獨(dú)或某種類型的接口,此參數(shù)忽略時,默認(rèn)符合所有接口,接口可以使用"!"來匹配捕食指定接口來的包.參數(shù)interface是接口名,如 eth0, eht1, ppp0等,指定一個目前不存在的接口是完全合法的,規(guī)則直到接口工作時才起作用,折中指定對于PPP等類似連接是非常有用的."+"表示匹配所有此類型接口.該選項(xiàng)只針對于INPUT,FORWARD和PREROUTING鏈?zhǔn)呛戏ǖ??
-o [!] interface name[+] 匹配規(guī)則的對外網(wǎng)絡(luò)接口,該選項(xiàng)只針對于OUTPUT,FORWARD,POSTROUTING鏈?zhǔn)呛戏ǖ?
[!] --syn 僅僅匹配設(shè)置了SYN位, 清除了ACK, FIN位的TCP包. 這些包表示請求初始化的TCP連接.阻止從接口來的這樣的包將會阻止外來的TCP連接請求.但輸出的TCP連接請求將不受影響.這個參數(shù)僅僅當(dāng)協(xié)議類型設(shè)置為了TCP才能使用. 此參數(shù)可以使用"!"標(biāo)志匹配已存在的返回包,一般用于限制網(wǎng)絡(luò)流量,即只允許已有的,向外發(fā)送的連接所返回的包.?
----------------------------------------------------------?
如何制定永久規(guī)則集:?
/etc/sysconfig/iptables 文件是 iptables 守護(hù)進(jìn)程調(diào)用的默認(rèn)規(guī)則集文件.?
可以使用以下命令保存執(zhí)行過的IPTABLES命令:?
/sbin/iptables-save > /etc/sysconfig/iptables?
要恢復(fù)原來的規(guī)則庫,可以使用:?
/sbin/iptables-restore < /etc/sysconfig/iptables?
iptables命令和route等命令一樣,重啟之后就會恢復(fù),所以:?
[root@rhlinux ?root]# service iptables save?
將當(dāng)前規(guī)則儲存到 /etc/sysconfig/iptables: [ 確定 ]?
令一種方法是 /etc/rc.d/init.d/iptables 是IPTABLES的啟動腳本,所以:?
[root@rhlinux root]# /etc/rc.d/init.d/iptables save?
將當(dāng)前規(guī)則儲存到 /etc/sysconfig/iptables: [ 確定 ]?
以上幾種方法只使用某種即可.?
若要自定義腳本,可直接使用iptables命令編寫一個規(guī)則腳本,并在啟動時執(zhí)行:?
例如若規(guī)則使用腳本文件名/etc/fw/rule, 則可以在/etc/rc.d/rc.local中加入以下代碼:?
if [-x /etc/fw/rule]; then /etc/fw/sule; fi;?
這樣每次啟動都執(zhí)行該規(guī)則腳本,如果用這種方法,建議NTSYSV中停止IPTABLES.?
----------------------------------------------------------?
實(shí)例:?
鏈基本操作:?
[root@rh34 root]# iptables -L -n?
(列出表/鏈中的所有規(guī)則,包過濾防火墻默認(rèn)使用的是filter表,因此使用此命令將列出filter表中所有內(nèi)容,-n參數(shù)可加快顯示速度,也可不加-n參數(shù)。)?
[root@rh34 root]# iptables -F?
(清除預(yù)設(shè)表filter中所有規(guī)則鏈中的規(guī)則)?
[root@rh34 root]# iptables -X?
(清除預(yù)設(shè)表filter中使用者自定義鏈中的規(guī)則)?
[root@rh34 root]# iptables -Z?
(將指定鏈規(guī)則中的所有包字節(jié)計數(shù)器清零)?
------------------------------------------------------------?
設(shè)置鏈的默認(rèn)策略,默認(rèn)允許所有,或者丟棄所有:?
[root@rh34 root]# iptables -P INPUT ACCEPT?
[root@rh34 root]# iptables -P OUTPUT ACCEPT?
[root@rh34 root]# iptables -P FORWARD ACCEPT?
(以上我們在不同方向設(shè)置默認(rèn)允許策略,若丟棄則應(yīng)是DROP,嚴(yán)格意義上防火墻應(yīng)該是DROP然后再允許特定)
---------------------------------------------------------------?
向鏈中添加規(guī)則,下面的例子是開放指定網(wǎng)絡(luò)接口(信任接口時比較實(shí)用):?
[root@rh34 root]# iptables -A INPUT -i eth1 -j ACCEPT?
[root@rh34 root]# iptables -A OUTPUT -o eth1 -j ACCEPT?
[root@rh34 root]# iptables -A FORWARD -i eth1 -j ACCEPT?
[root@rh34 root]# iptables -A FORWARD -o eth1 -j ACCEPT?
--------------------------------------------------------------?
使用用戶自定義鏈:?
[root@rh34 root]# iptables -N brus?
(創(chuàng)建一個用戶自定義名叫brus的鏈)?
[root@rh34 root]# iptables -A brus -s 0/0 -d 0/0 -p icmp -j DROP?
(在此鏈中設(shè)置了一條規(guī)則)?
[root@rh34 root]# iptables -A INPUT -s 0/0 -d 0/0 -j brus?
(向默認(rèn)的INPUT鏈添加一條規(guī)則,使所有包都由brus自定義鏈處理)?
----------------------------------------------------------------?
基本匹配規(guī)則實(shí)例:?
匹配協(xié)議:?
iptables -A INPUT -p tcp?
(指定匹配協(xié)議為TCP)?
iptables -A INPUT -p ! tcp?
(指定匹配TCP以外的協(xié)議)?
匹配地址:?
iptables -A INPUT -s 192.168.1.1?
(匹配主機(jī))?
iptables -A INPUT -s 192.168.1.0/24?
(匹配網(wǎng)絡(luò))?
iptables -A FORWARD -s ! 192.168.1.1?
(匹配以外的主機(jī))?
iptables -A FORWARD -s ! 192.168.1.0/24?
(匹配以外的網(wǎng)絡(luò))?
匹配接口:?
iptables -A INPUT -i eth0?
iptables -A FORWARD -o eth0?
(匹配某個指定的接口)?
iptables -A FORWARD -o ppp+?
(匹配所有類型為ppp的接口)?
匹配端口:?
iptables -A INPUT -p tcp --sport www?
iptables -A INPUT -p tcp --sport 80?
(匹配單一指定源端口)?
iptables -A INPUT -p ucp --dport 53?
(匹配單一指定目的端口)?
iptables -A INPUT -p ucp --dport ! 53?
(指定端口以外)?
iptables -A INPUT -p tcp --dport 22:80?
(指定端口范圍,這里我們實(shí)現(xiàn)的是22到80端口)?
---------------------------------------------------------------------------------?
指定IP碎片的處理:?
[root@rh34 root]# iptables -A FORWARD -p tcp -s 192.168.1.0/24 -d 192.168.1.234 --dport 80 -j ACCEPT?
[root@rh34 root]# iptables -A FORWARD -f -p tcp -s 192.168.1.0/24 -d 192.168.1.234 --dport 80 -j ACCEPT?
[root@rh34 root]# iptables -L?
Chain INPUT (policy ACCEPT)?
target prot opt source destination?
Chain FORWARD (policy ACCEPT)?
target prot opt source destination?
ACCEPT tcp -- 192.168.1.0/24 192.168.1.234 tcp dpt:http?
ACCEPT tcp -f 192.168.1.0/24 192.168.1.234 tcp dpt:http?
Chain OUTPUT (policy ACCEPT)?
target prot opt source destination?
----------------------------------------------------------------------------------?
設(shè)置擴(kuò)展的規(guī)測匹配:?
(希望獲得匹配的簡要說明,可使用: iptables -m name_of_match --help)?
多端口匹配擴(kuò)展:?
iptables -A INPUT -p tcp -m multiport --source-port 22,53,80?
(匹配多個源端口)?
iptables -A INPUT -p tcp -m multiport --destination-port 22,53,80?
(匹配多個目的端口)?
iptables -A INPUT -p tcp -m multiport --port 22,53,80?
(匹配多個端口,無論是源還是目的端口)?
-----------------------------------------------------------------------------?
TCP匹配擴(kuò)展:?
iptables -A INPUT -p tcp --tcp-flags SYN,FIN,ACK SYN?
(表示SYN、ACK、FIN的標(biāo)志都要被檢查,但是只有設(shè)置了SYN的才匹配)?
iptables -A INPUT -p tcp --tcp-flags ALL SYN,ACK?
(表示ALL:SYN、ACK、FIN、RST、URG、PSH的標(biāo)志都被檢查,但是只有設(shè)置了SYN和ACK的才匹配)?
iptables -p tcp --syn?
(選項(xiàng)--syn是以上的一種特殊情況,相當(dāng)于“--tcp-flags SYN,RST,ACK SYN”的簡寫)?
--------------------------------------------------------------------------------?
limit速率匹配擴(kuò)展:?
[root@redhatlinux9 root]# iptables -A FORWARD -m limit --limit 300/hour?
(表示限制每小時允許通過300個數(shù)據(jù)包)?
[root@redhatlinux9 root]# iptables -A INPUT -m limit --limit-burst 10?
(--limit-burst指定觸發(fā)時間的值(默認(rèn)為5),用來比對瞬間大量數(shù)據(jù)包的數(shù)量。)?
(上面的例子用來比對一次同時涌入的數(shù)據(jù)包是否超過十個,超過此上限的包將直接被丟棄)?
[root@redhatlinux9 root]# iptables -A FORWARD -p icmp -m limit --limit 3/m --limit-burst 3?
(假設(shè)均勻通過,平均每分鐘3個,那么觸發(fā)值burst保持為3。如果每分鐘通過的包的數(shù)目小于3,那么觸發(fā)值busrt將在每個周期(若每分鐘允許通過3個,則周期數(shù)為20秒)后加1,但最大值為3。每分鐘要通過的包數(shù)量如果超過3,那么觸發(fā)值busrt將減掉超出的數(shù)值,例如第二分鐘有4個包,那么觸發(fā)值變?yōu)?,同時4個包都可以通過,第三分鐘有6個包,則只能通過5個,觸發(fā)值busrt變?yōu)?。之后,每分鐘如果包數(shù)量小于等于3個,則觸發(fā)值busrt將加1,如果每分鐘包數(shù)大于3,觸發(fā)值busrt將逐漸減少,最終維持為0)?
(即每分鐘允許的最大包數(shù)量等于限制速率(本例中為3)加上當(dāng)前的觸發(fā)值busrt數(shù)。任何情況下,都可以保證3個包通過,觸發(fā)值busrt相當(dāng)于是允許額外的包數(shù)量)?
---------------------------------------------------------------------------------?
基于狀態(tài)的匹配擴(kuò)展(連接跟蹤):?
每個網(wǎng)絡(luò)連接包括以下信息:源和目的地址、源和目的端口號,稱為套接字對(cocket pairs);協(xié)議類型、連接狀態(tài)(TCP協(xié)議)和超時時間等。防火墻把這些叫做狀態(tài)(stateful)。能夠監(jiān)測每個連接狀態(tài)的防火墻叫做狀態(tài)寶過濾防火墻,除了能完成普通包過濾防火墻的功能外,還在自己的內(nèi)存中維護(hù)一個跟蹤連接狀態(tài)的表,所以擁有更大的安全性。?
其命令格式如下:?
iptables -m state --state [!] state [,state,state,state]?
state表示一個用逗號隔開的的列表,用來指定的連接狀態(tài)可以有以下4種:?
NEW:該包想要開始一個連接(重新連接或?qū)⑦B接重定向)。?
RELATED:該包屬于某個已經(jīng)建立的連接所建立的新連接。例如FTP的數(shù)據(jù)傳輸連接和控制連接之間就是RELATED關(guān)系。?
ESTABLISHED:該包屬于某個已經(jīng)建立的連接。?
INVALID:該包不匹配于任何連接,通常這些包會被DROP。?
例如:?
[root@redhatlinux9 root]# iptables -A INPUT -m state --state RELATED,ESTABLISHED?
(匹配已經(jīng)建立的連接或由已經(jīng)建立的連接所建立的新連接。即匹配所有的TCP回應(yīng)包)?
[root@redhatlinux9 root]# iptables -A INPUT -m state --state NEW -i ! eth0?
(匹配所有從非eth0接口來的連接請求包)?
下面是一個被動(Passive)FTP連接模式的典型連接跟蹤?
[root@redhatlinux9 root]# iptables -A INPUT -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED -j ACCEPT?
[root@redhatlinux9 root]# iptables -A OUTPUT -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED,RELATED -j ACCEPT?
下面是一個主動(Active)FTP連接模式的典型連接跟蹤?
[root@redhatlinux9 root]# iptables -A INPUT -p tcp --sport 20 -m state --state ESTABLISHED,RELATED -j ACCEPT
[root@redhatlinux9 root]# iptables -A INPUT -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT?
--------------------------------------------------------------------------------------?
日志記錄:?
格式為: -j LOG --log-level 7 --log-prefix "......"?
[root@redhatlinux9 root]# iptables -A FORWARD -m tcp -p tcp -j LOG?
[root@redhatlinux9 root]# iptables -A FORWARD -m icmp -p icmp -f -j LOG?
[root@redhatlinux9 root]# iptables -A FORWARD -s 192.168.1.0/24 -d 10.10.10.0/24 -p tcp --sport 80 -j LOG?
[root@redhatlinux9 root]# iptables -A INPUT -m limit --limit 3/minute --limit-burst 3 -j LOG --log-prefix "INPUT packet died:"?
[root@redhatlinux9 root]# iptables -A INPUT -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "New net syn:"
轉(zhuǎn)載于:https://my.oschina.net/zhangxc73912/blog/299627
總結(jié)
以上是生活随笔為你收集整理的关于linux防火墙的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 长沙银行快乐秒贷条件
- 下一篇: 银行怎么挣钱