ImageVerifierCode 换一换
格式:DOCX , 页数:51 ,大小:681.78KB ,
资源ID:5646444      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5646444.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(LINUXfirewall.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

LINUXfirewall.docx

1、LINUXfirewall一*Linux防火墙程序设计防火墙作为一种网络或系统之间强制实行访问控制的机制,是确保网络安全的重要手段。如果用户能根据自己的实际需要,将防火墙设计的一般理论和方法与自己系统的具体实践相结合,设计一些小而精、精而强的防火墙程序,则往往可以发挥出更好的作用。本文仅以Linux系统为例,具体说明防火墙程序的设计方法。 一、 从程序设计角度看Linux网络编写防火墙程序并不一定要求对Linux网络内核有多么深刻的理解,只是需要明白在网络内核中有这样一种机制,那就是内核可以自动调用用户编写的防火墙程序,并根据这个防火墙程序返回的结果来决定对网络收发数据报的处理策略。这一点可以

2、从图1中看出。二、 怎样将自己编写的防火墙程序登记到内核中 我们已经知道内核在网络层中自动调用用户编写的防火墙程序。但有一个前提条件就是用户必须正确地将自己编写的防火墙程序登记到内核中。内核中提供了防火墙的登记和卸载函数,分别是register_firewall和unregister_firewall,参见firewall.c。 1、 register_firewall函数原型如下:int register_firewall(int pf,struct firewall_ops *fw)返回值:0代表成功,小于0表示不成功。参数:* 协议标志pf,主要的取值及其代表的协议如下:2代表Ipv4协

3、议,4代表IPX协议,10代表Ipv6协议等。* 参数结构fw定义如下:struct firewall_opsstruct firewall_ops *next;int (*fw_forward)(struct firewall_ops *this, int pf,struct device *dev, void *phdr, void *arg, struct sk_buff *pskb);int (*fw_input)(struct firewall_ops *this, int pf,struct device *dev, void *phdr, void *arg, struct sk

4、_buff *pskb);int (*fw_output)(struct firewall_ops *this, int pf,struct device *dev, void *phdr, void *arg, struct sk_buff *pskb);int fw_pf;int fw_priority;结构中next的域将由内核来修改,使其指向下一个防火墙模块。fw_pf域为协议标志,含义同上。fw_priority指定优先级,一般应大于0。fw_input、fw_output、fw_forward是用户编写的防火墙函数模块,在接收到网络报和发送网络报时内核将调用这些模块,后面将详细讨论

5、。 2、 unregister_firewallunregister_firewall的原型说明与调用方法同register_firewall。 三、 防火墙函数模块的设计 1、 防火墙函数模块的返回值返回值至关重要,内核将根据它来决定对网络数据报采取的处理策略。主要返回值及意义如下:0和1 通知内核忽略该网络报。-1 通知内核忽略该网络报,并发送不可达到的网络控制报(ICMP报文)。2 通知内核认可该网络报。 2、 各模块函数的入口参数* 参数this指向register_firewall中的fw参数结构。* 参数pf含义同register_firewall中的pf参数。* 参数devdev

6、是指向数据结构device的指针。在Linux系统中,每一个网络设备都是用device数据结构来描述的。在系统引导期间,网络设备驱动程序向Linux登记设备信息,如设备名、设备的I/O基地址、设备中断号、网卡的48位硬件地址等,device数据结构中包括这些设备信息以及设备服务函数的地址。关于device结构的详细信息可参见netdevice.h头文件。* 参数phdr该参数指向链路层数据报报头首址。* 参数arg利用这个参数可以向内核传递信息,如重定向时的端口号。* 参数pskb此参数是指向sk_buff结构指针的指针。在Linux中,所有网络数据的发送和接收都用sk_buff数据结构表示。

7、在sk_buff数据结构中包含有对应设备结构的device地址、传输层、网络层、链路层协议头地址等。关于sk_buff的定义可参见skbuff.h头文件。3、防火墙程序示例下面给出一个简单防火墙程序。在这里假设读者对以太协议、IP协议、TCP协议等常用协议有一定的了解。用命令行gcc -Wall -O2 -c MyFirewall.c进行编译,再用insmod命令加载程序后,系统将只响应外部网络用TCP协议的80端口所进行的访问。要让系统恢复原有功能,则可用rmmod命令卸载该程序,源代码见网站上的同名文章。/ MyFirewall.c 2000年3月7日编写#ifndef _KERNEL_#

8、 define _KERNEL_ /按内核模块编译#endif#ifndef MODULE# define MODULE /按设备驱动程序模块编译#endif#include /最基本的内核模块头文件#include #include /最基本的内核模块头文件#include #include #include #include #include #include #include #include #define SOL_ICMP 1#define PERMIT_PORT 80 /只允许访问TCP的80端口int zzl_input(struct firewall_ops *this,int

9、 pf,struct device *dev, void *phdr,void *arg,struct sk_buff *pskb)/每当收到一个网络报时,此函数将被内核调用 struct tcphdr *tcph; /TCP的头指针 struct iphdr *iph; /IP头指针 struct sk_buff *skb=*pskb; if (skb-protocol=htons(ETH_P_ARP) printk(nPermit a ARP Packet); return FW_ACCEPT;/允许地址解析协议报 if(skb-protocol=htons(ETH_P_RARP) pri

10、ntk(nPermit a RARP Packet); return FW_ACCEPT;/允许反向地址解析协议报 if(skb-protocol=htons(ETH_P_IP) iph=skb-nh.iph; if (iph-protocol=SOL_ICMP) printk(nPermit a ICMP Packet); return FW_ACCEPT;/允许网络控制报 if(iph-protocol=SOL_TCP) tcph=skb-h.th; if(tcph-dest=PERMIT_PORT) printk(nPermit a valid access); return FW_AC

11、CEPT;/允许对TCP端口80的访问 return FW_REJECT;/禁止对本计算机的所有其它访问int zzl_output(struct firewall_ops *this,int pf,struct device *dev, void *phdr,void *arg,struct sk_buff *pskb)/程序编写方法同zzl_input函数模块 printk(nzzl_output is called ); return FW_SKIP;int zzl_foreward(struct firewall_ops *this,int pf,struct device *dev,

12、 void *phdr,void *arg,struct sk_buff *pskb)/程序编写方法同zzl_input函数模块 printk(nzzl_foreward is called ); return FW_SKIP;struct firewall_ops zzl_ops= NULL, zzl_foreward, zzl_input, zzl_output, PF_INET, 01;int init_module(void) if(register_firewall(PF_INET,&zzl_ops)!=0) printk(nunable register firewall); re

13、turn -1; printk(nzzl_ops=%p,&zzl_ops); return 0;void cleanup_module(void) printk(unloadn); unregister_firewall(PF_INET,&zzl_ops);%二*简易防火墙建置与流量统计摘要这篇文章描述如何通过简单的步骤构建可以满足一般网络要求的防火墙系统。除了具备基本的包过滤规则设置以外还可以对网络的流量进行统计分析。1. 序言防火墙基本上是为了预防别人来存取你的网络,进而管制网络上资料的进出,防火墙一端连接外部的网络(经由真实的IP),另一端则连接内部的网络(虚拟的IP),将你内部的网络与

14、外部的网络给隔离开,防火墙成了进入你内部网络的唯一通道,因此任何进出的资料都要经过防火墙,再经由防火墙来决定是否能够通行,因此对于安全性更多加了一份保障。另外在本文中也介绍两个重量级的软件,方便监看网络流量和过往的网络封包,这也应是防火墙中的功能之一。2. 防火墙的种类2.1 封包过滤器封包过滤器的功能为取得每一个数据包,根据设定的规则去进行过滤,看是否允许数据包的传送或是拒绝封包,数据包过滤器存在于网络层,而且不会影响到数据包中的资料。在 RedHat Linux 中有一个 ipchains的 套件(6.0以上已内含),可以经由它来做数据包过滤器。2.2 代理服务器(Proxy firewa

15、lls)代理服务器又常被称为应用程序网关,允许通过防火墙间接进入互连网。3. 开始架设防火墙网络位址转换 NAT(Netword Address Translation)由于互连网的发展导致目前 IP 不足,解决之道要使用虚拟的 IP,相信虚拟 IP 必会成为未来的趋势。网络上保留了特定 IP 供给私人虚拟网络使用,在真实的网络上将不会找到这三组 IP,这些虚拟 IP 位址为:Class A 10.0.0.0 10.255.255.255Class B 172.16.0.0 172.31.255.255Class C 192.168.0.0 192.168.255.2553.1 查看网络卡状态

16、首先必须要有两张网络卡介面,一张对外(使用真实 IP)eth1,一张对内(使用虚拟 IP)eth0,执行ifconfig a命令会出现网络卡的设定值,看是否两张网络卡都有抓到。有可能在装好系统开机时,可能会卡在开机时的画面,可能是这样子的话,建议拿掉一张网络卡重开机,设定完之后再插上。 命令ifconfig -A | more查看目前所启动的网络卡界面,目前为全设好的状态。3.2 配置文件/etc/sysconfig/network若只有有一张网卡,那我们就直接手动安装另一张网卡,首先切换目录到 /etc/sysconfig 中,有一个档案 network,其内容为:其中的 FORWARD_I

17、PV4 要设为 yes,才可以去启动 IP 伪装转换。3.3 /etc/sysconfig/network-scripts/ifcfg-eth1接著到 /etc/sysconfig/network-scripts 目录中,会有下列档案目前要注意的是 ifcfg-eth0、ifcfg-eth1 这两个档案,在安装完之后它只有 ifcfg-eth0 这个档案,并没有 ifcfg-eth1。首先将 ifcfg-eth0 复制成 ifcfg-eth1,执行命令cp ifcfg-eth0 ifcfg-eth1。其中 ifcfg-eth1 为对外网络卡的设定档,依自己的设备去修改,其内容为:第一行指定网络

18、卡的界面为:eth1第三行指定广播位址为:192.192.73.255第四行指定IP位址为:192.192.73.35第五行指定网络遮罩为:255.255.255.0第六行指定网络号码为:192.192.73.0第七行指定是否在开机后去启动网络卡界面3.4 配置文件/etc/sysconfig/network-scripts/ifcfg-eth0在这直接修改设定档 ifcfg-eth0,做为内部虚拟的网络卡介面,其内容为:第一行指定网络卡的界面为:eth0第三行指定广播位址为:192.168.1.255第四行指定IP位址为:192.168.1.1第五行指定网络遮罩为:255.255.255.0

19、第六行指定网络号码为:192.168.1.0第七行指定是否在开机后去启动网络卡界面在这我们指定的内部网络,其中网络号码为 192.168.1.0,广播号为 192.168.1.255 所以真正可用的虚拟 ip 位址为 192.168.1.1 192.168.1.254。3.5 启动网卡启动关闭执行ifconfig eth0 upifconfig eth0 down执行ifconfig eth1 upifconfig eth1 down3.6 设定路由表当上述的配置文件设定完、启动之后,我们必须替这两个网络去建立 route(路由)。route的命令为:route add -net networ

20、k address netmask device网段真实网段虚拟网段网络号(network)192.192.73.0192.168.1.0网络号(network)255.255.255.0255.255.255.0网关(gateway)192.192.73.1192.168.1.1真实网段路由的设法:route add net 192.192.73.0 netmask 255.255.255.0 gw 192.192.73.1虚拟网段路由的设法:route add net 192.168.1.0 netmask 255.255.255.0 gw 192.168.1.1其路由表为:用命令rout

21、e n :这样子就安装好了两张网络卡,eth1 就做为对外部的网络卡(真实的 IP),eth0 做为对内部的网络卡(虚拟 IP)。3.7 测试以 eth1 做为对内的网络介面,其虚拟 IP 位址为 192.168.1.0 192.168.1.255,因为其第一个为网络号码,最后一个为广播号,所以可用的虚拟 IP 为 192.168.0.1 192.168.255.254,我们将闸道器(gateway)设为 192.168.0.1、子网络遮罩设为 255.255.255.0,将 192.168.1.2 192.168.1.254 之间的 IP 分配给内部的机器,之后内部的机器就可以互相通讯(pi

22、ng),但对于要连出去,还需要一个步骤,那就是使用一支程序,ipchains 来达成这个目的。先针对上述的问题,如果要让内部的机器连接到外部的网络,可先执行:/sbin/ipchains -A forward -s 192.168.0.0/24 - d 0.0.0.0/0 -j MASQ/sbin/ipchains -P forward DENY第一个命令会将来源 192.168.0.0 192.168.255.255 的封包使用 IP 伪装,将伪装的封包送转送给预设的路由,到外部的网络。第二个命令会将 forward 的预设政策设为 DENY。你可以将这两行命令加在 /etc/rc.d/rc

23、.local 档案中,使其每次开机时执行。对于 ipchains 的使用,会在下面作更详细的说明。4. 封包过滤防火墙ipchains若你使用的是新版的 Linux,里面都会有 ipchains 的套件,直接使用就可以让你建立封包过滤防火墙。4.1 ipchains语法其选项、来源 ip、目的地 ip、port 可以不加,表示为全部。ipchains语法:ipchains 命令 input/forward/output 选项 源ip Port 目的ip port -j目标范例:ipchains -A input -p all -s 192.168.1.2 -d eef.oit.edu.tw 2

24、3 -j DENY4.2 ipchains命令可以有两种形式来指定,全名方式或缩写方式来表示-add -A 增加新的 ipchains 规则-delete -D 删除第一个 ipchains 规则,或某一个 ipchains 规则-insert -I 插入一个新 ipchains 规则,其插入需指定规则中的数字,如果数字为 1 表示为第一个。-replace -R 取代所选择的规则,其取代需指定规则中的数字。-list -L 列出所选择设定的 ipchains 规则,如果没有规则被指定,会列出所有的规则出来。-flush -F 将某个 ipchains 规则清除(例如:input、output

25、、forward)这相当于去删除掉规则的功效。-zero -Z 将所有规则中的封包和位元组计数器归零它也可以去指定-L, -list (list) 选项,会先列出之前的资料,再列出归零的资料。-check -C 检查封包是否违反所设的规则,这是一个相当有用的测试,其是-s (来源), -d (目的地), -p(协定), -i (界面)更是必要。-new -N 产生一个新的使用者定义规则(user-defined)。-delete-chain -X 删除使用者定义的规则,如果没有指定任何的参数,它将会所有的定义的规则。-policy -P 设定目标的政策,只有 input,forward,out

26、put 可以去设定。-masquerade -M 这个选项可以去查看现在的伪装连接状况(须加上-L 选项),或是去设定 kernel 伪装参数(-S选项)。-set -S 设定伪装停止时间变数-help -h 列出描述命令语法的说明。4.3 ipchains参数选项可以有两种形式来指定,全名方式或缩写方式来表示使用!去定义相反的意义:惊叹号!有not的意义,有许多选项可以加上!去使用,表示不是的意思。例如: -s ! localhost说明: 表示除了localhost的来源位址都可以。-proto -p ! protocol 协定:可以用数字或名字,例如:tcp、icmp、udp及all。范

27、例:ipchains -A input -p tcp -s 192.168.1.3 -d eef.oit.edu.tw ftp -j DENY说明:源地址为 192.168.1.3 的主机不能对 eef.oit.edu.tw 这台主机做 ftp 的动作请求。-source -s ! 指定来源位址。-source-port ! port 指定来源的port。-destination -d ! 指定目的地位址-destination-port ! 指定目的地的port-icmp-type ! 类型名称,指定ICMP类型-interface -i ! 网络接口名称 ,lo、eth0、eth1。-ju

28、mp -j 指定规则的目标,如果没有指定的话,这条规则算是没有用处。-numeric -n 取消DNS查询,直接使用IP-log -l 将关于ipchains的讯息记录起来,记录于/var/log/messages内。-verbose -v 完整模式,会列出界面名称、规则、TOS伪装,封包和位元组计数也会列出,须和-L一起使用。! -syn -y 只有当SYN设定时才会符合TCP封包-TOS -t Type Of Service! -version -V 列出ipchains的版本-bidirectional -b 双向模式。5. 封包过滤防火墙ipchains的操作规则5.1 ipchain

29、s规则首先列出 ipchains 的规则表出来:ipchains -L分为三大部分:input chains:输入时的过滤规则例如:ipchains -A input -p tcp -s 192.168.1.3 -d 192.192.69.36 www -j DENY禁止 192.168.1.3 的来源位址去存取目的地 192.192.69.36 的网页forward chain :执行 IP 伪装的规则例如:ipchains -A forward -s 192.168.1.0/24 -d 0.0.0.0/24 -j MASQ启动 192.168.1.0255 的 IP 伪装output chain:输出时的过滤规则(与 input 相

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1