使用 AIX TCP/IP 过滤功能设置防火墙

本文的目的是展示如何使用操作系统内置的过滤功能来配置 AIX® 服务器,以过滤 TCP/IP 流量。本文的受众包括需要对流入和流出服务器的流量进行限制的服务器和网络管理员。本文可适用于多种场景,从增强内部网络中运行的关键中型数据库服务器,到确保处理 Internet 流量的边界服务器,如 Web、DNS 或电子邮件服务器的安全。

Leonardo Cabral, 系统管理员, IBM

http://www.ibm.com/developerworks/i/p-lcabral.jpgLeonardo Cabral 于 20 世纪 90 年代中期进入 IBM 并加入了研究小组,致力于使用 IBM Aglets Software Development kit 开发移动智能代理。从那时起,他研究了多个 IT 领域,如网络、安全和合规性,以及 UNIX 管理。最近 4 年中,他作为一名 IBM 员工帮助全世界的客户成功实施了其 UNIX 项目。



2011 年 12 月 05 日

简介

一个 POWER 服务器具有承载上百个 LPAR 或分区(一个分区就是操作系统安装的一个独立实例)的处理能力,这意味着,虚拟化功能让您能在一个物理机器中拥有上百个服务器。如果这上百个服务器在处理 Internet 或其他敏感的数据,那么您可能想要在其中设置一些防火墙规则作为额外的安全层(以及网络防火墙和入侵防御设备)。

本文从简短回顾 TCP/IP 网络开始。如果您熟悉 TCP/IP 及其工作方式,那么可以跳过下一节。接下来,您还将回顾在 AIX 机器中启用并设置 TCP/IP 过滤功能需要用到的包、步骤和命令。最后,您要使用第一节中讲述的概念,在示例场景中进行配置。


TCP/IP 回顾

TCP/IP 是赋予网络生命的精髓。通过网络传输的数据被分割成小块,称为 “包” 或 “IP 包”(表示 Internet Protocol 包)。当传输信息的时候,它被数据发送者分成包,并标有源和目标电脑的信息,然后通过网络发送。

现在我们从更高的层次看看网络包的结构是怎样的。根据通信所使用协议的不同,您可能会处理以下的 IP 包:

  • 普通 IP 包IP 数据报:IP 包可用来封装以下任何协议。通常情况下,在网络中看不到普通 IP 包。但是可以使用 IP 包中传输的信息创建防火墙过滤。
  • ICMP 消息:ICMP 是用来报告和诊断网络问题的协议。生成 ICMP 消息的最常见命令是 ping,它用来测试是否能连接到某个设备上。可以配置过滤功能来过滤掉某些 ICMP 包,例如,您可能想要防止某些 ICMP 流量发送到与 Internet 相连的服务器上。
  • UDP 包用户数据报:UDP 是不可靠、无连接的协议。UDP 数据包可能会丢失,或者不按顺序发送给接收的应用程序;必须在应用程序层进行错误处理。由于协议栈执行的控制少,其优点是处理时间短、延时少,而且数据传输更快。有一些熟知的服务就是基于 UDP,如 DNS 查询、TFTP 和 VoIP。
  • TCP 包:TCP 是可靠的、面向连接的协议。TCP 段能保证以发送时的顺序进行交付,代价是需要额外的包来建立和完成连接,且协议栈要执行更多的处理来确保这一点。有很多熟知的服务依赖于 TCP:HTTP(web 流量)、SMTP(邮件流量)、FTP(文件传输)、SSH (Secure Shell)、Telnet 及其他。

一般来说,您的服务器只提供其中一项或几项服务,因此您可能想只允许您所提供的服务的流量。

剖析 ICMP、TCP 和 UDP

以下表格显示了不同类型的网络包的结构,更重要的是,您可以看到,哪一个是允许我们基于此字段内容过滤包的 AIX 过滤管理命令的命令行选项。在稍后对过滤所使用的 AIX 命令进行分析时会用到这些命令行选项。

表 1 – IP 包格式
比特位 0-15 16-31
0 版本 (-v) IHL 服务类型 总长度
32 标识 标志 (-f) 分段偏移
64 使用期限 协议 (-c) 报头检验和
96 源地址 (-s)
128 目的地址 (-d)
160 选项 边距
表 2 – ICMP 格式
比特位 0-15 16 -31
0 类型 (-o / -O) 编码 校验和
32 IP 报头 + 64 位原始数据报
表 3 – UDP 格式
比特位 0-15 16-31
0 源端口 (-o) 目标端口 (-O)
32 长度 校验和
表 4 – TCP 格式
比特位 0-15 16-31
0 源端口 (-o) 目标端口 (-O)
32 序列号
64 确认号
96 偏移 保留 标志 窗口
128 校验和 紧急指针
160 选项 边距
192 数据

AIX 过滤功能简介

某些情况下,您可能想要阻止某些包到达其目的地,或者只让某一些包到达。

需要的包

一些常见的场景包括,只允许来自信任源的连接、阻止连接到服务器未提供的服务,以及只允许连接到特定服务。在这些情况下,您都可以使用 AIX 操作系统附带的 TCP/IP 过滤功能。

TCP/IP 过滤功能包含在 IPSec 包中,因此检查是否存在的最简单的方法就是用 lslpp –l 列出已安装的包,并验证是否有以下两个包:

bos.net.ipsec.keymgt
bos.net.ipsec.rte

IPsec 是用来创建服务器之间加密通信通道的协议,此通道也常被称为隧道或 VPN 隧道。本文不会详细讨论 IPsec,如果想要在您的环境中使用 IPSec,要保证已安装以下包:

bos.msg.LANG.net.ipsec 
bos.net.ipsec.websm 
bos.crypto-priv

有关 IPSec 的更完整的描述,您可以参考本文 参考资料 一节中的 Security Guide 文档。

命令参考

要使用 TCP/IP 过滤功能,只要用到几个命令,本节将加以说明,下节将会用到。如果您熟悉 AIX 命令,您将会看到它们很类似,在名称前都有描述性前缀,如 mklsrm,后面还有 filt 后缀。

  • lsfilt:列出表中的过滤规则。创建之后,每条规则都会被分配一个编号,可以轻松地使用该命令看到。
  • genfilt:向表中添加一条过滤规则。这是用来创建新过滤的命令。如果未使用 –n 参数来指定位置,那么新的规则将会被添加到表格末尾。
  • chfilt:用来改变现有的过滤规则。您需要提供规则 ID 以指明要修改哪条规则。规则 1 是默认规则,无法使用此命令修改。
  • rmfiltrm 后缀对所有 UNIX 管理员来说应该很熟悉。您可以使用此命令在任何时候根据规则 ID 来删除过滤规则。
  • mkfilt:这是一个重要的命令,它可以激活或停用表中的过滤规则,启用或禁用过滤日志,并改变默认规则。如果要使对过滤表的更改生效,需要在运行此命令时带上一些参数。

过滤策略的方法

当谈到 TCP/IP 过滤中的策略时,通常是指两种可能的安全方法:

  • 默认拒绝所有流量,只允许您许可的。
  • 默认允许所有流量,只拒绝您限制的。

从安全角度出发,拒绝所有策略是最安全的。但是如果您是配置正在使用中的服务器,那么您在运用此策略前一定要非常谨慎,防止产生不必要的服务中断。对于新的服务器,从开始就使用此策略要简单一些,因为在投入使用之前有足够的时间进行测试。

允许所有策略更加宽松,而且它适用于您有生产服务并想要保护一个特定服务的情况。


示例场景

在本节中,我将会展示一个简单的示例场景,以此作为在服务器上实现其他过滤配置的良好开端。

场景

您的公司在 p710 Express 服务器的 AIX LPAR 上部署了一个新的内网应用程序,公司的安全部门要求限制对 Web 应用程序的访问,只允许来自地址为 172.16.10.5 的内部代理服务器的流量。Web 应用程序监听 TCP 端口 80 和 443。安全部门提出第二条要求,只允许与连接到管理网络 10.1.1.x 的接口的 SSH 连接。安全部门强调,这些要求是强制性的,与服务的的所有配置无关,作为额外的保护层。服务器的 IP 地址是 172.16.10.45 和 10.1.1.45(第一个是提供给用户的地址,第二个是供管理员登录服务器并执行维护任务使用的)。下列图形显示了此场景。

图 1:示例场景
示例场景演示

实现 – 设置规则

首先启用服务器中的 IPSec 以启用 IP 过滤。为此,使用 ipsec4 的 smitty 快速路径:

# smitty ipsec4

选择 Start/Stop IP Security 并按下 Enter 键:

Move cursor to desired item and press Enter
    Start/Stop IP Security
    Basic IP Security Congiguration
    Advanced IP Security Configuration

选择 Start IP Security 并按下 Enter 键:

Move cursor to desired item and press Enter
    Start IP Security
    Stop IP Security

从以下各项中选择 Start IP Security 并按下 Enter 键:

Type or select values in the entry field
Press Enter AFTER making all desired changes              [EntryFields]
    Start IP Security                    [Now and AfterReboot]                  
    Deny ALL Non0Secure IP Packets                        [No]

之前的步骤演示了如何启用 IPSec,从而利用 IP 过滤功能。成功完成后,会显示如下内容:

Command:OK    stdout: yes    stderr: no
 
Before command completion, additional instructions may appear below.

ipsec_v4 Available
Default rule for IPv4 in ODM has been changed.Successfully set default action to PERMIT

