荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: 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软件 网络书店