基于Linux的防火墻設(shè)計_第1頁
基于Linux的防火墻設(shè)計_第2頁
基于Linux的防火墻設(shè)計_第3頁
基于Linux的防火墻設(shè)計_第4頁
基于Linux的防火墻設(shè)計_第5頁
已閱讀5頁,還剩58頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、中文摘要在科技不斷發(fā)展的今天,人們的生活與互聯(lián)網(wǎng)的關(guān)系越來越緊密,但是網(wǎng)絡(luò)安全問題也越來越嚴(yán)重。防火墻在一定程度上可以保護計算機和互聯(lián)網(wǎng)安全,避免可能的損失。本文主要研究了基于Linux內(nèi)核防火墻Netfilter系統(tǒng)的結(jié)構(gòu)框架特點、工作原理及其在內(nèi)核中的實現(xiàn)機制;Linux內(nèi)核模塊的開發(fā)。論文介紹了一個簡單的包過濾防火墻的設(shè)計過程。本系統(tǒng)在Netfilter上進行二次開發(fā),設(shè)計了一個內(nèi)核模塊,通過動態(tài)加載到內(nèi)核中實現(xiàn)對數(shù)據(jù)包的過濾功能,具有很高的效率,數(shù)據(jù)包處理能力較強。Netfilter框架的使用使其具有良好的代碼結(jié)構(gòu),易于維護和擴展。防火墻架設(shè)在Linux系統(tǒng)上,連接內(nèi)部網(wǎng)絡(luò)和外部網(wǎng)絡(luò)。

2、該防火墻主要實現(xiàn)了以下功能:用戶配置;基于IP地址的過濾;針對TCP/UDP協(xié)議端口的過濾;日志記錄。關(guān)鍵詞:網(wǎng)絡(luò)安全;防火墻;Linux內(nèi)核;NetfilterSimple Firewall based on LinuxAuthor: Tutor: Wu YanAbstractNowadays, as technology is developing increasingly, the relationship between peoples ordinary life and Internet has become closer and closer. Meanwhile, interne

3、t security becomes more and more serious. Firewall is able to protect computer and network in general level from attacking via network.This paper mainly studies the framework, theory and implementation mechanisms in kernel of the Linux firewall named Netfilter, Linux kernel module development.The sy

4、stem designs a simple packet filtering firewall. The firewall system is the second development based on Netfilter. The firewall is a kernel module which is dynamic loaded into the kernel to realize the packet filtering, whick has high efficiency and strong ability of dealing with data packages. It h

5、as good code structure, is easy to maintain and extend because of using of Netfilter framework. The firewall is set up on the Linux server, connects the internal network and the external network. The main functions of the firewall includes: user configuration; IP address filtering; TCP/UDP port filt

6、ering; log recording.Keywords: network security;firewall;Linux kernel;Netfilter58目 錄第一章 系統(tǒng)概述11.1 課題研究的背景11.1.1 網(wǎng)絡(luò)的不安全性11.1.2 網(wǎng)絡(luò)安全需要防火墻保護11.2 課題研究的意義11.3 選題的目的2第二章 防火墻的功能需求32.1 功能描述32.2 需求分析42.2.1 防火墻的條件和動作42.2.2 防火墻支持的過濾類型和內(nèi)容52.2.3 防火墻過濾的方式和動作62.2.4 防火墻的配置文件72.2.5 防火墻命令行配置格式72.2.6 防火墻的規(guī)則文件格式82.2.7 防

7、火墻的日志文件數(shù)據(jù)格式92.2.8 防火墻構(gòu)建所采用的技術(shù)方案9第三章 所采用的技術(shù)介紹113.1 使用netlink進行用戶空間和內(nèi)核空間數(shù)據(jù)交互113.1.1 netlink套接字的用戶空間建立和使用113.1.2 netlink的內(nèi)核空間API113.2 使用proc進行內(nèi)存數(shù)據(jù)用戶空間映射133.3 內(nèi)核空間的文件讀寫操作16第四章 模塊劃分與設(shè)計194.1 防火墻的總體架構(gòu)194.1.1 總體架構(gòu)的組成194.1.2 總體結(jié)構(gòu)的實現(xiàn)方法204.2 防火墻的用戶命令解析214.3 用戶空間與內(nèi)核空間交互254.4 防火墻鏈上的規(guī)則264.5 proc虛擬文件系統(tǒng)294.6 防火墻配置文

8、件和日志文件處理294.7 防火墻的過濾模塊設(shè)計30第五章 編碼實現(xiàn)325.1 過濾規(guī)則匹配325.2 網(wǎng)絡(luò)數(shù)據(jù)攔截335.3 proc虛擬文件系統(tǒng)355.3.1 proc文件的讀操作355.3.2 proc文件的寫操作365.4 配置文件解析365.5 防火墻內(nèi)核模塊的初始化385.6 用戶空間處理主函數(shù)395.7 Makefile的編寫40第六章 運行測試436.1 防火墻程序編譯436.1.1 編譯、加載內(nèi)核模塊436.1.2 查看proc虛擬文件系統(tǒng)436.1.3 編譯用戶層程序446.2 防火墻功能測試456.2.1 設(shè)置過濾規(guī)則456.2.2 查看過濾日志456.2.2 關(guān)閉防火墻

9、46結(jié)束語47致 謝48參考文獻49附 錄50第一章 系統(tǒng)概述1.1 課題研究的背景1.1.1 網(wǎng)絡(luò)的不安全性1. Internet是不安全的在建設(shè)Internet的初期,其建設(shè)者認(rèn)為安全不是一個問題。Internet在其早期是一個開放的為研究人員服務(wù)的網(wǎng)際網(wǎng),是完全非盈利性的信息共享載體,所以,幾乎所有的Internet協(xié)議都是沒有考慮安全機制。這一點從Internet上最通用的應(yīng)用FTP,Telnet和電子郵件中用戶口令的明文傳輸以及IP報文在子網(wǎng)段上的廣播傳遞就充分地體現(xiàn)出來。近些年,Internet的性質(zhì)和用戶的情況發(fā)生了巨大的變化,使得Internet的安全問題顯得越來越為突出。隨著

