




已阅读5页,还剩14页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
路由器和防火墙路由器和防火墙 路由器是一种广泛运用在IP网段之间的设备,市场上有许多现成的产品。在应用中,我们经常将路由器跨接在广域网和局域网之间,大多数的路由器产品也就是基于这种需要来设计的。但是随着用户IP网络的扩展,我们需要一种能够在多个以太网络之间进行寻址的路由器,传统的路由器产品中偶尔有几款双以太网络接口的,但是这样的产品价格尤其昂贵,而且要是支持快速以太网络应用的话价格将是天文数字;第三层交换机可以实现这样的功能,但是第三层交换机也不是便宜的家伙。 路由器工作的时候,根据它的某个端口收到的数据包的目的IP地址,查询路由器自己的路由表,然后决定将数据包转发到相应的端口。路由器的路由表有几种:一种是根据路由器自己的每个端口IP地址和子网掩码计算出来的路由,这种路由叫做“固定路由”;第二种是有系统管理员种设置的到某个子网需要通过某个下一级路由器的路由,这种叫“静态路由”;还有就是在网络环境中让每个路由器都把自己的路由信息广播出去,让路由器之间进行互相学习,这样学到的路由就叫做“动态路由”。路由器还会把目的地址不在自己路由表中的数据包固定转发给一个预先设定IP地址,这样的路由设置又叫“默认路由”。在路由匹配的过程中,一般有这样的优先级:固定路由静态路由动态路由默认路由。 路由器只会查看IP数据包的目的地址,也就是说原则上它是“照单全收”,而且全部转发,除非真的发不出去了。如果让路由器在转发数据包的时候,加一项检查,检查数据包的来源和数据包要求的应用层服务类型,根据预先设计的规则来判定这个数据包是应该转发还是作别的处理,这样这个路由器就不再是一个单纯意义上的路由器,而是一种类型的防火墙包过滤防火墙。 包过滤防火墙可以检查数据包的来源、源端口、目的地址、目的端口,使用的传输层协议类型等项目,根据检查的项目的内容来匹配一个规则表,当符合规则表中的定义的时候,就执行规则表事先定义的操作。一般来说,规则表可以定义这样的操作:ACCEPT(通过)、NAT(MASQ地址转换)、DENY(丢弃)、REJECT(拒绝,同时回送不可用消息给源端)。 当然目前市场上也能买到支持包过滤防火墙的现成产品,但是价格问题还是我们不得不考虑的重要因素。尤其大多数产品都有许多许可证、性能等方面的限制。 Linux操作系统应运IP网络而生,除了Linux价格上的优势之外,更吸引人的是它内建的强大的网络功能,除了做各种Internet上的应用服务之外,Linux还提供了完整的路由器功能和防火墙功能。而它所带来的系统造价和功能的比例是相当诱人的,为什么不一试呢? Linux系统的准备 相对于现成的路由器产品,我们把这样的路由器称为“软路由器”,当然这样做出来的路由器性能绝对不会比“硬件路由器”的性能差,我们只要明白比如很多“25”系列的路由器才只是采用25M主频的摩托罗拉68030CPU(性能相当于Intel 80386)我们就知道了。 用来做“软件路由器”的Linux系统主机硬件配置要求并不是太高,用作三五个局域网之间的路由选择,数百台计算机的话,选用奔腾133以上的主机就足够了,当然现在的市场上赛杨2或者奔腾4或者其他的CPU也不是很贵;配置64M内存,有条件的话可以配置到128M也无所谓;硬盘就不要太大了,否则也是浪费. 关键在于网络适配器的配置,Linux系统支持大多数市场上能见到的以太网络适配器,PCI卡的安装比较简单,只要内核支持,在开机的时候有多少卡都会被系统正确的识别出来。下面是我在实际使用过的能够正常工作的网卡: Intel EtherExpress Pro PCI100M RealTek 8029/8139 PCI 10M/100M D-link 系列 (使用Tulip 2114X驱动) PCI 10M ACCTON EN1207 (使用Tulip 2114X驱动) PCI 100M 3COM全系列 (PCI/ISA 10M/100M) AMD PCNET 32 PCI 10M 大部分NE2000兼容网卡,Topstar、Dlink、ACCTON、SN2000等等 HardLink PCMCIA 笔记本专用网卡 10M 当然Linux能支持的网卡远远不止这些。 将网卡驱动加挂到Linux中有几种方法,最常用的是用modprobe系统工具加挂一个内核模块,比如加载一个NE2000兼容网卡的驱动可以这样: #modprobe ne io=0x300 其实大多数的PCI网卡并不需要指定IO地址范围,就像加载一个ACCTON的EN1207c网卡可以这样: #modprobe tulip 将网卡驱动编译到Linux内核中是一种最高效的做法,在编译Linux内核的时候,使用 make menuconfig 代替很多老资料上提到的“#make config”,这样就会得到一个菜单,在菜单中“Network Device”选项下选定指定的网络适配器的驱动程序,编译完成以后就会得到一个完整的支持相应网卡的Linux内核。 对于很多系统只能识别一个的网卡,将第二个以后的网卡参数写在/etc/lilo.conf中是最佳做法,这里有一个系统中安装呢4块网卡,一个是PCI的RealTek 8139,另外3个是NE2000,这样的话系统就识别8139网卡以后就不会自动识别后面的三个ISA卡,我们需要在/etc/lilo.conf中加上这样一句: append=-ether=3,0x240,eth1 ether=11,0x300,eth2 ether=4,0x260,eth3- 在编译内核的过程中,我们可以在Network option中选择“optimize as router not host”,这样系统就会按照路由器而不是主机的方式进行优化,同时,还可以根据具体的需要选择上“ Fast switching”和“ Forwarding between high speed interfaces”以及“ advanced router”。如果我们还计划在这个机器上实现包过滤防火墙,那么选择上“ firewalling”和“ IP: masquerading”以及与“IP MASQ”相关的选择项。 注意查看开机的系统提示或者使用dmesg命令可以看到系统是不是正常识别并且启动相应的网卡的驱动程序,在上面例子中提到的具有一个Realtek8139网卡,三个NE2000网卡的机器上我们能够看到这样的情况: rtl8139.c:v1.07 5/6/99 Donald Becker /linux/drivers/r tl8139.html eth0: RealTek RTL8139 Fast Ethernet at 0x6000, IRQ 9, 00:e0:4c:dd:5f:85. ne.c:v1.10 9/23/94 Donald Becker () NE*000 ethercard probe at 0x240: 00 40 05 1f 60 9a eth1: NE2000 found at 0x240, using IRQ 3. NE*000 ethercard probe at 0x300: 00 40 05 22 08 65 eth2: NE2000 found at 0x300, using IRQ 11. NE*000 ethercard probe at 0x260: 00 40 05 23 59 0f eth3: NE2000 found at 0x260, using IRQ 4. 然后是配置每个网络端口的IP地址,当然我们可以使用操作系统的一些对话框来配置第一个网卡的参数,但是一个有经验的网络管理员一般是不这样做的,因为这样不能配置其他的网卡,我们必须学会用这个命令来配置第一块网卡: #ifconfig eth0 netmask broadcast 55 第二块网卡的名字就是eth1,其他依次是eth2,eth3等等。由于计算机体系结构的限制,在一个普通PC主板上只有一个PCI控制器,而一个PCI控制器最多只能同时支持4个PCI设备,当然某些专用服务器上可能有支持两个以上的PCI控制器。ISA网卡的安装受到系统中断号的限制,单CPU的系统中只有16个可用的IRQ号,扣除硬盘、内存、键盘、显示卡等硬件已经所剩无几,所以一般也是安装4个卡,当然,双CPU的系统可以有256个中断号可用,这样就宽裕了许多。另外,我们还需要打开Linux系统的IP转发开关,这一点非常容易,执行这一条指令: echo 1 /proc/sys/net/ipv4/ip_forward 当然这些配置命令最好是放到/etc/rc.d/rc.local中,这样就不用每次开机以后重新配置了。 正确配置IP地址等参数以后,系统就自动计算出了每个端口所接的子网的固定路由,在这样的一个例子中我们可以看到: 我们可以用命令“route -n”或者“netstat -r -n”来查看系统目前的路由表,在右边图二所示的例子中,我们可以得到这样的路由表: # route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 52 U 0 0 0 eth0 28 28 U 0 0 0 eth3 U 0 0 0 eth2 U 0 0 0 eth1 其中Destination项表示目的网络,其大小可以通过子网掩码(Genmask)计算出来,Flags项表示这个网段是否直接连接的,“U”就是直接可用的意思,Metric是级跳,Ref是优先级参考,Use Interface是连接的端口,Gateway栏目在需要其他路由器转发的时候指明下一级路由器的地址。 使用命令route同时还可以建立或者删除一个静态路由,使用这样的格式: #route add -net 目标子网地址 netmask 目标子网掩码 gw 下一级路由器的地址 同理,使用: #route del -net 目标子网地址 netmask 目标子网掩码 gw 下一级路由器的地址 可以设置静态路由,使用: #route add default gw 网关地址 或者: # route add -net netmask gw 网关地址 我们把路由设置命令加到/etc/rc.d/rc.local中,以便其能够在下次启动的时候自动的运行所有路由设置命令。 如下是上面例子中提到的4个网络出口的Linux路由器中的静态路由设置命令,这就是在/etc/rc.d/rc.local文件中的片断: route add -net netmask 92 gw 2 route add -net netmask gw 0 route add -net netmask gw 6 route add -net netmask gw 8 route add -net netmask gw 29 route add -net netmask gw 2 route add default gw (这一条加的是默认路由) 由这些命令创建的静态路由加上原来由IP地址计算出来的固定路由以后,路由表就变成了这样: # route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 52 U 0 0 0 eth0 2 92 UG 0 0 0 eth1 28 28 U 0 0 0 eth3 6 UG 0 0 0 eth1 8 UG 0 0 0 eth1 U 0 0 0 eth2 29 UG 0 0 0 eth3 2 UG 0 0 0 eth1 U 0 0 0 eth1 0 UG 0 0 0 eth1 UG 0 0 0 eth0 做防火墙的系统准备 包过滤防火墙比起路由器来说就是在转发数据包的时候多了一个规则表的检测,按照规则表的定义决定数据包的命运。可以说,路由器其实就是一个允许所有数据包正常通过的“防火墙”。 防火墙还有一个很重要的功能就是保护一个内部的子网,以及将内部的私有地址转换成外部的IP地址,这个功能不但可以对内部网络起到保护作用,还可以节省IP地址资源,或者用来使一个本来不能被某设备识别的某网段IP能够实现对它的访问。这样的技术叫做NAT(网络地址翻译),实现的方式很多,直接在路由层次上实现是效率最高的。CISCO的PIX就是这样技术的商用产品的代表。 Linux的IPMASQ(IP伪装)就是这样技术在Linux上的一个实现。 当一个主机发起一个对其他主机的TCP/IP访问, 它必须在数据包的报头中指明对方的IP地址,以及对方提供连接的TCP/UDP端口,同时它会打开一个临时的端口准备接受返回的数据,然后把它自己的IP地址以及这个临时端口写到IP数据报的报头中。当一个数据包被NAT处理的时候,它的源地址将被替换成防火墙的出端口上的IP(有些防火墙产品使用地址池),同时NAT防火墙上也会在出端口上开放一个临时端口,将这个端口号替换数据包中的源端口号。当回应数据到来的时候,由于外部的主机只能看到NAT防火墙的IP和端口号,它发出的数据的目的地址和端口将是防火墙上的,而数据回来到防火墙以后,防火墙就把原来的内部主机的地址和端口号替换回来,将数据包转到内部网络上传送。 而在NAT防火墙上,还需要建立一个此次地址转换的对应关系表。以便知道随后到来的源、回应数据包应该被怎样的替换回来。 由于包过滤防火墙的所有操作都是根据规则表来的,所以规则表就显得格外的重要。我们使用一个叫ipchains的工具来维护系统规则表,ipchains把规则表叫做防火链。当一个数据包进入Linux机器时,要通过进入链(input)的检查,当一个Linux机器准备发送一个数据包时,这个包又要通过输出链(output)的检查,当作为路由器使用的时候,还要点所有中转的数据包增加一道中转链(forward)的检查,每个链都可以配置自己的规则表。所以,其实一个通过Linux防火墙的数据包需要经过input、forward、output三个规则的检查,当这个Linux作为普通路由器使用的时候,三个链的规则都是ACCEPT(允许通过)。 这是一个需要中转的数据包通过ipchains的过程: 在规则表中,数据包总是先和第一条规则进行匹配,如果不匹配在比较下一条规则,一旦某条规则适应了,就不再比较,直接按此规则执行,所以排列在前面的规则总是优先与排列在后面的规则。 用ipchains建立规则表 使用命令: ipchains -P 链名 动作 可以改变一个链的默认规则,其中可以使用的链名有“input”、“forward”、和“output”。可以使用的动作有“ACCEPT”、“DENY”、“REJECT”。一般来说,默认规则是当一个数据包不能匹配所有的规则的时候的最后动作,当然这是优先级最低的一条规则了。系统默认的三个链的规则都是允许。也就是“ACCEPT”。一般来说,我们做防火墙的话,主要是控制通过防火墙的数据包,所以我们一般在中转链上设置规则,而把进入链和外出链设置为“ACCEPT”。通常我们需要把所有不匹配规则的数据包禁止,所以我们可以用这样的命令把中转链的默认规则改成“丢弃”: #ipchains -P forward DENY 增加一条规则使用这样的语法: ipchains -A 链名 -s 源网络/掩码 -d 目的网络/掩码 -p 传输层协议 端口 -j 动作 源网络和目的网络地址用子网的网络地址来表示,掩码可以使用点分十进制,也可以使用一个表示“1”的个数的数字来代替,比如说“”可以表示为“24”,用“/0”可以表示所有的地址,用“IP地址/32”表示一个主机。这个地方的动作可以是“ACCEPT”、“DENY”、“REJECT”,在中转链中要是使用IP伪装的话,动作可以写成“MASQ”。如果不检查传输层协议(tcp/udp/icmp)的话,就不能再检查端口号,这时可以这样写: ipchains -A 链名 -s 源网络/掩码 -d 目的网络/掩码 -j 动作 这样的设置将对所有的符合源地址和目的地址的数据包生效。比如说我们现在要设置允许子网/28和子网/92的互相访问,可以这样设置: #ipchains -A forward -s /25 -d /26 -j ACCEPT 但是在实际的使用中这样设置并不会让两个子网通起来,因为网络传输是双向的,只有一个方向通了还不能算是通,由于forward的默认规则已经是DENY,返回的数据包将会因为匹配不了规则而被丢弃,所以我们需要再设置一条反向的许可规则: #ipchains -A forward -s /26 -d /25 -j ACCEPT 其实我们可以使用-b的选项来一次设置双向的两条规则:这样的命令等价于刚才的两条命令: #ipchains -A forward -b -s /25 -d /26 -j ACCEPT 只有一种情况例外,由于IP伪装回来的数据包不经过中转链,所以不需要再中转链中只需要为IP伪装设置一个单向的规则,比如说把所有从/25来访问/16的数据包都做一个伪装,那么就可以这样设置: #ipchains -A forward -s /25 -d /16 -j MASQ 而这样的设置并不需要反向的规则。 这是一个禁止/25的网络的计算机访问0的telnet端口(TCP23)的设置: #ipchains -A forward -s /25 -d 0/32 -p tcp 23 -j DENY 当然,在进入链或者在外出链上做的规则对于中转数据一样有效,这样的设置可以禁止/25网段上的IP地址访问OICQ(UDP8000端口): #ipchains -A input -s /25 -d /0 -p udp 8000 -j DENY 在进入链上的规则要优先于中转链上的规则,而外出链上的规则优先级是最低的。删除规则有两种做法,一个是先数出改规则在表中的位置,然后用命令: #ipchains -D 链名 序号 来删除它,比如说删除中转链的第5条规则可以这样写: #ipchains -D forward 5 还有一种办法就是把建立规则中的“-A”直接改成“-D”来删除由这条“-A”的命令创建的规则: #ipchains -D input -s /25 -d /0 -p udp 8000 -j DENY 这样的话这个子网的计算机又可以访问OICQ了。而用命令ipchains -F可以清除系统全部的规则表,但是不会改变链的默认规则。 用命令ipchains -L -n可以查看系统目前的规则表:这是前面所说的4个网卡的防火墙实际的规则表,当然,看起来它是比较复杂的: d# ipchains -L -n Chain input (policy ACCEPT): target prot opt source destination ports DENY all - /25 n/a DENY all - /16 n/a DENY all - /16 n/a DENY all - /25 n/a Chain forward (policy DENY): target prot opt source destination ports MASQ all - /25 n/a ACCEPT all - /24 /24 n/a ACCEPT all - /24 /24 n/a ACCEPT all - /24 /25 n/a ACCEPT all - /25 /24 n/a ACCEPT all - /24 /16 n/a ACCEPT all - /16 /24 n/a ACCEPT all - /24 /16 n/a ACCEPT all - /16 /24 n/a ACCEPT all - /24 /25 n/a ACCEPT all - /25 /24 n/a ACCEPT all - /24 /16 n/a ACCEPT all - /16 /24 n/a ACCEPT all - /16 /25 n/a ACCEPT all - /25 /16 n/a ACCEPT all - /25 /25 n/a ACCEPT all - /25 /25 n/a ACCEPT all - /25 /16 n/a ACCEPT all - /16 /25 n/a ACCEPT all - /16 /16 n/a ACCEPT all - /16 /16 n/a ACCEPT all - /24 /16 n/a ACCEPT all - /16 /24 n/a MASQ all - /25 n/a MASQ all - /16 n/a MASQ all - /16 n/a MASQ all - /24 n/a MASQ all - /25 28/25 n/a MASQ all - /16 28/25 n/a MASQ all - /16 28/25 n/a MASQ all - /24 28/25 n/a MASQ all - /16 /0 n/a MASQ all - /25 /0 n/a MAS
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 1.2走向共同富裕 课件 2025-2026学年度道德与法治九年级上册 统编版
- 象棋学习课件
- 豌豆种植科学课件
- 2025版厦门市区婚姻解除财产分配及子女抚养监护合同
- 2025版智慧家居产业财务顾问及市场拓展合同
- 2025版建筑节能材料研发与应用劳务分包合同范本
- 2025年度商务会议场地及专业设备租赁服务合同
- 2025年度大型会展活动策划合同
- 2025版外卖配送服务合同综合管理范本
- 2025版全新真石漆外墙施工及维护一体化合同
- 驾驶员安全教育培训考试试卷含答案
- 污水处理站运行记录台账范本
- 2025年消毒供应室业务学习考试试题(附答案)
- 校园基孔肯雅热防控措施课件
- 图像特征提取讲解
- 多彩贵州地方课程课件
- 劳技自制收纳盒课件
- 《管理学基础与实务》 课件全套 曾宪达 第1-11章 管理与管理者- 管理创新
- 2025年复工复产考核试题及答案
- 快餐公司门店设备夜间关闭管理制度
- 【公路监理大纲】公路工程监理大纲(含桥隧工程)
评论
0/150
提交评论