第 8章 网络安全
本章学习目标
通过对本章的学习,读者应该掌
握以下主要内容:
? 计算机网络安全的基本概念及
Linux系统安全
? 防火墙技术基本知识
? 用 iptales实现包过滤型防火墙
8.1 计算机网络安全基础知识
8.1.1 网络安全的含义
网络安全从其本质上来讲就是网络上的信息安全, 其所涉及的领域相
当广泛 。 这是因为在目前的公用通信网络中存在着各种各样的安全漏
洞和威胁 。 从广义来说, 凡是涉及到网络上信息的保密性, 完整性,
可用性, 真实性和可控性的相关技术和理论, 都是网络安全所要研究
的领域 。 下面给出网络安全的一个通用定义:
网络安全是指网络系统的硬件、软件及其系统中的数据受到保护,
不受偶然的或者恶意的原因而遭到破坏、更改、泄露,系统连续可靠
正常地运行,网络服务不中断。
因此, 网络安全在不同的环境和应用中会得到不同的解释 。
( 1)运行系统安全,即保证信息处理和传输系统的安全。包括计算
机系统机房环境的保护,法律、政策的保护,计算机结构设计上的安
全性考虑,硬件系统的可靠安全运行,计算机操作系统和应用软件的
安全,数据库系统的安全,电磁信息泄露的防护等。它侧重于保证系
统正常的运行,避免因为系统的崩溃和损坏而对系统存储、处理和传
输的信息造成破坏和损失,避免由与电磁泄漏,产生信息泄露,干扰
他人(或受他人干扰),本质上是保护系统的合法操作和正常运行。
( 2) 网络上系统信息的安全 。 包括用户口令鉴别, 用户存取权限控
制, 数据存取权限, 方式控制, 安全审计, 安全问题跟踪, 计算机病
毒防治, 数据加密等 。
( 3) 网络上信息传播的安全, 即信息传播后的安全 。 包括信息过滤
等 。 它侧重于防止和控制非法, 有害的信息进行传播后的后果 。 避免
公用通信网络上大量自由传输的信息失控 。 它本质上是维护道德, 法
律或国家利益 。
( 4) 网络上信息内容的安全, 即讨论的狭义的, 信息安全, 。 它侧
重于保护信息的保密性, 真实性和完整性 。 避免攻击者利用系统的安
全漏洞进行窃听, 冒充和诈骗等有损于合法用户的行为 。 它本质上是
保护用户的利益和隐私 。
计算机网络安全的含义是通过各种计算机, 网络, 密码技术和信息安
全技术, 保护在公用通信网络中传输, 交换和存储信息的机密性, 完
整性和真实性, 并对信息的传播及内容具有控制能力 。 网络安全的结
构层次包括:物理安全, 安全控制和安全服务 。
可见, 计算机网络安全主要是从保护网络用户的角度来进行的, 是针
对攻击和破译等人为因素所造成的对网络安全的威胁 。 而不涉及网络
可靠性, 信息的可控性, 可用性和互操作性等领域 。
8.1.2 网络安全的特征
网络安全应具有以下四个方面的特征:
( 1) 保密性是指信息不泄露给非授权的用户, 实体或过程, 或供其利用
的特性 。
( 2) 完整性是指数据未经授权不能进行改变的特性, 即信息在存储或传
输过程中保持不被修改, 不被破坏和丢失的特性 。
( 3) 可用性是指可被授权实体访问并按需求使用的特性, 即当需要时应
能存取所需的信息 。 网络环境下拒绝服务, 破坏网络和有关系统的正常
运行等都属于对可用性的攻击 。
( 4)可控性是指对信息的传播及内容具有控制能力。
8.1.3 对网络安全的威胁
与网络连通性相关的有三种不同类型的安全威胁:
( 1) 非授权访问 ( Unauthorized Access) 指一个非授权用户的入侵 。
( 2) 信息泄露 ( Disclosure of Information) 指造成将有价值的和高度机
密的信息暴露给无权访问该信息的人的所有问题 。
( 3)拒绝服务( Denial of Service)指使系统难以或不能继续执行任务的
所有问题。
8.1.4 网络安全的关键技术
从广义上讲, 计算机网络安全技术主要有:
( 1) 主机安全技术:
( 2) 身份认证技术:
( 3) 访问控制技术:
( 4) 密码技术:
( 5) 防火墙技术:
( 6) 安全审计技术:
( 7)安全管理技术:
8.1.5 Linux系统的网络安全策略
1.简介
随着 Internet/ Intranet网络的日益普及, 采用 Linux网络操作系统
作为服务器的用户也越来越多, 这一方面是因为 Linux是开放源代码
的免费正版软件, 另一方面也是因为较之微软的 Windows NT网络操作
系统而言, Linux系统具有更好的稳定性, 效率性和安全性 。 在
Internet/ Intranet的大量应用中, 网络本身的安全面临着重大的挑
战, 随之而来的信息安全问题也日益突出 。 以美国为例, 据美国联邦
调查局 ( FBI) 公布的统计数据, 美国每年因网络安全问题所造成的
经济损失高达 75亿美元, 而全球平均每 20秒钟就发生一起 Internet计
算机黑客侵入事件 。 一般认为, 计算机网络系统的安全威胁主要来自
黑客攻击和计算机病毒 2个方面 。 那么黑客攻击为什么能够经常得逞
呢? 主要原因是很多人, 尤其是很多网络管理员没有起码的网络安全
防范意识, 没有针对所用的网络操作系统, 采取有效的安全策略和安
全机制, 给黑客以可乘之机 。
由于网络操作系统是用于管理计算机网络中的各种软硬件资源,实
现资源共享,并为整个网络中的用户提供服务,保证网络系统正常运
行的一种系统软件。如何确保网络操作系统的安全,是网络安全的根
本所在。只有网络操作系统安全可靠,才能保证整个网络的安全。因
此,详细分析 Linux系统的安全机制,找出可能存在的安全隐患,给出
相应的安全策略和保护措施是十分必要的。
2,Linux网络操作系统的基本安全机制
Linux网络操作系统提供了用户帐号, 文件系统权限和系统日志文件
等基本安全机制, 如果这些安全机制配置不当, 就会使系统存在一定
的安全隐患 。 因此, 网络系统管理员必须小心地设置这些安全机制 。
( 1) Linux系统的用户帐号
( 2) Linux的文件系统权限
( 3)合理利用 Linux的日志文件
3,Linux网络系统可能受到的攻击和安全防范策略
Linux操作系统是一种公开源码的操作系统, 因此比较容易受到来自
底层的攻击, 系统管理员一定要有安全防范意识, 对系统采取一定的
安全措施, 这样才能提高 Linux系统的安全性 。 对于系统管理员来讲
特别是要搞清楚对 Linux网络系统可能的攻击方法, 并采取必要的措
施保护系统 。
( 1) Linux网络系统可能受到的攻击类型
“拒绝服务”攻击,,口令破解”攻击,,欺骗用户”攻
击、
“扫描程序和网络监听”攻击 。
( 2) Linux网络安全防范策略
仔细设置每个内部用户的权限, 确保用户口令文件
/etc/shadow的安全, 加强对系统运行的监控和记录,合理划分子网
和设置防火墙,定期对 Linux网络进行安全检查,制定适当的数据备
份计划确保系统万无一失 。
4.加强对 Linux网络服务器的管理,合理使用各种工具
( 1)利用记录工具,记录对 Linux系统的访问
( 2)慎用 Telnet服务
( 3)合理设置 NFS服务和 NIS服务
( 4)小心配置 FTP服务
( 5)合理设置 POP-3和 Sendmail等电子邮件服务
( 6)加强对 WWW服务器的管理,提供安全的 WWW服务
( 7)最好禁止提供 finger 服务
8.1.6 Linux网络安全工具
1,sudo
sudo是系统管理员用来允许某些用户以 root身份运行部分 /全部系统命
令的程序 。 一个明显的用途是增强了站点的安全性, 如果用户需要每
天以 root身份做一些日常工作, 经常执行固定的几个只有 root身份才
能执行的命令, 那么用 sudo是非常适合的 。
下面以 Redhat 9.0为例, 介绍 sudo的安装及设置过程:
一般情况下, Redhat 9.0中都已经缺省安装了当前较新的版本 sudo-
1.6.6-3。 如果你的系统中没有安装, 你能从下面的地址中下载 for
Redhat Linux的 rpm package。
ftp://ftp.rediris.es/sites/ftp.redhat.com/pub/redhat/linux/9/en/os/i386/RedH
at/RPMS/sudo-1.6.6-3.i386.rpm
执行 #rpm -ivh sudo* 进行安装, 然后用 /usr/sbin/visudo编辑
/etc/sudoers文件 。
sudoers这个文件是由一个选择性的主机别名 (hostalias)节区,一
个选择性的指令别名 (commandalias)节区以及使用者说明
(userspecification)节区所组成的。所有的指令别名或主机别名必须
需以自己的关键字作为开始 (Host_Alias/Cmnd_Alias)。
使用者说明节区格式:
使用者 接取群组 [,接取群组 ]...
接取群组,:= 主机象征 = [op]指令象征 [,[op]指令象征 ]...
主机象征,:= 一个小写的主机名称或主机别名 。
指令象征,:= 一个指令或指令别名 。
op::= 逻辑的 '!' 否定运算元 。
主机别名节区格式:
Host_Alias主机别名 = 主机列表
Host_Alias::= 这是一个关键字 。
主机别名,:= 一个大写的别名 。
主机列表,:= 以逗号间隔的一些主机名称 。
指令别名节区格式:
Cmnd_Alias指令别名 = 指令列表
Cmnd_Alias::= 这是一个关键字 。
指令别名,:= 一个大写的别名 。
指令列表,:= 以逗号间隔的一些指令。
所有在, #‖符号后面的文字都会被当作是注解 。 太长的行可以使用
倒斜线, \‖ 字 符 来 分 成 新 的 行 。 保 留 的 别 名, ALL‖ 在
,{Host,Cmnd}_Alias‖里都可以使用 。 不要用, ALL‖来定义一个别
名, 这个别名无效 。 注意到, ALL‖暗示全部的主机和指令 。
可以使用这个语法从整个范围中减掉一些项目:
user host=ALL,!ALIAS1,!/etc/halt...
2,Sniffit
sniffit 是一个有名的网络端口探测器, 可以配置它在后台运行, 以检
测哪些 TCP/IP端口上用户的输入 /输出信息 。 最常用的功能是可以用
它来检测系统的 23(telnet)和 110(pop3)端口上的数据传送以轻松得
到系统的登录口令和 mail帐号密码, 当然, sniffit基本上是被破坏者
所利用的工具 。
sniffit 的主页在 http://reptile.rug.ac.be/~coder/sniffit/sniffit.html
用户能从那里下载最新的版本, 用户在根目录运行:
#tar xvfz sniff*
解开所有文件到对应目录后, 先仔细阅读其中的 README.FIRST文件,
可能有些版本需要预先进行编译才能使用 。 用户能运行 sniffit -i以
交互式图形界面查看所有在指定网络接口上的输入 /输出信息 。 例如:
为了得到所有用户通过某接口 a.b.c.d接收邮件时所输入的 pop3帐号
和密码, 用户能运行:
#sniffit -p 110 -t a.b.c.d &
#sniffit -p 110 -s a.b.c.d &
记录文件放在目录 /usr/doc/sniffit*下面,log file根据访问者的
IP地址,随机用高端端口号和用来检测的网络接口 IP地址和检测端口
来命名。它利用了 TCP/IP协议天生的虚弱性,因为普通的 telnet和
pop3所传的用户名和密码信息都是明文,不带任何方式的加密。 因
此对 telnet/ftp,可以用 ssh/scp来替代。 sniffit检测到的 ssh/scp信
息基本上是一堆乱码,因此不需要担心 ssh所传送的用户名和口令信
息会被第三方所窃取。
3,nmap
nmap 是用来对一个比较大的网络进行端口扫描的工具,它能检测
该服务器有哪些 TCP/IP端口目前正处于打开状态。可以运行它来确保
已经禁止掉不该打开的不安全的端口号。 nmap的主页在
http://www.insecure.org/nmap/index.html
8.2 防火墙技术
8.2.1 什么是防火墙
防火墙是指设置在不同网络 ( 如可信任的企业内部网和不可信的公
共网 ) 或网络安全域之间的一系列部件的组合, 是不同网络或网络
安全域之间信息的唯一出入口, 能根据企业的安全政策控制 ( 允许,
拒绝, 监测 ) 出入网络的信息流, 且本身具有较强的抗攻击能力 。
防火墙是提供信息安全服务, 实现网络和信息安全的基础设施 。
在逻辑上,防火墙是一个分离器,一个限制器,也是一个分析器,
有效地监控了内部网和 Internet之间的任何活动,保证了内部网络
的安全,如图 8-1。
图 8-1 防火墙逻辑位置示意图
使用防火墙地作用如下:
(1)防火墙是网络安全的屏障
(2)防火墙可以强化网络安全策略
(3)对网络存取和访问进行监控审计
(4)防止内部信息的外泄
8.2.2 防火墙的三种类型
1.数据包过滤型防火墙
数据包过滤 (Packet Filtering)技术是在网络层对数据包进行选择,选择
的依据是系统内设置的过滤逻辑,被称为访问控制表 (Access Control
Table)。通过检查数据流中每个数据包的源地址、目的地址、所用的端
口号、协议状态等因素,或它们的组合来确定是否允许该数据包通过。
数据包过滤防火墙逻辑简单,价格便宜,易于安装和使用,网络性能
和透明性好,通常安装在路由器上。路由器是内部网络与 Internet连接
必不可少的设备,因此,在原有网络上增加这样的防火墙几乎不需要
任何额外的费用。
数据包过滤防火墙有两个主要缺点:一是非法访问一旦突破防火
墙,即可对主机上的软件和配置漏洞进行攻击;二是数据包的源地
址、目的地址以及 IP的端口号都在数据包的头部,很有可能被窃听或
假冒。
2.应用级网关型防火墙
应用级网关 (Application Level Gateways)是在网络应用层上建立
协议过滤和转发功能。 它针对特定的网络应用服务协议使用指定的
数据过滤逻辑,并在过滤的同时,对数据包进行必要的分析、登记和
统计,形成报告。应用级网关型防火墙的工作流程示意图请见图 8-2。
图 8-2 应用级网关型防火墙的工作流程
数据包过滤和应用网关防火墙有一个共同的特点,就是仅仅依靠特
定的逻辑判定是否允许数据包通过。一旦满足逻辑,则防火墙内外的
计算机系统建立直接联系,防火墙外部的用户便有可能直接了解防火
墙内部的网络结构和运行状态,这有利于实施非法访问和攻击。
3.代理服务型防火墙
代理服务 (Proxy Service)也称链路级网关或 TCP通道 (Circuit
Level Gateways or TCP Tunnels),也有人将它归于应用级网关一
类。代理服务是针对数据包过滤和应用网关技术存在的缺点而引入
的防火墙技术,其特点是将所有跨越防火墙的网络通信链路分为两
段。防火墙内外计算机系统间应用层的, 链接,, 由两个终止代理
服务器上的, 链接, 来实现,外部计算机的网络链路只能到达代理
服务器,从而起到了隔离防火墙内外计算机系统的作用。此外,代
理服务也对过往的数据包进行分析、注册登记,形成报告,同时当
发现被攻击迹象时会向网络管理员发出警报,并保留攻击痕迹。使
用代理服务型防火墙的网络结构示意图请见图 8-3。
图 8-3 代理服务型防火墙的网络结构
8.2.3 防火墙体系结构
1.双重宿主主机体系结构
双重宿主主机体系结构围绕双重宿主主机构筑。双重宿主主机至少
有两个网络接口。这样的主机可以充当与这些接口相连的网络之间的
路由器;能够从一个网络到另外一个网络发送 IP数据包。然而双重宿
主主机的防火墙体系结构禁止这种发送。因此 IP数据包并不是从一个
网络(如外部网络)直接发送到另一个网络(如内部网络)。外部网
络能与双重宿主主机通信,内部网络也能与双重宿主主机通信。但是
外部网络与内部网络不能直接通信,它们之间的通信必须经过双重宿
主主机的过滤和控制。如图 8-4。
图 8-4 双重宿主主机体系结构
2.被屏蔽主机体系结构
双重宿主主机体系结构防火墙没有使用路由器。而被屏蔽主机体
系结构防火墙则使用一个路由器把内部网络和外部网络隔离开,如
图 8-5。在这种体系结构中,主要的安全由数据包过滤提供(例如,
数据包过滤用于防止人们绕过代理服务器直接相连)。
图 8-5 被屏蔽主机体系结构
这种体系结构涉及到堡垒主机。堡垒主机是因特网上的主机能连
接到的唯一内部网络上的主机。任何外部的系统要访问内部的系统
或服务都必须先连接到这台主机。因此堡垒主机要保持更高等级的
主机安全。
3.被屏蔽子网体系结构
被屏蔽子网体系结构添加额外的安全层到被屏蔽主机体系结构, 即
通过添加周边网络更进一步的把内部网络和外部网络 ( 通常是
Internet) 隔离开 。
被屏蔽子网体系结构的最简单的形式为,两个屏蔽路由器,每一
个都连接到周边网。一个位于周边网与内部网络之间,另一个位于
周边网与外部网络(通常为 Internet)之间。这样就在内部网络与外
部网络之间形成了一个, 隔离带, 。为了侵入用这种体系结构构筑
的内部网络,侵袭者必须通过两个路由器。即使侵袭者侵入堡垒主
机,他将仍然必须通过内部路由器。如图 8-6。
图 8-6 被屏蔽子网体系结构
8.2.4 包过滤技术
包过滤 (Packet Filter)技术是在网络层中对数据包实施有选择的通
过 。 根据系统内事先设定的过滤逻辑, 检查数据流中每个数据包后,
根据数据包的源地址, 目的地址, TCP/UDP源端口号, TCP/UDP目的端
口号及数据包头中的各种标志位等因素来确定是否允许数据包通过,
其核心是安全策略即过滤算法的设计 。
例如, 用于特定的因特网服务的服务器驻留在特定的端口号的事实
( 如 TCP端口 23用于 Telnet连接 ), 使包过滤器可以通过简单的规定
适当的端口号来达到阻止或允许一定类型的连接的目的, 并可进一步
组成一套数据包过滤规则 。
包过滤技术作为防火墙的应用有三类:一是路由设备在完成路由选
择和数据转发之外,同时进行包过滤,这是目前较常用的方式;二是在
工作站上使用软件进行包过滤,这种方式价格较贵;三是在一种称为屏
蔽路由器的路由设备上启动包过滤功能。
8.3 使用 Linux架构包过滤防火墙
8.3.1 包过滤型防火墙的一般概念
1.什么是包过滤
包过滤就是用一个软件查看所流经的数据包的包头 (header),由此决
定整个数据包是否允许通过 。 它可能会决定丢弃 (DROP)这个包, 可能
会接受 (ACCEPT)这个包 (让这个包通过 ),也可能执行其他更复杂的动
作 。
在 Linux系统下,包过滤功能是内建于核心的 (作为一个核心模块,或
者直接内建 ),同时还有一些可以运用于数据包之上的技巧,不过最常
用的依然是查看包头以决定是否允许通过。
2.包过滤防火墙的工作层次
包过滤防火墙示意图如图 8-7所示。包过滤是一种内置于 Linux内核路
由功能之上的防火墙类型,其防火墙工作在网络层。
应用层数据
应用层
物理层
数据链路层
网络层
传输层
应用层
物理层
数据链路层
网络层
传输层
数据
应用层
应用层
图 8-7 包过滤防火墙示意图
3.包过滤防火墙的工作原理
(1)使用过滤器。数据包过滤用在内部主机和外部主机之间,过滤
系统是一台路由器或是一台主机。过滤系统根据过滤规则来决定
是否让数据包通过。如图 8-8所示,用于过滤数据包的路由器被称
为过滤路由器。
图 8-8 用过滤路由器过滤数据包
数据包过滤是通过对数据包的 IP头和 TCP或 UDP头的检查来实现
的,主要信息有:
?IP源地址
?IP目的地址
?协议 (TCP包,UDP包和 ICMP包 )
?TCP或 UDP包的源端口
?TCP或 UDP包的目的端口
?ICMP消息类型
?TCP包头中的 ACK位
?数据包到达的端口
?数据包送出的端口
(2)过滤器的实现。数据包过滤一般使用过滤路由器来实现,这种路由
器与普通的路由器有所不同。
普通的路由器只检查数据包的目的地址,并选择一个达到目的地址
的最佳路径。它处理数据包是以目的地址为基础的,存在着两种可能
性:若路由器可以找到一条路径到达目的地址则发送出去;若路由器
不知道如何发送数据包则发送一个, 数据不可达, 的数据包给发送者。
过滤路由器会进一步地检查数据包,除了决定是否有到达目的地址
的路径外,还要决定是否应该发送数据包,,应该与否, 是由路由器
的过滤策略决定并强行执行的。路由器的过滤策略主要有:
?拒绝来自某主机或某网段的所有连接。
?允许来自某主机或某网段的所有连接。
?拒绝来自某主机或某网段的指定端口的连接。
?允许来自某主机或某网段的指定端口的连接。
?拒绝本地主机或本地网络与其他主机或其他网络的所有连接。
?允许本地主机或本地网络与其他主机或其他网络的所有连接。
?拒绝本地主机或本地网络与其他主机或其他网络的指定端口的连接。
?允许本地主机或本地网络与其他主机或其他网络的指定端口的连接。
4、包过滤器操作的基本过程
下面给出包过滤器的操作流程图,如图 8-9所示。
存储包过滤规则
分析包报头字段 IP,UDP,TCP
应用下一个包规则
包规则是否允许传

