本文只讲述防火墙有关理论知识, 相关实例请参见
redking
大侠的
RH253Linux服务器架设笔记十-Iptables防火墙
我爱敏敏大侠的
Iptables学习心得
注:相关图品打包上传,有需要者可以下载。
防火墙是指设置在不同网络(如可信任的企业内部网和不可信的公共网)或网络安全域之间的一系列部件的组合,是不同网络或网络安全域之间信息的唯一出入口,能根据企业的安全政策控制(允许、拒绝、监测)出入网络的信息流,且本身具有较强的抗攻击能力。
防火墙是提供信息安全服务,实现网络和信息安全的基础设施。
在逻辑上,防火墙是一个分离器,一个限制器,也是一个分析器,有效地监控了内部网和
Internet
之间的任何活动,保证了内部网络的安全
.
使用防火墙地作用如下:
(1)
防火墙是网络安全的屏障
(2)
防火墙可以强化网络安全策略
(3)
对网络存取和访问进行监控审计
(4)
防止内部信息的外泄
防火墙的三种类型
1
.数据包过滤型防火墙
数据包过滤
(Packet Filtering)
技术是在网络层对数据包进行选择,
选择的依据是系统内设置的过滤逻辑,被称为访问控制表
(Access Control Table)
。
通过检查数据流中每个数据包的源地址、目的地址、所用的端口号、协议状态等因素,或它们的组合来确定是否允许该数据包通过。
数据包过滤防火墙逻辑简单,
价格便宜,
易于安装和使用,
网络性能和透明性好,
通常安装在路由器上。
路由器是内部网络与
Internet
连接必不可少的设备,
因此,
在原有网络上增加这样的防火墙几乎不需要任何额外的费用。
数据包过滤防火墙有两个主要缺点:一是非法访问一旦突破防火墙,即可对主机上的软件和配置漏洞进行攻击;二是数据包的源地址、目的地址以及
IP
的端口号都在数据包的头部,很有可能被窃听或假冒。
2
.应用级网关型防火墙
应用级网关
(Application Level Gateways)
是在网络应用层上建立协议过滤和转发功能。
它针对特定的网络应用服务协议使用指定的数据过滤逻辑,并在过滤的同时,对数据包进行必要的分析、登记和统计,形成报告。
数据包过滤和应用网关防火墙有一个共同的特点,就是仅仅依靠特定的逻辑判定是否允许数据包通过。一旦满足逻辑,则防火墙内外的计算机系统建立直接联系,防火墙外部的用户便有可能直接了解防火墙内部的网络结构和运行状态,这有利于实施非法访问和攻击。
3
.代理服务型防火墙
代理服务
(Proxy Service)
也称链路级网关或
TCP
通道
(Circuit Level Gateways or TCP Tunnels)
,
也有人将它归于应用级网关一类。代理服务是针对数据包过滤和应用网关技术存在的缺点而引入的防火墙技术,
其特点是将所有跨越防火墙的网络通信链路分为两段。防火墙内外计算机系统间应用层的
“
链接
”
,
由两个终止代理服务器上的
“
链接
”
来实现,外部计算机的网络链路只能到达代理服务器,
从而起到了隔离防火墙内外计算机系统的作用。此外,代理服务也对过往的数据包进行分析、注册登记,
形成报告,同时当发现被攻击迹象时会向网络管理员发出警报,并保留攻击痕迹。
防火墙体系结构
1
.双重宿主主机体系结构
双重宿主主机体系结构围绕双重宿主主机构筑。双重宿主主机至少有两个网络接口。这样的主机可以充当与这些接口相连的网络之间的路由器;能够从一个网络到另外一个网络发送
IP
数据包。然而双重宿主主机的防火墙体系结构禁止这种发送。因此
IP
数据包并不是从一个网络(如外部网络)直接发送到另一个网络(如内部网络)。外部网络能与双重宿主主机通信,内部网络也能与双重宿主主机通信。但是外部网络与内部网络不能直接通信,它们之间的通信必须经过双重宿主主机的过滤和控制。
2
.被屏蔽主机体系结构
双重宿主主机体系结构防火墙没有使用路由器。而被屏蔽主机体系结构防火墙则使用一个路由器把内部网络和外部网络隔离开,如图
8-5
。在这种体系结构中,主要的安全由数据包过滤提供(例如,数据包过滤用于防止人们绕过代理服务器直接相连)。
这种体系结构涉及到堡垒主机。堡垒主机是因特网上的主机能连接到的唯一内部网络上的主机。任何外部的系统要访问内部的系统或服务都必须先连接到这台主机。因此堡垒主机要保持更高等级的主机安全。
3
.被屏蔽子网体系结构
被屏蔽子网体系结构添加额外的安全层到被屏蔽主机体系结构,即通过添加周边网络更进一步的把内部网络和外部网络(通常是
Internet
)隔离开。
被屏蔽子网体系结构的最简单的形式为,两个屏蔽路由器,每一个都连接到周边网。一个位于周边网与内部网络之间,另一个位于周边网与外部网络(通常为
Internet
)之间。这样就在内部网络与外部网络之间形成了一个
“
隔离带
”
。为了侵入用这种体系结构构筑的内部网络,侵袭者必须通过两个路由器。即使侵袭者侵入堡垒主机,他将仍然必须通过内部路由器
.
包过滤技术
包过滤
(Packet Filter)
技术是在网络层中对数据包实施有选择的通过。根据系统内事先设定的过滤逻辑,检查数据流中每个数据包后,根据数据包的源地址、目的地址、
TCP/UDP
源端口号、
TCP/UDP
目的端口号及数据包头中的各种标志位等因素来确定是否允许数据包通过,其核心是安全策略即过滤算法的设计。
例如,用于特定的因特网服务的服务器驻留在特定的端口号的事实(如
TCP
端口
23
用于
Telnet
连接),使包过滤器可以通过简单的规定适当的端口号来达到阻止或允许一定类型的连接的目的,并可进一步组成一套数据包过滤规则。
包过滤技术作为防火墙的应用有三类:一是路由设备在完成路由选择和数据转发之外
,
同时进行包过滤,这是目前较常用的方式;二是在工作站上使用软件进行包过滤
,
这种方式价格较贵;三是在一种称为屏蔽路由器的路由设备上启动包过滤功能。
Linux
架构包过滤防火墙
包过滤型防火墙的一般概念
1
.什么是包过滤
包过滤就是用一个软件查看所流经的数据包的包头
(header)
,由此决定整个数据包是否允许通过。它可能会决定丢弃
(DROP)
这个包,可能会接受
(ACCEPT)
这个包
(
让这个包通过
)
,也可能执行其他更复杂的动作。
在
Linux
系统下,包过滤功能是内建于核心的
(
作为一个核心模块,或者直接内建
)
,同时还有一些可以运用于数据包之上的技巧,不过最常用的依然是查看包头以决定是否允许通过。
2
.包过滤防火墙的工作层次
包过滤是一种内置于
Linux
内核路由功能之上的防火墙类型,其防火墙工作在网络层。
3
.包过滤防火墙的工作原理
(1)
使用过滤器。数据包过滤用在内部主机和外部主机之间,过滤系统是一台路由器或是一台主机。过滤系统根据过滤规则来决定是否让数据包通过。
用于过滤数据包的路由器被称为过滤路由器。
用过滤路由器过滤数据包
。
数据包过滤是通过对数据包的
IP
头和
TCP
或
UDP
头的检查来实现的,主要信息有:
・
IP
源地址
・
IP
目的地址
・
协议
(TCP
包、
UDP
包和
ICMP
包
)
・
TCP
或
UDP
包的源端口
・
TCP
或
UDP
包的目的端口
・
ICMP
消息类型
・
TCP
包头中的
ACK
位
・
数据包到达的端口
・
数据包送出的端口
(2)
过滤器的实现。数据包过滤一般使用过滤路由器来实现,这种路由器与普通的路由器有所不同。
普通的路由器只检查数据包的目的地址,并选择一个达到目的地址的最佳路径。它处理数据包是以目的地址为基础的,存在着两种可能性:若路由器可以找到一条路径到达目的地址则发送出去;若路由器不知道如何发送数据包则发送一个
“
数据不可达
”
的数据包给发送者。
过滤路由器会进一步地检查数据包,除了决定是否有到达目的地址的路径外,还要决定是否应该发送数据包,
“
应该与否
”
是由路由器的过滤策略决定并强行执行的。路由器的过滤策略主要有:
・
拒绝来自某主机或某网段的所有连接。
・
允许来自某主机或某网段的所有连接。
・
拒绝来自某主机或某网段的指定端口的连接。
・
允许来自某主机或某网段的指定端口的连接。
・
拒绝本地主机或本地网络与其他主机或其他网络的所有连接。
・
允许本地主机或本地网络与其他主机或其他网络的所有连接。
・
拒绝本地主机或本地网络与其他主机或其他网络的指定端口的连接。
・
允许本地主机或本地网络与其他主机或其他网络的指定端口的连接。
4
、包过滤器操作的基本过程
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
模块等
)
。
Netfilter
的工作原理
Netfilter
是
Linux
核心中的一个通用架构,它提供了一系列的
“
表
”
(tables)
,每个表由若干
“
链
”
(chains)
组成,而每条链中可以有一条或数条规则
(rule)
组成。因此,可以理解
netfilter
是表的容器,表是链的容器,而链又是规则的容器
.
Netfilter
总体结构
系统缺省的表为
“
filter”
,该表中包含了
INPUT
、
FORWARD
和
OUTPUT 3
个
链。每一条链中可以有一条或数条规则,每一条规则都是这样定义的
“
如果数据包头符合这样的条件,就这样处理这个数据包
”
。当一个数据包到达一个链时,系统
就会从第一条规则开始检查,看是否符合该规则所定义的条件:如果满足,系统将根据该条规则所定义的方法处理该数据包;如果不满足则继续检查下一条规则。最
后,如果该数据包不符合该链中所有规则的话,系统就会根据该链预先定义的策略
(policy)
来处理该数据包。
(
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
保留原名称,但也改变了所使用的语法。