380 likes | 537 Views
第 8 章 网络安全. 本章学习目标 通过对本章的学习,读者应该掌握以下主要内容: Ø 计算机网络安全的基本概念及 Linux 系统安全 Ø 防火墙技术基本知识 Ø 用 iptales 实现包过滤型防火墙. 8.1 计算机网络安全基础知识. 8.1.1 网络安全的含义. 网络安全从其本质上来讲就是网络上的信息安全,其所涉及的领域相当广泛。这是因为在目前的公用通信网络中存在着各种各样的安全漏洞和威胁。从广义来说,凡是涉及到网络上信息的保密性、完整性、可用性、真实性和可控性的相关技术和理论,都是网络安全所要研究的领域。下面给出网络安全的一个通用定义:
E N D
第8章网络安全 本章学习目标 通过对本章的学习,读者应该掌握以下主要内容: Ø 计算机网络安全的基本概念及Linux系统安全 Ø 防火墙技术基本知识 Ø 用iptales实现包过滤型防火墙
8.1 计算机网络安全基础知识 8.1.1 网络安全的含义 网络安全从其本质上来讲就是网络上的信息安全,其所涉及的领域相当广泛。这是因为在目前的公用通信网络中存在着各种各样的安全漏洞和威胁。从广义来说,凡是涉及到网络上信息的保密性、完整性、可用性、真实性和可控性的相关技术和理论,都是网络安全所要研究的领域。下面给出网络安全的一个通用定义: 网络安全是指网络系统的硬件、软件及其系统中的数据受到保护,不受偶然的或者恶意的原因而遭到破坏、更改、泄露,系统连续可靠正常地运行,网络服务不中断。 因此,网络安全在不同的环境和应用中会得到不同的解释。 (1)运行系统安全,即保证信息处理和传输系统的安全。包括计算机系统机房环境的保护,法律、政策的保护,计算机结构设计上的安全性考虑,硬件系统的可靠安全运行,计算机操作系统和应用软件的安全,数据库系统的安全,电磁信息泄露的防护等。它侧重于保证系统正常的运行,避免因为系统的崩溃和损坏而对系统存储、处理和传输的信息造成破坏和损失,避免由与电磁泄漏,产生信息泄露,干扰他人(或受他人干扰),本质上是保护系统的合法操作和正常运行。
(2)网络上系统信息的安全。包括用户口令鉴别、用户存取权限控制、数据存取权限、方式控制、安全审计、安全问题跟踪、计算机病毒防治、数据加密等。(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/RedHat/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”暗示全部的主机和指令。所有在“#”符号后面的文字都会被当作是注解。太长的行可以使用倒斜线“\”字符来分成新的行。保留的别名“ALL”在“{Host,Cmnd}_Alias”里都可以使用。不要用“ALL”来定义一个别名,这个别名无效。注意到“ALL”暗示全部的主机和指令。 可以使用这个语法从整个范围中减掉一些项目: userhost=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的端口号都在数据包的头部,很有可能被窃听或假冒。数据包过滤防火墙有两个主要缺点:一是非法访问一旦突破防火墙,即可对主机上的软件和配置漏洞进行攻击;二是数据包的源地址、目的地址以及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)过滤器的实现。数据包过滤一般使用过滤路由器来实现,这种路由器与普通的路由器有所不同。 • 普通的路由器只检查数据包的目的地址,并选择一个达到目的地址的最佳路径。它处理数据包是以目的地址为基础的,存在着两种可能性:若路由器可以找到一条路径到达目的地址则发送出去;若路由器不知道如何发送数据包则发送一个“数据不可达”的数据包给发送者。 • 过滤路由器会进一步地检查数据包,除了决定是否有到达目的地址的路径外,还要决定是否应该发送数据包,“应该与否”是由路由器的过滤策略决定并强行执行的。路由器的过滤策略主要有: • 拒绝来自某主机或某网段的所有连接。 • 允许来自某主机或某网段的所有连接。 • 拒绝来自某主机或某网段的指定端口的连接。 • 允许来自某主机或某网段的指定端口的连接。
拒绝本地主机或本地网络与其他主机或其他网络的所有连接。 • 允许本地主机或本地网络与其他主机或其他网络的所有连接。 • 拒绝本地主机或本地网络与其他主机或其他网络的指定端口的连接。 • 允许本地主机或本地网络与其他主机或其他网络的指定端口的连接。 存储包过滤规则 分析包报头字段IP、UDP、TCP 应用下一个包规则 包规则是否允许传输 是 允许包 否 包规则是否阻止传输 是 否 阻止包 否 是否是最后一个包规则 是 4、包过滤器操作的基本过程 下面给出包过滤器的操作流程图,如图8-9所示。 图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所示。有数据包进入系统时,系统首先根据路由表决定将数据包发给哪一条链,则可能有三种情况:数据包在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 –A FORWORD –p tcp –d $WWW-SERVER –dport www –i eth0 –j ACCEPT # # (2)FTP服务 # 服务端口为:命令端口21,数据端口20 # FTP服务采用tcp协议 # 规则为:eth0=>允许目的为内部网FTP服务器的包 $IPT –A FORWORD –p tcp –d $FTP-SERVER –dport ftp –i eth0 –j ACCEPT # # (3)EMAIL服务 # 包含两个协议,一个是smtp,另一个是pop3 # 出于安全性考虑,通常只提供对内的pop3服务 # 所以在这里我们只考虑针对smtp的安全性问题
# smtp端口25,采用tcp协议 # 规则为:eth0=>允许目的为内部网E_mail服务器的smtp请求 $IPT –A FORWORD –p tcp –d $EMAIL-SERVER –dport smtp –i eth0 –j ACCEPT # # 2、下面设置针对Intranet客户的过滤规则 # 本例中防火墙位于网关的位置,所以主要是防止来自Internet的攻击 # 不能防止来自Intranet的攻击 # 假如网络中的服务器都是基于Linux的,也可以在每一部服务器上设置 # 相关的过滤规则来防止来自Intranet的攻击 # 对于Internet对Intranet客户的返回包,定义如下规则 # # (1)允许Intranet客户采用被动模式访问Internet的FTP服务器 $IPT –A FORWORD –p tcp –s 0/0 –sport ftp-data –d $IP_RANGE –i eth0 –j ACCEPT # # (2)接受来自Internet的非连接请求tcp包 $IPT –A FORWORD –p tcp –d 198.168.80.0/24 ! –syn –i eth0 –j ACCEPT # # (3)接受所有udp包,主要是针对oicq等使用udp的服务 $IPT –A FORWORD –p utp –d 198.168.80.0/24 –i eth0 –j ACCEPT #
# 3、然后接受来自整个Intranet的数据包过滤,定义如下规则 $IPT –A FORWORD –s 198.168.80.0/24 –i eth0 –j ACCEPT # ########################################################################## # 处理IP碎片 # 接受所有的IP碎片,但采用limit匹配扩展对其单位时间可以通过的 # IP碎片数量进行限制,以防止IP碎片攻击 $IPT –A FORWORD –f –m limit --limit 100/s --limit –burst 100 –j ACCEPT # 说明:对不管来自哪里的IP碎片都进行限制,允许每秒通过100个IP碎片 # 该限制触发的条件是100个IP碎片 # ########################################################################## # 设置icmp包过滤 # icmp包通常用于网络测试等,故允许所有的icmp包通过 # 但是黑客常常采用icmp进行攻击,如ping of death等 # 所以我们采用limit匹配扩展加以限制 $IPT –A FORWORD –p icmp –m limit --limit 1/s --limit –burst 100 –j ACCEPT # 说明:对不管来自哪里的icmp包都进行限制,允许每秒通过一个包 # 该限制触发的条件是10个包 #########################################################################
(4)执行脚本,使之立刻生效 # /etc/rc.d/filter-firewall 通过执行上面的脚本,建立了一个相对完整的防火墙。该防火墙只对外开放了有限的几个端口,同时提供了客户对Internet的无缝访问,并且对IP碎片攻击和icmp的ping of death提供了有效的防护手段。 本章小结