Linux新系统访问控制的流程如下:
客户端--->iptables--->TCP_wrappers--->服务本身的访问控制
需要注意的是,一些特殊的应用服务是不受TCP_wrappers控制的,例如httpd和samba
TCP_wrappers是根据/etc/hosts.allow及/etc/hosts.deny两个文件来判断用户是否能够访问服务器资源。其实,/etc/hosts.allow与/etc/hosts.deny是/usr/sbin/tcpd的设定档,/usr/sbin/tcpd则是用来分析进入系统的TCP封包的一个软件,它是由TCP_wrappers提供的,那为什么叫做TCP_wrappers呢?其中wrappers有包裹的意思,也就是说,这个软件本身的功能就是分析TCP网络资料封包。前面提到网络的封包资料是以TCP封包为主的,这个TCP封包的档头至少记录了来源与目的主机的IP与PORT,因此,通过分析TCP封包,就可以判断是否允许让这个客户端访问服务器资源。
TCP_wrappers的访问控制主要通过以下两个文件实现:
/etc/hosts.allow
/etc/hosts.deny
/etc/hosts.allow用于定义允许的访问,/etc/hosts.deny用于定义拒绝的访问。
先来了解一下TCP_wrappers的访问控制判断顺序,如果客户端在通过iptables防火墙后想访问我们服务器的资源,系统会查看此客户端请求IP是否存在于/etc/hosts.allow列表里,如果存在,则接受此IP;如果不存在,则继续比对/etc/hosts.deny列表,如果存在于hosts.deny列表里,则拒绝此IP请求,如果此IP在两个文件里都不存在,则接受此IP请求。
如果一个IP既存在于/etc/hosts.allow中,又存在于/etc/deny中,那么这个IP根据上面的流程,最终的权限是允许
TCP_wrapper的语法格式如下:
<service>:<IP,domain,hostname...>:<allow|deny>
可以说TCP_wrappers是iptables最好的补充手段之一。所以很多朋友也称其为应用级防火墙。我们在做好服务器的防护工作时,可以利用iptables防火墙+TCP_wrappers的方法对服务器资源进行保护,这样其安全性也可进一步增强。