TCP wrappers 通常被称为 wrappers,它是由 Wieste Venema 编写,已经出现几年了。其背后的思想很简单,其要旨是可以在您的 AIX (UNIX®/Linux®) 主机上快速轻松地锁定流行的通过 TCP 访问的客户端。
Wrappers 允许系统管理员控制 wrappers 支持的基于 TCP 的服务或守护进程的访问。Tcpd 控制从 /etc/inetd.conf 中运行的 TCP 守护进程。不过,很多基于 TCP 的应用程序已加入 wrappers 支持(一般使用 libwrap 库),并且能感知 wrapper;不通过 /etc/inetd.conf 进行控制也没有关系。可以在 wrappers 下进行访问控制的通常有 telnet、ssh、sendmail、ftp 包
wrappers 守护进程称为 tcpd。Tcpd 读取两个文件,/etc/hosts.allow 和 /etc/hosts.deny,读取时基于这两个文件中的规则。
用ldd命令来查看一个应用程序是否受tcp wrapper控制。
ldd `which app` | grep libwrap
tcp wrapper 的安装有两种方式:一种是源代码编译安装,一种是用yum 安装。
在这里采用yum源的方式来安装。
# yum install telnet-server -y
注:因为telnet-server 受到xinetd 控制,所以安装telnet-server时xinetd也会安装上。 xinetd 超级守护进程。
tcp wrapper 访问控制规则查找方式:
两个访问控制配置文件。
/etc/hosts.allow
/etc/hosts.dny
首先检查/etc/hosts.allow中的规则,如果能匹配到,则就是通过,如果不能通过就到/etc/hosts.deny ,如果能匹配到,则就是拒绝,如果不能通过就用默认规则通过。
在这个两个文件中语法格式:
语法格式:
daemon_list: client_list[:options]
前面是进程是列表,也就是哪个服务 要写上可执行程序的二进制的名称。
后面的是客户端列表,也就是哪些客户端
对于:daemon_list
例如:
sshd :192.168.0.
vsftp,sshd,in.telnetd:
ALL :表示本机所有接受tcp wrapper访问控制的服务
对于:client_list
IP 可以使用单个ip地址。
network address
netword/mask 只接受长格式的形式,例如: 1.0.0.0 255.0.0.0
也可以用这个形式:172.16.
HOSTNAME
fqdn
.magedu.com
对于:MACRO 宏
ALL 所有的来宾
LOCAL 与本地的ip地址同一个网段的地址用户
KNOWN 主机名可被正常解析的
UNKOWN 主机名无法解析的
IPRANOID 主机名的正向解析与反向解析不一致
EXCEPT 除了
下面来举例来验证下:
开启服务:# service xinetd start
首先检查iptables -L -n 没有限制的,不然会影响结果的。
例如:
tcp wrapper
1、sshd 仅允许172.16.0.0/16网段访问:
方法:
1、在/etc/hosts.allow文件中添加:
sshd: 172.16.
2、在/etc/hosts.deny文件中添加:
sshd:ALL
2、telnet服务不允许172.16.0.0/16,但允许172.16.100.200访问,其他客户端不做控制
方法一:在/etc/hosts.deny文件中添加:
in.telnet: 172.16. EXCEPT 172.16.100.200
方法二:
1、在/etc/hosts.allow文件中添加:
in.telnet: 172.16.100.200
2、在/etc/hosts.deny文件中添加:
in.telnet: 172.16.
方法三:
1、在/etc/hosts.allow文件中添加:
in.telnet: ALL EXCEPT 172.16. EXCEPT 172.16.100.200
2、在/etc/hosts.deny文件中添加:
in.telnet:ALL
还有一种比较诡异的用法:
就是在allow中定义deny
在deny中定义allow
例如:不允许172.16.0.0网段访问
在/etc/hosts.allow文件中添加:
in.telnetd: 172.16. :DENY
对于:spawn:表示记录记下日志。
允许172.16.0.0网段访问并记下日志。
在
/etc/hosts.allow
in.telnetd: 172.16. :spawn echo "somebody entered,`date`" >> /var/log/tcpwrappr.log
tcp wrapper 常使用的宏:
%c 表示客户端
%s 表示服务器端
%h 客户端主机名
%p 服务的PID
例如: 允许172.16.0.0网段访问并记下日志。
/etc/hosts.allow
in.telnetd: 172.16. :spawn echo "`date`, Login attempt from %c to %s." >> /var/log/tcpwrapper.log
/etc/hosts.deny
in.telnetd: ALL :spawn "`date`,Login attempt from %h." >> /var/log/tcpwrapper.log
以上实现了tcp wrapper 的简单运用。
一般在操作系统层面上安装防火墙来处理网络连接,然而虽然防火墙有非常广泛的用途,但他却不是万能的,例如它无法处理类似的向连接发起者发送一些文本这样的任务。
TCP Wrappers扩展了inetd为受其控制的服务程序实施控制的能力,通过使用这种方法,它能够提供日志支持、返回消息给联入的连接、使得服务程序只接受内部连接,等等。
然而,由TCP Wrappers提供的一些额外的安全功能,不应被视为好的防火墙的替代品,TCP Wrappers 应结合防火墙或其他安全加强设施一并使用,为系统多提供一层安全防护。
本文转自 ZhouLS 51CTO博客,原文链接:http://blog.51cto.com/zhou123/812120