国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
用自由軟件構(gòu)建防火墻

用自由軟件構(gòu)建防火墻

作者:夏武,徐繼哲

一、自由軟件介紹

什么是自由軟件?自由軟件強(qiáng)調(diào)的是用戶的自由,而不是價(jià)格。簡(jiǎn)單來說,如果一個(gè)軟件賦予了用戶如下4個(gè)自由度,那么這個(gè)軟件就是自由軟件:

  1. 出于任何目的,運(yùn)行軟件的自由。
  2. 學(xué)習(xí)軟件如何工作,以及為了滿足自己的需要修改軟件的自由。(顯然,這個(gè)自由度的前提是能夠訪問軟件的源代碼)
  3. 為了幫助你的鄰居和朋友,將你的軟件拷貝給他的自由。
  4. 為了能夠讓整個(gè)社團(tuán)受益,公開發(fā)行改進(jìn)之后的軟件的自由。(顯然,這個(gè)自由度的前提是能夠訪問軟件的源代碼)

自由軟件的歷史要追溯到Richard Stallman在1983年發(fā)起了自由軟件運(yùn)動(dòng)。該運(yùn)動(dòng)以GNU(GNU's NotUnix)工程為核心,開發(fā)了大量?jī)?yōu)秀的自由軟件,比如GNU Emacs, GNU GCC, GNUGDB等,最終的目標(biāo)是要開發(fā)一個(gè)完整的、自由的操作系統(tǒng)。隨著這些自由軟件日漸流行,為了保證已經(jīng)發(fā)行的自由軟件能夠繼續(xù)自由下去, RichardStallman創(chuàng)造性地發(fā)明了對(duì)稱版權(quán)(copyleft)思想,并在1985年實(shí)現(xiàn)了第一個(gè)對(duì)稱版權(quán)(copyleft)許可證,作為GNUEmacs的許可證。在1991年,GNU實(shí)現(xiàn)了GNU GPL version 2。 在GNU GPL version2的守護(hù)之下,大量的優(yōu)秀自由軟件不斷涌現(xiàn),其中名氣最大當(dāng)數(shù)Linux kernel。 下面我們將介紹如何通過自由軟件來構(gòu)建防火墻。

二、國(guó)內(nèi)防火墻廠商的技術(shù)現(xiàn)狀

談到防火墻,不得不談的是國(guó)內(nèi)防火墻廠商的技術(shù)現(xiàn)狀。總結(jié)起來,有下面的一些特點(diǎn):

1、在與國(guó)外產(chǎn)品技術(shù)上有差距,在競(jìng)爭(zhēng)中處于下風(fēng)

雖然近年來隨著網(wǎng)絡(luò)安全的日益重要,國(guó)內(nèi)防火墻廠商很活躍,推出了不少的新產(chǎn)品。不過,同國(guó)外的同類產(chǎn)品相比,在穩(wěn)定性和性能上還是有差距。在低端的市場(chǎng)上,國(guó)內(nèi)廠商有一定的份額,但是在中高端市場(chǎng),特別是在金融、電信、電子商務(wù)等領(lǐng)域,國(guó)外的產(chǎn)品仍是主流。

2、大量應(yīng)用和參考自由軟件技術(shù)

為了縮小和國(guó)外場(chǎng)上的技術(shù)差距,國(guó)內(nèi)防火墻場(chǎng)上大量的應(yīng)用和參考自由軟件技術(shù)。從國(guó)內(nèi)各防火墻廠商的招聘研發(fā)工程師的要求可見一斑,幾乎所有的招聘要求里面都提到要對(duì)Linux下的包過濾框架netfilter需要熟悉。通過充分的發(fā)掘象Linux這樣的自由軟件的潛力,很多廠商迅速構(gòu)建自己的平臺(tái),加快了開發(fā)速度,提高了競(jìng)爭(zhēng)力。

3、不遵守自由軟件協(xié)議

從近年來國(guó)內(nèi)安全行業(yè)的發(fā)展來看,可以說沒有自由軟件,國(guó)內(nèi)防火墻廠商將發(fā)展比較慢。但是,很多廠商在從學(xué)習(xí)或者利用自由軟件的過程中獲益后,沒有捐贈(zèng)或者回饋?zhàn)杂绍浖鐓^(qū),有時(shí)還常常違反GNU GPL協(xié)議。這都是不明智之舉。從長(zhǎng)遠(yuǎn)的眼光看來,百害而無一益。

