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.只在某個特定的地址上的某個服務限定
vsftpd@192.168.0.186
在實現控制某個特定服務服務的時候,要實現依賴於這個服務的其他服務也能夠服務。
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主機
4.3例子:
如何控制vsftpd的訪問:
定義拒絕172.16.100.100來訪問vsftpd
vim /etc/hosts.deny
vsfptd: 172.16.100.100
注意,它是立即生效的
僅允許172.16網段訪問
vim /etc/hosts.allow
vsftpd: 172.16.
vim /etc/hosts.deny
vsftpd: ALL
4.4:EXCEPT的使用:除開……
定義僅允許172.16.0.1來訪問
vim /etc/hosts.deny
in.delnetd:ALL EXCEPT 172.16.0.1
4.5:定義之後的選項:
:spawn:發起一個命令
%u:使用者名稱
%a:用戶端名
%A:表示伺服器端名
%d :服務的名字
用spawn實現記錄定義:
任何一個使用者來試圖登入telnet的時候都記錄
in.delnetd:ALL EXCEPT 172.16.0.1: spawn /bin/echo “Login attempt(`date`) %u from %a attempt to login %A, the daemon is %d” >> /var/log/telnet.log
:ALLOW:在拒絕中允許
僅允許172.16.0.0網段訪問
vim /etc/hosts.deny
in.telnetd: 172.16. :ALLOW
ALL: ALL
:DENY:在允許中拒絕
vim /etc/hosts.allow
in.delnetd: 172.16. :DENY
原生telnet決絕所有人訪問。但是允許172.16.網段,但是還要拒絕172.16.100.100訪問。
在拒絕中:
ALL: ALL EXCEPT 172.16. EXCEPT 172.16.100.100