10、Internet的全球普及和商業(yè)化,用戶很多非常私人化,如信用卡號等和其自身利益相關(guān)的私有信息也通過Internet傳輸,而且Internet 越來越多的信息受到了非法的訪問,其安全性也成為人們?nèi)找骊P(guān)注的問題。2. 局域網(wǎng)是不安全的目前的局域網(wǎng)基本上都是采用以廣播為技術(shù)的以太網(wǎng),任何兩個節(jié)點之間的通信數(shù)據(jù)包,不僅為這兩個節(jié)點的網(wǎng)卡所接受,也同時為處于同一個以太網(wǎng)上的任何一個節(jié)點的網(wǎng)卡所截取,因此,黑客只要接入以太網(wǎng)上的任意節(jié)點進行偵聽,就可以捕獲這個以太網(wǎng)上的所有數(shù)據(jù)包,對其進行解包分析,從而竊取關(guān)鍵信息,這就是以太網(wǎng)固有的安全隱患。1.1.2 網(wǎng)絡(luò)安全需要防火墻保護防火墻技術(shù)作為一

11、種建立在現(xiàn)代通信技術(shù)和信息安全技術(shù)基礎(chǔ)上的應(yīng)用性安全技術(shù),可以再一定程度上保護計算機和網(wǎng)絡(luò)的安全,避免系統(tǒng)和網(wǎng)絡(luò)受到來自外部網(wǎng)絡(luò)和內(nèi)部網(wǎng)絡(luò)的攻擊。雖然防火墻并不能保證系統(tǒng)和網(wǎng)絡(luò)100%安全,但卻十分必要。因此防火墻已經(jīng)越來越多地應(yīng)用于網(wǎng)絡(luò)互聯(lián)環(huán)境之中了。1.2 課題研究的意義隨著互聯(lián)網(wǎng)技術(shù)的日新月異,網(wǎng)絡(luò)受到了越來越多的各式各樣的攻擊。網(wǎng)絡(luò)的安全性也就成為了日益關(guān)注的問題,而防火墻是保證網(wǎng)絡(luò)安全最重要的一種措施。Linux是近幾年突出的一種操作系統(tǒng),以其公開的源代碼、強大穩(wěn)定的網(wǎng)絡(luò)功能和大量的免費資源受到業(yè)界的普遍贊揚。Linux環(huán)境下的的防火墻技術(shù)從2.0內(nèi)核版本發(fā)展到目前的2.6版本經(jīng)歷了

12、若干的技術(shù)革新,逐步發(fā)展起來。2.0版本內(nèi)核中的ipfwadm是Alan Cox 完成的,其代碼來自FreeBSD 的內(nèi)核。2.2版本內(nèi)核中的ipchains較之前的版本有了很大的改進,ipchains 維護者之一Paul Russell 針對其缺點,在Linux kernel2.3系列的開發(fā)過程中形成了目前netfilter的主要架構(gòu)。用戶空間的防火墻管理工具,也相應(yīng)地發(fā)展為iptables。Iptables 作為Linux防火墻的新一代繼承人,當(dāng)然也針對黑客不斷推誠出新的探測技術(shù)擬出一些對應(yīng)之道,那就是對封包的聯(lián)機狀態(tài),作出更詳細(xì)的分析,透過這樣的分析能對一些可能被黑客利用的弱點加以阻隔,

13、另外也開發(fā)出真正的封包改寫能力,不需要透過其它程序的協(xié)助來仿真網(wǎng)址轉(zhuǎn)譯,除此之外,Iptables 也獲得系統(tǒng)核心的直接支持, 不需要像Ipchains那樣需要自行重新編譯核心??傊?,目前大部分國內(nèi)軍隊、政府機關(guān)、金融機構(gòu)、企業(yè)都采用Linux系統(tǒng),因此在Linux上配置防火墻有極其重要的意義,同時可以學(xué)習(xí)這一先進的技術(shù)與熟悉一個優(yōu)秀的操作平臺。1.3 選題的目的本課題主要是基于Linux系統(tǒng)設(shè)計并實現(xiàn)了一個網(wǎng)絡(luò)防火墻。這種防火墻的成本低,安全性適度,更重要的是實現(xiàn)簡單、維護方便。Linux內(nèi)核中的netfilter框架是Linux防火墻構(gòu)建的基礎(chǔ),使用這個框架可以構(gòu)建用戶指定的網(wǎng)絡(luò)數(shù)據(jù)報文過

14、濾規(guī)則和處理方法。要完成該課題,需要深入了解Linux 內(nèi)核,Linux下系統(tǒng)程序設(shè)計,防火墻基本概念、運行機制、包過濾過程等技術(shù)。第二章 防火墻的功能需求2.1 功能描述基于Linux的簡單防火墻,利用Linux內(nèi)核的netfilter模塊,對從本主機進出的網(wǎng)絡(luò)數(shù)據(jù)進行過濾,并可以通過用戶界面進行交互,設(shè)置過濾規(guī)則,進行規(guī)則的記錄和讀取,以及過濾日志分析。1. 網(wǎng)絡(luò)數(shù)據(jù)過濾防火墻的主要目的主要是對發(fā)送到本地和從本地發(fā)出的網(wǎng)絡(luò)數(shù)據(jù)進行攔截工作,防火墻的攔截功能定義是指防火墻對什么網(wǎng)絡(luò)數(shù)據(jù)進行過濾, 怎樣進行過濾。過濾規(guī)則如下:可以分為丟棄、通過;可以按照網(wǎng)卡進行過濾,針對某個網(wǎng)卡設(shè)置過濾規(guī)則;

15、可以按照IP地址和端口進行過濾;可以按照協(xié)議進行過濾,支持的協(xié)議有TCP、UDP、ICMP和IGMP2. 防火墻規(guī)則的設(shè)置防火墻能夠與用戶進行交互是防火墻的基本功能,用戶可以使用防火墻的用戶接口對防火墻的過濾規(guī)則進行一些操作。用戶可以通過命令行方式進行防火墻規(guī)則的設(shè)置 、刪除、顯示等操作。具體含義如下:規(guī)則設(shè)置: 用戶按照命令行的格式增加防火墻規(guī)則,用戶設(shè)置的合法規(guī)則需要立即生效。規(guī)則刪除: 用戶可以根據(jù)規(guī)則列表中的序號等方式對防火墻目前的規(guī)則進行刪除。規(guī)則的顯示: 用戶可以列出防火墻目前的規(guī)則。3. 防火墻配置文件及日志記錄防火墻除了核心的功能外,一些附加的功能也是必須得。例如,防火墻啟動時