三、定制防火墻

在流行定制的現(xiàn)在,普通用戶自己定制個(gè)人計(jì)算機(jī)可能大家已經(jīng)司空見慣了,不過定制防火墻倒是有些新鮮。當(dāng)需要用到防火墻的時(shí)候,你可能會(huì)馬上想到去市場(chǎng)上買一個(gè)某某廠家生產(chǎn)的防火墻,因?yàn)槎ㄖ品阑饓赡懿幌蠖ㄖ苽€(gè)人計(jì)算機(jī)那么簡(jiǎn)單。

不過,在自由軟件的幫助下,你也可以輕松的定制自己的防火墻,在省下一大筆開銷和享受定制樂趣的同時(shí),更好的保護(hù)自己或者組織的網(wǎng)絡(luò)安全。

下面我們將介紹一下利用現(xiàn)有的自由軟件定制防火墻的步驟:

3.1、硬件準(zhǔn)備

對(duì)于定制防火墻需要的硬件,很多你淘汰的計(jì)算機(jī)都可以派上用場(chǎng)。當(dāng)然,現(xiàn)在計(jì)算機(jī)硬件價(jià)格變得越來越便宜,在硬件上的選擇會(huì)更多。下面我們將以X86架構(gòu)的硬件為例。

具體的要求可以考慮下面幾個(gè)方面:

  • 對(duì)于存儲(chǔ)設(shè)備,可以考慮使用IDE硬盤或者CF Card。存儲(chǔ)設(shè)備上的分區(qū)格式可以采用EXT3或者EXT2格式,并在使用之前分好區(qū)。
  • 最好有三個(gè)網(wǎng)絡(luò)接口,也就是三塊網(wǎng)絡(luò)接口卡,包括進(jìn)口,出口,DMZ

當(dāng)然要定制防火墻,需要一個(gè)用來構(gòu)建的計(jì)算機(jī)(這臺(tái)機(jī)器最好速度能快些,因?yàn)榫幾g的過程比較耗時(shí)間)。我們可以在這臺(tái)機(jī)器上裝上一個(gè)GNU Linux系統(tǒng)或者使用LiveCD。

對(duì)硬盤分區(qū)的命令如下(假定我們要安裝防火墻的硬盤為IDE,在GNU Linux下對(duì)應(yīng)的設(shè)備文件是/dev/hdb):

#fdisk /dev/hdb

分完區(qū)之后,我們可以格式化分區(qū):

#mkfs.ext3 /dev/hdb1

接著將格式化的分區(qū)掛載到/mnt/firewall

#mount -t ext3 /dev/hdb1 /mnt/firewall

3.2、軟件準(zhǔn)備

定制防火墻需要的自由軟件包括:

  • netfilter/iptables
  • SSH daemon
  • DHCP和DNS服務(wù)器
  • grub
  • uClibc和交叉編譯工具鏈
  • Linux內(nèi)核
  • busybox
  • 構(gòu)建防火墻規(guī)則集的工具,例如Firewall builder

3.2.1 netfilter/iptables firewall

netfilter/iptablesIP信息包過濾系統(tǒng)是一種功能強(qiáng)大的工具,可用于添加、編輯和除去規(guī)則,這些規(guī)則是在做信息包過濾決定時(shí),防火墻所遵循和組成的規(guī)則。這些規(guī)則存儲(chǔ)在專用的信息包過濾表中,而這些表集成在 Linux 內(nèi)核中。在信息包過濾表中,規(guī)則被分組放在我們所謂的鏈(chain)中。

