TCP Wrappers 能够让系统管理员通过 inetd.conf 文件控制和记录对本地主机的基于 TCP 的连接。TCP wrappers,也称作 wrappers,它能在 AIX 主机上快速锁定通过 TCP 访问的客户端。本文讨论 wrappers 如何轻松保护主机的安全。

David Tansley, 系统管理员, Ace Europe

//ibm.com/developerworks/i/p-dtansley.jpgDavid Tansley 是一位自由作家。他有 15 年 UNIX 系统管理经验,最近 8 年使用 AIX。他喜欢打羽毛球和观赏一级方程式赛车,但是最喜欢与妻子一起开着 GSA 摩托车旅行。



2011 年 9 月 05 日

简介

TCP wrappers 通常被称为 wrappers,它是由 Wieste Venema 编写,已经出现几年了。其背后的思想很简单,其要旨是可以在您的 AIX (UNIX®/Linux®) 主机上快速轻松地锁定流行的通过 TCP 访问的客户端。

Wrappers 允许系统管理员控制 wrappers 支持的基于 TCP 的服务或守护进程的访问。Tcpd 控制从 /etc/inetd.conf 中运行的 TCP 守护进程。不过,很多基于 TCP 的应用程序已加入 wrappers 支持(一般使用 libwrap 库),并且能感知 wrapper;不通过 /etc/inetd.conf 进行控制也没有关系。可以在 wrappers 下进行访问控制的通常有 telnet、ssh、sendmail、ftp 包、pop3 和 stunnel。

Wrappers 提供对基于 UDP 的连接的有限控制,不过我建议使用内置或第三方防火墙进行基于 UDP 的访问。

如果要看应用程序是否支持 wrapper,使用 strings 命令和 grep 获取 hosts_access 或 host:

# strings /usr/sbin/sshd|grep hosts_access
@(#)65  1.1  src/tcpwrapper/usr/sbin/tcpwrapper/hosts_access.c, tcpwrap, 53twrp2
10, 0617A_53twrp210 2/27/06 04:52:25

或者可以使用 ldd 命令:

ldd </path/application> | grep libwrap

wrappers 守护进程称为 tcpd。得到调用的是它,而非 /etc/inetd.conf 文件中的实际守护进程。Tcpd 读取两个文件,hosts.allow 和 hosts.deny,读取时基于这两个文件中的规则。当找到第一条规则匹配后,会拒绝或允许调用客户端的访问。所有操作都会被记录到消息文件或指定的日志文件中,这可以通过 syslog 来确定。通常情况下,hosts.allow 包含允许访问的规则,而 hosts.deny 包含拒绝访问的规则。

下面看一下典型的 telnet 客户端场景,它是这样工作的。客户端试图通过 telnet 会话连接到配置有 wrappers 的主机上。未知的客户端连接到 wrappers 守护进程,而不是实际的 telnentd 守护进程。根据 hosts.allow 或 hosts.deny 文件中的规则,会允许或拒绝该客户端的访问。如果拒绝访问,就会终止 telnet 连接。如果该客户端符合允许访问规则,那么 tcpd 就会交出对所调用的实际守护进程的控制权(本例中是 telnetd)。无论哪种情况,许可或拒绝访问都会通过 syslog 被记录下来。

在本文中,我将演示如何从头开始配置,并且讨论和审查阻止或允许不同远程服务连接的规则。


构建 wrappers

可以下载 Wrappers 并用于 IPv4 或 IPv6 的网络。下载的版本是 7.6。根据我管理超过 50 台 AIX 主机的经验,IPv6 版本在只有 IPv4 的网络中运行得很好,因此使用此版本。要构建 wrappers,需要一个 C 编译器;因此我使用 AIX 工具箱中的 gcc。在 参考资料 部分中可以找到所有下载内容的详细信息。

# gcc -v
Target: powerpc-ibm-aix5.3.0.0
...gcc version 4.2.0

下载完成后,解压缩并解包 wrappers。文件解压到 tcp_wrappers_7_6-ipv6.4 目录:

# gunzip tcp_wrappers_7.6-ipv6.4.tar.gz
# tar -xvf tcp_wrappers_7.6-ipv6.4.tar
x tcp_wrappers_7.6-ipv6.4
x tcp_wrappers_7.6-ipv6.4/DISCLAIMER, 792 bytes, 2 media blocks.
x tcp_wrappers_7.6-ipv6.4/BLURB, 1736 bytes, 4 media blocks.
x tcp_wrappers_7.6-ipv6.4/CHANGES, 19195 bytes, 38 media blocks.
x tcp_wrappers_7.6-ipv6.4/Makefile, 32976 bytes, 65 media blocks.
….
#

下一个任务是定制 wrappers,使它 能够进行规则检查、查找和查找验证(如果需要的话)、记录、生成程序和使用标题。

在 makefile 中,通过取消注释行的方式启用以下条目,如下所示:

# SysV.4 Solaris 2.x OSF AIX
REAL_DAEMON_DIR=/usr/sbin

real_daemon 通知 wrappers 实际的守护进程,如 ftpd、telnetd 和 sshd 在哪里。

HOSTNAME= -DALWAYS_HOSTNAME

始终尝试主机名查找:

ACCESS  = -DHOSTS_ACCESS

启用主机控制访问是 wrappers 的最关键之处,所以确定它未被注释。

STYLE   = -DPROCESS_OPTIONS     # Enable language extensions.

为标题消息启用语言扩展,使用 shell 命令以及 spawn 和 twist 命令。

FACILITY= LOG_MAIL

确保 wrappers 了解 syslog 机制:

FACILITY=LOG_LOCAL0

如果您愿意,您可以不使用 LOCAL,而从 wrappers 发送消息到具体的日志文件:

IPV6 = -DHAVE_IPV6

这支持 IPv6。

如果在主机上运行 IPv4,未注释以下内容或客户端的 IP 地址可能会让 wrappers 无法解析。通常,它会将 IP 记录为 0.0.0.0. 而不是实际 IP。

SEVERITY= LOG_INFO

通过 syslog 的日志记录级别:

PARANOID= -DPARANOID

Wrappers 会做正向和反向查找,从而检查主机名对应的 IP。如果此条件不满足,就会按照访问规则采取行动。如果 DNS 设置不正确,就会造成连接客户端的问题。如果与您的安全策略有冲突,那么就不要取消注释该行。

在实际的 AIX 构建阶段,我们会:

generic aix osf alpha dynix:
        @make REAL_DAEMON_DIR=$(REAL_DAEMON_DIR) STYLE=$(STYLE) \
        LIBS= RANLIB=ranlib ARFLAGS=rv AUX_OBJ=setenv.o \
        NETGROUP=-DNETGROUP TLI= IPV6="$(IPV6)" all

保存并退出更改;然后构建。

# make CC=gcc aix

完成之后,会编译以下的二进制文件:

tcpd会启动 tcpd 二进制文件而不是 /etc/ inetd.conf 中为客户端提供服务的实际守护进程。如果第三方应用程序已经带有 wrappers 支持,服务或守护进程会查询允许或拒绝访问的 hosts.allow 或 hosts.deny 文件,这由第三方守护进程或服务决定。
tcpdmatch该工具可帮助测试和诊断 tcpd 如何处理传入的请求。该工具非常有用,您可以通过提供守护进程名称和客户端来测试访问控制的规则。
tcpdchk该工具可以读取当前存在的 hosts.allow 和 host.deny 文件并检查所有语法错误。
try-from该工具可以帮助排除访问规则中的错误,它是在远程的 shell 中执行,以验证主机名和 IP 是否返回。
safe_finger该工具包含 finger 命令,可以确定客户端上的反向查找。
libwrap.a可以在构建其他应用程序时使用该库来提供 wrapper 支持。如果带有 libwrap,那么第三方应用程序应该履行 hosts.allow 和 hosts.deny 中的规则。

下一个任务是将二进制文件和库复制到本地 bin 和 sbin 目录中。在本例中,我将文件复制到以下目录:

# cp tcpd /usr/sbin
# cp tcpdmatch /usr/local/bin
# cp tcpdchk /usr/local/bin
# cp try-from /usr/local/bin
# cp safe_finger /usr/local/bin

最后是 libwrap:

# cp libwrap.a /usr/local/lib

确保可以对 tcpd 文件有执行的权限。


配置 wrappers

下一个任务是在 /etc/inetd.conf 中调用 tcpd 而不是实际的守护进程或服务。首先,创建 /etc/inetd.conf 的备份。在本例中,我仅仅替换想要控制访问的守护进程。我会用 tcpd 替代 ftpd 和 telnetd 作为 /etc/inetd.conf 中的调用守护进程。随意保护此文件中的其他守护进程。/etc/inetd.conf 中我们感兴趣的行有:

ftp     stream  tcp6      nowait  root    /usr/sbin/ftpd              ftpd 
telnet  stream  tcp6    nowait  root    /usr/sbin/telnetd       telnetd -a

我们只是替换想要保护的守护进程,本例中是用 tcpd 替换 ftpd 和 telnetd。编辑完成后,更改以下配置:

ftp     stream  tcp6    nowait  root    /usr/sbin//tcpd         ftpd
telnet  stream  tcp6    nowait  root    /usr/sbin/tcpd       telnetd -a

下一步,刷新 inted 让更改生效。

# refresh -s inetd

根据以上所述,对于其他的 wrapper 支持的第三方应用程序,应查询 hosts.allow 和 hosts.deny 文件。履行文件中的规则从而拒绝或允许对自己的客户端的访问是应用程序的责任。我们现在开始配置主机文件。

wrappers 会默认记录到 /var/adm/messages,使用的是设备级的权限:

auth.info    /var/adm/messages

如果您在 makefile 中指定了 LOCAL 设备,那么您必须告诉 syslog 使用 syslog.conf 中哪个文件。以下示例中,所有在 wrappers 中使用 LOCAL 的消息都记录到 /var/adm/wrappers.log 文件中。

local0.info             /var/adm/wrappers.log

确保在重启 syslog 之前创建 wrappers.log 文件:

# refresh -s syslogd

规则

要关闭 wrappers,只需将 hosts.allow 和 hosts.deny 文件改成其他文件名即可。如果不存在允许或拒绝访问文件,wrappers 将不会使用访问控制,从而有效关闭 wrappers 。或者将主机文件清空或清零,这会有同样的效果。

Wrappers 首先在 hosts.allow 文件中查找规则匹配。如果找到匹配,那么 tcpd 会根据规则停下来,批准或拒绝访问。如果在 hosts.allow 文件中未找到匹配,那么 tcpd 会读取 hosts.deny 文件直到找到匹配。如果找到匹配,就拒绝访问,否则批准访问。

我在前面提到了两个文件 hosts.allow 和 deny,但根据规则的灵活性,可以只用一个文件,通常是 hosts.allow 来包含 wrappers 所有规则。

Wrappers 会查询 hosts.allow 和 hosts.deny 中的规则来确定访问。规则的基本格式是:

daemon, daemon, ...: client, client, ...: option

其中:

daemon要监控的服务,如 telnetd、ftpd、sshd
client主机名、IP 地址/IP 范围,或域名

选项有:

allow对客户端的访问
deny对客户端的访问
except会匹配第一个列表中所有项,除非匹配第二个列表。例如,允许 domainA 中所有项,除了 hostX.domainA 和 hostY.domanA。

当一行有多个守护进程或客户端时,用逗号分隔开来。可以用 ALL 关键字来表示所有守护进程或所有客户端。

LOCAL 关键字表示匹配所有不包含点号(“.”)的主机;这表示所有与域不相关的主机。

如果规则允许的话,在每个规则末尾都加上允许或拒绝选项,这是一个好的做法、好的习惯(因为这可以清晰地描绘访问规则,尤其是在 hosts.allow 中有多个允许或拒绝规则时)。

还有一些其他的选项,我将在稍后演示。现在,我们将访问控制结合在一起。

对 hosts.allow 和 hosts.deny 的更改是动态的。一旦文件保存,更改就会生效。

一个好的起点是,仅仅允许您想要访问主机的客户端使用允许的守护进程,拒绝其他所有客户端。

所以,hosts.deny 可以使用以下规则拒绝所有客户端访问所有守护进程:

ALL:ALL

本节的其他示例都是只与 hosts.allow 文件有关。为了能让所有守护进程从本地主机(即,与域名不相关的主机)访问,可以使用:

ALL:LOCAL : allow

就我个人而言,我不喜欢使用在任何主机上匹配的 LOCAL 模式,因为网络中所有主机应该属于您的或是某个域。如果原来不是,那么应该是的。尽管如此,在一些小型网络的情况下,却不是这样,LOCAL 允许这些主机访问。

我们假设仅仅允许属于 mydomain.com 域的主机使用 telnet 或 ssh。以下的 hosts.allow 条目能完成此任务:

telnetd,sshd:.mydomain.com :allow

请注意本例中 mydomain.com 之前的点号(“.”)。这是个通配符,表示所有主机以 mydomain.com 结尾。我们还在规则结尾指定这是一条允许规则。尽管这不是严格限制,但如前所述,这样做是一种好的做法。

现在进一步假设我们允许使用以下 IP 地址远程登录 ssh 和 telnet:192.168.4.10 和所有以 192.168.6 开头的 IP 地址。请再次注意,在部分 IP 地址后使用点号;这相当于 192.168.6.*.,或者更精确一点,以 192.168.6 开头的所有 IP 地址。另一种看待 192.168.6. 范围内 IP 地址的方法是等于 192.168.6/24 或所有 192.168.6.1 与 192.168.6.254 之间的 IP 地址。

另外,我们还想允许使用 telnet 和 ssh 访问以下域:mydomain.com 和 mydomain2.com 域。以下命令能完成此任务:

telnetd,sshd:.mydomain.com, .mydomain2.com :allow
telnetd,sshd:192.168.4.10 , 192.168.6.: allow

现在,我们假设允许从 mydomain.com 域中的所有主机上进行 ftp 访问,除了 mydomain.com 中的两个主机:uktrip1 和 uktrip2 。通过使用允许规则,我们可以利用 except 选项提供两个列表,让 “except” 左侧的主机允许访问,“except” 右侧列表中包含的主机拒绝访问。

telnetd,sshd:.mydomain.com :allow
telnetd,sshd:192.168.4.10 , 192.168.6.: allow
ftpd:.mydomain.com except uktrip1.mydomain.com, uktrip2.mydomain.com : allow

我们现在看看拒绝规则。要拒绝 192.168.8. 和 192.168.9. 的 telnet 访问,但允许 192.168.6. 的 telnet 访问,我可以使用:

telnetd :192.168.8., 192.168.9.: deny
telnetd :192.168.6.: allow

前一个示例也可以用 except 选项来改写:

telnetd:192.168.6. except 192.168.8., 192.168.9.: allow

Wrappers 会将消息记录到 /var/adm/messages 文件中。消息文件中一个典型的名为 tardis 的被拒绝 telnent 连接会像这样:

Oct 23 15:50:55 rs6000 auth|security|warning telnetd[270546]: refused connect from
 tardis

一个典型的名为 tardis 的失败的 ssh 连接像这样:

Oct 23 15:53:36 rs6000 auth|security:info sshd[262252]: refused connect from tardis

如果打开 PARANOID,那么 wrappers 会通知您所有无法解析的主机与 IP 不匹配情况:

error ftpd[2605110]: warning:/etc/hosts.allow, line 2: host name/address mismatch: 
192.168.7.12 != uktrn004.mydomain.com

有时候能看到哪些主机 DNS 条目不正确也是好事,这样可以被负责 DNS 维护的人员纠正过来。在公司内部网络尤其如此。与拒绝不匹配主机/IP 不同的是,只允许域用户进入(假设这是在安全的公司网络中)。在以下示例中,所有属于 mydomain.com 域的用户都允许访问,请注意对所有守护进程都使用了 ALL:

ALL:PARANOID, mydomain:allow

使用诊断工具 tcpdmatch 和 tcpdchk

tcpdchk 工具会检查 hosts.allow 和 hosts.deny 文件中的语法错误。它还会试着解析文件中的 IP 地址以确定其存在,并检查 /etc/inetd.conf 文件相应的访问文件中的守护进程是否存在。tcpdchk 的基本格式是:

tcpdchk –a | -v

此处:

-a显示有错误或歧义项的行。
-v检查并显示所有规则。

例如,使用 all 规则检查:

# tcpdchk –v 
Using network configuration file:/etc/inetd.conf

>>> Rule /etc/hosts.allow line 4:daemons:telnetd sshd
warning:/etc/hosts.allow, line 4: sshd: no such process name in /etc/inetd.conf
clients:192.168.4.10 192.168.5.access:   granted

>>> Rule /etc/hosts.allow line 5:daemons:ftpd
clients:.mydomain.com EXCEPT uktrip1.mydomain.com uktrip2.mydomain.com
access:   granted

>>> Rule /etc/hosts.deny line 1:daemons:ALL
clients:ALL
option:   banners /etc/banners/deny
option:   DENY
access:   denied

Tcpdchk 在第一条规则条目输出中报告,sshd 服务并不是从 /etc/inetd.conf 中运行,这是对的。此版本的 sshd 带有 wrapper 支持,存放在 /usr/sbin 中。第二条规则条目输出报告没有错误,而且这些域可以通过 DNS 解析。host.deny 文件的第三条规则条目输出报告也没有错误。

tcpdmatch 工具非常适于在设置访问规则之前对其进行初始测试。wrappers 会根据 hosts.allow 和 osts.deny 文件中的规则,预测访问是批准还是拒绝的。只需要提供想要测试的守护进程的名称和 IP 或主机或域名。

tcpdmatch 的基本格式是:

tcpdmatch <daemon> <host>

其中,<daemon> 是实际的守护进程,例如 ftpd,<host> 是 IP 或主机名。

假设我们在 hosts.allow 中只有以下访问规则:

telnetd,sshd:192.168.4.: allow

现在 tcpdmatch 正在运行,将它解析为 IP 为 192.168.4.12 的 telnetd 守护进程名。以下是输出内容:

# tcpdmatch telnetd 192.168.4.12
tcpdmatch telnetd 192.168.4.12
client:   address  192.168.4.12
server:   process  telnetd
matched:/etc/hosts.allow line 1
option:   allow
access:   granted

在以上输出中,规则说明 IP 192.168.4.12(针对 telnetd)与 IP 范围 192.168.4. 匹配,因此批准访问。

现在,如果我将它解析为 IP 为 192.16.4.12 的 ftpd 守护进程,结果如下:

# tcpdmatch ftpd 192.168.4.12
client:   address  192.168.4.12
server:   process  ftpd
matched:/etc/hosts.deny line 1
option:   DENY
access:   denied

在以上输出结果中,tcpdmatch 正确说明拒绝访问,因为对 IP 以 192.168.4 结尾的客户端使用 ftpd 没有访问规则。

现在,如果我将它解析为 IP 为 192.168.6.32 的 sshd 守护进程/服务,结果如下:

# tcpdmatch sshd 192.168.6.32
warning: sshd: no such process name in /etc/inetd.conf
client:   address  192.168.6.32
server:   process  sshd
matched:/etc/hosts.deny line 1
option:   DENY
access:   denied

如果 wrappers 并未如您所预料的方式运行,它拒绝或允许了错误的主机,请记住 wrappers 可能在第一条规则匹配时就退出;规则的顺序也很重要。当您有问题时,也可使用 tcpdchk 对客户端主机、IP 地址测试规则。

在此输出中,tcpdmatch 正确地声明访问被拒绝,因为此 IP:192.168.6.32(针对 sshd)不是 IP:192.168.4. 范围内的一部分。


使用标题

Wrappers 允许使用标题,如范例中所示。这可以让您在建立连接或拒绝连接时将消息发送到传入的客户端上。我建议只对拒绝的访问使用标题。您可以用 /etc/security/login.cfg 的 herald 段 在登录屏幕上放置授权警告消息,或者在客户端连接后使用 /etc/motd。

要为拒绝的访问创建标题,首先要创建 /etc/banners/deny 目录。

现在,在目录中为每个服务守护进程创建一个文件。每个文件应当包含一个警告信息。当文件名与守护进程一样时,创建一条标题消息。对于 telnetd 守护进程,会创建一个名为 telnetd 的文件。对于 ftp 守护进程,会创建一个名为 ftpd 的文件。而对于 ssh 究竟如何工作,以及 ssh 客户端在哪里履行实际的 ssh 协议,标题消息也可能不会显示在客户端的 ssh 连接上。而在连接断开之前显示给不必要的调用者的消息将会下降到您自己的安全策略级别以下。尽管如此,可以有如下的消息:

Your connection has been refused.Access denied and the event is logged

如果要确认,可以在以下位置查看本范例的标题文件:

# pwd
/etc/banners/deny
# ls
ftpd      telnetd

# cat telnetd
Your connection has been refused.
Access denied and the event is logged

下一步,通知 wrappers 此项新的配置添加项。编辑 hosts.deny 文件加入以下条目:

All:ALL: banners /etc/banners/deny :DENY

当 telnet 或 ftp 客户端连接建立并且访问被拒绝时,就会出现带有守护进程名的标题文件,并且当被拒绝的客户端试图连接时,就会显示如下内容:

$ tn rs6000
Your connection has been refused.
Access denied and the event is logged

Twist 和 spawn

本节的示例都是只与 hosts.allow 文件有关。

在之前的章节中,我们讨论了标题。尽管如此,还可以使用 twist 选项发送消息给被拒绝的客户端。twist 选项的基本格式是:

twist 'shell command'

Twist 的实际动作是拒绝访问。Twist 实际上使用指定的操作替换当前服务。在以下示例中,使用 echo 命令将拒绝消息发送给被拒绝的客户端。如果 IP 为 192.168.9.14 的客户端试图用 telnet 或 ssh 连接,那么该示例会发送消息给它。

sshd,telnetd:192.168.9.14: twist /bin/echo "Your connection has been refused\
\nAccess denied and the event is logged"

spawn 选项的使用与 twist 一样,除了不会发送回复给客户端。Spawn 允许生成 shell 命令。通常,这会通过电子邮件或直接记录关于某个主机被拒绝或被允许的消息到日志文件中。spawn 选项的基本格式是:

spawn '(shell command)'

spawn 选项通常用于包含多个命令。使用括号是保证此命令分在一个组中,并且在子 shell 中执行。

看看此例,假设从测试服务器向生产服务器发出连接,此事肯定要通知相关人员,即使公司安全策略允许这种情况。

在以下示例中,所有来自 IP 地址为 192.168.9.24 的 ssh 和 telnet 连接都会被允许访问。一旦客户端连接上,就会执行 logger 命令。请注意在冒号(“:”) 用反斜杠转义的规则条目中保留下一个字符的值。一定要这么做,因为我们不想让 wrappers 认为这是一个分隔符,是访问规则的一部分。实际上,它是 logger 发送的消息的一部分:

telnetd,sshd:192.168.9.24 : spawn (/usr/bin/logger 'DEV BOX!!Warning!!\: 
 %a has connected') :allow

还要注意在之前的条目中,使用了特殊的 shell 扩展变量 %a,它们的前缀是 “%&a”。这些可以用来包含客户端信息,如果在您的消息中可以的话。常见的shell变量有:

  • %a - 客户端 IP 地址
  • %h - 客户端主机名
  • %c - 客户端用户名

连接成功后,logger 会通过 syslog 发送消息给 /var/adm/messages:

Oct 24 15:47:22 rs6000 user:notice root:DEV BOX!!Warning!!:192.168.9.24 has connected
Oct 24 15:47:22 rs6000 auth|security telnetd[245806]: connect from uk01dev002

还可以更改之前的规则,拒绝此 IP 地址并用 logger 通过 syslog 发送消息,例如:

telnetd,sshd:192.168.9.24 : spawn (/usr/bin/logger '* DEV BOX *!!Warning!!\: 
 %a has tried to connected') :deny

当访问被拒绝后,logger 会通过 syslog 发送消息给 /var/adm/messages:

Oct 24 20:02:39 rs6000 user:notice root:* DEV BOX *!!Warning!!:192.168.9.24 
 Tried to connect
Oct 24 20:02:39 rs6000 auth|security|warning telnetd[237744]: refused connect from
 uk01dev002

您还可以使用 spawn 通过电子邮件发送给用户。在以下示例中,IP 地址为 192.168.9.24 的客户端连接允许后,会发送电子邮件给用户 secport,允许使用 telnet 或 ssh 访问该客户端:

telnetd,sshd:192.168.9.24 : spawn (/usr/bin/echo 'DEV BOX!Warning %a has connected' 
 |/usr/bin/mail secport) :allow

结束语

通过使用 TCP Wrappers,或 wrappers,可以轻松地保护您的主机,在客户端接入时,守护进程能安全使用。假设您有相同的硬件,实施起来很简单,只要将所有二进制文件和所有主机文件复制到所有远程主机上即可。惟一需要的手工配置就是编辑 /etc/inetd.conf,但也可以用 sed 工具在脚本中完成。

参考资料

学习

  • 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 系统时有一个更好的认识。

获得产品和技术

讨论

条评论

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=755744
ArticleTitle=使用 TCP Wrappers 控制访问
publish-date=09052011