16、的配置選項、對通過防火墻的網(wǎng)絡(luò)數(shù)據(jù)的過濾情況進行信息記錄等。防火墻可以根據(jù)用戶設(shè)置的配置文件對基本的用戶設(shè)置進行讀取,例如默認(rèn)的防火墻動作、日志文件的記錄路徑。防火墻需要建立基本的系統(tǒng)信息獲取方法,使用PROC虛擬文件系統(tǒng),向用戶反應(yīng)基本的系統(tǒng)設(shè)置情況,并可以通過簡單的設(shè)置對防火墻進行基本的配置。防火墻可以對符合用戶設(shè)置規(guī)則的網(wǎng)絡(luò)數(shù)據(jù)進行記錄,方便用戶查看,即可以進行日志記錄,需要保存到文件中。2.2 需求分析2.2.1 防火墻的條件和動作防火墻的核心構(gòu)成是由條件和動作組成的。當(dāng)網(wǎng)絡(luò)數(shù)據(jù)滿足某些條件的時候則執(zhí)行對應(yīng)的動作。條件即網(wǎng)絡(luò)數(shù)據(jù)所承載的信息,例如來源主機的IP地址和端口地址、目的主機的

17、IP地址和目的地址、網(wǎng)絡(luò)數(shù)據(jù)中所采用的協(xié)議類型,此外還包含網(wǎng)絡(luò)協(xié)議所處的階段,動作即對網(wǎng)絡(luò)數(shù)據(jù)的處理方式。例如通常所采用的接受、丟棄、轉(zhuǎn)發(fā)等。從網(wǎng)絡(luò)上過來的數(shù)據(jù)會按照條件動作的方式通過防火墻。當(dāng)滿足接受條件時,執(zhí)行接受的動作,網(wǎng)絡(luò)數(shù)據(jù)直接通過防火墻,由網(wǎng)絡(luò)協(xié)議棧處理數(shù)據(jù)。而當(dāng)網(wǎng)絡(luò)數(shù)據(jù)滿足丟棄條件的時候,防火墻會將數(shù)據(jù)丟棄,網(wǎng)絡(luò)數(shù)據(jù)不會經(jīng)過防火墻。當(dāng)網(wǎng)絡(luò)數(shù)據(jù)滿足轉(zhuǎn)發(fā)條件的時候,防火墻會將網(wǎng)絡(luò)數(shù)據(jù)進行轉(zhuǎn)發(fā),條件中指定的另一個主機將會接受到網(wǎng)絡(luò)數(shù)據(jù)并進行處理,如圖2.1所示。圖2.1 防火墻條件和動作2.2.2 防火墻支持的過濾類型和內(nèi)容1. 無條件過濾防火墻的默認(rèn)規(guī)則為DROP,即當(dāng)沒有指定任何規(guī)

18、則的時候,將丟棄任何網(wǎng)絡(luò)數(shù)據(jù)。用戶可以在此規(guī)則的基礎(chǔ)上構(gòu)建自己的規(guī)則,當(dāng)用戶定義規(guī)則之后,滿足用戶規(guī)則的網(wǎng)絡(luò)數(shù)據(jù),將執(zhí)行用戶所定義的規(guī)則處理方式,如果不滿足用戶定義的規(guī)則,會執(zhí)行默認(rèn)的過濾規(guī)則,即默認(rèn)的丟棄規(guī)則。其實可以定義一個全部ACCEPT的規(guī)則來覆蓋默認(rèn)規(guī)則,將所有的網(wǎng)絡(luò)數(shù)據(jù)都接受,而不是默認(rèn)地丟棄。2. 按照IP進行過濾防火墻可以按照主機IP地址進行過濾,只有滿足規(guī)則中設(shè)置的IP地址的主機才能進行規(guī)定的工作。IP地址分為源主機IP地址和目的主機IP地址。3. 根據(jù)協(xié)議類型過濾防火墻可以根據(jù)設(shè)置的網(wǎng)絡(luò)協(xié)議類型進行過濾,即只有某個協(xié)議的網(wǎng)絡(luò)數(shù)據(jù)才能執(zhí)行相應(yīng)的工作。本防火墻所能識別的協(xié)議有T

19、CP、UDP、ICMP和IGMP,當(dāng)某個協(xié)議不能識別的時候,會按照無協(xié)議指定的規(guī)則進行過濾條件判斷和處理。4. 根據(jù)協(xié)議的階段進行過濾防火墻可以根據(jù)TCP網(wǎng)絡(luò)協(xié)議的某個階段進行過濾,為了能夠有效攔截一個TCP連接,可以將服務(wù)器上防火墻的過濾條件設(shè)置為TCP協(xié)議的SYN階段,即在客戶端SYN字段的時候就進行過濾,使得服務(wù)器端的網(wǎng)絡(luò)協(xié)議接受不到SYN數(shù)據(jù),這樣就不會對其它數(shù)據(jù)造成影響,例如客戶端的其它TCP連接。5. 協(xié)議的類型和代碼防火墻可以根據(jù)ICMP和IGMP協(xié)議的代碼和類型進行過濾。ICMP協(xié)議和IGMP有很多類型和代碼,并且其功能比較重要,如果不區(qū)分具體的類型和代碼全部進行過濾,將會造成

20、很大的麻煩。例如為了阻止別的主機對本主機進行的ping操作,而將所有的ICMP進行攔截,將會將“主機不可達”等有用的信息屏蔽掉,使得網(wǎng)絡(luò)協(xié)議很不完整。2.2.3 防火墻過濾的方式和動作防火墻的過濾方式是防火墻設(shè)計的重要部分,本防火墻主要包括防火墻的3個鏈、防火墻的規(guī)則增加所引起的規(guī)則優(yōu)先級變化等需求的定義。防火墻分為3個鏈,INPUT、OUTPUT和FORWARD,如圖2.2所示,3個鏈的含義和處理方式如下:圖2.2 防火墻的3個過濾鏈INPUT是防火墻的輸入鏈,即進入主機的網(wǎng)絡(luò)數(shù)據(jù)都會經(jīng)過防火墻的這個鏈,在這個鏈上查找可以匹配的規(guī)則,并按照規(guī)則制定的方式進行處理。OUTPUT是防火墻的輸出鏈