雖然 netfilter/iptables IP 信息包過濾系統(tǒng)被稱為單個(gè)實(shí)體,但它實(shí)際上由兩個(gè)組件 netfilter和 iptables 組成。

netfilter組件也稱為 內(nèi)核空間(kernelspace),是內(nèi)核的一部分,由一些信息包過濾表組成,這些表包含內(nèi)核用來控制信息包過濾處理的規(guī)則集。

iptables 組件是一種工具,也稱為 用戶空間(userspace),它使插入、修改和除去信息包過濾表中的規(guī)則變得容易??梢詮膆ttp://www.netfilter.org下載該工具并安裝使用它。

通過使用用戶空間,可以構(gòu)建自己的定制規(guī)則,這些規(guī)則存儲(chǔ)在內(nèi)核空間的信息包過濾表中。這些規(guī)則具有目標(biāo),它們告訴內(nèi)核對(duì)來自某些源、前往某些目的地或具有某些協(xié)議類型的信息包做些什么。如果某個(gè)信息包與規(guī)則匹配,那么使用目標(biāo)ACCEPT允許該信息包通過。還可以使用目標(biāo)DROP或REJECT來阻塞并殺死信息包。對(duì)于可對(duì)信息包執(zhí)行的其它操作,還有許多其它目標(biāo)。

根據(jù)規(guī)則所處理的信息包的類型,可以將規(guī)則分組在鏈中。處理入站信息包的規(guī)則被添加到INPUT鏈中。處理出站信息包的規(guī)則被添加到OUTPUT鏈中。處理正在轉(zhuǎn)發(fā)的信息包的規(guī)則被添加到FORWARD鏈中。這三個(gè)鏈?zhǔn)腔拘畔^濾表中內(nèi)置的缺省主鏈。另外,還有其它許多可用的鏈的類型(如PREROUTING和POSTROUTING),以及提供用戶定義的鏈。每個(gè)鏈都可以有一個(gè)策略,它定義“缺省目標(biāo)”,也就是要執(zhí)行的缺省操作,當(dāng)信息包與鏈中的任何規(guī)則都不匹配時(shí),執(zhí)行此操作。

建立規(guī)則并將鏈放在適當(dāng)?shù)奈恢弥?,就可以開始進(jìn)行真正的信息包過濾工作了。這時(shí)內(nèi)核空間從用戶空間接管工作。當(dāng)信息包到達(dá)防火墻時(shí),內(nèi)核先檢查信息包的頭信息,尤其是信息包的目的地。我們將這個(gè)過程稱為路由。

如果信息包源自外界并前往系統(tǒng),而且防火墻是打開的,那么內(nèi)核將它傳遞到內(nèi)核空間信息包過濾表的INPUT鏈。如果信息包源自系統(tǒng)內(nèi)部或系統(tǒng)所連接的內(nèi)部網(wǎng)上的其它源,并且此信息包要前往另一個(gè)外部系統(tǒng),那么信息包被傳遞到OUTPUT鏈。類似的,源自外部系統(tǒng)并前往外部系統(tǒng)的信息包被傳遞到FORWARD鏈。

接下來,將信息包的頭信息與它所傳遞到的鏈中的每條規(guī)則進(jìn)行比較,看它是否與某條規(guī)則完全匹配。如果信息包與某條規(guī)則匹配,那么內(nèi)核就對(duì)該信息包執(zhí)行由該規(guī)則的目標(biāo)指定的操作。但是,如果信息包與這條規(guī)則不匹配,那么它將與鏈中的下一條規(guī)則進(jìn)行比較。最后,如果信息包與鏈中的任何規(guī)則都不匹配,那么內(nèi)核將參考該鏈的策略來決定如何處理該信息包。理想的策略應(yīng)該告訴內(nèi)核DROP該信息包。 下圖說明了這個(gè)信息包過濾過程。(下面插入一張報(bào)過濾圖)

3.2.2 SSH daemon

