tcp wrapper
基于tcpd进程来实现,能够对访问本机的基于tcp的服务,并且在编译的时候接受tcpd控制的服务进行访问控制的一款工具。它工作在稍底层,能够代为接收用户对于那些接受tcp wrapper控制的服务的请求,并检查其是否符合访问的要求,如果符合,就把请求转交给对应的服务,如果不符合就直接丢弃的一种机制。那么怎么知道一个服务是否接受tcp wrapper的控制呢?
1、ldd `which postfix` //查看postfix是否接受控制 如果下面有libwrap.so.0 => /lib/libwrap.so.0 (0x003e2000) 的话就接受,否则不接受 2、strings `which command` | grep hosts也可以查看 里面有以hosts开头的文件 /etc/hosts.allow /etc/hosts.deny 如果有,就接受访问控制,否则不接受控制。用户访问过程
当用户发送访问请求的时候,先被tcpd进程接收,然后检查/etc/hosts.allow里面是否有相关的定义,如果有,则通过访问。如果没有则检查/etc/hosts.deny里面是否有相关定义,如果有则拒绝访问,如果没有默认情况下是被允许的。这就是tcp wrapper的访问控制过程。里面定义的命令形式如下
daemon_list:client_list[:options] 其中第一段daemon_list有如下表现形式 vsftpd: //一个 vsftpd,ssh: //多个 ALL //宏定义,所有 //表示本机的通过此ip的访问 其中第二段client_list有如下表现形式 ip //直接使用ip地址 192.168.0.0/255.255.255.0 //使用一个网段,不能使用/24这种形式 直接使用主机名 .a.org //使用一个域,表示这个域中的所有 except除了,谁谁谁 如:在/etc/hosts.deny里面写入,表示拒绝信息 vsftpd:192.168.0. //表示对192.168.0.0网段进行控制ftp访问服务控制 vsftpd,sshd:192.168.0. //表示对此网段的ftp,sshd进行访问控制 ALL:192.168.0. //表示对此网段所有基于tcpd访问控制 //如果有两个ip表明只对这个ip访问的ftp控制这里vsftpd不能写成ftp否则不能生效。如你想定义vsftpd则使用which vsftpd然后查看它的文件名就知道了。这里只能用可执行程序的文件名。如telnet的文件名叫in.telnet。
如果你定义一个网段拒绝访问vsftpd在/etc/hosts.allow中允许后,要在/etc/hosts.deny中拒绝所有 这里定义过后是立即生效的,不必重启例如:这里拒绝本机使用telnet,除了172.16.0.1
vim /etc/hosts.deny in.telnetd: ALL EXCEPT 172.16.0.1