21、,即從主機發(fā)出的網(wǎng)絡(luò)數(shù)據(jù)都會經(jīng)過防火墻的這個鏈,可以將對從主機發(fā)出的網(wǎng)絡(luò)數(shù)據(jù)規(guī)則放到這個鏈上,由這個鏈進行命中規(guī)則查找,當(dāng)命中的時候,在這個鏈上對網(wǎng)絡(luò)數(shù)據(jù)按照定義的動作進行處理。FORWARD為防火墻的轉(zhuǎn)發(fā)鏈,即主機進行轉(zhuǎn)發(fā)的數(shù)據(jù)都會進過轉(zhuǎn)發(fā)鏈,如果需要對轉(zhuǎn)發(fā)的網(wǎng)絡(luò)數(shù)據(jù)進行過濾,將規(guī)則放到FORWARD鏈上。防火墻的3個鏈由各種規(guī)則組成,其中的規(guī)則構(gòu)成為鏈表結(jié)構(gòu),當(dāng)進行過濾規(guī)則命中判定的時候,需要遍歷整個鏈表結(jié)構(gòu)。如果規(guī)則命中則停止對鏈表中規(guī)則的遍歷。因為遍歷鏈表的時候,只要找到一個規(guī)則就停止遍歷,所以前面的規(guī)則優(yōu)先級要高于后面的規(guī)則,本防火墻將用戶新加入的規(guī)則放到鏈的最前面,即用戶新加入的規(guī)

22、則總是擁有最高的優(yōu)先級。2.2.4 防火墻的配置文件防火墻在啟動的時候需要讀取基本配置信息,例如默認(rèn)配置規(guī)則、規(guī)則配置文件的路徑、日志文件的路徑等信息,用于初始化防火墻的配置。防火墻配置文件的路徑為“/etc/sipfw.conf”(注:如果配置文件不存在,將會建立該文件,并將下面所述的默認(rèn)配置信息寫入文件),配置文件的格式如下:# | 關(guān)鍵字 = 值 配置文件的一行為注釋行或者為配置行。當(dāng)一行的第一個字符為#時,表示為注釋,防火墻將忽略本行,不進行解析。配置行的格式為“關(guān)鍵字=值”,其中“關(guān)鍵字”表示配置行的含義;“值”表示具體的配置選項是什么。配置文件的“關(guān)鍵字”有如下幾個:Default

23、Action:默認(rèn)動作,即防火墻沒有設(shè)置規(guī)則時對網(wǎng)絡(luò)數(shù)據(jù)的處理方式,可以是ACCEPT或DROP兩種之一。如果沒有配置此項,默認(rèn)值為DROP,即會將所有的網(wǎng)絡(luò)數(shù)據(jù)丟棄。RulesFile:防火墻規(guī)則配置文件的路徑,防火墻將從此文件中讀取防火墻的配置規(guī)則。如果此項沒有進行配置,將從文件“/etc/sipfw.rules”文件中讀取防火墻配置規(guī)則。LogFile: 防火墻日志文件的路徑,防火墻將把過濾規(guī)則的命中情況放到這個文件中。如果此項沒有進行配置,將向文件“/etc/sipfw.log”中寫入命中情況。2.2.5 防火墻命令行配置格式防火墻的命令行配置是用戶設(shè)置防火墻的基本方法,包括增加規(guī)則、

24、刪除規(guī)則等操作。防火墻命令行配置的格式如下:sipfw chain -action -source -dest -sport -dport -protocol -interface 配置選項的含義為:-chain: 操作的鏈,即操作所要生效的鏈的名稱,將要把此規(guī)則動作添加到指定的鏈上,鏈分為3個,INPUT、OUTPUT和FORWAED。-action:規(guī)則定義的動作,符合規(guī)則定義的網(wǎng)絡(luò)數(shù)據(jù)將按照給定的action動作來操作,有ACCEPT和DROP。-source: 網(wǎng)絡(luò)數(shù)據(jù)來源主機的IP地址。-dest: 網(wǎng)絡(luò)數(shù)據(jù)的目的IP地址。-sport: 網(wǎng)絡(luò)數(shù)據(jù)來源主機的端口號。-dport: 網(wǎng)

25、絡(luò)數(shù)據(jù)的目的主機的端口號。-protocol: 規(guī)則定義所指的協(xié)議類型,可以支持TCP、UDP、ICMP、IGMP協(xié)議。tcp表示TCP協(xié)議,udp表示UDP協(xié)議;icmp表示ICMP協(xié)議,igmp表示IGMP協(xié)議,當(dāng)值為0時表示支持上述4中協(xié)議類型。-interface: 表示規(guī)則定義所綁定的網(wǎng)絡(luò)接口,目前僅支持以太網(wǎng)接口,例如回環(huán)接口lo,以太網(wǎng)接口eth0等。-delete: 此項操作不帶參數(shù),將刪除指定規(guī)則。-flush: 此項操作不帶任何其它參數(shù),將清空防火墻中的所有過濾規(guī)則。-list: 此項操作列出指定鏈上的過濾規(guī)則設(shè)置情況。參數(shù)可以為INPUT、OUTPUT和FORWARD,當(dāng)

26、不帶參數(shù)時,將列出所有鏈上的規(guī)則設(shè)置情況。2.2.6 防火墻的規(guī)則文件格式防火墻規(guī)則配置文件用于保存防火墻過濾規(guī)則的配置情況。防火墻啟動的時候,從配置文件讀取防火墻配置參數(shù),生成防火墻的配置規(guī)則。當(dāng)用戶對防火墻的配置規(guī)則進行了修改之后,防火墻配置文件的記錄將進行實時更新。防火墻配置文件的默認(rèn)路徑為“/etc/sipfw.rules”,若默認(rèn)路徑?jīng)]有規(guī)則配置文件,將自動創(chuàng)建。防火墻配置文件采用嚴(yán)格的解析方式,各個條件中間沒有多余的空格,配置規(guī)則格式如下: # | 目標(biāo)鏈 動作 源IP 源端口 目的IP 目的端口 協(xié)議類型 網(wǎng)絡(luò)接口2.2.7 防火墻的日志文件數(shù)據(jù)格式防火墻日志文件記錄防火墻規(guī)則的