SSH(secureshell)是一種通用,功能強(qiáng)大的基于軟件的網(wǎng)絡(luò)安全解決方案,計(jì)算機(jī)每次向網(wǎng)絡(luò)發(fā)送數(shù)據(jù)時(shí),SSH都會(huì)自動(dòng)對(duì)其進(jìn)行加密。數(shù)據(jù)到達(dá)目的地時(shí),SSH自動(dòng)對(duì)加密數(shù)據(jù)進(jìn)行解密。整個(gè)過程都是透明的。它使用了現(xiàn)代的安全加密算法,足以勝任大型公司的任務(wù)繁重的應(yīng)用程序的要求。

為了能遠(yuǎn)程管理你的防火墻,你需要安裝SSH daemon程序。在自由軟件里面有很多選擇,這里我們選擇OpenSSH,可以從這里下載。

3.2.3 DHCP and DNS server

為了配置你的防火墻網(wǎng)絡(luò),需要安裝DHCP和DNS服務(wù)器。這里我們可以選擇dnsmasq這個(gè)自由軟件, 它同時(shí)具有DHCP和DNS的功能,并且被廣泛應(yīng)用。

3.2.4 bootloader

我們定制防火墻需要引導(dǎo)加載程序,功能是將操作系統(tǒng)和防火墻程序啟動(dòng)起來。通常情況下,引導(dǎo)加載程序包括固化在固件(firmware)中的boot代碼(可選)和Boot Loader兩大部分。

對(duì)于PC機(jī),引導(dǎo)加載程序由 BIOS(其本質(zhì)就是一段固件程序)和位于硬盤 MBR 中的 OS Boot Loader(比如,LILO和 GRUB 等)一起組成。BIOS 在完成硬件檢測(cè)和資源分配后,將硬盤 MBR 中的 Boot Loader 讀到系統(tǒng)的 RAM中,然后將控制權(quán)交給 OS Boot Loader。Boot Loader 的主要運(yùn)行任務(wù)就是將內(nèi)核映象從硬盤上讀到 RAM中,然后跳轉(zhuǎn)到內(nèi)核的入口點(diǎn)去運(yùn)行,也即開始啟動(dòng)操作系統(tǒng)。

這里我們選擇GNU Grub作為我們的bootloader。

3.2.5 uclibc和交叉編譯工具鏈

libc庫(kù)是大部分應(yīng)用程序的基礎(chǔ),這里有二種通用的實(shí)現(xiàn):glibc和uclibc。其中uclibc是glic的輕量級(jí)實(shí)現(xiàn)。這里我們選擇uclibc??梢詮?a >這里下載。

另外從這里下載uclibc對(duì)應(yīng)的交叉編譯工具鏈。后面我們需要這個(gè)交叉編譯工具鏈來編譯后面的應(yīng)用程序。如果你下載的是交叉編譯工具鏈的源代碼,需要編輯交叉編譯工具鏈中的Makefile,然后編譯。編譯過程會(huì)下載適合定制防火墻的編譯器,生成類似toolchain_ARCHITECTURE,例如toochain_i386,里面包括頭文件,類庫(kù)和交叉編譯器。

3.2.6 Linux kernel

Linux因其健壯性、可靠性、靈活性以及好象無限范圍的可定制性而在IT業(yè)界變得非常受歡迎。Linux具有許多內(nèi)置的能力,使開發(fā)人員可以根據(jù)自己的需要定制其工具、行為和外觀,而無需昂貴的第三方工具。如果Linux系統(tǒng)連接到因特網(wǎng)或LAN、服務(wù)器或連接 LAN 和因特網(wǎng)的代理服務(wù)器,所要用到的一種內(nèi)置能力就是針對(duì)網(wǎng)絡(luò)上Linux系統(tǒng)的防火墻配置。可以在netfilter/iptables IP 信息包過濾系統(tǒng)(它集成在 2.6.x 版本的 Linux 內(nèi)核中)的幫助下運(yùn)用這種能力。

我們這里選擇Linux內(nèi)核版本為2.6.15, 可以從這里下載。

3.2.7 busybox

