Username: Password:

Linux怎样阻止系统攻击者(一)
来源:作者: 发布时间:2007-12-05 06:22:05

当您安装一台Linux系统,您就拥有了一个强大的、高级的、多任务的网络操作系统。但是该系统功能有些过于强大了.某些发布版本缺省启动很多服务(如:rlogind, inetd, httpd, innd, fingerd, timed, rhsd,等等)。作为系统管理员需要熟悉了解这些服务。假如您的机器连接到了Internet的话您更需要关注您的系统安全。 大多数攻击者并不是个革新者,他们往往利用最新的公开的系统工具技术等突破一个众所周知的或一个新的刚刚发现的安全漏洞。但作为一个管理者,通过访问您使用的Linux发布的官方站点如www.redhat.com/、http://www.calderasystems.com/等能够获知最新的安全漏洞及相应的补丁程式。也能够通过定期访问http://www.securityfocus.com/、http://www.cert.org/等安全漏洞通告站点。
最方便的的控制访问服务器的方法是通过一个叫TCP wrapper的程式。在大多数发布版本中该程式往往是缺省地被安装。利用TCP wrapper您能够限制访问前面提到的某些服务。而且TCP wrapper的记录文档记录了任何的企图访问您的系统的行为。通过last命令查看该程式的og管理员能够谁在企图连接您的系统。 在Linux的/etc目录下,有一个如下所示inetd.conf文档,该文档是TCP wrapper的配置文档,定义了TCP wrapper能够控制启动哪些服务。比如要将finger服务去除,就将finger服务的那一行注释掉(在前面加上"# "即可); # inetd。conf This file describes the services that will be available # through the INETD TCP/IP super server. To re-configure # the running INETD process, edit this file, then send the # INETD process a SIGHUP signal。
# service_name sock_type proto flags user server_path args
ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -a telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd # Finger, systat and netstat give out user information which may be 。。。 。。。 但是对于诸如sendmail,named等服务,由于他们不象finger,telnet等服务,在请求到来时由inet守护进程启动相应的进程提供服务,而是在系统启动时,作为守护进程运行的。在slackware版本的Linux,能够通过修改/etc/rc.d目录下的启动配置文档rc.M文档,将启动sendmail的命令行注释掉: #!/bin/sh # rc。M This file is executed by init(8) when the system is being # initialized for one of the "multi user" run levels (i.E. # levels 1 through 6). It usually does mounting of file # systems et al. # Start the sendmail daemon: # if [ -x /usr/sbin/sendmail ]; then # echo "Starting sendmail daemon (/usr/sbin/sendmail -bd -q 15m)… " # /usr/sbin/sendmail -bd -q 15m # fi 。。。。。。 对于诸如named等其他服务,也是通过将同一个目录下相应启动配置文档中相应的启动命令注释掉,从而当您重新启动机器时,相应的服务将不会启动。而对于高版本的redhat linux,提供了一个linuxconfig命令,能够通过他在图像界面下交互式地配置是否在启动时,运行相关服务。 但是对于telnet、ftp等服务,假如将其一同关闭,那么对于管理员需要远程管理时, 将很不方便。Linux提供另外一种更为灵活和有效的方法来实现对服务请求用户的限制, 从而能够在确保安全性的基础上,使可信任用户使用各种服务。 在/etc目录下,有两个文档:hosts.deny hosts.allow 通过配置这两个文档,您能够指定 哪些机器能够使用这些服务,哪些不能够使用这些服务。 配置这两个文档是通过一种简单的访问控制语言来实现的,访问控制语句的基本格式为:
程式名列表,主机名/IP地址列表。
程式名列表指定一个或多个提供相应服务的程式的名字,名字之间用逗号或空格分割,能够在inetd.conf文档里查看提供相应服务的程式名:如上面的文档示例中,telent所在行的最后一项就是所需的程式名:in.telnetd 主机名/IP地址列表指定允许或禁止使用该服务的一个或多个主机的标识,主机名之间用逗号或空格分隔。程式名和主机地址都能够使用通配符,实现方便的指定多项服务和多个主机。 当服务请求到达服务器时,访问控制软件就按照下列顺序查询这两个文档,直到碰到一个匹配为止: 1. 当在/etc/hosts.allow里面有一项和请求服务的主机地址项匹配,那么就允许该主机获取该服务 2. 否则,假如在/etc/hosts.deny里面有一项和请求服务的主机地址项匹配,就禁止该主机使用该项服务 假如相应的配置文档不存在,访问控制软件就认为是个空文档,所以能够通过删除或移走配置文档实现对任何主机关闭任何服务。在文档中,空白行或以#开头的行被忽略,您能够通过在行前加 # 实现注释功能。 Linux提供了下面灵活的方式指定进程或主机列表: 1. 一个以"。"起始的串,如 .amms.ac.cn 那么www.amms.ac.cn就和这一项匹配成功 2. 以’.’结尾的IP串如 202.37.152. 那么IP地址包括202.37.152. 的主机都和这一项匹配 3. 格式为n.n.n.n/m.m.m.m表示网络/掩码,假如请求服务的主机的IP地址和掩码的位和的结果等于n.n.n.n 那么该主机和该项匹配。 4. ALL表示匹配任何可能性 5. EXPECT表示除去后面所定义的主机。如:list_1 EXCEPT list_2 表示list_1主机列表中除去List_2所列出的主机 6. LOCAL表示匹配任何主机名中不包含’。’的主机 上面的几种方式只是Linux提供的方式中的几种,但是对于我们的一般应用来说是足够了。我们通过举几个例子来说明这个问题: 例一:我们只希望允许同一个局域网的机器使用服务器的ftp功能,而禁止副广域网上面的ftp服务请求,本地局域网由 202.39.154. 、202.39.153. 和202.39.152. 三个网段组成。 在hosts.deny文档中,我们定义禁止任何机器请求任何服务: ALL:ALL 在hosts.allow文档中,我们定义只允许局域网访问ftp功能: in.ftpd -l -a: 202.39.154 202.39.153. 202.39.152. 这样,当非局域网的机器请求ftp服务时,就会被拒绝。而局域网的机器能够使用ftp服务。
ALL:ALL
然后重新启动您的 inetd进程:
/etc/rc.d/init.d/inet restart
但是hosts.deny文档只能控制/etc/inetd.conf文档中包含的服务的访问这些服务有/usr/bin/tcpd管理。wrapper监听接入的网络请求,然后和在hosts.allow和hosts.deny的中的服务比较,然后做出允许或拒绝的决定。 files, and makes a yes or no decision on what to allow through. 但是对于wrapper没有包含的服务您就需要采用其他方法了。

喜欢本文,那就收藏到:

    Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪ViVi 365Key网摘 天极网摘 和讯网摘 博拉网 POCO网摘 添加到饭否 QQ书签 Digbuzz我挖网
相关评论  我也要评论
还没有关于此文章的相关评论!
  • 昵称: (为空则显示guest)
  • 评论分数: ★ ★ ★★★ ★★★★ ★★★★★
  • 评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
  • 导航
    赞助商
    文章类别
    订阅