27、命中情況,規(guī)則為用戶定義的規(guī)則,不包含默認(rèn)規(guī)則的命中情況,主要是因為默認(rèn)規(guī)則的命中比較多,會造成日志文件的無限增大。防火墻日志文件的路徑將從防火墻配置文件中讀取,如果配置文件中沒有配置此選項,將從路徑“/etc/sipfw.log”文件匯讀取,并將命中規(guī)則寫入此文件中。日子文件的一行為注釋或命中規(guī)則,防火墻日志文件的格式如下: # | 時間 from 源IP:源端口 to 目的IP:目的端口 協(xié)議類型 動作2.2.8 防火墻構(gòu)建所采用的技術(shù)方案防火墻的設(shè)計除了規(guī)則之外,技術(shù)框架的選取也十分關(guān)鍵。在Linux系統(tǒng)上,有一個成功的網(wǎng)絡(luò)數(shù)據(jù)過濾框架,這就是netfilter。1. 內(nèi)核過濾架構(gòu)的選擇

28、防火墻采用netfilter的5個鉤子實現(xiàn),如圖2.3所示,選取5個鉤子中的3個作為實現(xiàn)防火墻數(shù)據(jù)攔截的基礎(chǔ):NF_IP_LOCAL_IN、NF_IP_LOCAL_OUT、 NF_IP_LOCAL_FORWARD,分別對應(yīng)于防火墻的INPUT、OUTPUT、FORWARD鏈。圖2.3 netfilter的 5個鉤子防火墻采用netlink 框架和 proc 編程的方法實現(xiàn)用戶空間和內(nèi)核空間通信。netlink框架用于實現(xiàn)用戶命令行的交互,將用戶的命令設(shè)置發(fā)送到內(nèi)核,并將內(nèi)核的相應(yīng)數(shù)據(jù)發(fā)送給用戶。proc框架用于獲取用戶對netlink基本情況的簡單信息,例如默認(rèn)動作、防火墻的有效和失效配置、過

29、濾規(guī)則命中的簡單情況等。2. 防火墻文件的內(nèi)核操作防火墻的文件操作設(shè)計配置文件的讀、寫、建立,規(guī)則文件的讀、寫、建立,日志文件建立、寫等操作。防火墻的主要動作都是集中在內(nèi)核空間的,即文件操作也要使用內(nèi)核空間的文件函數(shù)。第三章 所采用的技術(shù)介紹3.1 使用netlink進行用戶空間和內(nèi)核空間數(shù)據(jù)交互netlink用于在用戶空間和內(nèi)核空間傳遞數(shù)據(jù),它提供了內(nèi)核、用戶空間的雙向通行方法。3.1.1 netlink套接字的用戶空間建立和使用netlink包含用戶空間的標(biāo)準(zhǔn)套接字和用于構(gòu)建內(nèi)核模塊的內(nèi)核API。防火墻使用netlink進行用戶空間和內(nèi)核空間的通行。用戶層的netlink程序設(shè)計與通用的套

30、接字編程一致,其順序如下:Socket(): 建立netlink套接字Bind(): 將netlink套接字與netlink地址類型進行綁定。Sendmsg(): 向內(nèi)核或者其他進程發(fā)送消息。Recvmsg(): 從內(nèi)核或者其它進程接受消息。Close(): 關(guān)閉netlink套接字。其中socket()函數(shù)用于建立netlink類型的套接字。Bind()將socket函數(shù)生成的套接字文件描述符與一個netlink類型的地址結(jié)構(gòu)綁定在一起。Sendmsg()函數(shù)由用戶空間向內(nèi)核空間發(fā)送數(shù)據(jù),recvmsg() 函數(shù)用于用戶空間接收來自內(nèi)核空間的數(shù)據(jù)。最后關(guān)閉netlink網(wǎng)絡(luò)套接字。3.1.2

31、 netlink的內(nèi)核空間API內(nèi)核空間的netlink API 與應(yīng)用程序之間的API之間有很多的不同,netlink內(nèi)核API在文件net/core/af_netlink.c中實現(xiàn)。內(nèi)核netlink API可以用于訪問內(nèi)核模塊的netlink套接字,并和用戶空間的應(yīng)用程序進行通信。1. netlink的內(nèi)核套接字建立內(nèi)核空間建立此套接字的函數(shù)為:Struct sock * netlink_kernel_create(int unit, void (*input)(struct sock *sk, int len);參數(shù)unit,是netlink協(xié)議類型,函數(shù)指針input是一個接收到用戶

32、空間的消息后的回調(diào)函數(shù),是netlink內(nèi)核套接字的主要處理函數(shù)。建立套接字成功的時候,返回一個structure sock指針類型的值,之后可以用這個值對netlink套接字進行處理;當(dāng)返回值為NULL時,創(chuàng)建失敗。2. netlink的應(yīng)用層數(shù)據(jù)接收當(dāng)用戶空間向內(nèi)核空間通過之前的netlink套接字發(fā)送消息的時候,net_kernel_create()函數(shù)注冊的回調(diào)函數(shù)input()會被調(diào)用,下面是一個input()函數(shù)的實現(xiàn)代碼: 當(dāng)應(yīng)用層的進程通過sendmsg()函數(shù)發(fā)送數(shù)據(jù)的時候,如果input()函數(shù)的處理速度足夠快,則不會對系統(tǒng)造成影響。當(dāng)input()函數(shù)的處理過程占用很長時

33、間,需要將處理的代碼從input()函數(shù)中移除,放到別的地方進行處理,防止系統(tǒng)調(diào)用在此處阻塞,別的系統(tǒng)不能進行調(diào)用??梢允褂脙?nèi)核線程類處理上述的功能,在此內(nèi)核線程中使用skb=skb_recv_dategrm(nl_sk)函數(shù)來接受客戶端發(fā)送的數(shù)據(jù),接受到的數(shù)據(jù)保存在skb-data中。當(dāng)使用netlink_kernel_create()函數(shù)建立的套接字nl_sk沒有數(shù)據(jù)時,內(nèi)核處理線程進入睡眠狀態(tài),當(dāng)有數(shù)據(jù)到來的時候需要將內(nèi)核處理線程喚醒,進行接收和處理線程的工作。所以在input()函數(shù)中,需要將內(nèi)核線程喚醒。可以使用如下的代碼實現(xiàn):Void input(struct sock *sk,

34、int len) Wake_up_interruptible(sk-sleep);3. netlink的內(nèi)核數(shù)據(jù)發(fā)送netlink在內(nèi)核中發(fā)送數(shù)據(jù)與應(yīng)用程序發(fā)送數(shù)據(jù)一樣,需要設(shè)置netlink的源地址和目的netlink地址。例如,需要發(fā)送的netlink消息數(shù)據(jù)在結(jié)構(gòu) struct sk_buff *skb中,則本地的地址可以使用如下設(shè)置:NETLINK_CB(skb).groups = local_groups;NETLINK_CB(skb).pid = 0; /*from kernel */Netlink的目的地址的設(shè)置為如下的代碼:NETLINK_CB(skb).dst_gr

