RHCE筆記—xinetd超級守護進程與TCP Wrappers

記錄學習成長的歷程......

xinetd超級守護進程
關於超級守護進程的介紹已經在進程那一章最後的補充中講解過了,這裏就不在贅述了。
守護進程有兩種啓動方式,一種是sysv方式啓動,一種是xinetd方式啓動。

1、      sys v:獨立啓動,一開機運行就會進入內存,一直處於listen狀態,即使該守護進程不運行也會一直佔用系統資源,但是其最大的優點就是,它一直啓動,當有請求時會立即響應,響應速度快,比如http服務。

2、      xinetd(super daemon):超級守護進程,管理衆多的進程,比如telnet服務。xinetd自己是一個sys v,它就像老闆一樣,自己常駐於內存,管理其它的進程,其它進程就相當於它的員工,在其它進程沒有用時會睡眠,並不佔用系統資源,當有工作時候老闆xinetd會通知它的員工,喚醒某個進程來執行作業。這種方式適合於那些不是經常被人使用,不需要常駐內存的程序,但是此方式響應時間長,但是節省系統資源,方便管理。

這裏以telnet服務爲例講解一下xinetd超級守護進程。
/etc/xinetd.conf:超級進程全局配置文件,如圖:

 
系統默認是沒有安裝telnet服務器端的,需要手動安裝telnet服務:
#yum –y install telnet-server
#vim /etc/xinetd.d/telnet            //修改配置文件,如圖:
 

說明:

socket_type = stream                   //使用tcp包常用聯機類型

              wait = no                                   //可以允許多臺計算機同時連接而不需要等待,但是在輸入完用戶名和密碼後會有個連接等待的過程,反之亦然

              user = root                                  //啓動該程序的用戶身份

              server = /usr/sbin/in.telnetd          //服務啓動的程序

              log_on_failure += USERID              //登錄失敗後記錄主機名並且加一個ID

              access_times = 9:00—18:00          //只有9點到18點能訪問

              當flags = SENSOR deny_time = 2/NEVER no_access = 192.168.0.1時,表示,當192.168.0.1硬要強行訪問時,所有由xinetd管理的服務在2分鐘內或永遠不能訪問,知道重啓xinetd服務

              only_from = 192.168.0.0/24         //只允許192.168.0.0/24網段的主機使用telnet服務訪問我

注:當/etc/xinetd.conf全局配置文件和/etc//xinetd.d/telnet子配置文件發生衝突時以子配置文件爲準,當子配置文件沒有配置時會繼承主配置文件,以主配置文件爲主。
#netstat –tulnp |grep --color=auto 23               //查看監聽端口,發現並沒有telnet,如圖:

#service xinetd restart  
當啓動超級守護進程並且有人通過telnet訪問時,telnet服務就會被喚醒,並且監聽在23號端口,如圖:

這就說明了telnet服務是由超級守護進程xinetd管理的,修改配置文件後啓動xinetd進程就可以了。
如果想直接啓動telnet服務可使用chkconfig命令來啓動,這裏的chkcnfig命令顛覆了傳統,用來啓動telnet服務。
注:所有由xinetd管理的進程都沒有運行級別。
# chkconfig telnet off                  //關閉telnet服務
#chkconfig telnet on                      //打開telnet服務
這兩個命令直接修改文件的同時也改變了當前狀態,不用重啓xinetd服務了,xinetd可以基於主機和時間控制訪問。
TCP  Wrappers
系統中有的服務端口是隨機的,這樣的話你該怎麼封住它呢?iptables只能針對端口,這個時候就要用到TCP Wrappers了,它可以基於服務來控制訪問,linux系統的過濾順序是這樣的:iptables———>TCP Wrappers———>服務本身。
libwrap.so是一個動態鏈接庫文件,也稱爲tcp_wrappers,它爲各種網絡服務提供了基於主機的訪問控制列表,庫,可執行文件以及文檔在tcp_wrappers-version.rpm中分發,只要支持這個模塊的服務都被TCP Wrapper支持,所有受xinetd控制的進程都將自動使用libwrap.so,保護這些服務不在需要tcpd封裝器,怎麼看支不支持我們將在後面爲大家講解!
TCP Wrappers配置文件:
#/etc/hosts.allow
#/etc/hosts.deny
如果允許中有則允許,沒有則看拒絕,拒絕有的話則拒絕,當允許和拒絕裏都沒有的話則允許。當允許後則不再查找拒絕文件!
默認裏面是沒有規則的,這裏舉例比如sshd服務只允許192.168.0.1訪問則編輯hosts.allow文件,添加規則,格式爲,服務: 允許或拒絕訪問的IP、域、主機名,如圖:

 
舉 例:
如果是多個服務,拒絕不同網段的計算機該怎麼寫呢?如圖:

 
 
