天天看點

Linux下的TCP Wrapper機制

inetd程式在系統中是作為一個服務程序出現,它監聽許多端口并且在得到客戶請求時啟動這個端口的服務程式。

早期系統中使用的inetd被稱作超級伺服器,其實作控制對主機網絡連接配接。當一個請求到達由inetd管理的服務端口,inetd将該請求轉發給名為 tcpd的程式。tcpd根據配置檔案host.{allow,deny}來判斷是否允許服務該請求,如果請求被允許剛相應的伺服器程式(如:ftpd、 telnet)将被啟動。這個機制也被稱為TCP_Wrapper。

xinetd(eXended Internet services Daemon)提供類似于inetd+tcp_wrapper的功能,但是更加強大和安全。已經逐漸取代了inetd,并且提供了通路控制、加強的日志和資源管理功能,成了Linux系統的Internet标準超級守護程序。很多系統服務都用到了xinetd如:FTP、IMAP、POP和telnet等。/etc/services中所有的服務通過他們的端口來通路伺服器的時候,先由xinetd來處理,在喚起服務請求之前,xinetd先檢驗請求者是否滿足配置檔案中指定的通路控制規則,目前的通路是否超過了指定的同時通路數目,還有配置檔案中指定的其他規則等,檢查通過,xinetd将這個請求傳遞到相應的服務去處理,自己就進入sleep狀态,等待下一個請求的處理。

以telnet為例,每當有telnet的連接配接請求時,tcpd即會截獲請求,先讀取系統管理者所設定的通路控制檔案,合乎要求,則會把這次連接配接原封不動的轉給真正的telnet程序,由telnet完成後續工作;如果這次連接配接發起的ip不符合通路控制檔案中的設定,則會中斷連接配接請求,拒絕提供telnet服務。

#ldd $(which Command) | grep wrap "檢視是否支援TCP Wrapper的服務"

[root@rhel6 ~]# ldd `which vsftpd` | grep wrap

        libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f58c2cdd000)    "有傳回值則表示支援TCP_Wrapper"

[root@rhel6 ~]# ldd `which sshd` | grep wrap  

        libwrap.so.0 => /lib64/libwrap.so.0 (0x00007fdbbc848000)

·    <b>配置檔案</b>

TCP_Wrappers的主要配置檔案為:/etc/hosts.allow和/etc/hosts.deny。

/usr/sbin/tcpd程序首先檢查/etc/hosts.allow,如果請求通路的主機名或IP包含在此檔案中,則允許通路。

如果請求通路的主機名或IP不包含在/etc/hosts.allow中,那麼tcpd程序就檢查/etc/hosts.deny。如果請求通路的主機名或IP包含在hosts.deny檔案中,則通路就被拒絕;

如果都沒有,預設許可

·    <b>通路控制規則的格式</b>

通路控制需要加在/etc/hosts.allow和/etc/hosts.deny裡,規則格式如下:

       &lt;daemon list&gt;:&lt;client list&gt;[:&lt;option&gt;:&lt;option&gt;:...]

     daemon list        服務程序名清單,如telnet的服務程序名為in.telnetd

     client list            通路控制的用戶端清單,可以寫域名、主機名或網段,如.example.com或者192.168.1.

     option               可選選項,這裡可以是某些指令,也可以是指定的日志檔案

[root@rhel6 ~]# cat /etc/hosts.allow  

# hosts.allow   This file contains access rules which are used to 

#               allow or deny connections to network services that 

#               either use the tcp_wrappers library or that have been 

#               started through a tcp_wrappers-enabled xinetd. 

#               See 'man 5 hosts_options' and 'man 5 hosts_access' 

#               for information on rule syntax. 

#               See 'man tcpd' for information on tcp_wrappers 

in.telnetd:.xfcy.org 

vsftpd:192.168.0. 

sshd:192.168.0.0/255.255.255.0 

[root@rhel6 ~]# cat /etc/hosts.deny  

# hosts.deny    This file contains access rules which are used to 

#               deny connections to network services that either use 

#               the tcp_wrappers library or that have been 

#               The rules in this file can also be set up in 

#               /etc/hosts.allow with a 'deny' option instead. 

ALL:ALL 

/etc/hosts.deny裡的ALL:ALL表示,除非在/etc/hosts.allow裡明确允許通路,否則一律拒絕 

/etc/hosts.allow裡第一行in.telnetd:.xfcy.org表示,隻有xfcy.org這個域裡的主機允許通路telnet服務,注意xfcy.org前面的那個點(.) 

/etc/hosts.allow裡第二行表示,隻有192.168.0這個網段的使用者允許通路FTP服務,注意0後面的點(.) 

/etc/hosts.allow裡第三行表示,隻有192.168.0這個網段的使用者允許通路SSH服務,注意這裡不能寫為192.168.0.0/24 

      本文轉自Vnimos51CTO部落格,原文連結:http://blog.51cto.com/vnimos/1177594,如需轉載請自行聯系原作者

繼續閱讀