35、oups = dst_groups;NETLINK_CB(skb).dst_pid = dst_pid;上述消息沒有存在skb->data中,而是存放在netlink協(xié)議的套接字緩沖區(qū)控制塊sbk中。發(fā)送一個單播消息, 使用netlink_unicast()函數(shù),其原型如下:int netlink_unicast(struct sock *ssk, struct sk_buff *skb, u32 pid, int nonlock);其中的參數(shù)ssk由netlink_kernel_create()函數(shù)返回,skb->data指向需要發(fā)送的netlink消息,pid是應(yīng)用層接受數(shù)據(jù)的

36、pid, nonblock用于設(shè)置當(dāng)接收緩沖區(qū)不可用的時候是阻塞等待直到還是直接返回失敗。4. netlink套接字關(guān)閉關(guān)閉netlink套接字,使用sock_release)()函數(shù)來進行。主要進行內(nèi)存等資源的釋放,將一些指針進行重置的操作。函數(shù)的原型如下:void sock_release(struct socket *sock);3.2 使用proc進行內(nèi)存數(shù)據(jù)用戶空間映射Linux中的proc文件系統(tǒng)是一種虛擬的文件系統(tǒng),通過這個文件系統(tǒng)可以實現(xiàn)內(nèi)核空間和用戶空間的通信。在porc虛擬文件系統(tǒng)中,通過對文件的讀寫來實現(xiàn)用戶空間和內(nèi)核空間之間的通信。在proc虛擬文件系統(tǒng)總,通過對文件的

37、讀寫來實現(xiàn)用戶空間和內(nèi)核空間的通信,與普通的文件不同,/proc目錄下的虛擬文件的內(nèi)容是動態(tài)創(chuàng)建的。1. proc虛擬文件系統(tǒng)的結(jié)構(gòu)對proc虛擬文件系統(tǒng)進行操作首先要要了解它的核心結(jié)構(gòu),proc文件系統(tǒng)的核心數(shù)據(jù)結(jié)構(gòu)是structure proc_dir_entry, 它用來表示一個虛擬文件系統(tǒng)的文件。原型定義如下:Struct proc_dir_entryConst char *name; /*虛擬文件的名稱*/Mode_t mode; /*文件的模式權(quán)限*/Uid_t uid; /*文件的用戶ID*/Gid_t gid; /*文件的組ID*/Struct inode_operations

38、 *proc_iops /*inode節(jié)點操作函數(shù)*/Struct file_operations *proc_fops; /*文件操作函數(shù)*/Struct proc_dir_entry *parent; /*父目錄*/.Read_proc_t *read_proc /*proc的讀函數(shù)*/ Write_proc_t *write_proc /*proc的寫函數(shù)*/Void *data /* 私有數(shù)據(jù)指針*/Atomic_t count; /*使用技術(shù)*/名稱name應(yīng)該選取一個有意義的名字,并且不能包含任何特殊再付和空格符,因為proc文件系統(tǒng)通常通過命令行的shell進入,那樣會造成從控制

39、臺進入困難。權(quán)限mode的設(shè)置需要仔細(xì)考慮,如果不恰當(dāng)?shù)脑O(shè)置和寫權(quán)限,可能造成系統(tǒng)的奔潰。參數(shù) proc_fops并不是一個全功能的文件系統(tǒng)函數(shù),它僅僅限定于讀操作和寫操作。參數(shù)read_proc和write_proc是proc文件系統(tǒng)的讀寫界面,有用戶實現(xiàn)。參數(shù) data是用戶的私有數(shù)據(jù)指針,可以將不方便傳遞的參數(shù)通過data指針進行讀寫。2. 創(chuàng)建proc虛擬文件創(chuàng)建proc虛擬文件的函數(shù)由創(chuàng)建目錄的函數(shù)proc_mkdir()和創(chuàng)建文件的函數(shù)create_proc_entry().創(chuàng)建目錄的proc_mkdir()函數(shù)原型如下:Extern struct proc_dir_en

