红联Linux门户
Linux帮助

Linux中“因特网服务”介绍

发布时间:2006-10-02 21:25:56来源:红联作者:嘀嗒滴答
inetd 简介

单个 Linux 系统可以提供数十、甚至数百个网络服务。例如,使用 telnet 程序,您可以访问远程系统上的 telnet 服务。同样地,使用 ftp 程序,您可与远程系统上的 ftp 服务连接。

为了提供这些服务,远程系统运行每个服务器的实例(例如 /usr/sbin/in.telnetd 和 /usr/sbin/in.ftpd)以接受连接或者运行 inetd。inetd 程序接受每个进入的连接,然后根据其连接的类型启动处理该连接的适当的服务。出于这个原因,inetd 也被称为“因特网超级服务器”。

在典型的安装了 Linux 的系统上,inetd 处理大多数进入的连接。只有少数程序(如 sshd 和 lpd)处理它们自己的网络通信而无需依靠 inetd 接受进入的连接。
文章评论

共有 11 条评论

  1. 嘀嗒滴答 于 2006-10-02 21:32:02发表:

    xinetd 配置

    xinetd 的配置文件是 /etc/xinetd.conf。最常见的情况下,那个文件仅包含为其余服务设置缺省配置参数的几行:

    [code]# cat /etc/xinetd.conf
    defaults
    {
    instances = 60
    log_type = SYSLOG authpriv
    log_on_success = HOST PID
    log_on_failure = HOST RECORD
    }
    includedir /etc/xinetd.d[/code]

    文件的最后一行指示 xinetd 从 /etc/xinetd.d 目录的文件代码片段读取额外的配置信息。我们快速地看看 telnet 代码片段:

    [code]# cat /etc/xinetd.d/telnet
    service telnet
    {
    flags = REUSE
    socket_type = stream
    wait = no
    user = root
    server = /usr/sbin/in.telnetd
    log_on_failure += USERID
    }[/code]

    如您所见,配置 xinetd 并不困难,而且它比 inetd 更直观。您可以在 xinetd(8)、xinetd.conf(5) 和 xinetd.log(5) 手册页中获得有关 xinetd 的更多信息。

    在 Web 上也有关于 inetd、tcp_wrappers 和 xinetd 的大量信息。请务必查看我们在本教程最后一章(参考资料)中给出的这些工具的一些链接;它们能让您更好地体会这些工具的能力和配置。

  2. 嘀嗒滴答 于 2006-10-02 21:31:24发表:

    xinetd:扩展的 inetd

    尽管 inetd 是经典的因特网超级服务器,但最近对它进行了多次改写以试图添加特性和更多的安全性。xinetd 程序在许多新近的分发版(包括 Red Hat 和 Debian)中取代了 inetd。部分扩展的特性是:

    .访问控制(内置 TCP 封装器)
    .详尽的日志记录(连接持续时间和失败的连接等等)
    .来自另一个主机的服务重定向
    .IPv6 支持
    .通过代码片段而不是一个汇总文件进行配置

  3. 嘀嗒滴答 于 2006-10-02 21:30:55发表:

    用 TCP 封装器将访问限制为已知主机

    无需重新装入 inetd,因为每当 telnet 端口有连接时,就会调用 tcpd。因此我们可以立即尝试:

    [code]# telnet box.yourdomain.com
    Trying 10.0.0.1...
    Connected to box.yourdomain.com.
    Escape character is '^]'.
    Connection closed by foreign host.[/code]

    哦!被拒绝了!(这是人生中为数不多的几次经历:拒绝表示成功。)要重新启用来自自己网络的访问,可在 /etc/hosts.allow 中插入例外:

    [code]in.telnetd: .yourdomain.com[/code]

    此刻我们就能够再次成功地用 telnet 访问系统了。而这仅仅触及了 tcp_wrappers 的能力的表面。在 tcpd(8) 和 hosts_access(5) 手册页中还有有关 tcp_wrappers 的更多信息。

  4. 嘀嗒滴答 于 2006-10-02 21:30:20发表:

    用 TCP 封装器限制对本地用户的访问

    tcpd 程序配置为使用两个文件:/etc/hosts.allow 和 /etc/hosts.deny。这两个文件中行的格式为:

    [code]daemon_list : client_list [ : shell_command ][/code]

    按以下顺序授权或拒绝访问。搜索在第一次匹配时停止:

    .当与 /etc/hosts.allow 中的项匹配时,则授权访问
    .当与 /etc/hosts.deny 中的项匹配时,则拒绝访问
    .若没有匹配项,则授权访问

    例如,若只允许对内部网络进行 telnet 访问,可通过在 /etc/hosts.deny 中设置策略(拒绝除 localhost 以外的其它来源的所有连接)着手:

    [code]in.telnetd: ALL EXCEPT LOCAL[/code]

  5. 嘀嗒滴答 于 2006-10-02 21:29:40发表:

    用 TCP 封装器进行日志记录

    缺省情况下,连接不受限制但会被日志记录下来。例如,我们可以重新启动 inetd 以使在前页做的更改生效。然后一些快速调查应该显示已记录的连接:

    [code]# telnet localhost
    login: (press to abort)

    # tail -1 /var/log/secure
    Feb 12 23:33:05 firewall in.telnetd[440]: connect from 127.0.0.1[/code]

    tcpd 将记录 telnet 连接尝试,因此看起来有些东西在工作了。因为 tcpd 提供一致的连接日志记录服务,这就免除了单个服务守护程序每次自己将连接编入日志的需要。事实上,在接受连接的工作方面,它与 inetd 相似,因为那使每个守护程序不需要接受自己的连接。Linux(UNIX)的简单程度真是不可思议!

  6. 嘀嗒滴答 于 2006-10-02 21:29:13发表:

    TCP 封装器简介

    tcp_wrappers 包提供了一个名为 tcpd 的很小的守护程序,该程序由 inetd 而不是实际的服务守护程序调用。tcpd 程序将每个进入连接的源地址编入日志,并可以过滤它们而只允许来自可信系统的连接。

    要使用 tcpd,可以按下列方式将它插入到 inetd 中:

    [code]ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -a
    telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd[/code]

  7. 嘀嗒滴答 于 2006-10-02 21:28:44发表:

    用手工方式停止/启动 inetd

    如果上页中的助手脚本不起作用,老式方法甚至更简单。可以使用 killall 命令停止 inetd:

    [code]# killall inetd[/code]

    可以在命令行调用 inetd 来简单地再次启动它。它会自动在后台运行:

    [code]# /usr/sbin/inetd[/code]

    有一个快捷方式无需停止 inetd 就可命令它重新读取配置文件:只要向它发送 HUP 信号:

    [code]# killall -HUP inetd[/code]

    此刻应该不能 telnet 或 ftp 到这个系统,因为 telnet 和 ftp 被禁用。尝试用 telnet localhost 进行检查。如果需要 telnet 或 ftp 访问,所需做的全部就是重新启用它!

    以下是我所遇到的情况:

    [code]# telnet localhost
    telnet: Unable to connect to remote host: Connection refused[/code]

  8. 嘀嗒滴答 于 2006-10-02 21:28:02发表:

    使用初始脚本停止/启动 inetd

    我们在上页对 /etc/inetd.conf 所做的更改将在重新启动 inetd 程序后才生效。大多数分发版在 /etc/init.d 或 /etc/rc.d/init.d 中有初始脚本:

    [code]# /etc/rc.d/init.d/inet stop
    Stopping INET services: [ OK ]

    # /etc/rc.d/init.d/inet start
    Starting INET services: [ OK ][/code]

    事实上,通常可以使用“restart”作为快捷方式:

    [code]# /etc/rc.d/init.d/inet restart
    Stopping INET services: [ OK ]
    Starting INET services: [ OK ][/code]

  9. 嘀嗒滴答 于 2006-10-02 21:27:30发表:

    禁用服务

    在 inetd 中禁用服务很简单:只要在 /etc/inetd.conf 注释掉该服务所在的行即可。您可能不希望完全除去该行,以便以后需要时可以引用它。例如,有些系统管理员出于安全性的原因宁愿禁用 telnet(因为连接完全是明文):

    [code]# vi /etc/inetd.conf
    [comment out undesired line]

    # grep ^.telnet /etc/inetd.conf
    #telnet stream tcp nowait root /usr/sbin/in.telnetd[/code]

  10. 嘀嗒滴答 于 2006-10-02 21:27:05发表:

    配置 inetd;/etc/inetd.conf

    inetd 的实际配置是在 /etc/inetd.conf 中完成的,配置格式如下:

    [code]service-name socket-type protocol wait-flag user server-program[/code]

    因为服务是在 inetd.conf 中由服务名称而不是端口指定的,所以,为了符合由 inetd 处理的条件,必须将服务列在 /etc/services 中。

    让我们看看 /etc/inetd.conf 一些常见的行。例如,telnet 和 ftp 服务:

    [code]# grep ^telnet /etc/inetd.conf
    telnet stream tcp nowait root /usr/sbin/in.telnetd

    # grep ^ftp /etc/inetd.conf
    ftp stream tcp nowait root /usr/sbin/in.ftpd -l -a[/code]

    对这两个服务的配置为:使用 TCP 协议,并以 root 用户的身份运行服务器(in.telnetd 或 in.ftpd)。有关 /etc/inetd.conf 中字段的完整说明,请参阅 inetd(8) 手册页。

  11. 嘀嗒滴答 于 2006-10-02 21:26:32发表:

    配置 inetd:/etc/services

    上页提到 inetd 根据类型对进入的连接进行分类。每个进入的连接都在 TCP/IP 头中包含一些标识字段。我们最感兴趣的字段是源地址、目标地址协议和端口号。进入连接由 inetd 根据端口号和协议(通常是 TCP 或 UDP,请查看 /etc/protocols 以获得完整的 inetd 可以提供的服务列表)进行分类。

    每行都有如下格式:

    [code]service-name port-number/protocol-name aliases # comment[/code]

    例如,让我们研究最上面的几项:

    [code]# grep ^[^#] /etc/services | head -5
    tcpmux 1/tcp # TCP port service multiplexer
    echo 7/tcp
    echo 7/udp
    discard 9/tcp sink null
    discard 9/udp sink null[/code]

    通常,/etc/services 已经包含所有有用的服务名称和端口。如果您希望添加自己的端口,可以查询已分配端口号列表。