Chinaunix首页 | 论坛 | 博客
  • 博客访问: 313113
  • 博文数量: 75
  • 博客积分: 1956
  • 博客等级: 上尉
  • 技术积分: 862
  • 用 户 组: 普通用户
  • 注册时间: 2007-11-21 15:36
文章分类

全部博文(75)

文章存档

2018年(1)

2012年(3)

2011年(19)

2010年(1)

2009年(1)

2008年(50)

分类: LINUX

2008-09-11 13:27:04

考点 15.01 利用tcp_wrappers 保护服务安全

网络并不比大多数操作系统更安全。虽然没有任何系统能保证100%安全,但一些安全措施可以增强系统的安全性,网络也是如此。当设计安全措施时,你需要从影响安全的两个方面考虑:用户的意外操作和入侵。

意外事件的产生主要是用户缺乏培训或不想遵守程序流程。如果安全策略过于繁琐,工作将变成一种折磨,你的用户就会回避的你的策略。密码规则过于严格,用户也许会把密码写到他们的办公桌上。

当入侵者侵入你的系统后,他(她)会寻找所感兴趣的信息,如信用卡。有些人或许只想让你的系统垮掉。你可以采取一些措施来保证你的网络安全。监控最近产生的 Red Hat 错误表。使用 yum,保证 Red Hat 系统包升级到最新。

在工作中:
Red Hat 已经将up2date用yum替换掉, RHEL5 依然保留了 Red Hat Network 注册和管理工具如:rhn_register 和 rhn_check。如果你使用Fedora Core 6 或 CentOS,Red Hat Network 是不可用的。幸运的是,Red Hat 考试不会考到与 Red Hat Network 有关的知识。

在这章稍后部分,你可以通过 /etc/hosts.allow 和 /etc/hosts.deny 文件来管理你的系统对特定请求的响应。你可以使用基于iptables 或 ipchains 的防火墙实施内核级的安全策略。保证安全的一个简单方法是尽量删除不使用的服务。

基于用户和主机的安全

防止入侵者利用某个服务侵入的最好方法是将这个服务从Linux 系统上彻底删除。但是,你可能要保留某些服务,以保证将来的需要。

在/etc/xinetd.d 和 /etc/init.d 目录下,你可以移除或撤销不使用的服务。对于你需要的服务,你可以使用 /etc 目录下的hosts.allow 和 hosts.deny 文件来控制接入服务的用户、计算机甚至某个网络。这个系统被称为 tcp_wrappers,默认是开启的,主要保护 xinetd 服务,在第13章有描述。

当系统收到某个服务的网络请求,它将请求转到 tcp_wrappers。系统记录这个请求并检查进入规则。如果没有特定主机和IP地址的限制,tcp_wrappers 将控制权交给服务。

关键的文件是 hosts.allow 和 hosts.deny。原理很简单:hosts.allow 中的用户和客户端是被允许接入的;而hosts.deny 中的用户和客户端会被拒绝连接。如果用户或客户端同时出现在两个文件中,则 tcp_wrappers 系统遵循如下步骤:
1、查询 /etc/hosts.allow 文件,如果匹配,允许进入,不再做其他操作;
2、查询 /etc/hosts.deny 文件,如果匹配,拒绝进入,不再做其他操作;
3、如果两个文件都没有匹配项,则默认允许接入。

/etc/hosts.allow 与 /etc/hosts.deny 文件中的语法是相同的。基本的格式与命令如下:
daemon_list : client_list

最简单的版本是:
ALL : ALL
这将应用规则到所有服务和所有用户或主机、IP地址。如果在 /etc/hosts.deny 定义以上规则,则所有的连接都是被禁止的。 当然,你可以建立更好的过滤条件。如:在 /etc/hosts.allow 加入下列内容,将允许从 192.168.1.5 连接到 Telnet 服务:
telnetd : 192.168.1.5

同样的内容放入 /etc/hosts.deny 中将禁止这个IP地址连接到你系统的 Telnet 服务。你可以指定一个客户端通过不同的方法,如下所示:
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
客户端                    <------->描述
.example.com                <------->域名。以“.”开始,表示这个域名下所有客户端。也可以定义具体的,如:user.example.com
172.16.                    <------->IP 地址。以“.”结束,表示网段下所有客户端。具体的描述为:a.b.c.e
172.16.72.0/255.255.254.0    <------->用子网掩码标识的 IP 子网。不支持CIDR(172.16.72.0/23)。
ALL                        <------->所有客户端,或所有服务
user@linux1.example.com    <------->某个计算机的具体用户
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
如上所示,这里有两种不同的通配符。“ALL”用了匹配所有客户端或服务。“.”匹配所有主机或 IP 网络地址。