包规则是否阻止传

是否是最后一个包
规则




允许包
阻止包


图 8-9 包过滤操作流程图
8.3.2 Netfilter/iptables简介
1,Linux下的包过滤防火墙管理工具
从 1,1内核开始, Linux就已经具有包过滤功能了, 随着 Linux内核版
本的不断升级 Linux下的包过滤系统经历了如下 3个阶段:
?在 2.0的内核中, 采用 ipfwadm来操作内核包过滤规则 。
?在 2.2的内核中, 采用 ipchains来控制内核包过滤规则 。
?在 2.4的内核中, 采用一个全新的内核包过滤管理工具 ——
iptables。
现在最新 Linux内核版本是 2.4.1,在 2.4内核中不再使用 ipchains,而
是采用一个全新的内核包过滤管理工具 --iptables。 这个全新的内核
包过滤工具将使用户更易于理解其工作原理, 更容易被使用, 当然也
将具有更为强大的功能 。
iptables作为一个管理内核包过滤的工具, iptables 可以加入, 插入
或删除核心包过滤表格 (链 )中的规则 。 实际上真正来执行这些过滤规
则的是 Netfilter(Linux 核心中一个通用架构 )及其相关模块 (如
iptables模块和 nat模块等 )。
2,Netfilter的工作原理
Netfilter是 Linux 核心中的一个通用架构,它提供了一系列的
“表” (tables),每个表由若干“链” (chains)组成,而每条链中可以有
一条或数条规则 (rule)组成。因此,可以理解 netfilter是表的容器,表是
链的容器,而链又是规则的容器,如图 8-10所示。
图 8-10 Netfilter总体结构
系统缺省的表为,filter‖,该表中包含了 INPUT,FORWARD和 OUTPUT
3个链。每一条链中可以有一条或数条规则,每一条规则都是这样定义
的“如果数据包头符合这样的条件,就这样处理这个数据包”。当一
个数据包到达一个链时,系统就会从第一条规则开始检查,看是否符
合该规则所定义的条件:如果满足,系统将根据该条规则所定义的方
法处理该数据包;如果不满足则继续检查下一条规则。最后,如果该
数据包不符合该链中所有规则的话,系统就会根据该链预先定义的策
略 (policy)来处理该数据包。
数据包在 filter表中的流程如图 8-11所示。有数据包进入系统时,系
统首先根据路由表决定将数据包发给哪一条链,则可能有三种情况:
路由选

