Linux Firewall Proxy Howto(中文版)-by reden (2)

原创 2005年04月25日 08:32:00
7.安装TIS 
 
  
 
7.1 获取TIS 
 
可从 ftp://ftp.tis.com/ 下载. 别重复我犯过的错误. 好好读一下那里的README文件. 
TISfwtk是放在一个隐含目录中的.TIS要求你向fwtk-request@tis.com发信申请,信的正 
文只写SEND,不用写标题,在12小时内,你将会得到系统自动答复,即包含fwtk源码的隐含 
目录名称. 
 
  
 
我得到的TIS是2.0(beta)版,编译没问题(一点exception),工作的也很好.下面的描述都 
基于该版本.当他们发布正式版时,我将更新这份文档. 
 
  
 
安装FWTK前,先在你的/usr/src目录下建立一个fwtk-2.0目录.把FWTK (fwtk-2.0.tar.gz) 
copy到目录下并解压 (tar zxf fwtk-2.0.tar.gz). 
 
  
 
FWTK本身不支持对SSL web的代理,但有一个addon,作者是Jean-Christophe Touvet.可从: 
 
ftp://ftp.edelweb.fr/pub/contrib/fwtk/ssl-gw.tar.Z 
 
下载.Touvet不对其提供技术支持. 
 
  
 
我这里用的是一个经过修改,能够支持Netscape secure news servers的版本,作者是: 
 
Eric Wedel.站点是: 
 
ftp://mdi.meridian-data.com/pub/tis.fwtk/ssl-gw/ssl-gw2.tar.Z. 
 
  
 
  
 
安装时在/usr/src/fwtk-2.0目录下建立一个ssl-gw目录就可以了.在编译之前,要对代码 
作一些改动. 
 
  
 
首先是ssl-gw.c少了一个include文件,在其中加入: 
 
  
 
#if defined(__linux) 
 
#include <sys/ioctl.h> 
 
#endif 
 
  
 
再就是其中没有包含makefile,我的解决方法是从其它网关目录中copy一个,再把网关名字 
改成: ssl-gw 
 
  
 
  
 
7.2 编译TIS FWTK 
 
  
 
FWTK的2.0版在比以前任何版本都要容易编译得多,但在这个BETA版中我仍然发现了一些需 
要纠正的地方.希望这些错误在正式版中能够得到纠正. 
 
  
 
先到 /src/fwtk/fwtk 目录,用Makefile.config.linux 拷贝覆盖 Makefile.config 这个 
文件. 
 
  
 
注意:千万不要按操作指示中说的那样运行fixmake.否则会搞坏每个目录中的makefile. 
 
 
我有一个解决fixmake的方法,是用sed在makefile中每个包含include的行中加入'.'和''. 
 
相应的sed脚本为: 
 
sed 's/^include[ ]*/([^ ].*/)/include /1/' $name .proto > $name  
 
  
 
然后我们得编辑Makefile.config.有两处需要修改. 
 
  
 
作者是在他的home目录中编译代码的, 而我们把代码放在 /usr/src, 因此要对环境变量 
FWTKSRCDIR作相应改动: 
 
 
FWTKSRCDIR=/usr/src/fwtk/fwtk 
 
 
其次,有些linux系统使用gdbm数据库.而Makefile.config中缺省的是dbm也许你的需要修 
改.我的/linux版本是 redhat 3.0.3. 
 
 
DBMLIB=-lgdbm 
 
 
最后一处在x-gw中,这个BETA版的socket.c有BUG,解决方法是去掉下面的一段代码: 
 
  
 
#ifdef SCM_RIGHTS /* 4.3BSD Reno and later */ 
 
  
 
+ sizeof(un_name->sun_len) + 1 
 
  
 
#endif 
 
  
 
如果你在FWTK源目录中加入了ssl-gw,还要把它的目录加到 Makefile里: 
 
  
DIRS=smap smapd netacl plug-gw ftp-gw tn-gw rlogin-gw http-gw x-gw ssl-gw 
 
现在,可以运行make了. 
 
  
 
7.3 安装TIS FWTK 
 
  
 
运行 make install 
 
缺省的安装目录为/usr/local/etc.你可以把它改到一个更安全的目录,我没改,而是把这 
个目录的权限设为'chmod 700'. 
 
 
剩下的就只有配置工作了. 
 
  
7.4 配置 TIS FWTK 
这才是真正引人入胜的部分.我们要让系统能够调用这些新加入的服务,并建立相应的控制 
信息. 
 
我不想重复TIS FWTK手册的内容.只说明一些我所遇到的问题及其解决方法. 
 
有三个文件组成了所有的控制. 
 
  
 
* /etc/services 
 
  
 
告诉系统服务所在的端口 
 
  
 
* /etc/inetd.conf 
 
  
 
决定inetd在某端口收到服务请求时调用哪个程序 
 
*/usr/local/etc/netperm-table 
 
  
 
决定FWTK对服务请求的许可/拒绝为使 FWTK 发挥作用,你最好从头编辑这些文件.忽略其中 
任何一个都可能导致系统失效. 
 
  
 
netperm-table 
 
  
 
