简介
一个 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 命令,您将会看到它们很类似,在名称前都有描述性前缀,如 mk
、ls
和 rm
,后面还有 filt
后缀。
- lsfilt:列出表中的过滤规则。创建之后,每条规则都会被分配一个编号,可以轻松地使用该命令看到。
- genfilt:向表中添加一条过滤规则。这是用来创建新过滤的命令。如果未使用
–n
参数来指定位置,那么新的规则将会被添加到表格末尾。 - chfilt:用来改变现有的过滤规则。您需要提供规则 ID 以指明要修改哪条规则。规则 1 是默认规则,无法使用此命令修改。
- rmfilt:
rm
后缀对所有 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 |
现在可以使用 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 |
一旦完成配置,您就可以定期检查 /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 论坛