网络编程--inetd详解(转)

inetd是监视一些网络请求的守护进程,其根据网络请求来调用相应的服务进程来处理链接请求。html

它能够为多种服务管理链接,当 inetd 接到链接时,它可以肯定链接所需的程序,启动相应的进程,并把 socket交给它 (服务 socket 会做为程序的标准输入、 输出和错误输出描述符)。安全

使用 inetd 来运行那些负载不重的服务有助于下降系统负载,由于它不须要为每一个服务都启动独立的服务程序。网络

inetd的工做方式是由/etc/inetd.conf和/etc/services文件设定的,下面咱们来解释一下这两个文件。socket

services文件的格式基本上是这样:tcp

netstat 15/tcpui

qotd 17/tcpquotehtm

msp 18/tcp# message send protocolblog

msp 18/udp# message send protocol进程

chargen19/tcpttytst source字符串

chargen19/udpttytst source

ftp21/tcp

telnet23/tcp

每一行都是两栏或者三栏。

第一栏是服务的名字,第二行是使用的端口和协议,例如,这里的telnet 23/tcp是表示telnet服务应该使用端口23,协议类型为tcp。

第三栏是服务的别名,一般能够省略。

inetd.conf是依赖于services文件的,它也是个文本文件,每行表明一种服务的工做方式,由"#"引导的行表示注释行,非注释行的格式大致是这样:

服务名 数据类型 协议 监听方式 用户身份 服务程序 参数

例如,要启动telnet的服务,应该加入这样一行:

telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd

服务的名字就是telnet,这个名字按照/etc/services的定义将在23端口提供服务;

stream表示数据的发送和接收将使用简单的流式文件读写来完成(fscanf和fprintf);

tcp表示使用tcp协议,监听方式这一栏能够由两个选项,即wait和nowait。

简单地说,若是相应的服务程序是多进程的,那么要设置为nowait,这时inetd会每接受到一个请求以后启动一个服务程序进程,例如telnet就是这样工做的,每一个独立的telnet对话都会 启动一个telnet服务进程。相反,若是是单进程的,就能够设置为wait。

用户身份表示对应服务进程启动时所使用的uid/euid,由于telnet能够是任何用户发出,并且用户能够经过telnet执行任何命令,因此使用root用户身份。

/usr/sbin/tcpd 是实际启动的程序,这个程序实际是一个通用的TCP链接处理程序,参数使用in.telnetd,连起来就是当有23端口的链接请求时,inetd去执行/usr/sbin/t cpd in.telnetd。

一般状况下,各类服务都已经写在inetd.conf中,不启用的服务使用注释#使之失效。若是须要打开这服务,只要把引导的#注释符号删除就能够了。

值得一提的是/usr/sbin/tcpd程序,它是一个TCP链接过滤程序,一般大部分须要作链接验证的服务都应该经过tcpd程序启动,这个程序可以自动对客户机器的IP地址进行验证而且进行某些安全性过滤,其中最主要的功能是禁止某些地址来的链接。

例如,按照上面的形式,in.telnetd程序就是经过/usr/sbin/tcpd程序启动的,所以能够对telnet请求进行地址检验。

tcpd的地址检验是经过/etc/hosts.deny和/etc/hosts.allow文件完成的,若是不存在这样的文件,你能够本身创建一个,二者的语法几乎是同样的

只是hosts.allow是容许某个地址来的链接,而hosts.deny是禁止某个地方来的链接

基本的语法是:

服务程序:客户地址

服务程序是经过tcpd程序被启动的程序名字,客户地址是相关地址的一个列表,例如,在/etc/hosts.allow文件中加入这样一行:

in.telnetd:10.0.0.2

将容许10.0.0.2处的机器使用本地的telnet服务,若是这一行加入到/etc/hosts.deny重将禁止10.0.0.2处的机器登陆上来。

地址可使用集合形式,经常使用的集合形式主要有下列几种:

① 以逗点开头的字符串定义一个域,例如.edu.cn表示全部域名后缀是.edu.cn的机器。

② 以逗点结束的字符串定义一串IP地址,如202.199.248.表明202.199.248.0到202.199 .248.255。

③ 以/分开的字符串解释为网络地址/子网掩码的形式,例如172.13.0.0/255.255.0.0表明172.13.0.0到172.13.255.255。

另外,地址和服务程序均可以使用通配符,通配符有下列几种:

ALL 表明全部,全部的服务程序或者全部的地址。常常和EXCEPT子句连用,EXCEPT表明“除了”。

例如,在hosts.deny中写上ALL:ALL EXCEPT 202.199.248.将禁止除了202.199.248.*的机器以外的全部客户机器使用任何基于tcpd的服务。

写上ALL EXPECT in.telnetd:ALL将使得除了telnet之外的全部基于tcpd的服务都被禁止。

LOCAL 指代全部没有名字后缀的机器。

KNOWN 全部IP地址和域名都知道的机器

UNKNOWN IP地址或者域名没法肯定的机器

PARANOID IP地址和从域名服务返回的名字不匹配的机器。

转载转载自博客园 www.cnblogs.com/melburg/art…

相关文章
相关标签/搜索