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 libwraptcp 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 应结合防火墙或其他安全加强设施一并使用,为系统多提供一层安全防护。