下一步 上一步 目录

10. 安装 TIS 代理服务器

10.1 获取软件

TIS FWTK 可在 http://www.tis.com/research/software/ 获取。

不要犯我犯过的错误。 当你从 TIS 通过 ftp 下载文件时,请阅读 README 文件。TIS fwtk 被锁定在他们服务器上的一个隐藏目录中。

TIS 要求你阅读他们在 http://www.tis.com/research/software/fwtk_readme.html 的协议,然后发送电子邮件至 fwtk-request@tislabs.com,邮件正文仅包含 accepted 这个词,即可获知这个隐藏目录的名称。邮件无需主题。他们的系统随后会将目录名称(12 小时内有效)回复给你,以便下载源代码。

截至本文撰写之时,FWTK 的当前版本为 2.1。

10.2 编译 TIS FWTK

FWTK 2.1 版本比任何旧版本都更容易编译。

在此处解释!!!

现在运行 make

10.3 安装 TIS FWTK

运行 make install

默认安装目录是 /usr/local/etc。你可以将其更改(我没有)为更安全的目录。我选择将此目录的访问权限更改为 'chmod 700'。

现在剩下要做的就是配置防火墙。

10.4 配置 TIS FWTK

现在真正的乐趣开始了。我们必须教导系统调用这些新服务,并创建表来控制它们。

我不打算在这里重写 TIS FWTK 手册。我将向你展示我发现有效的设置,并解释我遇到的问题以及我如何解决这些问题。

有三个文件组成了这些控制。

要使 FWTK 正常运行,你应该从下往上编辑这些文件。在没有正确设置 inetd.conf 或 netperm-table 文件的情况下编辑 services 文件可能会使你的系统无法访问。

netperm-table 文件

此文件控制谁可以访问 TIS FWTK 的服务。你应该考虑来自防火墙两侧的流量。来自你网络外部的人员在获得访问权限之前应该先进行身份验证,但是你网络内部的人员可能被允许直接通过。

为了让人们可以进行身份验证,防火墙使用名为 authsrv 的程序来保存用户 ID 和密码的数据库。netperm-table 的身份验证部分控制数据库的保存位置以及谁可以访问它。

我在关闭对此服务的访问权限时遇到了一些问题。请注意我展示的 premit-hosts 行使用了 '*' 来授予所有人访问权限。如果你可以使其工作,则此行的正确设置是 '' authsrv: premit-hosts localhost

  #
  # Proxy configuration table
  #
  # Authentication server and client rules
  authsrv:      database /usr/local/etc/fw-authdb
  authsrv:      permit-hosts *
  authsrv:      badsleep 1200
  authsrv:      nobogus true
  # Client Applications using the Authentication server
  *:            authserver 127.0.0.1 114

要初始化数据库,请 su 到 root 用户,并在 /var/local/etc 目录中运行 ./authsrv 以创建管理用户记录。这是一个示例会话。

阅读 FWTK 文档以了解如何添加用户和组。

    #
    # authsrv
    authsrv# list
    authsrv# adduser admin "Auth DB admin"
    ok - user added initially disabled
    authsrv# ena admin
    enabled
    authsrv# proto admin pass
    changed
    authsrv# pass admin "plugh"
    Password changed.
    authsrv# superwiz admin
    set wizard
    authsrv# list
    Report for users in database
    user   group  longname           ok?    proto   last 
    ------ ------ ------------------ -----  ------  -----
    admin         Auth DB admin      ena    passw   never
    authsrv# display admin
    Report for user admin (Auth DB admin)
    Authentication protocol: password
    Flags: WIZARD
    authsrv# ^D
    EOT
    #

telnet 网关 (tn-gw) 的控制非常简单,你应该首先设置它。

在我的示例中,我允许来自私有网络内部的主机无需身份验证即可通过。(permit-hosts 19961.2.* -passok)但是,任何其他用户必须输入其用户 ID 和密码才能使用代理。(permit-hosts * -auth)

我还允许另一个系统 (192.1.2.202) 完全绕过防火墙直接访问防火墙。inetacl-in.telnetd 这两行代码就是实现此目的的。我稍后将解释如何调用这些行。

Telnet 超时时间应保持较短。

  # telnet gateway rules:
  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 90
  tn-gw:                permit-hosts 192.1.2.* -passok -xok
  tn-gw:                permit-hosts * -auth
  # Only the Administrator can telnet directly to the Firewall via Port 24
  netacl-in.telnetd: permit-hosts 192.1.2.202 -exec /usr/sbin/in.telnetd