该文件用来控制对TIS FWTK服务的访问授权.要同时考虑防火墙两边的情况.外部的用户必 
须经过验证后才能获得访问权,内部用户则可以允许直接通过. 
 
  
 
TIS 防火墙可以进行身份验证,系统通过一个authsrv的程序管理一个用户ID和密码的数据 
库。netperm-table的授权部分指定了数据库的位置及访问权限. 
 
  
 
我在禁止对该服务读取时遇到了一些麻烦.注意我给出的是在permit-host行中 '*'表示给 
所有用户访问权.而正确的设置应该是  
 
'' 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网关是最直截了当的并且是你第一个需要设置的. 
 
  
 
在我的例子中,所有内部的用户无须认证(permit-hosts 196.1.2.* -passok-xok),而其余 
用户必须经过ID和密码的验证.(permit-hosts *-auth)我还特别允许 196.1.2.202的用户 
不经过防火墙直接访问代理服务器.有关inetacl-in.telnetd的两行表现了这一点,接下去 
我就会解释调用的过程. 
 
  
 
Telnet的timeout应尽量设小. 
 
  
 
  
 
# 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 196.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 196.1.2.202 -exec /usr/sbin/in.telnetd 
 
  
 
  
 
rlogin的命令与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 196.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 196.1.2.202 -exec /usr/libexec/rlogind -a 
 
  
 
  
 
不要允许任何人直接访问你的防火墙,即使FTP访问也不行.因此要避免在防火墙机器上安 
装FTP服务. 
 
  
 
值得重申的是,这里允许所有内部用户自由访问Internet,而其他用户则必须通过验证. 我 
还启用了文件收发的记录.  
 
 
(-log { retr stor }) 
 
  
ftp timeout指定防火墙对一个失效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 196.1.2.* -log { retr stor } 
 
ftp-gw: permit-hosts * -authall -log { retr stor } 
 
  
 
  
 
  
 
Web,gopher, 和基于浏览器的FTP由http-gw来完成. 前两行建立目录来缓存通过防火墙的 
web页面和ftp文件,我把这些文件的所有者设为root,并保存在只有root才能访问的目录中. 
 
  
 
Web connection应保持在一个较小的值,它控制用户等待一个失效连接的时间. 
 
  
 
# 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 196.1.2.* -log { read write ftp } 
 
http-gw: deny-hosts *  
 
  
  
 
ssl-gw只有一个传递作用, 要小心设置. 在这里, 我允许内部用户访问除 127.0.0.* 和 
192.1.1.*以外的所有外部地址.且只能访问443到563端口,这些是通用的SSL端口. 
 
  
 
# ssl gateway rules: 
 
ssl-gw: timeout 300 
 
ssl-gw: hosts 196.1.2.* -dest { !127.0.0.* !192.1.1.* *:443:563 } 
 
ssl-gw: deny-hosts * 
 
  
 
下例说明怎样使用plug-gw代理news server,只允许内部用户访问一个外部server,且只能 
访问一个端口。 
 
  
第二行设置允许news server将数据送入内部网. 
 
  
 
几乎所有的news client在用户阅读news时保持连接状态,因此这里给news server规定了 
一个较长的等待时间(time out). 
 
  
 
# NetNews Pluged gateway 
 
plug-gw: timeout 3600 
 
plug-gw: port nntp 196.1.2.* -plug-to 199.5.175.22 -port nntp 
 
plug-gw: port nntp 199.5.175.22 -plug-to 196.1.2.* -port nntp 
 
  
 
finger-gw比较简单,任何内部用户只能先登录到防火墙,再运行finger,其他访问者将得到 
 
一个信息(finger.txt). 
 
  
 
  
 
# Enable finger service  
 
netacl-fingerd: permit-hosts 196.1.2.* -exec /usr/libexec/fingerd 
 
netacl-fingerd: permit-hosts * -exec /bin/cat /usr/local/etc/finger.txt 
 
  
 
我没有作过Mail和X-windows服务的代理,无法提供相应的例子,欢迎来信补充. 
 
  
 
关于inetd.conf 
 
  
 
下面是一例inetd.conf文件,所有不必要的服务都被注释掉了. 但我还是包括了整个文件, 
以阐明怎样关闭服务及为防火墙开启新服务. 
 
  
 
  
 
#echo stream tcp nowait root internal  
 
#echo dgram udp wait root internal 
 
#discard stream tcp nowait root internal 
 
#discard dgram udp wait root internal 
 
#daytime stream tcp nowait root internal 
 
#daytime dgram udp wait root internal 
 
#chargen stream tcp nowait root internal 
 
#chargen dgram udp wait root internal 
 
# FTP firewall gateway 
 
ftp-gw stream tcp nowait.400 root /usr/local/etc/ftp-gw ftp-gw 
 
# Telnet firewall gateway 
 
telnet stream tcp nowait root /usr/local/etc/tn-gw /usr/local/etc/tn-gw 
 
# local telnet services 
 
telnet-a stream tcp nowait root /usr/local/etc/netacl in.telnetd 
 
# Gopher firewall gateway 
 
