Chinaunix首页 | 论坛 | 博客
  • 博客访问: 406494
  • 博文数量: 112
  • 博客积分: 4535
  • 博客等级: 上校
  • 技术积分: 1120
  • 用 户 组: 普通用户
  • 注册时间: 2007-06-12 10:57
文章分类

全部博文(112)

文章存档

2014年(1)

2013年(1)

2012年(18)

2011年(10)

2010年(16)

2009年(48)

2008年(9)

2007年(9)

我的朋友

分类: LINUX

2010-03-29 10:51:01

1    前言

久不用tcpwrapper,竟然忘了怎么配了,失败失败。看来现在条件的确好多了嘛,要么有硬件防火墙,要么有 软件防火墙,都用不上这种小儿科的东东了,特发此贴,以兹纪念。^_^
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  

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.   编辑Makefile
1)   先把#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/tcpd   in.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.1   hosts.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了。还是那句话,特发此贴,只为纪念,纪念我曾经郁闷到几乎吐血的 日子。^_^

阅读(1076) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~