当前位置:Linux教程 - Linux - TIS防火墙详述(上)

TIS防火墙详述(上)



        

    by quack(quack@antionline.org)
    什么是防火墙——不知道;)
    什么是TIS?——这是一组由(Trusted Information Systems)写的一组构造防火墙的工具
    包,又叫firewall toolkit,这个工具箱里的软件适当的安装并配置以一定的安全策略
    就可以构成基本的防火墙了,而且它是免费的;)花点心思看一看,说不定可以省下一笔不
    菲的防火墙购置资金哦……
    一、编译运行
    1、下载
    可以到TIS的web站点下载http://www.tis.com,但它有一些很麻烦的认证过程,建议
    直接到国内的安全站点转转,或者到http://packetstorm.securify.com/去下载,我
    得到的版本是fwtk2.1.tar.Z的版本,此后的说明均以此版本为例,且在solaris7 x86
    上通过,gcc版本为2.95.2。

    2、编译

    # gunzip fwtk2.1.tar.Z
    # tar vfx fwtk2.1.tar
    # cd fwtk

    将fwtk2.1.tar.Z解压后,可以在./fwtk目录下发现有很多Makefile.config.*文件,
    比如你使用的操作系统是solaris2.7,那么就直接将Makefile.config更名后,把
    Makefile.config.solaris更名为Makefile.config就行了。

    # mv Makefile.config Makefile.config.old
    # mv Makefile.config.solaris Makefile.config

    在solaris下的编译相当容易——至少solaris7与solaris8下面不用修改任何东西就
    可以编译通过了。

    # make && make install

    如果你使用的是linux,仅仅把Makefile.config.linux当成当前Makefile.config还
    不够,因为如果你要使用X的gw.那么你必须有 Athena Widget的设置。否则编译会
    出问题。因此,可以修改Makefile让系统不编译x-gw。

    所以可以

    # vi Makefile

    查找下面这行:

    # directories to build executables in
    DIRS= smap smapd netacl plug-gw ftp-gw tn-gw rlogin-gw http-gw x-gw

    把后面的x-gw去掉就可以了。

    如果是在bsd下,特别要注意,bsd的make 不认识象:.include \"Makefile.config\"
    这种格式,因此,在bsd下要用TIS提供的fixmake来处理。或者用指定

    CC= gcc
    COPT= -g -traditional -DBSDI

    来适应bsd系统——比如我的FreeBSD3.4。

    如果在编译过程中有出现sys_errlist的定义声明出错,那么要修改原程序,比如:
    exter char *sys_errlist[];
    把该行注释掉。

    如果出现\"Undefined symbol `_crypt\ referenced from text segment\"错误,则
    看在你的Makefile.config中AUXLIB设置是否有\"-lcrypt\"。

    如果还有问题……我懒得翻译那么多东西了,你可以到下面的URL看看:

    http://fwtk.netimages.com/fwtk/faq/

    这里列出了人们在编译及使用tis时遇到的一些常见问题。


    二、配置前的准备工作

    1、理解一些概念

    a、wrapper

    我的理解,wrapper应该是一个包装程序,说白了和那些login什么的后门没本质区别;)
    比如说tcpd吧,我们用它来守护一些网络服务守护进程,比如,在超级服务守护进程
    inetd的配置文件中,我们可以将

    finger stream tcp nowait nobody /usr/etc/in.finger in.fingerd

    这一句替换掉,用tcpd来包装

    finger stream tcp nowait nobody /usr/etc/tcpd in.fingerd

    发送一个HUP信号给inetd让它重启后,tcpd就发生作用了,如果此时收到一个对主机的
    finger请求,tcpd便启动,先检查访问控制的配置文件,也就是/etc/hosts.allow和
    /etc/hosts.deny,如果允许访问,再启动真正的finger守护进程去处理该请求。

    怎么样,和login的后门相比原理是不是相同的?比如ulogin.c吧,是将真正的login改
    名备份到另一个地方,用假的login包装起来,收到login请求时,先判断访问者是不是
    有设置DISPLAY的环境变量,如果该变量和password相同的话,则启动/bin/sh,如果没
    有,则以正常的login来响应该请求……哎,这是题外话,不说了……

    b、gateway

    应用级网关(Application Level Gateways)是在网络应用层上建立协议过滤和转发功能。
    它针对特定的网络应用服务协议使用指定的数据过滤逻辑,并在过滤的同时,对数据包
    进行必要的分析、登记和统计,形成报告。

    呵,这种教材似的东西看着是不是觉得难理解,看了半天不知所云?其实在TIS下面,它
    的各种gw比如tn-gw,是控制telnet的,当你连接到tn-gw运行的端口时,它会出现一个
    自己的提示符……如下:

    C:\\>telnet 192.168.0.2
    然后telnet窗口将出现
    hi,i\m quack,welcome to my 3cr19TkI7\s website! <------------这是我的tn-welcome.txt
    tn-gw-> 它会在在连接时显示……
    当我键入问号寻求帮助时,会有如下的提示信息……
    tn-gw->?
    Valid commands are: (unique abbreviations may be used)
    connect hostname [serv/port]
    telnet hostname [serv/port]
    x-gw [hostname/display]
    help/?
    password
    timeout seconds
    quit/exit
    tn-gw->
    看明白了吗,唔,没错,它提供的是穿越这台防火墙主机对其它机器的telnet访问;)
    tn-gw-> telnet 192.168.0.2 55555
    Trying 192.168.0.2 port -9981...
    Connected to 192.168.0.2.

    SunOS 5.7

    login: quack
    Password:
    Last login: Fri Jun 9 00:27:48 from 192.168.0.1
    Sun Microsystems Inc. SunOS 5.7 Generic October 1998
    Cracker%

    这下清楚了吧……稍安勿燥,后面我将说明这是如何配置的。

    c、proxy

    代理服务(Proxy Service)也称链路级网关或TCP通道(Circuit Level Gateways or TCP
    Tunnels),也有人将它归于应用级网关一类。它是针对数据包过滤和应用网关技术存在
    的缺点而引入的防火墙技术,其特点是将所有跨越防火墙的网络通信链路分为两段。防
    火墙内外计算机系统间应用层的\"链接\",由两个终止代理服务器上的\"链接\"来实现,外
    部计算机的网络链路只能到达代理服务器,从而起到了隔离防火墙内外计算机系统的作
    用。此外,代理服务也对过往的数据包进行分析、注册登记,形成报告,同时当发现被
    攻击迹象时会向网络管理员发出警报,并保留攻击痕迹。

    2、文件介绍

    默认的安装,TIS是安装在/usr/local/etc目录下的,现在我们来看看里面都有些什么吧

    # cd /usr/local/etc
    # ls -la
    总数1092
    drwxr-xr-x 2 root other 512 6月 6 17:05 .
    drwxr-xr-x 11 root other 512 6月 6 17:02 ..
    -rwxr-xr-x 1 root other 17012 6月 6 17:05 authdump
    -rwxr-xr-x 1 root other 18752 6月 6 17:05 authload
    -rwxr-xr-x 1 root other 23132 6月 6 17:05 authmgr
    -rwxr-xr-x 1 root other 47500 6月 6 17:05 authsrv
    -rwxr-xr-x 1 root other 50952 6月 6 17:05 ftp-gw
    -rwxr-xr-x 1 root other 117712 6月 6 17:05 http-gw
    -rwxr-x--- 1 root other 362 6月 6 17:05 mqueue
    -rwxr-xr-x 1 root other 26820 6月 6 17:05 netacl
    -rw-r--r-- 1 root other 3101 6月 6 17:05 netperm-table
    -rwxr-xr-x 1 root other 30308 6月 6 17:05 plug-gw
    -rwxr-xr-x 1 root other 45892 6月 6 17:05 rlogin-gw
    -rwxr-xr-x 1 root other 31436 6月 6 17:05 smap
    -rwxr-xr-x 1 root other 28772 6月 6 17:05 smapd
    -rwxr-xr-x 1 root other 49940 6月 6 17:05 tn-gw
    -rwxr-xr-x 1 root other 44792 6月 6 17:05 x-gw

    一个一个来解释吧……

    a.authdump:这是对TIS认证数据库进行管理的工具,它可以在数据库中建立信息的
    ASCII文本形式的备份。其中的密码是加密后输出的。

    b.authload:也是认证数据库管理工具,它对数据库中的单个记录进行处理,这个命
    令在你需要向数据库中添加一组条目或者需要在两个站点之间共享数据库时特别有
    用。

    c.authmgr:网络认证的客户程序,它是与认证方authsrv的接口。是用来访问网络上
    的认证服务器或者加密连接时用的。

    d.authsrv:第三方网络认证守护程序,它提供了多种谁形式的综合接口,比如口令、一
    次性口令或者令牌认证系统,它里面有一个包含用户和组记录的数据库,并且还有一个
    管理接口,允许一个获得认证的管理员管理本地或网络上的用户记录。后面会说它的
    配置的。

    e.ftp-gw:
    它是带有日志记录和访问控制的可以穿越的FTP代理服务。

    f.http-gw:
    带有日志记录和访问控制的gopher和http代理服务。

    g.mqueue:
    不知是不是message queue?不太懂……:(

    h.netacl:
    TCP网络访问控制,由inetd调用,对各种服务提供包装。

    i.netperm-table:
    所有各种服务的配置文件。

    j.plug-gw:
    通用的一个tcp连接代理服务程序。

    k.rlogin-gw:
    这是提供穿过rlogin的代理服务——r系统服务的危险大家是都知道的了,如果非要不
    可,用它来提供包装吧

    l.smap:
    sendmail包装程序——客户端,它实现了smtp的最小版本,接受来自网络的消息,并
    发给smapd由它作进一步传送,它一般是运行在chroot下的。

    m.smapd:
    sendmail包装程序——守护程序,它通过定期扫描由smap维护的邮件缓冲池区域并转
    发搜集和保存在那里的任意消息。

    n.tn-gw:
    telnet的代理服务器。

    o.x-gw:
    X网关服务器。


    3、系统准备

    a.去除IP转发

    你的机器有两块网卡么?
    如果你不想你的防火墙轻易被人穿越,就得老老实实把IP转发功能干掉,因为IP转发
    会导致从一个接口接收到的报文重新转发到所有其它适用的接口——一般去除IP转发
    可能要重新配置内核。
    默认情况下,如果Solaris机器有超过一块的网卡的话,它将会在不同网卡间转发数
    据包,这一行为可以在/etc/init.d/inetinit中得到控制。要在Solaris 2.4或者更
    低版本机器下关闭它,可以将ndd -set /dev/ip ip_forwarding 0添加于
    /etc/init.d/inetinit的未尾。在Solaris 2.5中,只要touch /etc/notrouter.
    如果是SunOS4.1x,则在内核运行adb,在核心配置文件中加入
    options \"IPFORWARDING=-1\"并重新编译生成新的内核。
    至于linux,你试着make menuconfig,找到IP:forwarding/gatewaying,将
    CONFIG_IP_FORWARD关掉,重新编译即可。其它的类似吧,自己琢磨琢磨,我也不会;)

    b.移除/etc/inetd.conf及/etc/rc2.d/内不必要的服务

    首先可以用
    # ps -elf
    看看系统启动时启动的服务
    你可以暂时先把/etc/inetd.conf内的所有服务都屏蔽掉——在每一项前面加上#号使其
    失效——因为稍后我们将用netacl或者各种*-gw来包装这些服务——启动的inetd.conf
    总是要改的;)
    并非所有的进程都是由inetd这一超级服务器守护进程来启动的,有一些直接在rc2.d里
    定义,直接在系统启动时就运行,如果你有运行下列服务的话,最好也关掉:
    pcnfsd
    rwhod
    mountd
    protmap
    sendmail
    named
    printer
    timed
    nfsd
    rstatd
    xntpd
    nfsiod
    有些服务的关闭可能会影响系统服务,需要你自行分析了……。

    三、配置

    1、netperm-table

    这是防火墙工具箱里所有东西——netacl,smap,ftp-gw,tn-gw,plug-gw等的配置文件,
    当一个应用被启动时,它就会从netperm-table中读取出自己相关的配置和许可信息的
    策略文件。下面把默认安装后的netperm-table贴出来——它有许多注解的

    #
    # netperm配置表的示例文件
    #
    # 要更好地利用地这个netperm-table,最好把你的主机名用IP地址来替代
    # (e.g.; 666.777.888),这样比较不容易受到DNS欺骗的侵害。
    #

    # netacl示例规则:
    # ---------------------
    # 下面两行的注释如果去掉,将启动telnet
    #netacl-telnetd: permit-hosts 127.0.0.1 -exec /usr/libexec/telnetd
    #netacl-telnetd: permit-hosts YOURADDRESS 198.6.73.2 -exec /usr/libexec/telnetd
    #
    # 下面这行是tn-gw的
    #netacl-telnetd: permit-hosts * -exec /usr/local/etc/tn-gw
    #
    # 下面是rlogin
    #netacl-rlogind: permit-hosts 127.0.0.1 -exec /usr/libexec/rlogind -a
    #netacl-rlogind: permit-hosts YOURADDRESS 198.6.73.2 -exec /usr/libexec/rlogind -a
    #
    # rlogin-gw的配置
    #netacl-rlogind: permit-hosts * -exec /usr/local/etc/rlogin-gw

    #
    # 要将finger使能,把下面两行的注释去掉
    #netacl-fingerd: permit-hosts YOURNET.* -exec /usr/libexec/fingerd
    #netacl-fingerd: permit-hosts * -exec /bin/cat /usr/local/etc/finger.txt

    # smap规则示例:
    # -------------------
    smap, smapd: userid 6
    smap, smapd: directory /var/spool/smap
    smapd: executable /usr/local/etc/smapd
    smapd: sendmail /usr/sbin/sendmail
    smap: timeout 3600

    # ftp gateway 规则示例:
    # --------------------------
    #ftp-gw: denial-msg /usr/local/etc/ftp-deny.txt
    #ftp-gw: welcome-msg /usr/local/etc/ftp-welcome.txt
    #ftp-gw: help-msg /usr/local/etc/ftp-help.txt
    ftp-gw: timeout 3600
    # uncomment the following line if you want internal users to be
    # able to do FTP with the internet
    #ftp-gw: permit-hosts YOURNET.*
    # uncomment the following line if you want external users to be
    # able to do FTP with the internal network using authentication
    #ftp-gw: permit-hosts * -authall -log { retr stor }

    # telnet gateway规则示例:
    # -----------------------------
    #tn-gw: denial-msg /usr/local/etc/tn-deny.txt
    #tn-gw: welcome-msg /usr/local/etc/tn-welcome.txt
    #tn-gw: help-msg /usr/local/etc/tn-help.txt
    tn-gw: timeout 3600
    tn-gw: permit-hosts YOURNET.* -passok -xok
    # if this line is uncommented incoming traffic is permitted WITH
    # authentication required
    #tn-gw: permit-hosts * -auth

    # rlogin gateway规则:
    # -----------------------------
    #rlogin-gw: denial-msg /usr/local/etc/rlogin-deny.txt
    #rlogin-gw: welcome-msg /usr/local/etc/rlogin-welcome.txt
    #rlogin-gw: help-msg /usr/local/etc/rlogin-help.txt
    rlogin-gw: timeout 3600
    rlogin-gw: permit-hosts YOURNET.* -passok -xok
    # if this line is uncommented incoming traffic is permitted WITH
    # authentication required
    #rlogin-gw: permit-hosts * -auth -xok


    # auth server and client的规则示例
    # ------------------------------------
    authsrv: hosts 127.0.0.1
    authsrv: database /usr/local/etc/fw-authdb
    authsrv: badsleep 1200
    authsrv: nobogus true

    # clients using the auth server
    *: authserver 127.0.0.1 7777

    # X代理的规则:
    tn-gw, rlogin-gw: xforwarder /usr/local/etc/x-gw

    发布人:netbull 来自:黑白世界