40、try *proc_mkdir(const char *dir_name, Struct proc_dir_entry *parent);Proc_mkdir()函數(shù)在parent下創(chuàng)建一個名稱為dir_name指向字符串的目錄。當(dāng)創(chuàng)建成功的時候,返回值為指向結(jié)構(gòu)struct proc_dir_entry指針。extern struct proc_dir_entyr *create_proc_entry( const char *name; /*創(chuàng)建文件的名稱*/ mode_t mode; /*文件的屬主*/ struct proc_dir_entry *parent /*文件的父目錄*/函數(shù)

41、create_proc_entry()在/proc文件系統(tǒng)中創(chuàng)建一個虛擬文件,文件名為name指定的字符串;文件的權(quán)限由參數(shù)mode設(shè)置,與通用文件的權(quán)限一致;而parent參數(shù)說明此文件的位置,當(dāng)為&proc_root的時候其目錄為/proc的根目錄下。3. 刪除proc虛擬文件虛擬文件proc的釋放函數(shù)為remove_proc_entry(),函數(shù)的原型如下。其中的參數(shù)name為要刪除文件的名稱,parent為proc文件的父目錄。Extern void *remove_proc_entry*( Const char *name, /*要刪除文件的名稱*/ Struct proc_

42、dir_entry *parent); /*文件的父目錄*/4. proc文件的寫函數(shù)proc文件系統(tǒng)的鍍錫通過用戶實現(xiàn)的讀寫回調(diào)函數(shù)來實現(xiàn),其中的寫函數(shù)表示用戶空間向內(nèi)核空間寫入數(shù)據(jù),此時如何處理用戶空間的數(shù)據(jù)由實現(xiàn)的函數(shù)決定。原型如下: Typedef int (write_proc_t)(struct file *file, const char_user *buffer, unsigned long count,void *data);參數(shù)file是一個已經(jīng)打開的文件結(jié)構(gòu),通常忽略這個變量。參數(shù)buffer是用戶傳遞過來的數(shù)據(jù)結(jié)構(gòu),這實際上是一個用戶指針,在內(nèi)核空間只能直接使用這個參數(shù)

43、,需要使用例如copy_from_user()函數(shù)將用戶空間的數(shù)據(jù)復(fù)制到內(nèi)核空間來。參數(shù)count是緩沖區(qū)中數(shù)據(jù)的數(shù)量參數(shù)data是一個指向私有數(shù)據(jù)的指針。5. proc文件讀函數(shù)當(dāng)用戶空間的程序讀取創(chuàng)建的proc文件時,內(nèi)核會分配給proc讀取程序一頁大小的內(nèi)存空間,即PAGE_SIZE大小,proc驅(qū)動程序會自動將這塊空間的數(shù)據(jù)復(fù)制到用戶空間。Proc驅(qū)動程序分配的這塊空間會通過政策的proc_read回調(diào)函數(shù)傳入。函數(shù)原型如下: Int pro_read(char *page, char *start, off_t offset, int count, int *eof, void *d

44、ata);參數(shù)page為proc驅(qū)動程序傳入的分配的內(nèi)核空間,將需要傳遞給用戶的數(shù)據(jù)復(fù)制到這個緩沖區(qū)的地址。這個緩沖區(qū)是內(nèi)核空間的緩沖區(qū),系統(tǒng)會自動將page中數(shù)據(jù)復(fù)制給用戶。參數(shù)start是在此緩沖區(qū)中需要復(fù)制給用戶的數(shù)據(jù)的起始地址。參數(shù)offset表示用戶打算讀取文件時的偏移地址。參數(shù)count是用戶請求讀取的字節(jié)數(shù)。參數(shù)eof是一個整型指針,當(dāng)驅(qū)動程序的數(shù)據(jù)發(fā)送完畢時,將這個值設(shè)置為結(jié)束發(fā)送給用戶,判斷數(shù)據(jù)是否結(jié)束。參數(shù)data是私有數(shù)據(jù)指針。3.3 內(nèi)核空間的文件讀寫操作防火墻中要對文件在內(nèi)核空間進行讀寫,在內(nèi)核空間中操作文件的函數(shù)與用戶空間不同,需要使用內(nèi)核空間專用的一套函數(shù),主要有

45、:file_open()、file_close()、vfs_write()、set_fs()、 get_fs()等,函數(shù)在頭文件Linux/fs.h和asm/uaccess.h中聲明。1. 內(nèi)核空間的文件結(jié)構(gòu)內(nèi)核中對文件進行操作的文件結(jié)構(gòu)struct file,是進行文件操作時經(jīng)常使用的結(jié)構(gòu),結(jié)構(gòu)的原型如下,其中f_op是對文件進行操作的結(jié)構(gòu), f_ops為文件當(dāng)前的指針位置:Struct file Const struct file_operations *f_op; /*文件操作結(jié)構(gòu)*/.Loff_t f_ops; /*文件的當(dāng)前指針*/Struct file_operations結(jié)構(gòu)中定

46、義的為一些內(nèi)核文件操作的函數(shù),結(jié)構(gòu)的原型定義如下:Struct file_operations Ssize_t (*read) (struct file *, char_user *, size_t, loff_t *); /*從文件中讀取數(shù)據(jù)*/Ssize_t(*write) (struct file *, const char_user *, size_t,loff_t *); /* 向文件中寫入數(shù)據(jù)*/ 2. 內(nèi)核空間的文件建立操作內(nèi)核中的打開文件函數(shù)為file_open(),其原型如下:Sturct file *file_open(const char *filename, int f

47、lags, int mode);File_open()函數(shù)用于打開路徑filename下的文件,返回一個指向指針結(jié)構(gòu)struct file的指針,后面的函數(shù)使用這個指針對文件進行操作,返回值需要使用宏IS_ERR()來檢驗其有效性。參數(shù)說明:Filename: 要打開或者創(chuàng)建的文件名稱,包含路徑部分。Open_mode: 設(shè)置文件的打開方式。這個值與用戶空間 open的對應(yīng)參數(shù)類似,可以取O_CREAT、O_RDWR、 O_RDONLY. Mode: 這個參數(shù)只有在創(chuàng)建時使用,設(shè)置穿件文件的讀寫權(quán)限。3. 內(nèi)核空間的讀寫操作Linux內(nèi)核中對文件進行讀寫操作的函數(shù)為vfs_read(

48、)函數(shù),vfs_write()函數(shù),這兩個函數(shù)原型如下:Ssize_t vfs_read(struct file* filp, char_user* buffer, size_t len, loft_t* pos);Ssize_t vfs_write(struct file* filp, char_user* buffer, size_t len, loft_t* pos);參數(shù)含義如下:Filp: 文件指針由filp_open()函數(shù)返回。Buffer: 緩沖區(qū),從文件中讀出的數(shù)據(jù)放到這個緩沖區(qū), 向文件中寫入的數(shù)據(jù)也在這個緩沖區(qū)。Len: 從文件中讀出或?qū)懭胛募臄?shù)據(jù)長度。Pos: 為文件

49、指針的位置,即從什么地方開始對文件進行數(shù)據(jù)操作。4. 內(nèi)核空間的文件關(guān)閉操作內(nèi)核中的文件如果不再使用,需要將文件進行關(guān)閉,釋放其中的資源。Linux內(nèi)核中關(guān)閉文件的函數(shù)為file_close(),其原型如下:Int filp_close(struct file *file, fl_owner_t id);第一個參數(shù)為filp_open()返回的指針,第二參數(shù)時POSIX線程ID。第四章 模塊劃分與設(shè)計4.1 防火墻的總體架構(gòu)4.1.1 總體架構(gòu)的組成內(nèi)核模塊主要處理網(wǎng)絡(luò)數(shù)據(jù)的過濾、防火墻過濾規(guī)則的增刪、日志記錄、防火墻的總體控制參數(shù)等。用戶空間部分主要處理用戶輸入的命令格式解析、用戶空間與內(nèi)核

