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