Tcp_Wrapper原理


Linux 中有很多网络服务都会用到TCP Wrapper,如:Telnet、SSH、FTP、POP和SMTP等网络服务。它设计为一个介于外来服务请求和系统服务回应的中间处理软件(tcpd程序可以将其他的网络服务程序“包裹”起来从而进行集中的访问控制设置)。同时大多数LINUX版本中都默认提供的功能,主要执行的文件是tcpd。处理过程:当系统接收到一个外来服务请求的时候,先由TCP Wrapper处理此求,TCP Wrapper 根据这个请求所请求的服务及对这个服务所定制的控制规则来判断对方是否有使用这个服务的权限,如果有,TCP Wrapper 将请求按照配置文件定义的规则转交给想要那个的守护进程去处理同时记录这个请求动作,然后自己就等待下一个请求处理。如果外部有防火墙,当然先通过防火墙,再次经过TCP Wrapper. TCP Wrapper是基于主机与服务的使用简单的配置文件来设置访问限制.


TCP Wrapper配置文件与语法


TCP Wrapper 配置文件

/etc/hosts.allow     #文件用于保存允许访问的策略

/etc/hosts.deny    #文件用于保存拒绝访问的策略

若系统没定义的规则,默认是允许的,从优先级的角度考虑,host.allow 策略 优于 hosts.deny 策略的定义。


TCP Warpper 规则语法


<服务程序列表>    :    <客户机地址列表>     [: 动作]

如:/etc/hosts.allow

vsftpd:192.168.0.

/etc/hosts.deny

vsftpd:all


客户端常用的语法:


ALL:所有

LOCAL:所有主机名中不包含.的主机

UNKNOWN:无法被解析的主机

KNOWN:可以双向解析的主机

PARANOID: 正向解析成功但无法方向解析的主机

EXCEPT:除XXX 之外 可用于服务列表与客户端类表,可以层层套用

以句点“.” 开始的域名代表该域下的所有主机,如.test.com代表“test.com”域中的所有主机

如:/etc/hosts.deny  ALL: ALL EXCEPT192.168.0.0/255.255.255.0 EXCEPT server1.example.com


实现实例

使用TCP Wrappers对vsftpd服务和telnet服务进行基于主机的访问控制vsftpd服务器和Telnet服务器所主机的地址为“192.168.0.188”对于Vsftpd服务只允许IP地址为“192.168.0.45至192.68.0.0.100的主机可以访问。由于telnet服务器相对不是很安全,因此只允许IP地址为192.168.0.108的客户机访问


TCP Wrappers对vsftpd服务的访问控制

默认配置

wKiom1LXaA7DMBBbAADtLwNLpr8642.jpg


客户端访问正常


wKiom1LXaDrgsPEwAAGFY3HM8jM370.jpg


配置TCP Wrapper 参数,拒绝192.168.0.45这台主机使用vsftpd服务


wKioL1LXaFHiAXIQAADxvGHEJWo420.jpg


验证效果,输入用户及密码都不行.


wKioL1LXaHCC_9fzAAD-c03lNAE529.jpg


在TCP Wrapper配置文件中,注释掉拒绝192.168.0.45这台主机使用vsftpd服务


wKiom1LXaMTSHxOuAADxtb_ae8M933.jpg


TCP_Wrapper的参数是立即生效的,注释后访问成功,如下图:


wKioL1LXaPGxOyrSAAFFngBOEZs973.jpg


tcp_wrapper很简单,只要服务的模块支持tcp_wrapper,才可以使用tcp_wrapper。在vsftpd的配置文件最后,对tcp_wrapers参数设置,如:tcp_wrappers=yes


wKiom1LXaTzzn_YcAADSQtES3r0971.jpg


查看一个服务是否支持tcp_wrapper可以用以下命令去查看某个服务的执行文件是否调用tcp_wrapper


wKiom1LXaYfBKUG6AABTzkvLLcw877.jpg


也可以采用这个命令进行查询


wKioL1LXaZiAifQFAAB_cKJ2vdI211.jpg


继续查看下常用的服务有那些支持TCP_Wrapper;一般来说xinetd(超级守护进程)都支持tcp_wrapper,sendmail支持,而postfix不支持。


wKioL1LXad7S-7EjAABJSg9DvY0447.jpg


TCP Wrappers对telnet服务的访问控制

由于telnet服务器相对不是很安全,因此只允许IP地址为192.168.0.108的客户机访问

telnet服务使用明文传输所有的内容(包括用户登录口令),因此存在安全隐患,尽量使用SSH服务来代替telnet服务. telnet服务需要安装telnet-server服务,这里我可以通过

#yum install telnet-server


TCP Wrappers策略配置

采取先”全部禁止”再”逐个开放”的策略设置方法,可以较好的实现”只允许…”的访问策略.

host.deny 文件;


wKiom1LXaqLCITIJAAEM20a-1Js291.jpg


hosts.allow文件


wKioL1LXaq-B4BRQAADhhnBPtXU125.jpg


测试验证


用客户机192.168.0.89这台主机ftp登录到 服务器:192.168.0.188失败,验证成功啊! TCP_Wrapper访问控制生效了


wKiom1LXayrij3q8AAFj9-74Apg238.jpg