📄 firewall proxy howto.htm
字号:
<p> 3.IP forwarding/gatewaying-->OFF(除非你选择IP过滤防火墙)
<p> 4.IP Firewalling-->On
<p> 5.IP packet loggin--> On(不是必须的,却不失为一个好主意)
<p> 6.IP masquerading-->OFF(我没有涉及该主题)
<p> 7.IP accounting--> ON
<p> 8.IP tunneling--> OFF
<p> 9.IP aliasing-->OFF
<p> 10.PC/TCP compatibility mode-->OFF
<p> 11.IP Reverse ARP OFF-->OFF
<p> 12.Drop source routed frames-->ON
<br>
<p>3.在'Network device support'中
<p> 1.Network device support-->ON
<p> 2. Dummy net driver support--> ON
<p> 3.Ethernet (10 or 100Mbit)--> ON
<br>
<p>4.选择你的网络接口卡.
<p>现在可以开始重编译了,编译后重新按装内核并reboot,启动时Linux会显示你的网卡,
<br>否则你得再去研究其它的HOWTO.
<br>
<p>5.2 配置两块网卡
<br>如果你有两块网卡,多半情况下你要在/etc/lilo.conf中加一条append语句给出它们的中
<br>断号和I/O地址.
<br>这是我的lilo append语句:
<br>append=“ether=12,0x300,eth0 ether=15,0x340,eth1”
<p>5.3 配置网络地址
<br>这部分非常有意义。现在你面临着几种选择。显然我们并不打算允许Internet对内部网进
<br>行任何形式的非授权访问,因此也没有必要使用真正的IP地址.有些IP是专门保留供专有网
<br>络使用的.因为IP总是越多越好,而这些保留IP不能在网上流通,恰好适合我们的需要.
<p>在这里,我们使用保留IP:192.168.2.xxx,并将它作为以后的例子
<p>你的代理防火墙将同时是内部和外部网的成员,使其得以在两者之间传送数据.
<br> <tt></tt>
<p><tt>
199.1.2.10 __________ 192.168.2.1</tt>
<br><tt> _ __ _
\ | | /
_______________</tt>
<br><tt> | \/ \/ |
\| Firewall |/
|
|</tt>
<br><tt> / Internet \--------| System |------------|
Workstation/s |</tt>
<br><tt> \_/\_/\_/\_/
|__________|
|_______________|</tt>
<br><tt> </tt><tt></tt>
<p>
<p>即使你采用过滤防火墙,仍然可以使用这些IP,只不过要进行IP屏蔽(IP masquerading).
<br>这时,防火墙在传递包的同时会自动将地址转换成能在internet上流通的"真正"的IP地址.
<br>必须把"真"IP分配给连接internet一端的网卡,同时把192.168.2.1分配给内部的那一个.
<br>这将是内部使用的代理/网关地址,最后给内部网的机器分配其他在192.168.2.xxx范围内
<br>的地址(192.168.2.2 到192.168.2.254)
<br>
<p>我用的是RedHat Linux,为了能在启动时进行网络配置,我在
<br>/etc/sysconfig/network-scripts 目录中加入了一个'ifcfg-eth1'
<br>文件,该文件在启动时由系统读取,配置网络和路由表.
<br>我的 ifcfg-eth1文件:
<br>#!/bin/sh
<br>#>>>Device type: ethernet
<br>#>>>Variable declarations:
<br>DEVICE=eth1
<br>IPADDR=192.168.2.1
<br>NETMASK=255.255.255.0
<br>NETWORK=192.168.2.0
<br>BROADCAST=192.168.2.255
<br>GATEWAY=199.1.2.10
<br>ONBOOT=yes
<p>#>>>End variable
<br>declarations
<br>这种脚本语言还可以用来实现MODEM对ISP的自动连接,参见ipup-ppp脚本.
<br>如果是用MODEM连接外部网络(internet),则外部IP在连接开始时由你的ISP分配.
<p>5.4 测试
<br>先要检查你的ifconfig 和route,对于两块网卡的系统,ifconfig的结果大致会是这样:
<br>#ifconfig
<p>lo Link encap:Local Loopback
<p>inet addr:127.0.0.0 Bcast:127.255.255.255 Mask:255.0.0.0
<p>UP BROADCAST LOOPBACK RUNNING MTU:3584 Metric:1
<p>RX packets:1620 errors:0 dropped:0 overruns:0
<p>TX packets:1620 errors:0 dropped:0 overruns:0
<p>eth0 Link encap:10Mbps Ethernet HWaddr 00:00:09:85:AC:55
<p>inet addr:199.1.2.10 Bcast:199.1.2.255 Mask:255.255.255.0
<p>UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
<p>RX packets:0 errors:0 dropped:0 overruns:0
<p>TX packets:0 errors:0 dropped:0 overruns:0
<p>Interrupt:12 Base address:0x310
<p>eth1 Link encap:10Mbps Ethernet HWaddr 00:00:09:80:1E:D7
<p>inet addr:192.168.2.1 Bcast:192.168.2.255 Mask:255.255.255.0
<p>UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
<p>RX packets:0 errors:0 dropped:0 overruns:0
<p>TX packets:0 errors:0 dropped:0 overruns:0
<p>Interrupt:15 Base address:0x350
<p>并且,你的route表输出应该是:
<br>#route -n
<p>Kernel routing table
<p>Destination Gateway Genmask Flags MSS Window Use Iface
<p>199.1.2.0 * 255.255.255.0 U 1500 0 15 eth0
<p>192.168.2.0 * 255.255.255.0 U 1500 0 0 eth1
<p>127.0.0.0 * 255.0.0.0 U 3584 0 2 lo
<p>default 199.1.2.10 * UG 1500 0 72 eth0
<p>这里要注意:199.1.2.0是在防火墙的INTERNET一方,而192.168.2.0在内部网一方.
<br>现在可以试着从内部网ping Internet,我的选择是nic.ddn.mil,这本应是个很好的目标,
<br>事实上却不如我想象的那么可靠. 如果没有回应,再试一下其他没有和你LAN相连的地方,
<br>若还是不行,你的PPP设置一定有问题,你只好再去看看Net-2HOWTO了.
<br>接下去,再从防火墙内部 ping 内部网的机器,所有内部网的机器应该互相PING得通,如果
<br>ping不通----NET-2 HOWTO:)
<br>下一步,由内部网ping防火墙的外部地址(注意不是192.168.2.xxx).若能ping到,
说明你
<br>还没有关闭IP Fowarding,如果这确是出自你的本意,可以去参考本文中IP过滤的部分章节.
<br>现在,试着通过防火墙PING Internet. 还是用前面用过的(le.nic.ddn.mil)[在浙大可以
<br>ping alpha.zju.edu.cn:)--译注], 如果IP FORWARDING是关上的,应该PING不通,否则应
<br>该可以.
<br>在开启 IP Farwarding的情况下,如果你的内部网络全部使用 "真" IP,而又无法
ping 通
<br>Internet,但可以PING通防火墙的外部地址,就去检查上一级路由器是否为你内部网络的包
<br>进行路由(可能要你的服务提供者解决).
<br>如果你选择保留IP,则不被路由,或者你选择了使用IP屏蔽,则本测试依然适用.
<br>现在,你已经完成了基本的设置.
<br>
<p>5.5 防火墙安全
<p>开放不必要的服务往往使防火墙为入侵者敞开了方便之门."坏孩子"们可能侵入并根据自
<br>己的需要修改防火墙的设置.
<p>所以首先要关闭所有不用的服务.
<p>/etc/inetd.conf 文件控制着所谓的"超级服务(super server)"。它控制着各种服务的
<br>守护进程,在访问请求到达时启动相应的服务.
<br>
<p>一定要关闭netstat,systat,tftp,bootp,finger.为关闭某项服务,只须把相应的行最前面
<br>用#注释掉即可.改好后,向inetd进程发一个SIG-HUP信号,即键入命令"kill -HUP
<pid>",
<br><pid>是inetd的进程号.该命令使得inetd重新读入配置数据(inetd.conf),并重新启动.
<p>telnet防火墙的15号端口,这是NETSTATE的端口,如果你仍然得到了 netstat的输出,
说明
<br>inetd没有正确读入修改后的设置.
<br>
<p>6.安装IP过滤防火墙(IPFWADM)
<br>
<p>在开始之前,要打开内核的IP forwarding,启动你的系统能够转发所有你发出的数据,
再
<br>配好你的路由表,保证内部网和外部网之间就畅通无阻了, 但我们是要做的是建立一个禁
<br>止任意的访问的防火墙.
<p>在我的系统里,我为防火墙的forwading(包递交)和accounting(包记帐)策略各建立一个脚
<br>本文件。加入/etc/rc.d的脚本文件中, 启动时由系统自动调用.
<br>
<p>缺省情况下,linux kernel的 IP forwarding 功能是完全开放的(是网关:译注)
<p>因此你的防火墙脚本应从规定拒绝所有访问开始。
<br>
<p>#
<p># setup IP packet Accounting and Forwarding
<p>#
<p># Forwarding
<p>#
<p># By default DENY all services
<p>ipfwadm -F -p deny
<p># Flush all commands
<p>ipfwadm -F -f
<p>ipfwadm -I -f
<p>ipfwadm -O -f
<p>好,现在我们有了一个超级防火墙,它拒绝所有的访问,当然你还是需要一些服务的,可以
<br>参考下面几个实用的例子:
<br># Forward email to your server
<br>ipfwadm -F -a accept -b -P tcp -S 0.0.0.0/0 1024:65535 -D 192.1.2.10
25
<p># Forward email connections to outside email servers
<br>ipfwadm -F -a accept -b -P tcp -S 196.1.2.10 25 -D 0.0.0.0/0 1024:65535
<p># Forward Web connections to your Web Server
<br>/sbin/ipfwadm -F -a accept -b -P tcp -S 0.0.0.0/0 1024:65535 -D 196.1.2.11
80
<br>
<p># Forward Web connections to outside Web Server
<br>/sbin/ipfwadm -F -a accept -b -P tcp -S 196.1.2.* 80 -D 0.0.0.0/0 1024:65535
<p># Forward DNS traffic
<br>/sbin/ipfwadm -F -a accept -b -P udp -S 0.0.0.0/0 53 -D 196.1.2.0/24
<p>你或许对统计流量最感兴趣,下面的脚本就是用来统计包的.可以为每记帐.
<p># Flush the current accounting rules
<br>ipfwadm -A -f
<p># Accounting
<br>/sbin/ipfwadm -A -f
<br>/sbin/ipfwadm -A out -i -S 196.1.2.0/24 -D 0.0.0.0/0
<br>/sbin/ipfwadm -A out -i -S 0.0.0.0/0 -D 196.1.2.0/24
<br>/sbin/ipfwadm -A in -i -S 196.1.2.0/24 -D 0.0.0.0/0
<br>/sbin/ipfwadm -A in -i -S 0.0.0.0/0 -D 196.1.2.0/24
<br>
<br>
<p>如果你决定只要包过滤放火墙,可以到此为止了. :-)
<p>7.安装TIS
<p>7.1 获取TIS
<p>可从 <a href="ftp://ftp.tis.com/">ftp://ftp.tis.com/</a> 下载. 别重复我犯过的错误.
好好读一下那里的README文件.
<br>TISfwtk是放在一个隐含目录中的.TIS要求你向fwtk-<a href="mailto:request@tis.com">request@tis.com</a>
发信申请,信的正
<br>文只写SEND,不用写标题,在12小时内,你将会得到系统自动答复,即包含fwtk源码的隐含
<br>目录名称.
<p>我得到的TIS是2.0(beta)版,编译没问题(一点exception),工作的也很好.下面的描述都
<br>基于该版本.当他们发布正式版时,我将更新这份文档.
<p>安装FWTK前,先在你的/usr/src目录下建立一个fwtk-2.0目录.把FWTK (fwtk-2.0.tar.gz)
<br>copy到目录下并解压 (tar zxf fwtk-2.0.tar.gz).
<p>FWTK本身不支持对SSL web的代理,但有一个addon,作者是Jean-Christophe Touvet.可从:
<p><a href="ftp://ftp.edelweb.fr/pub/contrib/fwtk/ssl-gw.tar.Z">ftp://ftp.edelweb.fr/pub/contrib/fwtk/ssl-gw.tar.Z</a>
<p>下载.Touvet不对其提供技术支持.
<p>我这里用的是一个经过修改,能够支持Netscape secure news servers的版本,作者是:
<br>Eric Wedel.站点是:
<p><a href="ftp://mdi.meridian-data.com/pub/tis.fwtk/ssl-gw/ssl-gw2.tar.Z.">ftp://mdi.meridian-data.com/pub/tis.fwtk/ssl-gw/ssl-gw2.tar.Z.</a>
<br>
<p>安装时在/usr/src/fwtk-2.0目录下建立一个ssl-gw目录就可以了.在编译之前,要对代码
<br>作一些改动.
<br>
<p>首先是ssl-gw.c少了一个include文件,在其中加入:
<br>
<p>#if defined(__linux)
<p>#include <sys/ioctl.h>
<p>#endif
<br>
<p>再就是其中没有包含makefile,我的解决方法是从其它网关目录中copy一个,再把网关名字
<br>改成: ssl-gw
<p>7.2 编译TIS FWTK
<p>FWTK的2.0版在比以前任何版本都要容易编译得多,但在这个BETA版中我仍然发现了一些需
<br>要纠正的地方.希望这些错误在正式版中能够得到纠正.
<br>先到 /src/fwtk/fwtk 目录,用Makefile.config.linux 拷贝覆盖 Makefile.config
这个
<br>文件.
<br>注意:千万不要按操作指示中说的那样运行fixmake.否则会搞坏每个目录中的makefile.
<br>我有一个解决fixmake的方法,是用sed在makefile中每个包含include的行中加入'.'和''.
<br>相应的sed脚本为:
<p>sed 's/^include[ ]*\([^ ].*\)/include \1/' $name .proto > $name
<br>然后我们得编辑Makefile.config.有两处需要修改.
<br>作者是在他的home目录中编译代码的, 而我们把代码放在 /usr/src, 因此要对环境变量
<br>FWTKSRCDIR作相应改动:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -