找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1490|回复: 0

十分钟创建一个有效的防火墙

[复制链接]
发表于 2009-6-2 22:19:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

×
十分钟创建一个有效的防火墙  最近几个月,我生活的环境有所改变,使用的电脑也变成了两台通过DSL连接到Internet的笔记本电脑。 一般而言,这种情况的安全性是一个问题。不过对于我的机器来说,没有太大的问题,因为我使用的是Linux,并且有一组设计非常好的iptables规则集。然而,我妻子使用的是一台Windows 98的机器,我个人认为它的安全性非常差。我要为我们的局域网设置一个适当的防火墙。 Linux下的防火墙 在每一个Linux版本中,都有着不同的防火墙软件套件。iptabels(NetFilter)应用程序被认为是Linux中实现包过虑功能的第四代应用程序。第一代是Linux 内核1.1版本所使用的Alan Cox从BSD Unix中移植过来的ipfw。在2.0版的内核中,Jos Vos和其它一些程序员对ipfw进行了扩展,并且添加了ipfwadm用户工具。在2.2版内核中, Russell和Michael Neuling做了一些非常重要的改进,也就是在该内核中,Russell添加了帮助用户控制过虑规则的ipchains工具。后来,Russell又完成了名为NetFilter(http://www.netfilter.org)的内核框架。这些防火墙软件套件一般都比其前任有所改进,表现越来越出众。 NetFilter的目的是为用户提供一个专门用于包过滤的底层结构,用户和开发人员可以将其内建在Linux内核中。iptables是一个内建在NetFilter框架中的一个模块,它可以让用户访问内核过滤规划和命令。如果你了解ipchains就会发现,iptables和ipchains非常相似。事实上,在2.4中,如果加载了ipchains模块,那么ipchains风格的规则也可以被支持。iptables对网络的控制提供了非常强大的功能,它可以向不同的机器路由数据包。在现实中,由于比较复杂,iptables经常被束之高阁。 快速构建防火墙 现在有关编写防火墙脚本以及设置防火墙的书籍有很多,不过我不想把问题复杂化,想在十分钟里建起一个有效的防火墙。 在本例中,网络结构如图1所示。 [img]/qzone/newblog/v5/editor/css/loading.gif[/img]图1 网络结构图我们要使用一台装有两块网卡的机器作为防火墙,并且将所有的机器放在防火墙后面的局域网中。在此假设使用的网络地址是192.168.1.0,它可以在防火墙后提供254个主机地址。我们使用192.168.1.1作为防火墙的局域网IP地址(假设绑定的网卡为eth0),假设Internet端的IP地址为300.3.3.3(此地址纯属虚构),绑定网卡为eth1。 我们的防火墙并不需要实现太多的功能,因此,关闭了除ssh以外的所有服务。也就是说可以拒绝除局域网内主机以外的所有连接请求,配置内容如下: machine$ cat /etc/hosts.allow  sshd: 192.168.1.  machine$ cat /etc/hosts.deny  ALL: ALL
在防火墙上运行的惟一一个其它的服务是DHCPD服务器,用于分配IP地址给局域网内的主机。我们需要配置iptables,使其改写所有从局域网内主机流出的数据包,并对其进行伪装,使它看起来好象所有流出的数据都是出自防火墙本身。 这种设置适用于任何一种Internet连接,它可以是DSL连接、Modem连接等等。这里惟一需要注意的是,必须要知道ISP商提供的IP地址。在此,这个地址是300.3.3.3,在具体的应用中,应该将其更改以符合实际情况。 首先,通过创建一个/etc/dhcpd.conf文件来配置我们的DHCP服务器。下面是该文件的内容: firewall$ cat /etc/dhcpd.conf   subnet 300.3.3.0 netmask 255.255.255.0 { }   subnet 192.168.1.0 netmask 255.255.255.0 {            allow bootp;      option routers 192.168. 1.1;           option subnet-mask 255.255.255.0;             option broadcast-address 192.168.1.255;            # 这些参数可根据需要调整           option domain-name “example.com”;           option domains-name-servers A.B.C.D E.F.G.H;           range dynamic-bootp 192.168.1.50 192.168.1.254;            default-lease-time 18000;            max-lease-time 18000;            get-lease-hostnames on;     }  firewall# /etc/init.d/dhcp start  Internet Software Consortium DHCP Server 2.0pl4  Copyright 1995, 1996, 1997, 1998, 1999 The Internet Software Consortium.  All rights reserved.  Please contribute if you find this software useful.  For info, please visit http://www.isc.org/dhcp-contrib.html  Listening on LPF/eth1/00:10:18:77:bd:28/192.168.1.0  Sending on   LPF/eth1/00:10:18:77:bd:28/192.168.1.0  Listening on LPF/eth0/00:e0:74:28:e9:e6/300.3.3.0  Sending on   LPF/eth0/00:e0:74:28:e9:e6/300.3.3.0  Sending on   Socket/fallback/fallback-net  firewall#
现在,DHCP服务器已经启动,内部的机器通过DHCP服务器可以得到192.168.1.50~192.168.1.254范围内的一个IP地址。在此,我并没有把所有的这个C类地址放在DHCP主机上,所以192.168.1.2范围内的IP地址还可以用于其它的机器。 下面来创建防火墙规则。以下内容位于/etc/init.d中。 #!/bin/sh   # 定义  EXT_INTERFACE=eth1  EXT_IP=300.3.3.3  INT_INTERFACE=eth0  INT_IP=192.168.1.1   #加载一些需要的模块     modprobe iptable_nat    modprobe ip_conntrack_ftp ip_nat_ftp    modprobe ip_conntrack_irc ip_nat_irc   #设置iptables规则     # Flush any existing tables    iptables --flush    iptables -t nat --flush     for network in 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16 224.0.0.0/4 240.0.0.0/5 127.0.0.1/32    do          iptables -A  INPUT -i $EXT_INTERFACE -s $network -j DROP          iptables -A OUTPUT -i $EXT_INTERFACE -s $network -j DROPdone#告诉iptables想要改写所有连接中流出的数据包iptables -t nat -Fiptables -t nat -A POSTROUTING -o $INT_INTERFACE -j SNAT --to-source $EXT_IP  # 脚本结束
现在,你的机器就安全了,不但可以为内部机器提供Internet连接,而且还避免了它们直接被外部的机器访问。 结论有的人可能会指出这里面还有一些事情可以做。很显然,如果把防火墙脚本写得再复杂一些,就可以保护很多此处没有提到的东西。但是我们只用了十分钟架设起来的防火墙,已经可以提供具有相当安全性的连接了。  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|维修人员 ( 鲁ICP备17033090号 )

GMT+8, 2024-12-23 08:59 , Processed in 1.634223 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表