你可以使用逗号“,”来设定多个服务和地址。例外情况可是使用 EXCEPT 进行操作。请看下列 /etc/hosts.allow 文件中的示例:
#hosts.allow
ALL : .example.com
telnetd : 192.168.25.0/255.255.255.0 EXCEPT 192.168.25.73
sshd, in.tftpd : 192.168.1.10.25.73
文件中第1行以“#”开始的是注释。第2行使用“ALL”将所有服务对 example.com 域开放。第3行将 Telnet 服务对除 IP 地址 192.168.25.73 外的 192.168.25.0/255.255.255.0 网段开放。第4行对IP 地址 192.168.1.10 开放了 SSH 和 TFTP服务。

下列代码展示了利用 hosts.deny 对访问进行控制:
#hosts.deny
ALL EXCEPT in.tftpd : .example.org
telnetd : ALL EXCEPT 192.168.1.10
ALL:ALL
hosts.deny文件中的第1行是注释。第2行定义了对域 .example.org 开放除 TFTP 外的所有服务。第3行将 Telnet 开放给所有用户,IP 地址 192.168.1.10 除外。最后,第4行禁止了所有客户端对    tcp_wrappers 控制的所有服务的访问。

你也可以在 /etc/hosts.allow 或 /etc/hosts.deny 使用 twist 或 spawn 命令来控制 shell 命令;它们主要用于发送消息、跟踪接入和记录问题。例如,以下 /etc/hosts.deny 中的内容:
telnetd : .crack.org : twist /bin/echo Sorry %c, access denied
这条命令将对试图连接 Telnet 的 crack.org 域的用户发送错误消息。 不同的运算符如:%c 有如下描述:(这些运算符将帮助你跟踪入侵者)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
运算符    <------->描述
%a        <------->客户端地址
%A        <------->主机地址
%c        <------->客户端信息
%d        <------->进程名称
%h        <------->客户端主机名
%H        <------->服务器名称
%p        <------->进程ID
%s        <------->服务器信息
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

在这个练习中,你将利用 tcp_wrappers 来控制对网络资源的访问。 tcp_wrappers 默认是开启的,你不需要做任何修改或安装的工作。
1、确定你可以利用本地地址 telnet 到系统中。首先你要些事情:
    1)从 krb5-workstation RPM 包安装 Kerberos Telnet 服务;
    2)使用 chkconfig krb5-telnet on 激活服务;
    3)允许服务通过防火墙和 SELinux 服务(如果你对防火墙和SELinux不熟的话,建议先把它们关掉);
    4)在 /etc/hosts 定义你的主机名(比如说 rhel5l1)。
    127.0.0.1 rhel5l1 localhost.localdomain localhost
    5)要知道,RHEL5默认是不允许 root 通过 telnet 登录。
2、编辑 /etc/hosts.deny 文件,加入如下内容(不要忘记保存哦):
    ALL : ALL
3、当你登录到本地的 telnet 服务时发生了什么?
4、编辑 /etc/hosts.allow 文件,加入下列内容:
    telnetd : 127.0.0.1
5、现在登录看看??
6、如果你可以使用其他的系统,你可以使用 tcp_wrappers 对它们进行限制。也不要忘了那些有趣的运算符(%a,%c)。
7、实验完成后,记得将改动内容改回去。

阅读(868) | 评论(4) | 转发(0) |
给主人留下些什么吧!~~

mozer2008-09-18 09:02:54

感谢楼主努力,及时关注中 ......

chinaunix网友2008-09-16 14:20:34

word我肯定是不会用的,原因嘛,不说。。。 如果各位要排版好的,我可提供PDF。留言即可。。。

chinaunix网友2008-09-13 22:44:01

建议在翻译时使用word或其他格式,尽量避免排版格式丢失

baroquesoul2008-09-11 13:28:23

今天翻译两章了。呵呵。质量可能差了点。