- TCP Wrapper软件包是一种基于TCP/IP协议之上的、运行于UNIX/Linux系统、基于访问控制技术的一种网络防火墙软件。它使用C语言编写。软件功能是提供访问控制机制和记录网络服务。需要特别指出的是,它是一种提供源代码的软件,用户仅需在自己的系统上编译并简单配置即可。它不仅支持Linux,而且还支持AIX、SunOS、Solaris、BSD UNIX、HP-UX、IRIX、NCR UNIX、SCO OpenServer、UnixWare、SVR4、FreeBSD、Ultrix、UNICOS等系统。
一、工作原理
当系统接收到一个外来服务请求时,由 xinetd 启动 tcpd 进程,由TCP Wrapper处理这个请求,TCP Wrapper根据这个请求所请求的服务和针对这个服务所定制的存取控制规则来判断对方是否有使用这个服务的权限,如果有,TCP Wrapper将该请求按照配置文件定义的规则转交给相应的守护进程去处理同时记录这个请求动作(syslog中),然后自己就等待下一个请求的处理。
详细的流程图:
请求
↓
服务 --->/etc/hosts.allow ---> 如有有匹配条目就放行
↓没有
/etc/hosts.deny ----> 如果没有匹配条目就放行
↓
如果有明确的匹配条目 ----> 拒绝
- 二、配置
- (1) 服务的模块需要支持tcp_wrapper,检查步骤如下(例):
- [root@test etc]# which sshd
/usr/sbin/sshd
[root@test etc]# ldd /usr/sbin/sshd | grep libwra
libwrap.so.0 => /lib/libwrap.so.0 (0x00134000)
如果有以上的返回值,表示程序支持tcp_wrapper
- (2)修改配置文件/etc/hosts.allow|deny 文件格式:damon_list: client_list [:option]
- hosts.allow:用于保存允许访问的策略
hosts.deny:用于保存拒绝访问的策略
- 策略一经修改立即生效
- 匹配服务列表:damon_list
1、ALL代表所有的服务程序;2、单个服务的名称,例如in.telnetd代表telnet服务器程序,vsftpd代表vsftpd服务器程序;3、多个服务程序名称可以组成列表,中间用逗号分隔,例如“in.telnetd,vsftpd”;4、支持TCP Wrapper的服务主要有:SSH、FTP、Telnet、POP、SMTP
- 匹配客户端列表clent_list
1、可以简写192.168.0 代表192.168.0.0网段;2、@只对某个主机来控制(如vsftpd@192.168.1.1)
- option 选项
spawn #可以通过spawn来实现日志定义
spawn echo ""
#下面定义一个条件,只要用户通过telnet登录就记录到一个日志
vim /etc/hosts.deny
in.telnetd:ALL EXCEPT 172.16.0.1: spawn echo "Login attemp(`date`) %u from %a attemp to login %A, the deamon is%d." >> /var/log/telnet.log
##注意不能在echo后面用: 分号在这里有特殊意义。
##可以通过man 5 hosts_access 来查看上述%的含义
- 常用的宏定义 MACRO
ALL #代表所有主机,或者所有服务
LOCAL #表示本地主机,非FQDN主机
KNOWN #表示可以被解析的主机
UNKNOWN #反向可以被解析的主机
PARANOID #正反向解析不匹配的主机
EXCEPT #排除某个主机或某个网络(例如192.168.0. EXCEPT 192.168.0.3 代表除了192.168.0.3以外的192.168.0.0整个网段)
例:控制vsftpd的访问
#假设仅允许172.16网段访问
vim /etc/hosts.allow
vsftpd: 171.16 # 只允许172.16.0.0/16网段
vim /etc/hosts.deny
ALL: ALL # 拒绝其他的用户登陆
这样就只有172.16.0.0网段可以访问了