1.Tcp Wrapper是一個基於tcpd訪問實現的訪問控制工具,它能夠訪問大部分基於tcp的服務,一般來講,它只能實現那些在編譯的時候明確定義接受tcpd管理才行。
他們的工作原理類似於這樣的情況:一般來講,所謂服務監聽在某個套接字上進行監聽的服務,其實都是通過一個循環來實現的,這個循環就是不停的查看在某個端口上有客戶端的請求到來。然後根據客戶端的請求完成不同的任務。受tcpd管理的服務,可以是獨立的,也可以是非獨立的。當客戶端的請求到來的時候,先由tcpd來檢查,之後才交由端口。
2.如何知道我們的哪些程序可以被tcpd來控制呢?
一個程序到底接受不接受控制,可以用兩種方式來查看
1.ldd `which command` | grep wrap :只要編譯的時候,動態鏈接到wrap這個庫上就可以決定是接受控制的
2.strings `which command` | grep hosts :也能夠查看是否接收控制。不過它的顯示是這樣子的。裡面應該有以 hosts開頭的文件。
只要出現了/etc/hosts.allow和/etc/hosts.deny則表明它支持tcp wrapper來實現訪問控制。
其實,tcp wrapper的控制,正是基於這樣的方式實現的。
只要寫在/etc/hosts.allow裡,一般都是允許訪問的,寫在/etc/hosts.deny裡,就是拒絕訪問的。
3.當一個客戶端到來的時候,是如何檢查的呢?
首先去檢查我們的/etc/hosts.allow看這個文件有沒有跟這個完全匹配到的條目,如果有,則直接通過訪問,如果沒有則進而檢查deny這個文件,如果deny文件中有,則明確拒絕訪問,否則,當兩個文件都沒有匹配的時候,默認是允許的。
4.如何去定義訪問控制:
格式:daemon_list: client_list <:options}
進程:客戶端列表 <:選項>
4.1進程如何表示:這裡不能指定進程名,必須指定進程的那個可執行文件的文件名
4.1.1.可以是單個的可執行文件的名字
vsftpd: 192.168.0.
4.1.2.可以是多個服務的列表
vsftpd,sshd,in.telnetd:
4.1.3.可以使用通配符ALL,表示所有
ALL:
4.1.4.只在某個特定的地址上的某個服務限定
在實現控制某個特定服務服務的時候,要實現依賴於這個服務的其他服務也能夠服務。
4.2客戶端列表如何定義
4.2.1.可以使用單個的IP
IP
4.2.2.也可以使用網絡地址
4.2.2.1:使用網絡地址加掩碼的方式來實現,這個掩碼必須是長格式的。network/mask :不能使用長度格式,只能使用完全ip地址的格式
4.2.2.2:完全可以使用網絡地址的類似於172.16.則它會自動識別成172.16.0.0/255.255.0.0
4.2.3:可以使用主機名,比如 hostname
4.2.3.1:可以使用單個主機名 fqdn
4.2.3.2:可以使用域名,比如 .a.org 這表示a.org域內的所有主機
4.2.4:可以使用常用的宏定義:
ALL:表示所有主機/所有服務
LOCAL:本地主機,沒有域名的主機,非FQDN的主機名稱格式
KNOWN,UNKNOWN所有可解析的主機、不能被解析的主機
PARANOID:正向反向解析不匹配的主機
EXCEPT:除了XX主機