网络管理员指南 -9.各种网络应用程序-2>tcpd 访问控制设备

/ns/wz/net/data/20020808033400.htm

网络管理员指南 -9.各种网络应用程序-2>tcpd 访问控制设备


本文出自:http://www.linpus.com.tw 作者: Andrew Anderson


因为打开一台计算机到网络访问,可能产生许多安全风险,应用程序被设计用来防卫若干类型的攻击。
然而,其中的一些可能有缺陷(大多数彻底地由 RTM 因特网蠕虫论证了),或不在安全的主机间辨别,
从中一种特别的服务将被接受,并且正确的主机的请求将被拒绝。我们已经简短地讨论了指针和上述
tftp 服务器。这样,一个人仅仅想要限制存取到这些服务器到“信任的主机”,它不可能使用通常的
安装, inetd 或者在此提供这种服务到所有的顾客,或者不提供。

为此的一个有用的工具是 tcpd ,一张所谓的daemon wrapper。对于TCP服务器,你想要监视或保护,
它引发服务器程序的替代。 tcpd 记载请求到 syslog daemon, 如果远程主机被允许使用那种服务
就进行检查,并且只有这个成功,它才执行真实的服务器程序。注意,这不与UDP为基础的服务器一
起工作。

例如,隐蔽指针daemon,你必须在 inetd.conf 中改变相应的线到

# wrap finger daemon
finger stream tcp nowait root /usr/sbin/tcpd
in.fingerd



没有增加任何访问控制,这将只是作为通常的指针安装出现到顾客面前,但是任何请求都会被记载到
syslog 的 auth 设备。

访问控制借助于被称为 /etc/hosts.allow 和/etc/host.deny的两个文件执行。他们分别地包含允许
和否认存取到某个服务和主机。当 tcpd 从被称为了 biff.foobar.com 的一位客户主机中为象指针一
样的一种服务处理一个请求时,它扫描 hosts.allow 和 hosts.deny (以这个顺序)为一个入口匹配服
务和客户主机。如果一个匹配的入口在 hosts.allow被发现,存取被同意,不考虑在 hosts.deny 的任
何入口。如果一个匹配在 hosts.deny被发现 ,请求被关闭连接所拒绝。如果根本没有匹配被发现,
请求被接受。

在存取文件中的入口看起来像这样:

servicelist: hostlist [:shellcmd]


服务列表是从 /etc/services 中的服务名字表,或关键字ALL。除了指针和 tftp 匹配所有的服务,使
用“ALL EXCEPT finger, tftp ”。

主机列表是主机名字或IP地址的一张表,或关键字ALL,LOCAL,或UNKNOWN。所有匹配任何主机,当LOCAL
匹配的主机名字不包含一个点时。UNKNOWN匹配任何主机,它的名字或地址查找失败了。以一个点开始
的一个名字匹配所有主机,它的域对这个名字是相等的。例如, .foobar.com 匹配 biff.foobar.com 。
也有为IP网络地址和子网数字的规定。细节请参见 hosts_access ( 5 )手册页。

否认存取到指针和 tftp服务器除了本地主机的所有,将下面的东西放在 /etc/hosts.deny 中,并且让
/etc/hosts.allow 为空:

当入口被匹配时,可选的 shellcmd 域可以包含一个设定命令行解释器的命令被调用。这对于建立可以
暴露潜在攻击者的陷井是很有用的:

% h 和% d 参数通过tcpd分别地扩展到顾客主机名字和服务名字。细节请参见hosts_access ( 5 )手册页。