| 
	1 前言TCPWrapper,顾名思义,偶个人理解就是用来封装使用TCP/IP协议应用的一个东东,例如:telnet,ftp,ssh,exec,rsh,rlogin,finger,talk等。封装起来干啥呢? 做地址过滤啊,不让不认识的人随便到主机上串门,也就是安全上常说的access control list。
 
	tcpWrapper的工作原理其实很简单,打个比方说吧。 
	如果说telnet,ftp,ssh等工具是进入主机的大门,那么tcpwrapper就是守大门的老头。当有人想从telnet,ftp,ssh这些大门进入主机时,这个守大门的老头可不简单呢,它根据主机给它的你从哪儿来的信息(就是客户端IP)去翻翻资料允许进入以及不允许进入的列表(hosts.allow和hosts.deny文件),如果你来的这个地方在允许列表里,就放你进去,然后亮出一个欢迎你的牌子。^_^,如果你来的这个地方不在允许列表里,或者干脆被加入黒名单(hosts.deny)了,嘿嘿,他就睬都不睬你,你就自个人在那里撞门吧。 
	早期偶们做的小项目,没那么多钱,买不起硬件防火墙,solaris上又不像后期的Linux那样有iptables这种强大的工具(我昨天试图搞个iptables放在solaris上编译的,居然发现这可爱的小东西扎根于Linux的开源土壤,不愿意移植到Solaris上,非得linux的内核才能支持。。。),只好使用土装备--tcpwrapper。 
	2 安装tcpwrapper的安装有2种方式,一种是直接用编译好的二进制包安装,一种是自己吭哧吭哧的改Makefile编译。这儿对2种方式都做一下简单介绍。
 
	2.1  二进制包的安装二进制包的安装很简单,Solaris提供一种叫Package的二进制安装包格式,执行起来跟在windows上执行.exe的可执行文件差不多,很是方便快捷。这样的二进制包可以在sunfreeware的网站上找到,都是些热心人将各个软件包编译好之后,放在这个上面共享的。默认安装在/usr/local下的,solaris7,solaris8,solaris9 环境下编译的GNU的常用工具都有。
 获得package文件之后,执行下列命令即可完成安装:
 pkgadd -d <package_name>
 
	2.2  源码包编译安装如果想要增强TcpWrapper的功能(例如记日志,或者让登录者看到好看的欢迎信息^_^)或者不想安装在/usr/local目录下,就需要自己下载源码包来编译安装。
 tcpwrapper的作者一定不太负责任…,它的源码包没有configure文件,连make install的target都没有。。。要靠自己改Makefile文件,对我这个一窍不通C的人而言,实在是件巨痛苦无比的事情。所以虽然偶一向有记笔记的好习惯,在那次编译完TCPWrapper之后,居然没有留下只言片语。。。咳咳,跑题了,继续继续。
 在sunfreeware上同样可以找到每个gnu应用程序包的源码包,下载下来之后是.tar.gz的包格式,类似于tcp_wrappers-7.6.tar.gz这样的一个名字。
 
	1.解开tar.gz包gzip –d tcp_wrappers-7.6.tar.gz
 tar xvf tcp_wrappers-7.6.tar
 solaris tar令人厌恶的一点就是不支持z选项,所以得分成2条命令来解这个包,偶的习惯是直接装个gnu的tar把这个tar直接替换掉。^_^
 
	2.编辑Makefile1)先把#REAL_DAEMON_DIR=/usr/sbin前的注释打开
 2)添加如下配置项
 WORKDIR=/usr/security
 SBINDIR=$(WORKDIR)/bin
 LIBDIR=$(WORKDIR)/lib
 INCDIR=$(WORKDIR)/include
 MANDIR=$(WORKDIR)/man
 BANNERS=$(WORKDIR)/banner
 并且修改TABLES参数的值为:
 TABLES  = -DHOSTS_DENY=\"$(WORKDIR)/etc/hosts.deny\" -DHOSTS_ALLOW=\"$(WORKDIR)/etc/hosts.allow\"
 这些参数依次是指定tcp_wrapper的安装路径,执行程序路径,库文件路径,include文件路径,MAN文件路径,欢迎信息文件路径,以及配置access control list信息的文件所在路径;
 3)增加Install 项(高手看这段不要笑,偶的方法很土的…:$ 或者笑完把你比较高明的install方法留下让俺学习学习也行^_^)
 install:
 mkdir -p $(SBINDIR) $(LIBDIR) $(INCDIR) $(MANDIR)/man3 $(MANDIR)/man5 $(MANDIR)/man8 $(BANNERS)
 cp tcpd tcpdchk tcpdmatch safe_finger try-from $(SBINDIR)
 cp libwrap.a $(LIBDIR)
 cp tcpd.h $(INCDIR)
 cp *.3 $(MANDIR)/man3
 cp *.5 $(MANDIR)/man5
 cp *.8 tcpdmatch.8 $(MANDIR)/man8
 make CC=gcc -f Banners.Makefile
 cp in.* $(BANNERS)
 
	4)增强选项配置修改FACILITY为LOG_LOCAL2,这个是为了让tcpwrappers记录log,需要相应的修改syslog.conf的配置;
 
	5)显示欢迎信息如果要让你的主机显示欢迎信息给来访问的人,需要手工编辑一个prototype文件
 内容举例如下:
 *************************************
 *  Hello %c, Welcome you here
 *************************************
 当然了,有兴趣的话,可以再放些自己喜欢的文字进去。
 OK,这个令当时的偶费了无数时间吐血不已的Makefile文件终于大功告成了。接下来是编译,安装
 
	3.编译,安装make STYLE=-DPROCESS_OPTIONS sunos5
 make install
 去WORKDIR指定的目录下看看?那些文件已经乖乖的都就位了。
 
	3  配置3.1配置inetd.conf文件
 前文讲过,tcpwrapper就是用来封装telnet,ftp,ssh等程序的工具,那么如何封装呢? 窍门在inetd.conf文件里。
 这儿就不多描述inetd.conf文件在unix环境下的伟大作用了,有兴趣的人可以自行google
 在inetd.conf 文件里,大家可以看到这样的配置项:
 telnet  stream  tcp6 nowait  root /usr/sbin/in.telnetd in.telnetd
 如果要用tcpwrapper来封装telnet,则需要修改为如下这个样子:
 telnet  stream  tcp  nowait  root /usr/security/bin/tcpdin.telnetd
 这样,所有对主机的telnet访问,就变成由tcpd也就是tcpwrapper这个看门老头来控制了,很简单吧?
 然后不要忘了让inetd重读一下你改的配置
 ps –ef|grep inetd
 kill –HUP inetd_PID
 
	3.2  配置hosts.allow及hosts.deny文件Tcpwrapper最至关重要的2个配置文件就是hosts.allow及hosts.deny文件,这2个文件不存在,或者为空,看门老头就会偷懒,放人家通通进来的。
 首先,你要根据Makefile里指定的
 TABLES  = -DHOSTS_DENY=\"$(WORKDIR)/etc/hosts.deny\" -DHOSTS_ALLOW=\"$(WORKDIR)/etc/hosts.allow\"
 这个选项所在的位置来创建hosts.allow和hosts.deny文件
 通常情况下,可以在hosts.allow文件中指定ALL: ALL : DENY,这样就不用配置hosts.deny文件里
 
	3.2.1hosts.allow文件的内容格式ALL: ALL : banners /usr/security/banner/
 ALL: ALL : ALLOW
 ALL: ALL : DENY
 第一行,就是显示那个欢迎信息的banner的配置
 第二行,就是允许进入的地址列表
 第三行,就是说,不在允许列表中的地址通通不许进。
 
	3.2.2配置举例如果你要对所有被tcpwrapper管理起来的TCP/IP协议应用程序做相同的地址过滤规则的话
 第一行和第二行的第一个ALL可以保持不变;
 第一行和第二行的第二个ALL,需要换成允许进入的IP地址的列表,各个IP之间用逗号分隔。这些IP地址列表也支持地址段的方式加入,例如下面这样:
 ALL: 192.168.0.0/255.255.0.0,127.0.0.1 : banners /usr/security/banner/
 ALL: 192.168.0.0/255.255.0.0,127.0.0.1 : ALLOW
 ALL: ALL : DENY
 如果你要对被tcpwrapper管理起来的TCP/IP协议应用程序分别做地址过滤规则的话,可以在第一行和第二行的第一个ALL上做文章。
 例如下面这个样子:
 telnet: 192.168.0.0/255.255.0.0,127.0.0.1 : banners /usr/security/banner/
 ftp: 192.168.1.0/255.255.255.0,127.0.0.1 : banners /usr/security/banner/
 telnet: 192.168.0.0/255.255.0.0,127.0.0.1 : ALLOW
 ftp: 192.168.1.0/255.255.255.0,127.0.0.1 : ALLOW
 ALL: ALL : DENY
 好了,这样就可以控制访问的IP地址啦,是不是很简单?
 
	3.2.3 配置syslog.conf文件通常情况下,我们还需要配置tcpwrapper的日志文件,让它记录下所有试图连接我们主机的尝试及成功进入主机的信息。
 这就需要修改syslog.conf文件
 添加如下信息:
 local2.info  /var/log/tcpd.log
 记住local2.info和/var/log/tcpd.log之间要用tab键分开来,这个也是曾经折磨我到快要吐血的位置。^_^
 最后也别忘了让syslogd重读一下你改过的配置文件
 ps –ef|grep syslog
 kill –HUP syslog_PID
 
	4 后记在Linux上有个xinetd,干的活就是tcpwrapper+inetd的活,也是个好东东。不过linux是江山代有才人出啊,现在又有个iptables横空出世,已经很少很少人在用xinetd或者tcpwrapper了。
 
	本文转自:http://echo.sharera.com/blog/BlogTopic/9379.htm 为方便阅读,在原文基础上作了简单修改,再次感谢原作者的辛苦创作。(责任编辑:IT) |