50、空間的通信,此外還可以查看防火墻的日志文件、查看proc虛擬文件獲取防火墻的一些狀態(tài)值,通過修改配置文件可以配置防火墻的啟動參數(shù)。圖4.1 總體架構(gòu)4.1.2 總體結(jié)構(gòu)的實現(xiàn)方法內(nèi)核模塊中的鉤子函數(shù)是防火墻網(wǎng)絡(luò)數(shù)據(jù)的主要處理部分,按照用戶定義的過濾規(guī)則,通過netfilter架構(gòu)上的INPUT、OUPTPUT、FORWARD這3個監(jiān)視點的網(wǎng)絡(luò)數(shù)據(jù)進行過濾,目前實現(xiàn)ACCEPT和DROP兩種處理方式。網(wǎng)絡(luò)數(shù)據(jù)進入網(wǎng)絡(luò)協(xié)議棧后,netfilter架構(gòu)有5個鉤子,用戶調(diào)用插入的回調(diào)函數(shù),當(dāng)用戶設(shè)置了回調(diào)函數(shù)后,就會進入用戶的處理過程。防火墻選擇了上述3個,對進入本地、從本機發(fā)出、從本機轉(zhuǎn)發(fā)的數(shù)據(jù)進行

51、處理。內(nèi)核中與用戶的通信采用了netlink的框架進行處理。內(nèi)核建立一個私有的netlink通信類型,與用戶的通信通過此類型的套接字進行處理。此模塊中用于處理用戶對過濾規(guī)則的增加、刪除、列表、清除等操作。當(dāng)模塊接到用戶空間發(fā)送來數(shù)據(jù)后,根據(jù)其操作方式,對過濾規(guī)則鏈表中的規(guī)則進行增加、插入、刪除等操作,并將結(jié)果發(fā)送給用戶,如果用戶的操作是獲得規(guī)則列表,則將當(dāng)前規(guī)則鏈表中的規(guī)則發(fā)送給用戶。內(nèi)核中的 proc文件系統(tǒng)用于將防火墻中的信息展示給用戶空間,主要包括防火墻的配置信息、過濾規(guī)則命中情況,并可以調(diào)整防火墻的默認(rèn)動作、設(shè)置防火墻的有效性、中止日志記錄文件等。用戶空間主要用于與防火墻進行

52、交互,通過netlink網(wǎng)絡(luò)協(xié)議與防火墻進行規(guī)則的設(shè)置、刪除、查看規(guī)則列表信息等。用戶空間主要分為命令行解析和內(nèi)核通信,命令行解析用系統(tǒng)函數(shù)進行處理,通信部分則將用戶的合法輸入發(fā)給內(nèi)核,并將內(nèi)核反饋結(jié)果顯示出來。用戶空間可以查看proc文件系統(tǒng)獲取當(dāng)前防火墻的設(shè)置情況,還可以查看日志文件獲得防火墻對規(guī)則的命中信息的提示。內(nèi)核模塊和用戶模塊之間的關(guān)系如圖所示,內(nèi)核模塊在啟動的時候讀取配置文件,獲取配置信息,構(gòu)建netlink用戶空間通信模塊、初始化proc虛擬文件系統(tǒng)、初始化netfilter鉤子處理函數(shù)。這3個部分初始化成功后,內(nèi)核程序監(jiān)聽用戶交互和網(wǎng)絡(luò)數(shù)據(jù)的到來。用戶的netlink部分與內(nèi)

53、核的netlink進行交互,對防火墻的過濾規(guī)則進行處理。proc虛擬文件系統(tǒng)對系統(tǒng)的基本參數(shù)進行控制。鉤子函數(shù)則會對網(wǎng)絡(luò)數(shù)據(jù)進行處理。圖4.2 用戶空間和內(nèi)核空間模塊之間的關(guān)系4.2 防火墻的用戶命令解析防火墻與用戶的交互采用命令行進行,通過對用戶命令的解析,向內(nèi)核發(fā)送規(guī)則化的用戶輸入。1. 用戶輸入命令的格式sipfw -chain 鏈名稱 -action 動作 -source源IP dest 目的IP sport 源端口 dport目的端口 protocol協(xié)議 interface網(wǎng)絡(luò)接口對用戶命令行的解析使用getopt_long()函數(shù)來進行,用戶輸入的參數(shù)命令及含義如表4-1所示。用

54、戶的一個必須的命令包含項是用戶的命令類型,就是進行過濾規(guī)則的插入、刪除、列表、清空中的某項操作。其他的參數(shù)可以選擇的參數(shù)。表4-1中映射字符為getopt_long()函數(shù)對用戶輸入進行判定的依據(jù),根據(jù)不同的映射字符,對其后的參數(shù)進行判定和轉(zhuǎn)換。表4-1 用戶輸入的命令行參數(shù)和含義選 項參 數(shù)長 變 量短 變 量映射字符鏈鏈的名稱chaincc動作動作名稱actionjj源主機源主機IPsourcess目的主機目的主機IPdestdd源端口源端口地址sportm目的端口目的端口地址dportn協(xié)議類型協(xié)議類型名稱protocolpp網(wǎng)絡(luò)接口網(wǎng)絡(luò)接口名稱interfaceii刪除規(guī)則規(guī)則定義de

55、leteee列出規(guī)則鏈的名稱listll清空規(guī)則鏈的名稱flushff位置數(shù)值numberu2. 防火墻所支持的鏈防火墻支持進入、發(fā)出、轉(zhuǎn)發(fā)3個鏈,其定義參見表4-2。表4-2 防火墻規(guī)則鏈鏈名稱含義值INPUT發(fā)送到本機的網(wǎng)絡(luò)數(shù)據(jù)SIPFW_CHAIN_INPUTOUTPUT從本機發(fā)出的網(wǎng)絡(luò)數(shù)據(jù)SIPFW_CHAIN_OUTPUTFORWARD由本機轉(zhuǎn)發(fā)的網(wǎng)絡(luò)數(shù)據(jù)SIPFW_CHAIN_FORWARD3. 防火墻支持的命令防火墻支持INSERT插入、DELETE刪除、APPEND尾部增加、LIST規(guī)則列表、FLUSH清空規(guī)則5個命令,其含義和命令選項參見表4-3。表4-3 防火墻動作命令名稱值命令長選項命令短選項INSERTSIPFW_CMD_IN

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論