BusyBox是很多標(biāo)準(zhǔn)Linux工具的一個(gè)單個(gè)可執(zhí)行實(shí)現(xiàn)。BusyBox包含了一些簡(jiǎn)單的工具,例如 cat 和echo,還包含了一些更大、更復(fù)雜的工具,例如 grep、find、mount 以及telnet(不過它的選項(xiàng)比傳統(tǒng)的版本要少);有些人將BusyBox稱為L(zhǎng)inux工具里的瑞士軍刀。

可以從

編譯內(nèi)核需要考慮是否將內(nèi)核模塊直接編譯進(jìn)內(nèi)核,因?yàn)榉阑饓Φ膬?nèi)核實(shí)現(xiàn)部分是以內(nèi)核模塊的形式存在的。二者的區(qū)別在于,將內(nèi)核模塊不直接編譯進(jìn)內(nèi)核相比較而言擴(kuò)展性更好一些。不過,為了簡(jiǎn)單起鑒,我們將內(nèi)核模塊直接編譯進(jìn)內(nèi)核。

在配置內(nèi)核選項(xiàng)的時(shí)候,強(qiáng)烈推薦你將netfilter相關(guān)的選項(xiàng)和你的網(wǎng)卡驅(qū)動(dòng)程序都選上,并且這些選項(xiàng)都應(yīng)該是靜態(tài)編譯的。

配置完選項(xiàng)之后就可以編譯了,編譯會(huì)花費(fèi)幾分鐘的時(shí)間。編譯完成之后將在arch/ARCHICTURE/boot(比如 arch/i386/boot)下生成一個(gè)叫做bzImage的內(nèi)核映像文件,這個(gè)文件下面的步驟將會(huì)用到。

3.4、編譯應(yīng)用程序

編譯應(yīng)用程序非常簡(jiǎn)單。需要注意的一點(diǎn)是,要用前面下載的交叉編譯工具鏈編譯后面的應(yīng)用程序。我們從busybox開始吧。

首先解壓縮下載的busybox源代碼包,執(zhí)行"makemenuconfig"進(jìn)行配置。在進(jìn)行配置的時(shí)候,一個(gè)重要的選項(xiàng)是指定交叉工具鏈中GCC的位置,這對(duì)編譯機(jī)器和目標(biāo)機(jī)器體系結(jié)構(gòu)不同的情況比較有用。另外,ifconfig, ip, udhcp選項(xiàng)和子選項(xiàng)需要激活。等這些都配置好之后,需要配置InitUtilities部分,把你需要在系統(tǒng)啟動(dòng)階段啟動(dòng)的服務(wù)都打開。這一些都配置好之后就可以編譯了。

接著是編譯iptables, openssh, dnsmasq, grub,如果遇到的問題的話,這些自由軟件都有很好的安裝文檔。

3.5、制作文件系統(tǒng)

需要安裝的軟件在前面已經(jīng)編譯好了,該是制作文件系統(tǒng)的時(shí)候了。首先,將busybox安裝到/mnt/firewall目錄下,這是你將會(huì)看到一個(gè)很親卻和熟悉的環(huán)境。接下來在/mnt/firewall下面創(chuàng)建以下的幾個(gè)文件夾:

接著,我們將往新創(chuàng)建的文件夾里面創(chuàng)建和拷貝程序、庫(kù)文件。
  • 將交叉編譯工具鏈的lib目錄下的庫(kù)文件拷貝到lib目錄
  • 拷貝iptables和dnsmasq的可執(zhí)行文件到sbin目錄
  • 在dev目錄下創(chuàng)建設(shè)備文件
最后我們用chroot方式創(chuàng)建根用戶和啟動(dòng)腳本, 其中啟動(dòng)腳本里面的防火墻規(guī)則可以通過
Firewall Builder這樣的自由軟件來定制。

3.6、安裝引導(dǎo)程序

我們這里選擇grub作為引導(dǎo)程序。將grub里面的stage1、stage2、e2fs_stage_1_5拷貝到boot目錄下,然后編輯menu.list,安裝grub的引導(dǎo)程序。到此,定制防火墻的工作基本上完成了。重新啟動(dòng),定制的成果馬上就可以看到了。

