Linux tcp_wrappers 詳解

Dus發表於2015-02-21
tcp_wrappers是linux中一個安全機制[TCP_wrappers防火牆],一定程度上限制某種服務的訪問許可權,達到了保護系統的目的
一. 要想用好tcp_wrappers,首先檢查某種服務是否受tcp_wrappers 管理
ldd $(which domainname) | grep libwrap
   domainname=sshd httpd smb xinetd .........
如果有這個連結,說明某個服務接受tcp_wrappers管理,這種檢查不一定正確。
a.一般只要某些程式歸xinetd管理,那麼這個服務就一定接受tcp_wrappers的管理
  如xinetd管理的程式:
xinetd based services:
 chargen-dgram
 chargen-stream
 cvs
 daytime-dgram
 daytime-stream
 discard-dgram
 discard-stream
 echo-dgram
 echo-stream
 eklogin
 ekrb5-telnet
 gssftp
 klogin
 krb5-telnet
 kshell
 rsync
 tcpmux-server
 telnet
 time-dgram
 time-stream
b.一些獨立的程式(daemons)也受tcp_wrappers的管理
  如:  sendmail
 slapd
 sshd
 stunnel
 xinetd
 gdm
 gnone-session
 vsftpd
  portmap
c.注意:有些程式不受tcp_wrappers管理
  如:  httpd
 smb
 squid 等
二. 與tcp_wrappers相關的檔案有
/etc/hosts.allow
/etc/hosts.deny
這兩個檔案被整合在xinetd中.
三. 工作原理
1. 當有請求從遠端到達本機的時候
首先檢查/etc/hosts.allow
如有匹配的,就預設允許訪問,跳過 /etc/hosts.deny這個檔案
沒有匹配的,就去匹配/etc/hosts.deny 檔案,如果有匹配的,那麼就拒絕這個訪問
2. 如果在這兩個檔案中,都沒有匹配到,預設是允許訪問的
四. 這兩個檔案格式
服務列表 :地址列表 :選項
A. 服務列表格式:如果有多個服務,那麼就用逗號隔開
B. 地址列表格式:
1. 標準IP地址:例如:192.168.0.254,192.168.0.56如果多於一個用,隔開
2. 主機名稱:例如:www.baidu.com, .example.con匹配整個域
3. 利用掩碼:192.168.0.0/255.255.255.0指定整個網段
   注意:tcp_wrappers的掩碼只支援長格式,不能用:192.168.0.0/24
4. 網路名稱:例如 @mynetwork
五.巨集定義
ALL :指代所有主機
LOCAL :指代本地主機
KNOWN :能夠解析的
UNKNOWN :不能解析的
PARANOID :
  example:
    /etc/hosts.allow
 sshd:192.168.0.0
    /etc/hosts.deny
 sshd:ALL
 此例子表明:sshd服務只允許192.168.0.0網段的主機訪問,其他拒絕。

六. 擴充套件選項:
spawn : 執行某個命令
 如:
vsftpd:192.168.0.0/255.255.255.0 :spawn echo “login attempt from %c”to %s” | mail –s warning root
 其意是黨192.168.0.0網段的主機來訪問時,給root發一封郵件,郵件主題是:waring,郵件內容是:客戶端主機(%c)試圖訪問服務端主機(%s)
twist : 中斷命令的執行:
vsftpd:192.168.0.0/255.255.255.0: twist echo -e "\n\nWARNING connection not allowed.\n\n" 
 其意是當未經允許的電腦嘗試登入你的主機時, 對方的螢幕上就會顯示上面的最後一行
七.高階用法
daemaon@host:client_list
對於多塊網路卡的linux主機,要想用tcp_wrappers做一些控制得基於介面:
如eth0所在的網段:192.168.0.0 eth1所在的網段:192.168.1.0
 則:
   sshd@192.168.0.11:192.168.0.
   sshd@192.168.1.34:192.168.1.
   則兩句可以根據需要寫到hosts.allow或hosts.deny中

典例:
/etc/hosts.allow
 sshd:ALL EXCEPT .cracker.org EXCEPT trusted.cracker.org
/etc/hosts.deny
 sshd:ALL
此例用到了EXCEPT的巢狀,其意思是:允許所有訪問sshd服務,在域.cracker.org的不允許訪問
但是trusted.cracker.org除外
sshd:ALL 就是拒絕.cracker.org的訪問,因為預設是允許,所以在hosts.deny中必須明確定義。
 
本文: 總結、整理來自網際網路