r-commands 的工作方式与 telnet 相同。

  # rlogin gateway rules:
  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 90
  rlogin-gw:    permit-hosts 192.1.2.* -passok -xok
  rlogin-gw:    permit-hosts * -auth -xok
  # Only the Administrator can telnet directly to the Firewall via Port
  netacl-rlogind: permit-hosts 192.1.2.202 -exec /usr/libexec/rlogind -a

你不应该让任何人直接访问你的防火墙,这包括 FTP,所以不要在你的防火墙上放置 FTP 服务器。

同样,permit-hosts 行允许受保护网络中的任何人自由访问互联网,所有其他人必须进行身份验证。我包括了对我控制的每个发送和接收文件的日志记录。 (-log { retr stor })

ftp 超时控制丢弃错误连接所需的时间,以及连接在没有活动的情况下保持打开的时间。

  # 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 300
  ftp-gw:               permit-hosts 192.1.2.* -log { retr stor }
  ftp-gw:               permit-hosts * -authall -log { retr stor }

Web、gopher 和基于浏览器的 ftp 由 http-gw 控制。前两行创建一个目录来存储 ftp 和 web 文档,因为它们正在通过防火墙。我使这些文件归 root 用户所有,并将它们放在只有 root 用户才能访问的目录中。

Web 连接应保持较短。它控制用户在错误连接上等待的时间。

  # www and gopher gateway rules:
  http-gw:      userid          root
  http-gw:      directory       /jail
  http-gw:      timeout 90
  http-gw:      default-httpd   www.afs.net
  http-gw:      hosts           192.1.2.* -log { read write ftp }
  http-gw:      deny-hosts      * 

ssl-gw 实际上只是一个允许任何内容通过的网关。请谨慎使用它。在此示例中,我允许受保护网络内部的任何人连接到网络外部的任何服务器,除了地址 127.0.0.* 和 192.1.1.*,并且仅在端口 443 到 563 上。端口 443 到 563 是已知的 SSL 端口。

  # ssl gateway rules:
  ssl-gw:         timeout 300
  ssl-gw:         hosts           192.1.2.* -dest { !127.0.0.* !192.1.1.* *:443:563 }
  ssl-gw:         deny-hosts      *

这是一个如何使用 plug-gw 允许连接到新闻服务器的示例。在此示例中,我允许受保护网络内部的任何人仅连接到一个系统,并且仅连接到其新闻端口。

第二行允许新闻服务器将其数据传回受保护的网络。

由于大多数客户端希望在用户阅读新闻时保持连接,因此新闻服务器的超时时间应较长。

 
  # NetNews Pluged gateway
  plug-gw:        timeout 3600
  plug-gw: port nntp 192.1.2.* -plug-to 24.94.1.22 -port nntp
  plug-gw: port nntp 24.94.1.22 -plug-to 192.1.2.* -port nntp

finger 网关很简单。受保护网络内部的任何人都必须先登录,然后我们允许他们在防火墙上使用 finger 程序。任何其他人只会收到一条消息。

  # Enable finger service 
  netacl-fingerd: permit-hosts 192.1.2.* -exec /usr/libexec/fingerd
  netacl-fingerd: permit-hosts * -exec /bin/cat /usr/local/etc/finger.txt

我还没有设置邮件和 X-windows 服务,因此我不包含示例。如果有人有可用的示例,请给我发送电子邮件。

/etc/services 文件

一切都从这里开始。当客户端连接到防火墙时,它连接到已知端口(小于 1024)。例如,telnet 连接在端口 23 上。inetd 守护程序监听此连接,并在 /etc/services 文件中查找这些服务的名称。然后,它调用在 /etc/inetd.conf 文件中分配给该名称的程序。

我们正在创建的一些服务通常不在 /etc/services 文件中。你可以将其中一些服务分配给你想要的任何端口。例如,我已经将管理员的 telnet 端口 (telnet-a) 分配给端口 24。如果你愿意,你可以将其分配给端口 2323。对于管理员(你)直接连接到防火墙,你需要 telnet 到端口 24 而不是 23,并且如果你像我一样设置了你的 netperm-table 文件,你将只能从你的受保护网络内部的一个系统执行此操作。

 
  telnet-a        24/tcp
  ftp-gw          21/tcp           # this named changed
  auth            113/tcp   ident    # User Verification
  ssl-gw          443/tcp


下一步 上一步 目录