考点 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) |