tcpwrapper的目的是對那些存取控制功能較弱的服務提供存取控制功能要想瞭解存取控制就必須Crowdsourced Security Testing道服務監聽的概念:
服務監聽的兩種方式:
listen : socket 監聽在通訊端上提供服務
迴圈 不停歇的查看某個連接埠來提供服務
有兩種方式來判斷一個服務是否支援tcp wrapper:
1.通過尋找庫檔案看是否有libwrap
ldd `which command`
2.查看是否串連到/etc/hosts.allow|deny
strings `which command` # 查看靜態連結庫
如果有/etc/hosts.allow
/etc/hosts.deny 就說明這個命令靜態連結了tcpwrraper
tcpwrraper自身工作在核心,卻可以通過這兩個檔案來提供存取控制
請求
↓
服務 --->/etc/hosts.allow ---> 如有有就允許存取
↓ 沒有
/etc/hosts.deny ----> 如果沒有就允許存取
↓
如果有明確的匹配條目拒絕
/etc/hosts.allow|deny檔案格式:damon_list: client_list [:option]
匹配服務列表:damon_list
vsftpd: 192.168.0.
vsftpd,sshd,in.telnetd:
ALL
daemon@host
vsftpd@192.168.0.186
#可以簡寫192.168.0 代表192.168.0.0網段
#可以一次指定多個服務
#可以使用萬用字元ALL來指定所有的服務
#@只對某個主機來控制
匹配用戶端列表clent_list
IP
network address
network/mask: mask不能使用長度格式 ,只能是有完全ip的格式
172.16.0.0--->172.16. 也可以簡寫網段
HOSTNAME
fqdn
.a.rog 表示a.org域內的所有主機
option 選項
spawn #可以通過spawn來實現記錄定義
spawn echo ""
#下面定義一個條件,只要使用者通過telnet登入就記錄到一個日誌
vim /etc/hosts.deny
in.telnetd:ALL EXCEPT 172.16.0.1: spawnecho "Login attemp(`date`) %u from %a attemp to login %A, the deamon is%d." >> /var/log/telnet.log
##注意不能在echo後面用: 分號在這裡有特殊意義。
##可以通過man 5 hosts_access 來查看上述%的含義
常用的宏定義 MACRO
ALL #代表所有主機,或者所有服務
LOCAL #表示本地主機,非FQDN主機
KNOWN #表示可以被解析的主機
UNKNOWN #反向可以被解析的主機
PARANOID #正反向解析不匹配的主機
EXCEPT #排除某個主機或某個網路
-
怎麼來控制vsftpd的訪問
1. which vsftpd # 確定檔案路徑 2. vim /etc/hosts.deny # 改檔案立即生效vsftpd: 172.16.100.100 #假設僅允許172.16網段訪問vim /etc/hosts.allowvsftpd: 171.16 # 只允許172.16.0.0/16網段vim /etc/hosts.denyALL: ALL # 拒絕其他的使用者登陸
這樣就只有172.16.0.0網段可以訪問了
控制SSH ,只允許192.168.0.32網段登陸,並且不允許192.168.0.32登陸
vim /etc/hosts.denyALL:ALLvim /etc/hosts.allowsshd: 192.168.0 EXCEPT 192.168.0.32
效果:
將/etc/hosts.deny 裡面的ALL: ALL去掉就可以恢複登陸