| ||||
炼狱明王 其实设置FreeBSD防火墙是一件比较简单的事情。结合自己的实践经验和一些网上的资料,我来向大家介绍一下具体设置的方法。本文包括:1.最大化安全设置2.设置网卡3.设置Kernel4.打开包转发、防火墙和NAT5.配置NAT/防火墙后面的机器6.熟悉IPFilter7.QoS8.参考文献 1. 最大化安全设置锁定一台用作NAT防火墙的电脑的第一步是停止所有安装时不需要的服务。编辑/etc/rc.conf并确认inetd、portmap、sendmail这些守护者都被禁止了。除了设置inetd_enable="NO" 之外,为了以防万一,最好将/etc/inetd.conf中关于这些服务的设置注释掉。如果确实需要远程登陆,那么应该安装ssh并且家上 sshd_enable="YES" 到/etc/rc.conf。一旦你禁用了所有不需要的服务,你就可以到http://www.unixcircle.com/memberonly/portscan.php3去进行一次远程扫描,以便确认设置正确。注意别在防火墙里面进行这样的扫描,否则你得到的结果将是你的防火墙是否安全!如果没有条件出国的话,也可以用NetScanTools这样的工具,不过一定要确认你扫描的时候用的是当前子网外面的电脑。用CVSup获得一份最新的稳定版(-STABLE)FreeBSD源码也非常重要,因为和Windows一样,FreeBSD也需要经常打补丁。 2. 设置网卡为了便于说明,我们假定你的计算机是用两块3com 509B网卡,并且它们对应的FreeBSD驱动的名字分别是ep0和ep1。当然,如果你不太喜欢3com,或者无论如何总之和我们用的不太一样的话,就把下面的对应ep0、ep1换成你需要的名字。第一块网卡将根据rfc1918使用不可路由的私有地址,而第二块则可以制定一个静态或动态的DHCP地址。为了方便你的设置,这里引用一下那些不可路由的私有地址: 在这里我们选用192.168.0.1(很多人都这么做),在/etc/rc.conf中设置 ifconfig_ep0="inet 192.168.1.1 netmask 255.255.255.0" 这样第一块网卡就能用了。如果第二块网卡打算是用静态IP,则在/etc/rc.conf中这样配置: ifconfig_ep1="inet xxx.xxx.xxx.xxx netmask xxx.xxx.xxx.xxx" 这里的IP和掩码(xxx部分)根据你的实际情况设置就可以了。相反,使用动态IP(DHCP): ifconfig_ep1="DHCP" 并且要根据需要设置/etc/dhclient.conf 一定要确认你在两块网卡上都使用了正确的IP和掩码,而一旦确认了内部网的IP范围就不要改变。第一块网卡的IP地址将是内部网的默认网关地址。 3. 设置kernel想编译新的kernel,首先需要的是源代码(通常这是你拿到的发行版本的一部分)。如果你没有安装它,那么就运行/stand/sysinstall来装上。然后执行下面的命令# cd /sys/i386/conf 当然,我这么命名是因为那台机器叫firewall,这样便于记忆,当然你也可以使用其它的名字。编辑kernel配置文件:# vi firewall 在options小节中加入以下几行: # 添加IPFilter、记录支持 去掉所有和你的硬件无关的硬件相关options。一个比较有效的确定方法是观察dmesg输出。查看和kernel文件处于同一目录的LINT可以帮助你了解全部可用设置。修改完配置文件,重新制作、安装kernel: # cd /usr/src (kernel编译的输出结果) # make installkernel KERNCONF=firewall 这种编译方法将保留原来的kernel为kernel.old,这样如果你做错了什么,就有机会通过boot:出现时输入kernel.old来恢复。 4. 打开包转发、dhcp、防火墙和NAT功能打开包转发功能:在/etc/sysctl.conf中加入net.inet.ip.forwarding=1 加强转发安全性: 防御基于rfc1948的序号攻击,方法是使用随机的初始序号 net.inet.tcp.strict_rfc1948=1 验证进入的包的目的地址正确性 net.inet.ip.check_interface=1 增强性能: 过滤规则: pass in all NAT(网络地址翻译)规则: # 在“主动”模式中使用ipfilter ftp proxy # 把其他IP包映射到外部IP地址 注意,所有的proxy行应该放到通用portmap行之前,因为只有首先匹配的行起作用。 透明代理: /etc/ipnat.conf: # 将进入的smtp数据重定向到NAT里面的邮件服务器上 /etc/ipf.rules: # 允许包括碎片和SYN标志的经过翻译的包进入。 均衡负载: rdr ep1 0.0.0.0/0 port 80 -> 192.168.1.1,192.168.1.2 port 80 tcp round-robin 现在,在/etc/rc.conf中打开NAT/防火墙功能: ipfilter_enable="YES" #打开防火墙 -D: ipmon作为守护者程序(daemon)加载 5. 配置NAT后面的机器所有内部网的机器必须进行配置,用刚才那台FreeBSD网关的内部IP作为默认网关。假设我们的网关地址是192.168.1.254,则:FreeBSD:在 /etc/rc.conf 中加入 defaultrouter="192.168.1.254" 6. 熟悉IPFilter一旦NAT/防火墙连入了Internet,就应该看看http://www.unixcircle.com/ipf的IPFILTER-HOWTO这篇文章,并且在/etc/ipf.rules加入一些禁止规则。某些比较有用的信息可以在www.ipfilter.org主页找到。每次修改/etc/ipf.rules或/etc/ipnat.rules之后,需要让他们生效。重新加载规则将断开所有已经存在的连接。# /sbin/ipf -Fa -f /etc/ipf.rules 查看防火墙的统计信息: # /sbin/ipfstat -t 查看ipfilter的版本: # /sbin/ipf -V 查看当前的映射/重定向设置: # /sbin/ipnat -l 其它的课以查看ipftest(1), mkfilters(1), ipf(4), ipl(4), ipf(8), ipfstat(8), ipmon(8), ipnat(8)的说明。 7. QoS限制带宽:FreeBSD包括了dummynet带宽管理机制。dummynet可以阻止潜在的超速连接阻塞另一个慢速连接。man dummynet(4)可以得到更多的说明。由于dummynet和ipfw -- FreeBSD专用防火墙捆绑在一起,因此你需要在设置dummynet的同时加入3个ipfw设置到kernel中。 options IPFIREWALL 并且重新编译kernel,重启。 在/etc/rc.conf中设置dummynet: firewall_enable="YES" 假设你拥有一条快速以太网出口,并且需要把它限制在普通以太网的速度:建立一个从192.168.1.4到任意目的地址的pipe 1: # /sbin/ipfw add 100 pipe 1 ip from 192.168.1.4 to any 将管道限制在10Mbits/s: 可以建立不同的、针对不同速度、协议的管道。需要删掉所有的管道时,执行: # /sbin/ipfw flush 需要自动设置管道,把他们加入/etc/rc.dummynet. 8. 参考文献IPFilter: http://www.ipfilter.orgIPFilter示范: http://coombs.anu.edu.au/~avalon/examples.html IPFilter how-to: http://www.unixcircle.com/ipf/ IPFilter 邮件列表: http://false.net/ipfilter/ 私有网络地址分配RFC:http://www.muine.org/rfc/rfc1918.txt IP网络地址翻译:http://www.muine.org/rfc/rfc1631.txt 传统IP网络地址翻译:http://www.muine.org/rfc/rfc3022.txt 带宽管理:http://www.iet.unipi.it/~luigi/ip_dummynet/ |