gopher stream tcp nowait.400 root /usr/local/etc/http-gw /usr/local/etc/http-gw  
 
# WWW firewall gateway 
 
http stream tcp nowait.400 root /usr/local/etc/http-gw /usr/local/etc/http-gw  
 
# SSL firewall gateway 
 
ssl-gw stream tcp nowait root /usr/local/etc/ssl-gw ssl-gw 
 
# NetNews firewall proxy (using plug-gw) 
 
nntp stream tcp nowait root /usr/local/etc/plug-gw plug-gw nntp 
 
#nntp stream tcp nowait root /usr/sbin/tcpd in.nntpd 
 
# SMTP (email) firewall gateway 
 
#smtp stream tcp nowait root /usr/local/etc/smap smap 
 

 
# Shell, login, exec and talk are BSD protocols. 
 

 
#shell stream tcp nowait root /usr/sbin/tcpd in.rshd 
 
#login stream tcp nowait root /usr/sbin/tcpd in.rlogind 
 
#exec stream tcp nowait root /usr/sbin/tcpd in.rexecd 
 
#talk dgram udp wait root /usr/sbin/tcpd in.talkd 
 
#ntalk dgram udp wait root /usr/sbin/tcpd in.ntalkd 
 
#dtalk stream tcp waut nobody /usr/sbin/tcpd in.dtalkd 
 

 
# Pop and imap mail services et al 
 

 
#pop-2 stream tcp nowait root /usr/sbin/tcpd ipop2d 
 
#pop-3 stream tcp nowait root /usr/sbin/tcpd ipop3d 
 
#imap stream tcp nowait root /usr/sbin/tcpd imapd 
 

 
# The Internet UUCP service. 
 

 
#uucp stream tcp nowait uucp /usr/sbin/tcpd /usr/lib/uucp/uucico -l 
 

 
# Tftp service is provided primarily for booting. Most sites 
 
# run this only on machines acting as “boot servers.” Do not uncomment 
 
# this unless you *need* it.  
 

 
#tftp dgram udp wait root /usr/sbin/tcpd in.tftpd 
 
#bootps dgram udp wait root /usr/sbin/tcpd bootpd 
 

 
# Finger, systat and netstat give out user information which may be 
 
# valuable to potential "system crackers." Many sites choose to disable  
 
# some or all of these services to improve security. 
 

 
# cfinger is for GNU finger, which is currently not in use in RHS Linux 
 

 
finger stream tcp nowait root /usr/sbin/tcpd in.fingerd 
 
#cfinger stream tcp nowait root /usr/sbin/tcpd in.cfingerd 
 
#systat stream tcp nowait guest /usr/sbin/tcpd /bin/ps -auwwx 
 
#netstat stream tcp nowait guest /usr/sbin/tcpd /bin/netstat -f inet 
 

 
# Time service is used for clock syncronization. 
 

 
#time stream tcp nowait root /usr/sbin/tcpd in.timed 
 
#time dgram udp wait root /usr/sbin/tcpd in.timed 
 

 
# Authentication 
 

 
auth stream tcp wait root /usr/sbin/tcpd in.identd -w -t120 
 
authsrv stream tcp nowait root /usr/local/etc/authsrv authsrv 
 

 
# End of inetd.conf 
 

HOWTO do Linux kernel development - take 3 (中文版)

 HOWTO do Linux kernel development - take 3 (中文版)译者:张乐 robert_AT_thizlinux_DOT_com 原作:Greg KH 译注:本...

Linux的高级路由和流量控制HOWTO中文版

http://fanqiang.chinaunix.net/adm/router/2005-03-28/3043.shtml Linux的高级路由和流量控制HOWTO中文版 作者:Bert Hub...

Linux TC流量控制HOWTO中文版

利用队列,我们可以控制数据发送的方式。记住我们只能对发送数据进行控制(或称为整形)。 其实,我们无法直接控制别人向我们发送什么数据。然而,Internet主要依靠TCP/IP,它的一些特性很有用。因...

Linux TC流量控制HOWTO中文版

《本文摘自Linux的高级路由和流量控制HOWTO中文版 第9章节》网人郭工进行再次编译: 利用队列,我们可以控制数据发送的方式。记住我们只能对发送数据进行控制(或称为整形)。 其实,我们无法...

Linux HOWTO 中文版(全)

  • 2006年02月23日 15:31
  • 701KB
  • 下载

Linux Howto 中文版完整版.zip

  • 2008年08月01日 14:12
  • 484KB
  • 下载

2. Elasticsearch权威指南中文版 by QQ1350995917

Elasticsearch权威指南 原文链接  翻译:QQ13509959171.前言(Foreword)2.序言(Preface)为什么我们应该读此书为什么我们写此书Elasticsearch版本如...

The confusing state of Microsoft’s TMG and UAG firewall and proxy software

I have been trying out Microsoft’s ForeFront Unified Access Gateway (UAG) recently, partly because i...
  • wishfly
  • wishfly
  • 2012年10月12日 17:23
  • 1051
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Linux Firewall Proxy Howto(中文版)-by reden (2)
举报原因:
原因补充:

(最多只允许输入30个字)