3.7、定制基于Netfilter的內(nèi)核模塊

netfilter和iptables已經(jīng)提供了非常強(qiáng)大的功能,大部分情況下都?jí)蛴昧?。如果你需要一些特別的功能的話,完全可以基于netfilter開發(fā)自己的特色內(nèi)核模塊。我們以一個(gè)例子來說明如何做到這一點(diǎn)。
假如我們要實(shí)現(xiàn)禁止來自192.168.0.1的所有訪問的功能,下面是實(shí)現(xiàn)這個(gè)功能的源代碼:
#define __KERNEL__
#define MODULE
#include <linux/ip.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/netdevice.h>
#include <linux/netfilter.h>
#include <linux/netfilter_ipv4.h>
#include <linux/skbuff.h>
#include <linux/udp.h>
static struct nf_hook_ops netfilter_ops;
static unsigned char *ip_address = "\xC0\xA8\x00\x01";
static char *interface = "lo";
struct sk_buff *sock_buff;
struct udphdr *udp_header;
unsigned int main_hook(unsigned int hooknum,
struct sk_buff **skb,
const struct net_device *in,
const struct net_device *out,
int (*okfn)(struct sk_buff*))
{
if(strcmp(in->name,interface) == 0){
return NF_DROP;
}
sock_buff = *skb;
if(!sock_buff){ return NF_ACCEPT; }
if(!(sock_buff->nh.iph)){
return NF_ACCEPT;
}
if(sock_buff->nh.iph->saddr == *(unsigned int*)ip_address){
return NF_DROP;
}

return NF_ACCEPT;
}
int init_module()
{
netfilter_ops.hook = main_hook;
netfilter_ops.pf = PF_INET;
netfilter_ops.hooknum = NF_IP_PRE_ROUTING;
netfilter_ops.priority = NF_IP_PRI_FIRST;
nf_register_hook(&netfilter_ops);

return 0;
}
void cleanup_module()
{
nf_unregister_hook(&netfilter_ops);
}

在上面的這段代碼中,我們以#define和#include語(yǔ)句開頭。接著定義了nf_hook_ops和網(wǎng)絡(luò)序的IP地址(192.168.0.1),同時(shí)定義了叫"lo"的回環(huán)接口。主要的功能是在函數(shù)main_hook中實(shí)現(xiàn)的。在這個(gè)函數(shù)中,我們比較了設(shè)備名稱,如果設(shè)備名稱是回環(huán)接口,返回NF_DROP,也就是說我們丟棄了這個(gè)包。接下來,我們驗(yàn)證了IP地址的有效性,最后比較了IP地址。如果IP地址相同,返回NF_ACCEPT,即丟棄這個(gè)IP包。否則接受這個(gè)IP包。
函數(shù)init_module是這個(gè)內(nèi)核模塊的初始化函數(shù),在這個(gè)模塊裝載進(jìn)內(nèi)核空間的時(shí)候被執(zhí)行。函數(shù)cleanup_module是退出函數(shù),在這個(gè)模塊被從內(nèi)核空間釋放掉以后被執(zhí)行。
代碼寫好了之后,我們需要編寫makefile和Kconfig文件,且假定上面編寫代碼文件名是fhook.c:
#makefile
obj-y := fhook.o
obj-$(CONFIG_FIREWALL_HOOK) += fhook.o


#Kconfig
menu FIREWALL_HOOK
config FIREWALL_HOOK
tristate "firewall hook"
---help---
firewall hook

endmenu
在Linux 2.6內(nèi)核中,我們可以利用內(nèi)核的makefile編譯內(nèi)核模塊。
模塊編譯之后,可以使用如下指令轉(zhuǎn)載內(nèi)核模塊:
#insmod fhook.ko
現(xiàn)在你可以開始試用你寫的功能了。

3.8、開發(fā)基于WEB的管理界面

如果你覺得基于命令行的防火墻管理不方便的話,我們可以自己定制防火墻的WEB管理界面。下面介紹一下具體的方法。

