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…