如果在这里看到错误,那么可能是系统丢失了某些在 需要的包 一节中提到过的包。确认 IP Sec 是否在系统中启用的一个方法是使用如下命令:

# lsdev -l ipsec_v4
ipsec_v4 Available  IP Version 4 Security Extension

对于日志功能,决定要记录哪些事件时要非常慎重。像 “记录所有内容” 这样的策略可能会变成填写日志文件系统的噩梦,甚至可能对服务器造成副作用。要理性对待日志策略。在此场景中,只要记录被过滤功能拒绝的包,因此日志将会帮助您识别未授权的连接源。日志是由每条规则中的 -l(小写 L)参数控制的,其后是 Y 或 N(Yes 或 No)。

现在可以使用 lsfilt 命令来查看创建的默认规则。不要急着修改默认规则,先搞懂它们的用途和影响。

现在,创建符合安全部门要求的规则。

我们首先创建限制对管理网络的管理访问的规则。

## Rules to allow authorized administration traffic
# genfilt -v 4 -a P -s 10.1.1.0 -m 255.255.255.0 -d 10.1.1.45 -M
255.255.255.255 -g N -c tcp -o gt -p 1023 -O eq -P 22 -r L -w I -l 
N -f Y -i all
Filter rule 3 for IPv4 has been added successfully.
# genfilt -v 4 -a P -s 10.1.1.45 -m 255.255.255.255 -d 10.1.1.0 -M 
255.255.255.0 -g N -c tcp/ack -o eq -p 22 -O gt -P 1023 -r L -w O -l
N -f Y -i en1
Filter rule 4 for IPv4 has been added successfully.

## Rules to deny and log unauthorized administration traffic. 
## Note that we add one rule per server address to have 
## independence from service configuration.
# genfilt -v 4 -a D -s 0 -m 0 -d 10.1.1.45 -M 255.255.255.255 -g N -c 
tcp -O eq -P 22 -r L -w I -l Y -f Y -i all
Filter rule 5 for IPv4 has been added successfully.
# genfilt -v 4 -a D -s 0 -m 0 -d 172.16.10.45 -M 255.255.255.255 -g N 
-c tcp -O eq -P 22 -r L -w I -l Y -f Y -i all
Filter rule 6 for IPv4 has been added successfully.

以上规则实现了管理员连接的目标。请注意,尽管我故意在第 1 条、第 3 条规则留下空挡,不限制 en1 的接口。我这么做是为了展示如何使用 chfilt 命令来修改已有的规则,如下所示:

# chfilt -v 4 -n 3 -i en1
Filter rule 3 for IPv4 has been changed successfully.#

现在我们添加规则来限制来自内部代理服务器 172.16.10.5 对内网应用程序的访问。

## Rules to allow traffic between Proxy and Web Application
# genfilt -v 4 -a P -s 172.16.10.5 -m 255.255.255.255 -d 172.16.10.45 
-M 255.255.255.255 -g N -c tcp -o gt -p 1023 -O eq -P 80 -r L -w I -l 
N -f Y -i en2
Filter rule 7 for IPv4 has been added successfully.
# genfilt -v 4 -a P -s 172.16.10.45 -m 255.255.255.255 -d 172.16.10.5 
-M 255.255.255.255 -g N -c tcp/ack -o eq -p 80 -O gt -P 1023 -r L -w O 
-l N -f Y -i en2
Filter rule 8 for IPv4 has been added successfully.
# genfilt -v 4 -a P -s 172.16.10.5 -m 255.255.255.255 -d 172.16.10.45 
-M 255.255.255.255 -g N -c tcp -o gt -p 1023 -O eq -P 443 -r L -w I -l N 
-f Y -i en2
Filter rule 9 for IPv4 has been added successfully.
# genfilt -v 4 -a P -s 172.16.10.45 -m 255.255.255.255 -d 172.16.10.5 
-M 255.255.255.255 -g N -c tcp/ack -o eq -p 443 -O gt -P 1023 -r L -w 
O -l N -f Y -i en2
Filter rule 10 for IPv4 has been added successfully.

## Rules to reject traffic to the Web Application not coming from the Proxy
# genfilt -v 4 -a D -s 0 -m 0 -d 172.16.10.45 -M 255.255.255.255 -g N 
-c tcp -O eq -P 80 -r L -w I -l Y -f Y -i all
Filter rule 11 for IPv4 has been added successfully.
# genfilt -v 4 -a D -s 0 -m 0 -d 10.1.1.45 -M 255.255.255.255 -g N 
-c tcp -O eq -P 80 -r L -w I -l Y -f Y -i all
Filter rule 12 for IPv4 has been added successfully.
# genfilt -v 4 -a D -s 0 -m 0 -d 172.16.10.45 -M 255.255.255.255 -g N
-c tcp -O eq -P 443 -r L -w I -l Y -f Y -i all
Filter rule 13 for IPv4 has been added successfully.
# genfilt -v 4 -a D -s 0 -m 0 -d 10.1.1.45 -M 255.255.255.255 -g N 
-c tcp -O eq -P 443 -r L -w I -l Y -f Y -i all
Filter rule 14 for IPv4 has been added successfully.

以上命令已经创建了满足此场景要求的所有规则。请注意,规则的顺序对实现目标是非常重要的。

下一步,还需要做一些事来启用对拒绝包的记录,并激活配置。

实现 – 设置日志

现在配置 syslog 守护进程将所有来自 IP 过滤的条目记录在指定的文件中。

## Backup syslog.conf file before modifying it.
# cp /etc/syslog.conf /etc/syslog.conf.bak
## Append entry for IP filters logs.
# echo "local4.debug /var/adm/ipsec.log" >> /etc/syslog.conf
## Create log file and set permissions (permissions may depend on 
## company policies)
# touch /var/adm/ipsec.log
# chmod 644 /var/adm/ipsec.log
## Refresh the syslog subsystem to activate the new configuration.
# refresh -s syslogd
0513-095 The request for subsystem refresh was completed successfully.

实现 – 激活所有内容

到此为止,您已经创建了过滤规则,并准备好了 syslog 以记录被拒绝包的日志。现在可以使用 mkfilt 命令激活配置。

 # Start the log functionality of the filter rule module
# mkfilt -g start
# # Activates the filter rules
# mkfilt –u

应急模式:假设您通过控制台登录到服务器,创建并激活了新的防火墙规则。此时突然接到某人的电话,说他无法访问服务器中运行的某一项服务。您意识到,其中一条规则有疏漏,或不正确,但此时来不及逐条检查,需要立即恢复服务。如果发生这种情况,您只要运行 mkfilt –d 来停用这些规则。不要误用 rmfilt,此命令不仅会影响表中的规则,而且在运行 mkfilt 命令后才会起作用。

一旦完成配置,您就可以定期检查 /var/adm/ipsec.log 文件丢弃了哪些包,并检测潜在攻击以及对配置所做的调整。


结束语

在本文中,我演示了 AIX IP 过滤功能,这是一项内置的而且很有用的功能,可让系统管理员在服务器中实现额外的安全层。同时还讲解了一些基本的网络概念,并总结了执行过滤所要用到的包和命令。与往常一样,所有的防火墙配置都要认真规划,以避免产生副作用,这些副作用往往很难排除。

本文是一个对想要使用此模块进行配置的 UNIX 管理员的很好的入门指导。

参考资料

学习

  • RFC768 - User Datagram Protocol 提供了对协议、格式和接口的简介。
  • RFC791 - Internet Protocol 专门介绍 DoD Standard Internet Protocol。
  • RFC792 - Internet Control Message Protocol 用于主机到主机的数据报服务。
  • RFC793 - Transmission Control Protocol 描述了 DoD Standard Transmission Control Protocol (TCP)。
  • AIX Security Guide 为系统管理员提供了关于文件、系统和网络安全的完整信息。
  • AIX and UNIX 专区:developerWorks 的“AIX and UNIX 专区”提供了大量与 AIX 系统管理的所有方面相关的信息,您可以利用它们来扩展自己的 UNIX 技能。
  • AIX and UNIX 新手入门:访问“AIX and UNIX 新手入门”页面可了解更多关于 AIX 和 UNIX 的内容。
  • AIX and UNIX 专题汇总:AIX and UNIX 专区已经为您推出了很多的技术专题,为您总结了很多热门的知识点。我们在后面还会继续推出很多相关的热门专题给您,为了方便您的访问,我们在这里为您把本专区的所有专题进行汇总,让您更方便的找到您需要的内容。
  • AIX and UNIX 下载中心:在这里你可以下载到可以运行在 AIX 或者是 UNIX 系统上的 IBM 服务器软件以及工具,让您可以提前免费试用他们的强大功能。
  • IBM Systems Magazine for AIX 中文版:本杂志的内容更加关注于趋势和企业级架构应用方面的内容,同时对于新兴的技术、产品、应用方式等也有很深入的探讨。IBM Systems Magazine 的内容都是由十分资深的业内人士撰写的,包括 IBM 的合作伙伴、IBM 的主机工程师以及高级管理人员。所以,从这些内容中,您可以了解到更高层次的应用理念,让您在选择和应用 IBM 系统时有一个更好的认识。

获得产品和技术

  • 免费 试用 IBM 软件 。下载试用版,登录在线试用,在沙箱环境中使用产品,或是通过云来访问。有超过 100 种 IBM 产品试用版选择。

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=AIX and UNIX
ArticleID=778834
ArticleTitle=使用 AIX TCP/IP 过滤功能设置防火墙
publish-date=12052011