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工作方式:
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>