简介

一个 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 是用来创建服务器之间加密通信通道的协议,此通道也常被称为隧道或 ××× 隧道。本文不会详细讨论 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 产品试用版选择。

     

讨论

  • 在 Twitter 上关注 developerWorks。

     
  • 参与 developerWorks 博客 并加入 developerWorks 社区。

     
  • 加入 developerWorks 中文社区。查看开发人员推动的博客、论坛、组和维基,并与其他 developerWorks 用户交流。

     
  • 参与 AIX 和 UNIX® 论坛:
    • AIX 论坛
    • AIX for developers 论坛
    • 集群系统管理
    • 性能工具论坛
    • 虚拟化论坛
    • 更多 AIX 和 UNIX 论坛