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 来自:黑白世界