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。
FWTK 2.1 版本比任何旧版本都更容易编译。
在此处解释!!!
现在运行 make。
运行 make install。
默认安装目录是 /usr/local/etc。你可以将其更改(我没有)为更安全的目录。我选择将此目录的访问权限更改为 'chmod 700'。
现在剩下要做的就是配置防火墙。
现在真正的乐趣开始了。我们必须教导系统调用这些新服务,并创建表来控制它们。
我不打算在这里重写 TIS FWTK 手册。我将向你展示我发现有效的设置,并解释我遇到的问题以及我如何解决这些问题。
有三个文件组成了这些控制。
要使 FWTK 正常运行,你应该从下往上编辑这些文件。在没有正确设置 inetd.conf 或 netperm-table 文件的情况下编辑 services 文件可能会使你的系统无法访问。
此文件控制谁可以访问 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 服务,因此我不包含示例。如果有人有可用的示例,请给我发送电子邮件。
一切都从这里开始。当客户端连接到防火墙时,它连接到已知端口(小于 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