tcpwrapper使用手记
时间:2010-03-29 来源:ilovejuner
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种方式都做一下简单介绍。
久不用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 <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. 编辑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_PID3.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_PID4 后记
在Linux上上有个xinetd,干的活就是tcpwrapper+inetd的活,也是个好东东。不过linux是江山代有才人出啊,现在又有 个iptables横空出世,已经很少很少人在用xinetd或者tcpwrapper了。还是那句话,特发此贴,只为纪念,纪念我曾经郁闷到几乎吐血的 日子。^_^
相关阅读 更多 +