FORWARD链
INPUT链 OUTPUT链
本地处理进程
入站包 出站包
图 8-11 数据包在 Filter表中的流程图
( 1)如果数据包的目的地址是本机,则系统将数据包送往 INPUT链,
如果通过规则检查,则该包被发给相应的本地进程处理;如果没通过
规则检查,系统就会将这个包丢弃;
( 2)如果数据包的目的地址不是本机,也就是说,这个包将被转发,
则系统将数据包送往 FORWARD链,如果通过规则检查,则该包被发给
相应的本地进程处理;如果没通过规则检查,系统就会将这个包丢掉;
( 3)如果数据包是由本地系统进程产生的,则系统将其送往 OUTPUT
链,如果通过规则检查,则该包被发给相应的本地进程处理;如果没
通过规则检查,系统就会将这个包丢掉。
Red Hat linux 9使用 2.4版本地内核, 并且内核的编译选项中包含对 Netfilter
地支持, 同时 iptables软件包是默认安装的, 所以可以直接使用 。
另外, 为了完成转发功能, 必须打开系统内核的 IP转发功能, 使 Linux变
成路由器 。
在 Red Hat中有两种方法:
(1)修改内核变量 ip_forward。
# echo ―1‖>/proc/sys/net/ipv4/ip_forward
(2)修改脚本 /etc/sysconfig/network。
将 FORWARD_IPV4=false
改为 FORWARD_IPV4=true
3,iptables语法
iptables的语法通常可以简化为下面的形式:
iptables [-t table] CMD [chain] [rule-matcher] [-j target]
iptables工具的调用语法如下:
( 1)对链的操作
( 2)对规则的操作
( 3)指定源地址和目的地址
( 4)指定协议
( 5)指定网络接口
( 6)指定 IP碎片
( 7)指定非
( 8) TCP匹配扩展
( 9) mac匹配扩展
( 10) limit匹配扩展
( 11) LOG目标扩展
( 12) REJECT目标扩展
4,iptables与 ipchains的区别
?iptables的缺省链的名称从小写换成大写,并且意义不再相同,INPUT和
OUTPUT分别放置对目的地址是本机以及本机发出的数据包的过滤规则。
?-i选项现在只代表输入网络接口,输入网络接口则使用 -o选项。
?TCP和 UDP端口现在需要用 --source-port或 --sport(或 --destination-port/--dport)
选项拼写出来并且必须置于, -p tcp‖或, -p udp‖选项之后,因为分别是
载入 TCP和 UDP扩展的。
?以前 TCP的, -y‖标志现在改为, —syn‖,并且必须置于, -p tcp‖之后。
?原来的 DENY目标最后改为了 DROP。
?可以在列表显示单个链的同时将其清空。
?可以在清空内建链的同时将策略计数器清零。
?列表显示链时可显示计数器的当前瞬时值。
?REJECT和 LOG现在变成了扩展目标,即意味着成为独立的内核模块。
?链名可以长达 31个字符。
?MASQ现在改为 MASQUERADE,并且使用不同的语法。 REDIRECT保留原
名称,但也改变了所使用的语法。
8.3.3 包过滤防火墙配置实例
1.网络结构
本节要为如图 8-12所示的网络结构建立一个包过滤防火墙 。
这个网络结构假设内部网有有效的 Internet地址。为了将内部网段
192.168.80.0/24与 Internet隔离,在内部网络和 Internet之间使用了包过滤防
火墙。防火墙的内网接口是 eth1( 198.168.80.254),防火墙的 Internet接
口是 eth0( 198.199.37.254)。另外,内网中有 3台服务器对外提供服务。
图 8-12 包过滤防火墙结构图
WWW服务器,IP地址为 198.168.80.251
FTP服务器,IP地址为 198.168.80.252
E_mail服务器,IP地址为 198.168.80.253
2.防火墙的建立过程
本例主要是对内部的各种服务器提供保护 。 下面采用编辑并执行可执行
脚本的方法建立此防火墙 。 具体过程如下:
( 1) 在 /etc/rc.d/目录下用 touch命令建立空的脚本文件, 执行 chmod命
令添加可执行权限 。
# touch /etc/rc.d/filter-firewall
# chmod u+x /etc/rc.d/filter-firewall
( 2) 编辑 /etc/rc.d/rc.local文件, 在末尾加上 /etc/rc.d/filter-firewall 以确
保开机时能自动执行该脚本 。
# echo ―/etc/rc.d/filter-firewall‖ >>/etc/rc.d/rc.local
( 3) 使用文本编辑器编辑 /etc/rc.d/filter-firewall文件, 插入如下内容,
# !/bin/bash
# 在屏幕上显示信息
echo ―Starting iptables rules… ‖
# 开启内核转发功能
echo ―1‖ >/proc/sys/net/ipv4/ip_forward
##########################################################################
# 定义变量
IPT=/sbin/iptables
WWW-SERVER=198.168.80.251
FTP-SERVER=198.168.80.252
EMAIL-SERVER=198.168.80.253
IP_RANGE=―198.168.80.0/24‖
##########################################################################
# 刷新所有的链的规则
$IPT –F
##########################################################################
# 首先禁止转发任何包, 然后再一步步设置允许通过的包
# 所以首先设置防火墙 FORWARD链的策略为 DROP
$IPT –P FORWARD DROP
##########################################################################
# 下面设置关于服务器的包过滤规则
#由于服务器 /客户机交互是双向的, 所以不仅仅要设置数据包
#出去的规则, 还要设置数据包返回的规则
#
#1,下面建立针对来自 Internet数据包的过滤规则
#
#( 1) WWW服务
#服务端口为 80,采用 tcp或 utp协议
#规则为,eth0=>允许目的为内部网 WWW服务器的包
$IPT–AFORWORD–ptcp –d $WWW-SERVER–dportwww–ieth0 –j ACCEPT
#
#( 2) FTP服务
#服务端口为:命令端口 21,数据端口 20
#FTP服务采用 tcp协议
#规则为,eth0=>允许目的为内部网 FTP服务器的包
$IPT–AFORWORD–ptcp –d $FTP-SERVER –dportftp–i eth0 –j ACCEPT
#
#( 3) EMAIL服务
#包含两个协议, 一个是 smtp,另一个是 pop3
#出于安全性考虑, 通常只提供对内的 pop3服务
#所以在这里我们只考虑针对 smtp的安全性问题
#smtp端口 25,采用 tcp协议
#规则为,eth0=>允许目的为内部网 E_mail服务器的 smtp请求
$IPT–AFORWORD–ptcp –d $EMAIL-SERVER–dportsmtp–ieth0 –jACCEPT
#
#2,下面设置针对 Intranet客户的过滤规则
#本例中防火墙位于网关的位置, 所以主要是防止来自 Internet的攻击
#不能防止来自 Intranet的攻击
#假如网络中的服务器都是基于 Linux的, 也可以在每一部服务器上设置
#相关的过滤规则来防止来自 Intranet的攻击
#对于 Internet对 Intranet客户的返回包, 定义如下规则
#
#( 1) 允许 Intranet客户采用被动模式访问 Internet的 FTP服务器
$IPT–AFORWORD–ptcp –s 0/0 –sportftp-data–d $IP_RANGE –ieth0–jACCEPT
#
# ( 2) 接受来自 Internet的非连接请求 tcp包
$IPT–AFORWORD–ptcp –d 198.168.80.0/24!–syn–i eth0 –j ACCEPT
#
#( 3) 接受所有 udp包, 主要是针对 oicq等使用 udp的服务
$IPT–AFORWORD–putp –d 198.168.80.0/24–ieth0 –j ACCEPT
#
#3,然后接受来自整个 Intranet的数据包过滤, 定义如下规则
$IPT–AFORWORD–s198.168.80.0/24–ieth0 –j ACCEPT
#
##########################################################################
#处理 IP碎片
#接受所有的 IP碎片, 但采用 limit匹配扩展对其单位时间可以通过的
#IP碎片数量进行限制, 以防止 IP碎片攻击
$IPT–AFORWORD–f–mlimit --limit 100/s--limit –burst100–j ACCEPT
#说明:对不管来自哪里的 IP碎片都进行限制, 允许每秒通过 100个 IP碎片
#该限制触发的条件是 100个 IP碎片
#
##########################################################################
#设置 icmp包过滤
#icmp包通常用于网络测试等, 故允许所有的 icmp包通过
#但是黑客常常采用 icmp进行攻击, 如 pingofdeath等
#所以我们采用 limit匹配扩展加以限制
$IPT–AFORWORD–picmp–mlimit --limit 1/s --limit –burst100–j ACCEPT
#说明:对不管来自哪里的 icmp包都进行限制, 允许每秒通过一个包
#该限制触发的条件是 10个包
#########################################################################
( 4) 执行脚本, 使之立刻生效
# /etc/rc.d/filter-firewall
通过执行上面的脚本, 建立了一个相对完整的防火墙 。 该防火墙只
对外开放了有限的几个端口, 同时提供了客户对 Internet的无缝访问,
并且对 IP碎片攻击和 icmp的 pingofdeath提供了有效的防护手段 。
本章小结