tcpwrapper
这片文章介绍以下tcpwrapper(tcp的包装器)。
tcpwrapper的作用是对基于tcp的程序进行安全控制。它通过使用/usr/sbin/tcpd这样一个进程来代为监听任何一个使用了tcpwrapper的发起连接的tcp请求。假设sshd接受tcpwrapper的验证,当有一个连接发起ssh连接时先有tcpwrapper进行身份验证,如果通过了验证,则将连接转向sshd,否则直接拒绝连接。
tcpwrapper只能为tcp的连接进行验证。它实际是通过库文件libwrap.so来实现控制的,并不是所有的tcp连接都接受其控制。查看的方法是:1.如果是动态链接的话用 ldd `which COMMAND` | grep libwrap.so 如果结果有着库文件的话说明其接受tcpwrapper的控制;2.如果是静态连接的方式使用命令 strings `which COMMAND` grep hosts 如果结果有hosts.allow和hosts.deny这两个文件说明是接受其控制。当对非独立守护进程检查的时候需对xinetd进行检查。
tcpwrapper工作在传输层。其配置文件为/etc/hosts.allow和/etc/hosts.deny当服务发起的时候首先/etc/hosts.allowà/etc/hosts.denyà默认是allow。所以如果只想接受某个固定的访问,首先在allow中添加用户,在deny中拒绝所有。
配置文件的语法格式 deamon: clients:[options]
如果有两块网卡可以在deamon@IP 或是hostname,这样可以实现只对一块儿网卡的控制。切记deamon必须是可执行程序的二进制的名字,而不是进程名。如sshd是有OpenSSH提供的但定义的时候必须写sshd,再如telnet服务在写的时候必须写in.telnetd等。这可以在其启动脚本中找到。因为它只是对二进制本身做控制
eg:sshd@192.168.0.139:192.168.0.172
改变后不需要重启任何服务
在配置文件中有以下几个关于clients本地宏定义:
ALL 表示对所有主机
LOCAL 主机名中不包含域名的主机
UNKNOWN 主机名称无法解析的主机
KNOWN 主机名可以解析的主机
PARANOID 正向解析和反向解析不匹配的结果
对于deamon的宏定义只有ALL一个表示多有接受控制的
对clients的表示有
1. IP 192.168.0.172
2. NAME www.zlyblog.com
3. netmask 192.168.0.0/255.255.255.0
4. NETGROUP @notexample(通过nis域控制)
其主机名后可以加EXCEPT的选项:EXCEPT eg:sshd 10.0.0.0/255.255.0.0 EXCEPT 10.0.0.100表示允许10.0.0网段中除了10.0.0.100的主机的访问
options可以有如下选项:
allow
deny eg 在allow中in.telnetd :192.168.0.:deny表示拒绝这个网段的主机
spawn 表示当tcpwrapper检查到一个访问的时候,执行的一个程序。eg:记录日志 eg:in.telnetd:192.168.0. :spawn echo “Login attempt from %c to %s “ >> /var/log/tcpwrapper.log 表示当有一个访问的时候记录一下日志
其中如上的%c %s我们可以通过man 5 hosts_access 来查看
%a (%A) The client (server) host address.
%c Client information: user@host, user@address, a host name, or just an address, depending on how much information is available.
%d The daemon process name (argv[0] value).
%h (%H) The client (server) host name or address, if the host name is unavailable.
%n (%N) The client (server) host name (or "unknown" or "paranoid").
%p The daemon process id.
%s Server information: daemon@host, daemon@address, or just a dae- mon name, depending on how much information is available.
%u The client user name (or "unknown").
%% Expands to a single '%? character.
可以参照上面的内容自己做一下练习