首先,需要確定使用的網(wǎng)頁(yè)服務(wù)器。常用的網(wǎng)頁(yè)服務(wù)器包括apache,lighttpd等,可以考慮使用apache作為我們的網(wǎng)頁(yè)服務(wù)器(這當(dāng)然有個(gè)人喜好的問題)。但是,由于apache功能很強(qiáng)大,對(duì)于我們的防火墻來說,很多功能都是用不到的,所以我們需要對(duì)apache的功能進(jìn)行裁減。

接下來是選擇開發(fā)語(yǔ)言的問題。開發(fā)語(yǔ)言可能是差異化比較大的,有C、C++、PERL、PHP、PYTHON可供選擇。由于我們的防火墻可能會(huì)運(yùn)行在一些內(nèi)存比較有限的機(jī)器上,并且對(duì)速度要求比較高,業(yè)務(wù)流程也比較簡(jiǎn)單,所以C和C++是比較適合的語(yǔ)言。當(dāng)然你也可以用其他的語(yǔ)言,依賴于你的具體情況。

選擇了開發(fā)語(yǔ)言之后,其實(shí)就應(yīng)該可以開發(fā)了。不過,為了提高你的開發(fā)效率,最好關(guān)注一下可以使用的自由軟件類庫(kù)。比如對(duì)于使用C和C++開發(fā)的話,libcgi是一個(gè)不錯(cuò)的類庫(kù)。

準(zhǔn)備工作做好之后就可以開發(fā)了。我們下面以一個(gè)實(shí)例來說明開發(fā)的具體思路。比如我們想實(shí)現(xiàn)一個(gè)打開IP數(shù)據(jù)包轉(zhuǎn)發(fā)的功能,下面是我們的C程序源代碼:

#include <stdio.h >
#include <time.h >
#include <cgi.h >

int main()
{
char *path = "/proc/sys/net/ipv4/ip_forward";
char cmd[256];
cgi_init();
cgi_process_form();
cgi_init_headers();

sprintf(cmd, "echo 1 > %s", path);
if (!system(cmd))
puts("<html><head><title>打開IP數(shù)據(jù)包轉(zhuǎn)發(fā)成功</title></head><bodygt;打開IP數(shù)據(jù)包轉(zhuǎn)發(fā)成功</body></html>");
elseputs("<html><head><title>打開IP數(shù)據(jù)包轉(zhuǎn)發(fā)失敗</title></head><bodygt;打開IP數(shù)據(jù)包轉(zhuǎn)發(fā)失敗</body></html>");

cgi_end();

return 0;
}
這里我們使用了libcgi的類庫(kù)函數(shù),也就是以cgi_開頭的函數(shù)。我們通過執(zhí)行命令行指令打開了IP數(shù)據(jù)包的轉(zhuǎn)發(fā)功能,然后根據(jù)返回值的不同輸出不同的返回信息。另外,為了使界面定制性更好,可以考慮使用模板引擎,比如clearsilver。

五、總結(jié)

總的來說,對(duì)于常規(guī)的網(wǎng)絡(luò)安全應(yīng)用,我們完全可以用已有的自由軟件定制出符合自己需求的防火墻,而不必購(gòu)買硬件防火墻設(shè)備,這就是自由軟件的價(jià)值,自由軟件不但功能強(qiáng)大,更重要的是賦予了用戶使用軟件的自由。在面對(duì)網(wǎng)絡(luò)安全這樣的關(guān)鍵應(yīng)用的時(shí)候,自由軟件讓你能夠自己控制自己的命運(yùn),而不依賴某個(gè)廠商。


form site : http://www.zeuux.org/science/free-software-and-network-security.cn.html

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Android 網(wǎng)絡(luò)防火墻的實(shí)現(xiàn)
Linux的Netfilter框架深度思考
Iptables—包過濾(網(wǎng)絡(luò)層)防火墻
把iptables移植到嵌入式Linux系統(tǒng)
如何使用 Linux 防火墻隔離本地欺騙地址 | Linux 中國(guó)
Netfilter框架
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服