荔园在线
荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀
[回到开始]
[上一篇][下一篇]
发信人: Pazu (自大狂的教训), 信区: Linux
标 题: TCP WRAPPER的安装与设定
发信站: BBS 荔园晨风站 (Fri Jan 28 10:06:02 2000), 转信
发信人: HYD (苏慧伦的歌迷), 信区: linux
标 题: tcp wrapper 安装与设定
发信站: ☆清华电机☆ Sat Jul 29 20:13:18 1995
一个月前我就打算写这东东,经过三个多星期的努力,才终於写了最前面的那一行:)
後来这几天有把刀架在我脖子上而不得不写完,这把刀叫:区域网路中心研讨会....
这东东只是凭个人的小小经验而作,而且又是在时间极赶(嗯嗯..CCC...)下完成,
所以应该有很多不足、错误、词不达意、不知所言、莫明其妙、误人子弟....,如果
个位觉得甚麽地方可以、应该改进,希望不吝指教,谢谢:)
文件版本:VERSION 1.0 DATE:1995/03/24
【Tcp-wrapper安装与设定】
Version: 7.2
Data : 1995/01
Tcp wrapper 是Wietse Venema 的大作。
Tcp wrapper 可说是所有连接上网路的主机都必须安装的基本软体。它具备了
了管制进入者的功能,例如可限制那些机器、人方才可以使用本系统,那些顽皮的
小孩或「邪恶」的机器,一概不提供Services。另一方面,tcp wrapper 也具有颇
不错的记录功能 (至少比厂商的阳春记录功能强许多) ,可以记录那时候甚麽人进
来了。因此,在今天蓬勃发达网路世界中不得不留意的系统安全领域,tcp wrapper
来了。因此,在今天蓬勃发达网路世界中不得不留意的系统安全领域,tcp wrapper
占有极重要的一席之地。
使用者可以在:
ftp://ftp.nccu.edu.tw/pub/security/unix/tools/tcp_wrappers_7.2.tar.gz
抓到这个东东。解压再tar 开之後,第一步当然是阅读本软体的文件档,如README
,该文件对本软体的运作、安装、特色等等有颇完整的介绍,非常值得一读。
本软体安装的方式有两种,设定也有两套。不过,笔者不太算全介绍,只打算
介绍其一种较常用的安装法,其中一种功能上较有弹性的设定法。如果大家对完整
的安装与设定有兴趣,请参考上述的README及*.5, *.8的文件档。
步骤一:修改Makefile
1.把第一个区段(即Advanced installation )所看到的
"REAL_DAEMON_DIR" 变数,找一个合适的,把remark的"#" 取消。不过
,根据我们下面的装法,只要随便消掉一个remark就可以了。
2.在差不多整个档的中间,找到这麽一行:
#STYLE = -DPROCESS_OPTIONS # Enable language extensions.
把前面的remark消掉,表示我们要用extensible language 的方式作设
定。这种方式设定起来比较有弹性。
3.找寻与资料的记录有关的这麽一行:
FACILITY= LOG_MAIL # LOG_MAIL is what most sendmail daemons use
这一行是表示,tcp wrapper 在作记录时,会把资料传给syslogd (这
是专面处理记录有关的Daemon),要求syslogd 把资料记录在syslog的
设定档所定义的MAIL对应的记录档上,一般会把它写到syslog这个档案
去。由於这个档一般是给sendmail作记录用的,所以如果我们tcp 也把
资料记录在这个档中,那麽将来要查阅记录的资料就会很乱。所以我个
人都毫不考虑的就把FACILITY改成其他的。但是,话说回来,改掉也有
缺点,就是syslog这个档,系统会维护其档长,如果改成其他的记录档
,那麽系统管理者就要自己定期去留意一下档长。
所以这里要不要改就看个人的评断了:)
假设要改,那要改成甚麽呢?
可以考虑改成LOCALx ->x 是指0-7的数字,例如:LOCAL7,那麽这一行
就可改成:
FACILITY= LOG_LOCAL7
这里是改了,那麽我们再检查一下syslogd 的设定档(一般是
/etc/syslog.conf)中有没有LOCAL7的设定。如果没有意外的话,一般
是没有,所以请在syslog的设定档中加入如下面的设定:
local7.info /var/log/local7.log
^^^^^^^^^^^^^^Sun 据说要用【两】个TAB以上
"local7.info" 之後的,是指要把资料写入的档案。如果档案原本不存
在,那得要先用touch 产生一新档。
如果要把资料传到其他server,那可以:
如果要把资料传到其他server,那可以:
local7.info @someserver
^^表示送往其他主机。
要记得的是,如果档案有变动,那麽得要重新开始syslogd ,即:
# kill -HUP `cat /etc/syslog.pid`
步骤二:编译
这是下个指令:
make <sys-type>
sys-type是指我们这台机器的系统,不知道的话,直接下"make",程式会
列出,然後再找一个合适的。
成功的编译,会造出叫"tcpd"的主要程式。
步骤三:修改inetd.conf
这是inetd 的设定档。这里得要稍微介绍一下inetd 这个东东了。
如果清楚inetd 运作的朋友可跳过这小节。
我们都知道UNIX有许多的services,例如:ftp, telnet, sendmail等等。
这些services在运作时,负责监听某固定的port。而port我们就想像成一个
山洞。UNIX上有许许多多的山洞(port),如果有人在某个山洞旁守候,看到
有资料从这个山洞送来,那就可以接收、处理这个资料。我们把这个守候的
家伙叫「恶魔」(Daemon)(有事没事守在洞口的,叫恶魔也颇传神的:))
家伙叫「恶魔」(Daemon)(有事没事守在洞口的,叫恶魔也颇传神的:))
。UNIX是只认得洞,不认得Daemon的。这句话是说,如果我们要作telnet,
那麽系统就直接把我们的资料送到对方特定的port去。所以我们知道,如果
对方该port没有Daemon在守候的话,我们就一定没有办法与对方连接上。
可是,要知道所谓的「守候」,在电脑世界是某个程式在记忆体中跑,要是
如此的话,那麽小小的记忆中将会塞满一堆没事作,单纯作等待的怪物,这
很明显的将造成系统负担。
所以,UNIX有个相当不错的作法,就是记忆体中只有一个专门作等待的
Daemon,叫inetd 。这个Daemon所等待的port不一定,是依inetd.conf中的
设定而定。如果inetd.conf有设定要接受telnet,那麽inetd 会在telnet相
关的port(即port 23) 作等待。要是有人把资料送给该port,那inetd 就会
执行(应该叫fork)真正负责作相关事的Daemon(如这里是telnetd-->
telnet Daemon )。而真正负责作事的Daemon是甚麽?在那里?执行时有甚
麽参数等等,都会/得在inetd.conf中设定好。
假设inetd.conf没有设finger,那麽如果有人从finger相关的port送资料来
,那麽可想而知,由於我们的inetd 不在该port作等待,所以送来的资料就
没被处理,因此别人就不能对我们作finger(这就是所谓的「关」掉
finger)。
inetd.conf的格式大概如下(以ftp为例)
ftp stream tcp nowait root /usr/etc/in.ftpd in.ftpd
^^1. ^^^^^^^^^^^^^^^^^^^^2. ^^^3. ^^^^^^^^^^^^^^^4. ^^^^^5.
1.服务名称,这得在/etc/services有定义的服务名称,并不是随意的阿猫阿
狗喔!:)
2.这里笔者偷懒略过,请照旧的设定而设。有兴趣了解者,请用"man"。
3.表示这个Daemon跑时是以那一个user来跑。如果是finger,最好assign 个
鸟不生蛋的id给它,如nobody。
4.这个服务的负责daemon的所在目录与程式。
5.执行这个daemon时,所配合使用的参数。如果没有的话,就如上直接再填上
daemon档名。如有,则在档名後直接把参数写上,如"in.ftpd -l"
如果使用tcp wrapper 的话,则要在"4."与"5."二处作改变。
ftp stream tcp nowait root /some/where/tcpd /usr/etc/in.ftpd
^^^^^^^^^^^^^^^^4. ^^^^^^^^^^^^^5.
"4."改成tcpd所在的位置。
"5."改成daemon的位置与参数,即前面的"4."与"5."的组合。
下面再举telnet为例,假设tcp wrapper 是装在/daemon/tcpd:
原本:
telnet stream tcp nowait root /usr/etc/in.telnetd in.telnetd
修改後:
telnet stream tcp nowait root /daemon/tcpd /usr/etc/in.telnetd
□要注意的是:各栏位之间请用TAB 分隔。
而且,在inetd.conf修改之後,得要kill -HUP <PID-OF-inetd>
步骤四:控制档的设定
tcp wrapper 的控制档有二:/etc/hosts.allow与/etc/hosts.deny。前者是
处理允许连接的主机、後者当然是拒绝的主机了。不过,由於我们是采用较
有弹性的extensible language 设法,所以只要用一个档就可以了。笔者只
打算介绍在/etc/hosts.allow中作设定的设法。
档案格式是:
daemon_list: client_list :option: option: option: ...
^^^^^^^^^1. ^^^^^^^^^2. ^^^^^^^^^^^^^^^^^^^^^^^^^^^3.
以"#" 作为附注,option间是以":" 作区隔
1.daemon list 是服务的Daemon(注意:不是服务),例如:in.telnetd
ftpd等等。就是在inetd.conf中,用到tcpd的某个服务其运作时的Daemon。
这里可以把所有要作相同设定的daemon列举出来,用空白字元或"," 号作
daemon间的区隔。例如:
telnetd in.ftpd in.fingerd: ....something(後面再谈这里)
telnetd, in.ftpd, in.fingerd: ....something
最後的":" 是表示这一行的daemon写完了,後面是client list 了。
不过,如果是表示全部,那这麽样子一个一个写恐怕会很累,我们可以用
两个wildcard:ALL 与EXCEPT。
a.ALL ,就是全部嘛!
b.EXCEPT,格式是:list_1 EXCEPT list_2。
当我们用ALL 时,不见得都很完美的适合每个daemon(或client),如
果有些例外不要的东东,那用EXCEPT是很方便的,例如:
ALL EXCEPT telnetd: ....something
ALL EXCEPT telnetd ftpd: ....something
EXCEPT会把其後的全都当成例外处理的东东,所以有甚麽要用列举的,
那我们聪明点,写在EXCEPT之前就可。
而且,EXCEPT可以包含EXCEPT(请参考hosts_access.5)
2.client list 是设定将受影响的机器。这可以是机器名、主机IP、patterns
或wildcard(如上述两个)。由於patterns含盖了前两者,所以下面只
介绍patterns与wildcard。
A. patterns
共有四种,笔者只打算其中两种。有兴趣者请自行参考hosts_access.5
a.如果一串host name 由"." 开始(如:.nccu.edu.tw),那麽本软
体只比较"." 之後的字元,只要"." 之後的字元相同,那就算是符
合的。所以:如果.nccu.edu.tw的设定,someway.nccu.edu.tw 这
机器是可以通过的,不过,someway.nccu.edu这机器(没.tw )当
然没办法通过。
如果写上一主机的全名,那部能受理的就只是该机器。
□这种方式只能在用host name ,而不能用ip address。
b.如果一串IP以"." (如:140.119.),则只比较"." 之前的数字。
所以"140.119."的设定,当看到140.119.1.2 时,是可以很愉快的
大叫宾果的。
如果写全了一IP ADDRESS,则宾果的只有那一台机器而已。
□这种方式只能用IP ADDRESS。
举例:
ftpd: 140.113.23.3 140.119. .nccu.edu.tw bbs.ntu.edu.tw: ...
B.wildcard
相同的,笔者没有全介绍,有兴趣者请参考hosts_access.5。
a.ALL
b.EXCEPT这两个说明请参考上文,daemon list说明的区段。
c.KNOWN
d.UNKNOWN
这两个可以是使用者帐号、主机名、主机IP address。
KNOWN 当然就指可以知道的,UNKNOWN 则是找不到的。
这些wildcard再配合"@" ,那麽我们可以控制连接的情形细微
到某一使用者。"@" 之後的是使用者的帐号,之後是机器名或
机器IP。
例如:hup@cc.nccu.edu.tw KNOWN@ALL等。
其中KNOWN@ALL 中的KNOWN@是表示可以用RFC 931(or 1413)抓
取连接的使用者的帐号。
如果有"@" 且之前有设定任何东东,那麽系统将会尝试去抓取
要求连接的使用者的帐号。
3.options 是我们所要控制的动作。在daemon与client都符合之後,那
麽真正所要进行的动作,就是option在作。还是一句老话:笔者只介
绍其中较常用的options ,有兴趣者,则请参考hosts_options.5 。
a.allow 接受这个连接的要求。
b.deny 拒绝这个连接的要求。
□注意:这两个options 只能摆在所有的options list的最
後一个。
例:
ALL: .bad.domain: DENY <--设定这个仇家的domain来的机
都一概不理。
fingerd: UNKNOWN@ALL: DENY <--设定没有装ident 的机器
都不让它finger我们。
ALL: ALL@ALL: ALLOW <--欢迎光临:)。所以不是上述情
况的机器,都可以接受。
c.keepalive
这是非常好用的一个option。如果有使用者没有正常离线就
关机,那麽可能会留一些process 在记忆体中,造成系统的
负担。这个option的设定,系统将定期检查client是否还活
著,不是就会解决它。
□UDP 不能用。
d.banners /some/directory
常常有人希望在连接之後(如telnet),先出现一段讯息,
例如:说明这部机器的作用、login name是甚麽等等。
这个option就可以满足这个须求。/some/directory 是指我
们的讯息档的所在目录。而我们讯息档必须与该daemon同名
字(如telnet服务的daemon叫in.telnetd,那我们的讯息档
也得叫in.telnetd)。
另外,如果我们拒绝某个机器的连接要求,那我们也可以用
这个option,再写一段温文、祥合而有礼貌的拒绝兼致歉文
(这千万不要写得太过火,要不然,本来没事,人家看了不
爽,说不定就惹火上身了)。
e.rfc 931 [ timeout_in_seconds ]
这个option设定之後,就表示要尝试抓取要求连接者的帐号
。後面的参数是表示要用多久的时间来作这个尝,default
值是10秒。这个值太小,那如果在网路太忙线时就没办法抓
到,如果太大,那麽没有装identd之类的机器得要等上半天
才有所反应了。
所谓的rfc 931 是指这样子的东东:
当有机器要求与我们连接时,我们基於安全与控制上的理由
,可能会希望对方能提供对方正要向我们连接的那个使用者
的帐号(这很合理嘛,要我方提供服务,至少礼貌上对方总
得先告诉我们他是谁)。
如果对方有安装支持rfc 931 的软体(如identd, pidentd
等),那麽我们就可以成功的抓到对方使用者的帐号。否则
就不行了。
在这里,笔者顺便说一下,如果可以的话,希望大家都能够
在自己所管的工作站装这方面的软体。相同的理由:我们希
望能获知与我们连接的使用者的帐号,那对方或其他人当然
也希望我们能够提供。所以将心比心,我们最好装一装(而
且安装了,到最後受益的一定是自己)。
4.控制档的举例:
fingerd: UNKNOWN@ALL: banners /usr/daemon/mesg: DENY
telnetd: ALL@ALL: banners /usr/daemon/mesg: ALLOW
ftpd: ALL: rfc931: keepalive: allow
ALL: 140.119.: keepalive: ALLOW
ALL EXCEPT fingerd: ALL: DENY
上面的设定:finger只能给有装identd之类软体的机器使用,拒绝时
会有所表示;telnetd 允许全部人使用,且会先秀段讯息,其他的不
给140.119.之外的人使用。
安装了本软体之後,在控制上很明显的就可以轻易的作到,另一方面,也能
够记录连接时的重要记录。在系统发生「不幸」时,那我们就可以参考这些记录
,对方「凶手」的追查上颇有帮助(当然,前提这些记录要不被破坏)。
================================================================
作者:陈彩合 E-MAIL: hup@cc.nccu.edu.tw
版本:1995/03/24 version 1.0
本文版权所有,不过允许复制。但是,如果未得本人同意,本文严禁任何
商业使用(例如:HopeNet 的压制光碟),否则必定追究。
================================================================
--
※ 来源:·BBS 荔园晨风站 bbs.szu.edu.cn·[FROM: 192.168.32.189]
[回到开始]
[上一篇][下一篇]
荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店