# vim /etc/hoots.deny
ALL:ALL                                               //拒絕所有
sshd:example    .example.com               //拒絕example這臺主機和example.com域中的所有主機
sshd:192.168.1.                                    //表示C類網絡192.168.1.0網段中多有的主機
sshd:@mynetwork             // /etc/netgroup或NIS中的網絡組名稱,不與用戶名一起工作
注:如果是拒絕一個網段的話,一定要寫子網掩碼,不可以寫成這種格式192.168.0.0/24,這裏不同於iptables防火牆!
 
宏  義
宏定義:具有某一特定特性的計算機
LOCAL:所有主機的名稱中不包含“.”的主機,比如,localhost,就是指本機;
ALL:始終與所有主機所有服務匹配;
KNOWN:所有主機名都可在DNS中解析到的主機;
UNKNOWN:所有在DNS中都無法解析的主機;
PARANOID:所有在DNS中正向與反向解析都不匹配的主機(可防止垃圾郵件用);
EXCEPT:操作符可用於後臺程序和客戶端列表,以便從您的匹配中排除某個主機或IP地址,也就是方向排除選擇,可將其嵌套,例如在hosts.deny中寫:
sshd:ALL EXCEPT server1.example.com     //拒絕所有,但是除了server1.example.com
sshd:UNKNOWN              //拒絕所有在DNS中無法解析到的主機
sshd:PARANOID               //拒絕所有在DNS中正向與反向解析不匹配的主機
注:ALL可用在服務中也可用在宏裏面,EXCEPT嵌套時,前一個要大於後一個的範圍,也就是前一個包含後一個。
Option擴展選項
spawn可用於啓動其它shell命令,可用於特殊擴展(如%c、%s等)
spawn選項是當規則匹配時,該選項將在子進程中執行命令(執行%擴展之後)
常用的替換包括:
%c:客戶端信息(user@host)
%s:服務器信息(server@host)
%h:客戶端的主機名(如果名稱不可用則爲IP地址)
%p:服務器PID

例:hosts.deny中sshd:192.168.0.254:spawn echo “login attempt” from %c to %s >>/var/log/sshd.log //192.168.0.254用ssh連接我時,匹配該規則後,把echo後面的信息以及來源主機和登錄服務器記錄下來追加到/etc/log/sshd.log中。

hosts.deny中:vsftpd:192.168.0.254:twist echo “”550 connection error

當192.168.0.254訪問我時回覆它一條消息,這條消息會顯示在客戶端的屏幕上。
注:發消息只能在拒絕的時候用,允許就沒必要寫這個了!
 
前面提到過不是所有服務都被TCP Wrapper支持,只要支持libwrap.so模塊的服務都被TCP Wrapper支持,那麼怎麼查看一個服務支不支持這個模塊呢?
ldd /usr/sbin/sshd                  //查看這個服務調用了多少動態鏈接庫
ldd `which vsftpd` |grep libwrap.so      //查看這個服務支不支持libwrap.so模塊
前面也提到過只要xinetd支持libwrap.so,那麼它所管理的所有服務都支持!
strings /sbin/portmap |grep hosts
只要過濾出來的內容包含/etc/hosts.allow和/etc/hosts.deny字符串也被TCP Wrapper支持!

總結:1、服務自身支持 2、xinetd支持 3、包含hosts.allow,hosts.deny字符串等都被TCP Wrappers支持!

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章