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

TIS防火墙详述(下)



        
    一头雾水是吧……我来归结一下……
    a.每一条规则都是按照要使用该规则的程序的名字开头,后跟一个冒号,当程序读
    取时也只读取其相关的规则。
    b.多个应用可以共用一条规则,各应用名字用逗号隔开或者用星号来通配——当然
    我不建议你这么做,这样简单是简单了,但维护或者阅读起来会比较烦。

    不多说了,在各种服务中再慢慢谈配置吧。

    2、netacl

    这里我示例配置用netacl包装telnet以及ftp守护程序
    首先我们在/etc/inetd.conf里添上下面两行——记得吗,前边我们disable了它们了;)

    ftp stream tcp nowait root /usr/local/etc/netacl in.ftpd
    telnet stream tcp nowait root /usr/local/etc/netacl in.telnetd

    这根据你自己的不同来决定,比如你的守护进程是ftpd和telnetd,把in.ftpd及in.telnetd改
    成它们好了。然后ps -ef|grep inetd找出进程号后发送HUP信号重启。

    修改/usr/local/etc/netperm-table中相关条目如下:

    # telnet rules:

    netacl-in.telnetd: permit-hosts 192.168.0.1 -exec /usr/sbin/in.telnetd

    #这里我只允许从192.168.0.1这台机器telnet上来,所以连localhost都不行:)

    netacl-in.telnetd: deny-hosts unknow

    #要注意这条信息哦,这是防止网络中恶意用户的IP spoof 的办法
    #这样,你就可以让地址192.168.0.2 telnet到你机器上 ,而除了它之外的所有地址
    #会被显示一条警告信息。最后一条保证了如果你主机的IN.APPR.ARPA反向DNS查询主机
    #名错误的时候,该不知名的远程机器无法telnet进来。(DNS spoof)

    netacl-in.telnetd: permit-hosts * -exec /bin/cat /usr/local/etc/notelnet.txt

    #这条会在不允许登陆时显示一条信息——你可以自己编辑内容。
    #
    # Ftp Rules:

    netacl-in.ftpd: permit-hosts 127.0.0.1 -exec /usr/sbin/in.ftpd

    #这条只允许本地机器localhost的ftp其它都被拒绝

    netacl-in.ftpd: permit-hosts * -exec /bin/cat /usr/local/etc/noftp.txt

    #对被拒绝的机器显示这一信息

    OK,现在我们来测试一下我们的配置是否正常工作……
    我从192.168.0.1上telnet目标机器192.168.0.2
    SunOS 5.7

    login: ronin
    Password:
    Last login: Sat Jun 10 18:00:34 from 192.168.0.1
    Sun Microsystems Inc. SunOS 5.7 Generic October 1998
    Cracker%

    唔,正常得很,看看阻塞的规则是否工作吧,我们就从localhost telnet本地吧……

    Cracker% telnet localhost
    Trying 127.0.0.1...
    Connected to localhost.
    Escape character is \^]\.
    here is notelnet.txt file,means you can\t access this host. <---我的notelnet.txt内容
    Connection closed by foreign host.
    Cracker%

    FTP的测试也是类似的,就不再多说了……

    总结netacl的规则有如下表达:

    permit-host ip/hostname 指定允许主机
    deny-host ip/hostname 指定拒绝主机,被拒绝的主机会被syslogd记录
    -exec executable[args] 为处理服务而激活的程序
    -user userid 程序启动时的身份——以root或者nobody等等
    -chroot rootdir 标识在调用服务程序前的chroot目录

    3、认证系统:

    对于这个认证系统,也同样要编辑/etc/services,添加

    authsrv 3333/tcp

    然后在/etc/inetd.conf中加入一行

    authsrv stream tcp nowait root /usr/local/etc/authsrv authsrv

    # ./authsrv <-----------------运行authsrv
    authsrv# ? <-----------------它就跳出来authsrv#字样,我要看帮助,
    键?,得到下面的输出

    Command List:
    (Commands may be invoked with unique leading abbreviation)
    authorize username [comment]
    authenticate username
    response
    quit
    exit
    display username
    adduser username [fullname] <----------添加用户
    deluser username
    enable username [onetime] <----------给用户使能
    disable username
    password [username] passwordtext <----------设密码
    passwd [username] passwordtext
    proto username protoname <----------标志用户使用的认证协议
    group username groupname <----------设组别
    rename username newname [fullname]
    wiz username
    unwiz username
    superwiz username
    operation group/user username command dest [tokens]
    list [group]
    ls [group]
    ?
    help

    authsrv# adduser wlj <--------------我在加用户了
    ok - user added initially disabled
    authsrv# password wlj wlj <-------------设密码,xixi,passwd=username,so easy to crack
    Password for wlj changed.
    authsrv# group wlj other <-------------设组别
    set group
    authsrv# enable wlj <-------------使能
    enabled
    authsrv# wiz wlj
    set group-wizard
    authsrv# superwiz wlj
    set wizard
    authsrv# ls <-------------现在看看……
    Report for users in database
    user group longname status proto last
    ---- ----- -------- ------ ----- ----
    user n passw never
    wlj other y G passw never

    搞定了这个就可以试试authmgr的情况了……

    前面提到的authmgr这个客户程序则是用法如下:

    Cracker# ./authmgr
    Connected to server
    authmgr-> login
    Username: wlj
    Password:
    Logged in
    authmgr-> list
    Report for users in database
    user group longname status proto last
    ---- ----- -------- ------ ----- ----
    admin root y W passw never
    wlj other y G passw Sat Jun 10 11:26:18 2000
    authmgr->

    至于认证服务器也有它的规则,比如我的机器上的是这样的:

    # Example auth server and client rules
    # ------------------------------------
    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 3333

    说说它的规则吧……关于authsrv可以有下面的规则项:

    database pathname 指定authsrv数据库的数径
    nobogus true 当用户认证失败返回一个友好的错误消息
    badsleep seconds 对尝试口令的登陆的限制
    userid name 指定authsrv运行的PID
    hosts host-pattern[key] 跟加密有关的了
    operation user id telnet-gw host +
    +————>存储在netperm-table中的操作规则
    |
    operation user id ftp-gw host put +

    怎么样,看得明白么?我写得太乱,但实在表达不好;(不明白的话自己查帮助吧……


    4、ftp-gw

    现在要来配置ftp代理了,一般情况下,你可能希望既运行ftp代理又运行正常的ftp服务,
    这样要对几个文件进行处理,首先编辑/etc/services,加入以下行:

    ronin 4444/tcp

    然后在文件/etc/inetd.conf中把与FTP相关的行改为如下:

    ftp stream tcp nowait root /usr/local/etc/ftp-gw ftp-gw
    ronin stream tcp nowait root /usr/local/etc/netacl in.ftpd

    其中第二行的意思是配合/etc/services文件,将普通ftp端口移至4444,并以netacl包装。
    而第一行就是我们的ftp-gw了。

    重启进程后,用端口扫描可以看到4444端口是打开的,可以直接连通。
    我们现在应该来配置ftp-gw的规则了——打开文件/usr/local/etc/netperm-table:

    # Example ftp gateway rules:
    # --------------------------
    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.*
    ftp-gw: hosts 192.168.0.*
    # 允许192.168.0.*的这些机器登陆
    ftp-gw: authserver localhost 3333
    # 认证服务器是本地机器,端口为3333 <---------刚才在认证服务中定义的

    它的程序规则如下:

    userid user 指定了用户ID
    directory pathname ftp-gw之前的chroot目录
    denial-msg filename 访问拒绝时显示的文件
    welcome-msg filename 欢迎信息文件
    help-msg filename 帮助信息文件
    denydest-msg filename 受限制的访问显示文件
    timeout secondvalue 超时设置

    主机访问选项如下:

    -dest pattern 标志一个有效目标
    -dest {pattern1 pattern2……} 标志一组有效目标
    -auth 说明代理要求用户出示有效ID证明才允许使用
    -passok 如果来自受托主机,则允许修改口令

    下面我们来验证一下,先ftp到4444的netacl控制端口……

    C:\\>ftp
    ftp> o 192.168.0.2 4444
    Connected to 192.168.0.2.
    sorry, you can\t allow to access the ftp site! <-------定义的noftp.txt……
    Connection closed by remote host.
    ftp>

    阻塞规则起作用了……

    然后来试试代理吧:

    C:\\>ftp 192.168.0.2
    Connected to 192.168.0.2.
    220 i am quack, welcome ^&^
    User (192.168.0.2:(none)): wlj@localhost <---------记得我刚才输入的认证用户么?
    331-(----GATEWAY CONNECTED TO localhost----)
    331-(220 i am quack, welcome ^&^)
    331 Enter authentication password for wlj
    Password:
    230 User authenticated to proxy
    ftp>

    成功连接了……至于允许及阻塞的规则——自己制订去吧。

    5、tn-gw

    和配置FTP没有什么两样,编辑/etc/services、/etc/inetd.conf、
    /usr/local/etc/netperm-table等文件,定义好端口、规则……就不多说了。

    6、plug-gw\\rlogin-gw\\http-gw\\x-gw:这些代理的配置也大同小异,读者可以自行研究。

    7、smap\\smapd:至于这个,我没有配sendmail,也懒得弄了——没有尝试不敢胡说……

    四、附加工具包

    在tis的./tools/目录有一些管理工具,利用它们可以完成一些系统管理功能,
    但是,可能是下载的版本的原因吧,我在packetstorm下载到的版本无法直接编译安
    装通过,问题有二,一是./tools/server/下有个syslog,得改成syslogd,还有就
    是make install时工具没法装到正确的目录,你可以修改一下Makefile或者干脆自
    已动手拷贝——还要快些:)

    这些工具如下:

    ./tools/admin/

    1、flog

    这个东西是监视某一log文件的实时变化的工具,作者自述在控制台工作时经常运行
    tail -f /usr/adm/syslog来实时察看log文件的变化,以确定系统的运行情况,而
    flog是一个更加聪明的工具——你可以简单地键入flog&来运行它,默认情况下它察
    看的是/var/log/messages——你可以在编译的时候自己定义它。

    或者你可以用flog /var/log/auth.log&来察看其它的文件。

    2、portscan

    这东东似乎没必要多说——任谁看portscan也知道是个端口扫描工具了……

    usage: portscan [-l low port] [-h high port] [-v] host

    最简单直接的就是:./portscan localhost了……确定现在有哪些端口在提供服务。
    如果用-v host参数也会得到一个冗余的输出——每个端口打印一个小圆点……通过
    这个输出你可以判断它是不是还在跑……

    3、netscan

    这是一个网络ping程序,它将网络地址做为参数接受,并且ping该网络中的每个地址。
    它的缺省输出是一组响应ping的地址列表及对应的主机名字。比如你可以用下面方式
    运行:
    # ./netscan 202.101.103

    它会依次ping每个地址,并将有响应——就是存活的主机返回。

    它还可以以冗余方式运行。在这种方式下,响应ping的地址与其名字放在一起或者左对
    齐,没有响应的地址则会缩排,以tab方式缩进一个制表空格。可以用

    # ./netscan -v 202.101.103

    得到冗余方式的输出。

    4、progmail

    这是一个简单的发送邮件的程序,要安装它,你可以将它拷贝到/usr/local/etc/中,
    然后修改sendmail.cf中的行:

    Mprog, P=/bin/sh, F=lsDFMeuP, S=10, R=20, A=sh -c $u

    将其改为:

    Mprog, P=/usr/local/etc/progmail, F=lsDFMeuP, S=10, R=20, A=sh -c $u

    5、reporting

    # ls -la
    -rw-r----- 1 ronin other 2126 1994 11月 5 authsrv-summ.sh
    -rw-r----- 1 ronin other 962 1994 11月 5 daily-report.sh
    -rw-r----- 1 ronin other 4799 1996 11月 27 deny-summ.sh
    -rw-r----- 1 ronin other 2757 1994 11月 5 ftp-summ.sh
    -rw-r----- 1 ronin other 2796 1994 11月 5 http-summ.sh
    -rw-r----- 1 ronin other 247 1994 11月 5 login-summ.sh
    -rw-r----- 1 ronin other 2048 1994 11月 5 netacl-summ.sh
    -rw-r----- 1 ronin other 2017 1994 11月 5 smap-summ.sh
    -rw-r----- 1 ronin other 2256 1994 11月 5 tn-gw-summ.sh
    -rw-r----- 1 ronin other 960 1994 11月 5 today-report.sh
    -rw-r----- 1 ronin other 962 1994 11月 5 weekly-report.sh

    这些东西不言而明是shell script写成的日志统计工具了,自己看看代码吧……

    然后在client及server目录下还有以下工具——作个简略介绍吧:

    ftpd - a version of ftpd that uses the auth server
    login-sh - a login shell wrapper that uses the auth server
    (see the man pages)
    syslog - a version of the 4.3bsd syslog that uses regexps
    gate-ftp - If invoked as \"gate-ftp\", the environment variable FTPSERVER is
    searched for, and is contacted as a proxy ftp gateway. Autologin in done
    through the proxy. If FTPSERVERPORT is set, that is used as the port
    number for the gateway server.
    tn - a simple \"expect\" script that handles telnetting out through
    the proxy automatically


    好了,很久没打过这么多的字了……手酸死了……

    结论:上面说了这么多,其实只是说明一些基本的配置,至于你自己的网络如何用这一防火
    墙来将入侵者阻挡于大门之外,这需要你自行分析你的安全策略、网络结构等等再灵活地运
    用这些防火墙工具及规则来确保安全。


    附1、一些tip 译自fwtk faq 一文

    1、我如何在toolkit里使用S/KEYS?

    First, you must obtain the SecureID library from Axent Technologies (Security Dynamics)
    or the Skey library. In order to compile the SecureID with the toolkit, change the
    \"tis_sd_init\" reference in securid.c to \"sd_init\". The \"tis_\" variant is a TIS fix that
    ships with Gauntlet since the SecurID software won\t work well with multi-homed hosts.
    For both, you need to edit the Makefile in the auth directory for the proper modules to be
    compiled and linked. Remove the \"#\" from the \"SKEYDIR=\" (etc..) lines and re-make.

    #if you are using the SKEY modules, define SKEYDIR to be the source
    #directory where the SKEY libraries and include files are.
    #SKEYDIR=../../skey
    #SKEYINC= -I$(SKEYDIR)
    #SKEYLIB= $(SKEYDIR)/libskey.a
    #SKEYOBJ= skey.o
    #if you are using the SecurID module, define SECURDIR to be the source
    #directory where the SecurID libraries and include files are.
    #SECURDIR= /var/ace/client
    #SECURLIB= $(SECURDIR)/sdclient.a $(FWLIB) #SECURINC= -I$(SECURDIR)
    #SECUROBJ= securid.o

    2、 我如何在netperm-table指定一个子网掩码?

    使用如\"network-number:netmask\"之类的格式,下面是示例:

    111.222.0.0:255.255.0.0

    这一特性在FWTK 2.x以上的版本才有效哦。

    3、为什么当我要打开proxy时得到\"inetd: xxx-gw/tcp: unknown service\"的错误提示?

    这表示在你/etc/inetd.conf中要打开的服务与/etc/services中定义的有冲突。

    举例来说,你的inetd.conf文件中有如下行:

    ftp-gw stream tcp nowait root /usr/local/etc/ftp-gw ftp-gw
    最后就是指服务——service的名乐,把它改为ftp就OK了。

    如果你运行的是Solaris 2.x,可能还要参考/etc/nsswitch.conf文件。


    4、我如何将FWTK的log文件与其它标准syslog文件隔开?

    可以编辑firewall.h:

    找到下面的行:
    #define LFAC LOG_DAEMON
    替换为
    #define LFAC LOG_LOCAL6

    然后将:
    local6.* /var/log/fwtk
    扔到syslog.conf里面去,然后把类似下面这行的东东干掉

    *.info;local6,mail.none /var/log/messages

    当然,在你的netperm-table里面要用-log的选项打开记录功能哦。

    5、我如何为不同的服务建立分开的log文件?

    按照如下形式来编辑你的/etc/syslog.conf文件吧——具体内容可以参看syslog.conf的
    man page。

    # patterns to match for
    \"authsrv\" /home/log/auth
    \"netacl.*fingerd\" /home/log/in-fingerd
    \"netacl.*telnetd\" /home/log/in-telnetd
    \"smap\" /home/log/smap
    \"ftp-gw\" /home/log/ftp-gw
    \"plug-gw\" /home/log/plug-gw
    \"rlogin-gw\" /home/log/rlogin-gw
    \"tn-gw\" /home/log/tn-gw
    # Standard system logs
    *.emerg;*.alert;*.crit;*.err;*.warning;*.notice;*.info;*.debug /var/adm/messages
    *.emerg *
    *.emerg;*.crit /dev/console

    最后,发送HUP信号给syslogd来重启进程就OK了。

    附2、一些相关术语(摘自防火墙的选型、配置、安装和维护一书)

    1、防火墙(firewall):在被保护网络和因特网之间,或在其它网络之间限制访问的一种
    或一系列部件。
    2、主机(host):连接到网络上的计算机系统,它可以是各种类型的机器,如SUN工作站,
    PC或者IBM主机等等,也可以运行不同的操作系统。
    3、堡垒主机(bastion host):它是一种被强化的可以防御进攻的计算机,被暴露于因特
    网之上,作为进入内部主机的一个检查点。通常情况下,堡垒主机上运行一些通用的操作
    系统。
    4、双宿主主机dual homed host):有两个网络接口的主机。
    5、屏蔽路由器(screened router):可以根据过滤原则对数据包进行阻塞和转发的机器。
    6、屏蔽主机(screened host):被放置到屏蔽路由器后面的网络上的主机,主机能被访
    问和程度取决于路由器的屏蔽规则。
    7、屏蔽子网(screen subnet):位于屏蔽路由器后面的子网,子网能被访问的程度取决
    于屏蔽规则。
    8、代理服务器(proxy server):一种代表客户和真正服务器通信的程序。典型的代理接受
    用户的客户请求,然后决定用户或用户的IP地址是否有权使用代理服务器(也可能支持其它
    的认证手段),然后代表客户与真正服务器之间建立连接。
    9、IP欺骗(ip spoofing):这是一种黑客的攻击形式,黑客使用一台机器,而用另一台机
    器的IP地址,从而装扮成另一台机器与服务器打交道。例如,一个防火墙不允许某一竞争
    站点访问该站点,但竞争站点可以使用其它站点的IP和服务器通信,而服务器则不知道与
    它通信的机器是竞争站点的主机。
    10、DNS欺骗(DNS spoofing):通过破坏被攻击机上的名字服务器缓存,或破坏一个域名
    服务器来伪造IP地址和主机名的映射,从而冒充其它机器。
    11、隧道路由器(trnneling router):它是一种特殊的路由器,可以对数据包进行加密,
    让数据能通过非信任网,如因特网,然后在另一端用同样的路由器进行解密。
    12、虚拟私用网(Virtual Private Network,VPN):一种连接两个远程局域网的方式,
    连接要通过非信任网,如因特网,所以一般通过隧道路由器来实现互联。
    13、差错与控制报文(ICMP):这是TCP/IP协议中的一种,建立在IP层上,用于主机之间或
    主机在路由器之间传输错误报文以及路由建议。
    14、纵深防御(Defense in Depth):一种确保网络尽可能安全的安全措施,一般与防火墙
    联用。
    15、最小特权(Least Privilege):在运行和维护系统中,尽可能地减少用户的特权,但同
    时也要使用户有足够的权限来做事,这样就会减少特权被滥用的机会。内部人员滥用特权
    很可能在防火墙上打开一个安全缺口,这很危险,很多的入侵是由此引起的。
    16、数据包过滤(package filtering):一些设备,如路由器、网桥或单独的主机,可以有
    选择地控制网络上来往的数据流。当数据包要经过这些设备时,这些设备可以检查数据包
    的相应位,根据既定的原则来决定是否允许数据包通过。有时这也被称作屏蔽。


    ====================
    错漏难免,请高手赐教

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