访问控制功能之TCP wrapper

服务器 struggling 1337次浏览 0个评论

tcp wrapper是Wietse Venema开发的一个开源软件。它是一款类似iptables功能的访问控制的工具,但是要比iptables功能要小很多,一般只有在满足以下条件时才能使用tcp wrapper。
有两种方式来判断一个服务是否支持tcp wrapper:
1.通过查找库文件看是否有libwrap

<code>
ldd `which command` |grep wrap
例如:
[root@mail ~]# ldd `which sshd` |grep   wrap
	libwrap.so.0 => /lib/libwrap.so.0 (0x00887000)      ---->则说明支持wrap
 </code>

2.查看是否连接到/etc/hosts.allow|deny

<code>
strings `which command`   |grep hosts                # 查看静态链接库

 如果有/etc/hosts.allow或者 /etc/hosts.deny       就说明这个命令静态链接了tcp wraper
 </code>

使用以上方法找出的并不是绝对的支持tcp wrapper,要支持tcp wrapper还有一个必要条件就是必须使用tcp协议,像telnet ,ssh ,vsftp这几个服务就支持tcp wraper。

服务监听的两种方式:
socket(套接字) : 监听在套接字上提供服务,使用独立守护进程。
循环 : 一段程序通过循环不停的对一个端口进行扫描,使用超级守护进程。

tcp wrapper工作方式:

3b99152848b9344293f827944b087687

tcp wrapper定义的格式:

<code>
   daemon_list: client_list [:options]
   服务名        : 客户端名    [选项]
 
  daemon_list有以下几种格式:
                vsftpd: 192.168.0.
                vsftpd,sshd,telnetd: 192.168.0.
                All: 192.168.0.
                daemon@host           #只在某个特定的地址上进行控制比如:vsftpd@192.168.0.186,在有多块网卡的情况下使用
 </code>

client_list有以下几种格式:

<code>
                IP
                network address/mask           #网络地址(只能使用类似1.0.0.0/255.0.0.0完全ip地址格式,不能使用位长度表示)
                hostname                               #主机名称
                     .a.org                                 #表示.a.org域内的所有主机
 </code>

常用的宏定义 MACRO

ALL #代表所有主机,或者所有服务
LOCAL #表示本地主机,非FQDN主机
KNOWN #表示可以被解析的主机
UNKNOWN #反向可以被解析的主机
PARANOID #正反向解析不匹配的主机
EXCEPT #排除某个主机或某个网络

示例:

sshd仅允许192.168.0.0/16,不允许 网段访问

方法1: 1,在/etc/hosts.allow 文件中添加
sshd:172.16.
2,在 /etc/hosts.deny文件添加
sshd:ALL
方法2: 1,只在 /etc/hosts.deny文件添加
sshd:ALL EXPECT 172.16.

telnet(监听在TCP的23号端口)的介绍:
telnet是一个非独立守护进程,由超级守护进程(xinetd)代为管理,它接受tcp wrapper的控制,但是实际上不是telnet接受tcp wrapper的控制,而是xinetd接受tcp wrapper的控制, telnet传输的过程是明文, telnet一般不允许管理员直接登录(可以先以普通身份登进去,然后su – root)。

<code>
spawn:表示执行外部指令
可用参数:
        %c: user@host
        %s: server@host
        %h: 客户端主机名
        %p: 服务器上的进程的PID

    man 5 hosts_access:获取其完整帮助信息

 </code>

安装并启动telnet服务:

<code>
[root@mail xinetd.d]# yum install telnet-server
[root@mail xinetd.d]# service xinetd restart
[root@mail xinetd.d]# rpm -ql telnet-server
/etc/xinetd.d/telnet
/usr/sbin/in.telnetd     ----> 其主进程为in.telnetd
/usr/share/man/man5/issue.net.5.gz
/usr/share/man/man8/in.telnetd.8.gz
/usr/share/man/man8/telnetd.8.gz
[root@mail xinetd.d]# vim /etc/hosts.allow 
in.telnetd:10.128.  :spawn echo "`date`,login attempt from %c to %s"  >> /var/log/tcpwrapper.log
#启动访问记录功能,spawn表示使用记录功能,此句将使用telnet连接服务器的用户IP和服务器IP都记录到文件 /var/log/tcpwrapper.log

[root@mail xinetd.d]# vim  /etc/hosts.deny 
in.telnetd: :spawn echo "`date`,login attempt from %h.">> /var/log/tcpwrapper.log

 </code>

DevOps-田飞雨 》》转载请注明源地址
喜欢 (0)or分享 (0)
发表我的评论
取消评论
*

表情 贴图 加粗 链接 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址