<?xml version="1.0" standalone="yes"?>
<?xml-stylesheet type="text/xsl" href="css/rss.xslt"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>国家劳动局IT培训咨询与技术指南 - FreeBSD</title><link>http://www.7layer.cn/</link><description>劳动局IT培训;劳动局IT认证;劳动局IT技术;政府补贴;免费培训 - </description><generator>RainbowSoft Studio Z-Blog 1.8 Walle Build 100427</generator><language>zh-CN</language><copyright>版权所有 2008-2010 国家劳动局IT培训咨询与技术指南var gaJsHost = ((&amp;quot;https:&amp;quot; == document.location.protocol) ? &amp;quot;https://ssl.&amp;quot; : &amp;quot;http://www.&amp;quot;);document.write(unescape(&amp;quot;%3Cscript src='&amp;quot; + gaJsHost + &amp;quot;google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E&amp;quot;));try {var pageTracker = _gat._getTracker(&amp;quot;UA-12945401-1&amp;quot;);pageTracker._trackPageview();} catch(err) {}</copyright><pubDate>Sun, 05 Sep 2010 10:35:11 +0800</pubDate><item><title>FreeBSD 服务器分区建议</title><author>dshendry@126.com (劳动局IT培训)</author><link>http://www.7layer.cn/cat_23/411/411/411.html</link><pubDate>Thu, 17 Dec 2009 15:00:02 +0800</pubDate><guid>http://www.7layer.cn/cat_23/411/411/411.html</guid><description><![CDATA[<p><span class="postbody">第一个硬盘（或者唯一的一个硬盘）建议分区如下：<br /><table border="1">    <tbody>        <tr>            <td>/</td>            <td>256M</td>        </tr>        <tr>            <td>swap</td>            <td>1024M - 2048M</td>        </tr>        <tr>            <td>/var</td>            <td>256M</td>        </tr>        <tr>            <td>/tmp</td>            <td>128M - 1024M</td>        </tr>        <tr>            <td>/usr</td>            <td>1024M</td>        </tr>        <tr>            <td>/build</td>            <td>2048M</td>        </tr>        <tr>            <td>/home</td>            <td>*</td>        </tr>    </tbody></table><br />第二个硬盘的全部空间作为一个分区加载为&ldquo;/disk1&rdquo;，第三个硬盘的全部空间作为一个分区加载为&ldquo;/disk2&rdquo;，依此类推。<br /><br /><br /><br />安装过程中不要安装&ldquo;src&rdquo;和&ldquo;ports&rdquo;两部分，安装完毕以后，建立以下目录：<br /><br /><br /><br />/build/src<br /><br />/build/obj<br /><br />/build/ports<br /><br /><br /><br />并建立以下链接：<br /><br /><br /><br />rm -rf /usr/src /usr/obj /usr/ports<br /><br />ln -s /build/src /usr/src<br /><br />ln -s /build/obj /usr/obj<br /><br />ln -s /build/ports /usr/ports<br /><br /><br /><br />然后在从光盘的相应目录里面使用 install.sh 或者直接试用 cvsup 安装源代码树和 ports 到&ldquo;/build&rdquo;的相应目录。</span></p>]]></description><category>FreeBSD</category><comments>http://www.7layer.cn/cat_23/411/411/411.html#comment</comments><wfw:comment>http://www.7layer.cn/</wfw:comment><wfw:commentRss>http://www.7layer.cn/feed.asp?cmt=411</wfw:commentRss><trackback:ping>http://www.7layer.cn/cmd.asp?act=tb&amp;id=411&amp;key=08b91b41</trackback:ping></item><item><title>FreeBSD 5.0 网关指南 </title><author>dshendry@126.com (劳动局IT培训)</author><link>http://www.7layer.cn/cat_23/410/410/410.html</link><pubDate>Thu, 17 Dec 2009 14:57:23 +0800</pubDate><guid>http://www.7layer.cn/cat_23/410/410/410.html</guid><description><![CDATA[<p>FreeBSD 5.0 网关指南 <br />版本 2.0. preview3 <br />作者 黄冬（hdcola@bj1860.net） <br /><br /><br />1. 前言 1 <br />2. 安装mpd 2 <br />3. PPPoE 2 <br />3.1. 使用ppp 2 <br />3.1.1. 设置一个使用PPPOE的PPP呼出 2 <br />3.1.2. 设置启动时自动进行连接 3 <br />3.1.3. 手动连接 4 <br />3.2. 使用mpd 4 <br />3.2.1. 配置你的新kernel 4 <br />3.2.2. 配置mpd配置文件 4 <br />3.2.3. 设置启动时自动进行连接 5 <br />3.2.4. 手动连接 5 <br />4. 设置NAT服务 5 <br />4.1. 启动PPP的NAT支持 5 <br />4.1.1. 系统启动时自动启动 5 <br />4.1.2. 手动启动 6 <br />4.2. 使用IPFW的NATD 6 <br />4.2.1. 系统配置 6 <br />4.2.2. 为ppp设置natd 6 <br />4.2.3. 为mpd设置natd 7 <br />5. 配置文件总结 8 <br />5.1. ppp拨出 8 <br />5.1.1. /etc/rc.conf 8 <br />5.1.2. /etc/ppp/ppp.conf 8 <br />5.2. mpd拨出 9 <br />5.2.1. kernel配置文件 9 <br />5.3. ppp的nat拨出 9 <br />5.4. 使用natd的ppp拨出 9 <br />5.5. 使用natd的mpd拨出 9 <br />5.6. 使用ipnat的ppp拨出 9 <br />5.7. 使用ipnat的mpd拨出 9 <br /><br /><br />1. 前言 <br />本文原名叫做FreeBSD 5.0 ADSL安装指南，由于越做越大所以改名叫做网关安装指南。泛指有关网关的一系列应用的安装。这个名字还希望大家能出出主意。希望大家能把自己的一些意见和建议告诉我，我的联系方法是：hdcola@bj1860.net。同时也可以去http://www.huangdong.com/bbs/中的BSD版与大家一起讨论。 <br />本文主要的目的是说明如何使用FreeBSD来建立一个网关，它涉及的有ADSL（PPPoE）、VPN（PPTP）、NAT、Firewall。我不想写成一个大全样的文章，主要针对的目标是现在宽带中大家会慢慢多用起来的PPPoE和VPN。 <br />本文不会涉及到传统的电话拨号的部分，主要的原因一是有太多的文章讲它了。而Firewall的深入的讨论本文也不会提及，因为讲它本身就会是一个与本文一样的篇幅了，相信对于IPFW、IPFilter会有人写一个更为专业的文章的。 <br />为了让大家明白PPPoE与PPTP的不同，以免产生我之前的混淆，先告诉大家它们的用处。现在我们使用PPPoE主要是ADSL，我们可以视ADSL Modem只是一个拨号器，它不带网络功能，就像使用本机设备一样的去使用它。而PPTP则是在网络上具有一个IP地址的服务器，我所知通常在校园网、公司网中会大量使用这样的拨号服务器以进行记费或是安全保障。 <br />本文使用的PPPoE和PPTP的工具主要是FreeBSD自带的ppp和使用Netgraph的mpd。可以使用ppp来达到PPPoE拨号的功能，使用mpd则可实现PPPoE和PPTP的功能。由于mpd的强大，在使用PPTP时我更推荐大家使用mpd。 <br />感觉quakelee在推荐给了我mpd这样一个好的工具，同时对mpd的所做的普及化的工作。以及oneflower及时的指出了巧妙的使用ipfw配置文件的方法。同时还要感谢绝对灌水不断的催促才使这个文章能这么快的再出一个新的版本。更要感觉我家的大宝宝和小宝宝，他们允许我使用家中的ADSL设备来测试本文中的所有设置。 <br />2. 安装mpd <br />由于ppp是FreeBSD自带的一个功能，mpd则是一个FreeBSD的附加软件。你可以使用FreeBSD的Ports Collection来编译它。mpd最新的版本为3.13，使用ports的编译方法为： <br />cd /usr/ports/net/mpd <br />make install <br />make clean <br />如果你没有安装Ports Collection，哪么也可以到http://www.huangdong.com/bbs/中的BSD版的精华区中找到mpd3.13的package安装包。使用package安装包的安装方法为： <br />pkg_add mpd-3.13.tbz <br />你还可以到http://www.dellroad.org/mpd/来下载mpd的源代码包自己手工编译，具体方法阅读源代码包中的README文件。 <br />3. PPPoE <br />3.1. 使用ppp <br />3.1.1. 设置一个使用PPPOE的PPP呼出 <br />将/etc/ppp中的ppp.conf进行备份，以下是新的ppp.conf中的内容： <br />default: <br />set log Phase Chat LCP IPCP CCP tun command <br />nat enable yes <br />nat same_ports yes <br />nat use_sockets yes <br />set redial 15 28800 <br />set reconnect 15 28800 <br />pppoe: <br />#加入在kernel中配置的会连接ADSL设备的网卡的名称，我的是fxp0 <br />set device PPPoE:fxp0: <br />set mru 1492 <br />set mtu 1492 <br />set speed sync <br />enable lqr <br />set lqrperiod 5 <br />set cd 5 <br />set dial <br />set login <br />set timeout 0 <br />set authname Your UserName used to login <br />set authkey Your Password used to login <br />set ifaddr 10.0.0.1/0 10.0.0.2/0 255.255.255.0 0.0.0.0 <br />add default HISADDR# Add a (sticky) default route <br />enable dns <br />#注意：只有三处需要进行更改的地方，它们是PPPoE:fxp0: 以及用户名和密码。 <br />如果你不知道自已网卡的设备名哪么可以通过ifconfig �Ca命令来得到，我的计算机的结果如下： <br />fxp0: flags=8843&lt;UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST&gt; mtu 1500 <br />inet 192.168.10.50 netmask 0xffffff00 broadcast 192.168.10.255 <br />ether 00:d0:59:0d:08:03 <br />media: Ethernet autoselect (10baseT/UTP) <br />status: active <br />lo0: flags=8049&lt;UP,LOOPBACK,RUNNING,MULTICAST&gt; mtu 16384 <br />inet 127.0.0.1 netmask 0xff000000 <br />3.1.2. 设置启动时自动进行连接 <br />在/etc/rc.conf中加入以下参数（ppp_mode设置断线重拨的功能）： <br />ppp_enable=&quot;YES&quot; <br />#ppp_mode=&quot;ddial&quot; <br />ppp_mode=&quot;background&quot; <br />ppp_profile=&quot;pppoe&quot; <br />这里的ppp_profile对应的是/etc/ppp中的ppp.conf里的一个条目。 <br />3.1.3. 手动连接 <br />如果你想手动的发起一个连接，只需要在命令行上输入： <br />ppp �Cddial pppoe <br />最后一个参数就是你在/etc/ppp中设置的ppp.conf中的一个条目。 <br />3.2. 使用mpd <br />3.2.1. 配置你的新kernel <br />为ADSL的PPPOE协议在kernel配置文件中加入以下内容： <br /># ADSL PPPOE Sup <br />options NETGRAPH <br />options NETGRAPH_ETHER <br />options NETGRAPH_SOCKET <br />options NETGRAPH_PPPOE <br />在重新编译、安装并重启机器后，就可以使用netgraph了。也就是可以正常使用mpd了。 <br />3.2.2. 配置mpd配置文件 <br />mpd的配置文件都存储在/usr/local/etc/mpd中，在安装好mpd后它已经为我们产生了一系列的sample文件。我们使用PPPoE需要产生三个配置文件： <br />3.2.2.1. mpd.conf <br />PPPoE: <br />new -i ng0 PPPoE PPPoE <br />set iface addrs 1.1.1.1 2.2.2.2 <br />set iface route default <br />set iface disable on-demand <br />set iface idle 0 <br />set bundle disable multilink <br />set bundle authname username <br />set link no acfcomp protocomp <br />set link disable pap chap <br />set link accept chap <br />set link mtu 1460 <br />set ipcp yes vjcomp <br />set ipcp ranges 0.0.0.0/0 0.0.0.0/0 <br />open iface <br />这里你需要使用你的PPPoE的用户名来替换set bundle authname后面的username。 <br />3.2.2.2. mpd.links <br />PPPoE: <br />set link type pppoe <br />set pppoe iface fxp0 <br />set pppoe service &quot;adsl&quot; <br />这里需要使用你的网卡的设备名来替换fxp0。 <br />3.2.2.3. mpd.secret <br />username &quot;password&quot; <br />使用你的在mpd.conf中的username来替换这里的username，使用你的PPPoE服务器的认证密码来替换这里的password。 <br />3.2.3. 设置启动时自动进行连接 <br />在/usr/local/etc/rc.d目录中新建一个文件，名为000.mpd.sh，内容为： <br />/usr/local/sbin/mpd -b PPPoE <br />需要注意的是，你需要让000.mpd.sh有可执行的能力。可以使用这条命令： <br />chmod +x /usr/local/etc/rc.d/000.mpd.sh <br />3.2.4. 手动连接 <br />其实就是000.mpd.sh中的哪句话了： <br />/usr/local/sbin/mpd -b PPPoE <br />4. 设置NAT服务 <br />4.1. 启动PPP的NAT支持 <br />4.1.1. 系统启动时自动启动 <br />同时还需要指定本台FreeBSD为一个网关服务器。在/etc/rc.conf中设置gateway选择以及ppp的拨号选项： <br />gateway_enable=&rdquo;YES&rdquo; <br />ppp_nat=&quot;YES&quot; <br />natd_enable=&quot;YES&quot; <br />natd_interface=&quot;tu0&quot; <br />gateway_enable=&quot;YES&quot; <br />除了在/etc/rc.conf中设置外，也可以在/etc/ppp/ppp.conf中加入以下设置： <br />nat enable yes <br />这样会打开ppp内置的NAT服务。如果在ppp.conf中加入了这个参数，哪么在rc.conf中是否加入ppp_nat=&rdquo;YES&rdquo;也就无所谓了。 <br />对于使用ppp的NAT支持我们会发现它对于系统的kernel没有任何定制要求，所以对于轻型的应用和只是提供透明转发的网关使用ppp自带的NAT功能则是最好的选择。 <br />4.1.2. 手动启动 <br />如果已经改动了ppp.conf中的nat enable yes，哪么你还是可以使用ppp �Cddial pppoe命令行来启动ppp。而且ppp也直接支持nat的功能。但是也可以能过： <br />ppp �Cnat �Cddial pppoe <br />命令来手工显示的启用ppp的NAT支持。 <br />4.2. 使用IPFW的NATD <br />4.2.1. 系统配置 <br />4.2.1.1. 在kernel中加入防火墙配置 <br />在kernel配置文件中加入以下选项参数： <br />options IPFIREWALL <br />options IPFIREWALL_VERBOSE <br />options IPFIREWALL_VERBOSE_LIMIT=100 <br />4.2.1.2. 设置系统启动时参数 <br />在/etc/rc.conf中加入以下设置： <br />ipfirewall_enable=&quot;YES&quot; <br />firewall_type=&quot;open&quot; <br />4.2.2. 为ppp设置natd <br />为了使ppp具有portmapping这样的功能哪么使用natd则是必然的了。对于ppp，在启动ppp后使用ifconfig会发现ppp启动和tun0或是tunx这样的一个设备，它是使用kernel中的： <br />device tun # Packet tunnel. <br />设备来形成一个独立的网络设备。所以在设备natd之前你需要确认你的ppp会使用到的设备号。通常如果只拨接一次，哪么设备名就应是tun0了。在/etc/rc.conf中加入以下natd的设置： <br />natd_enable=&quot;YES&quot; <br />natd_interface=&quot;tun0&quot; <br />natd_flags=&quot;-f /etc/natd.conf&quot; <br />同时别忘记在rc.conf中也需要gateway_enable=&quot;YES&quot;这样的一个设置呀。由于我的portmapping项目比较多，所以我喜欢将所有的设置放入一个文件中，也就是/etc/natd.conf。以下是我的natd.conf的设置： <br />dynamic yes <br />redirect_port tcp 192.168.10.100:80 8080 <br />redirect_port udp 192.168.10.100:3782 3782 <br />redirect_port udp 192.168.10.100:3783 3783 <br />redirect_port tcp 192.168.10.100:3782 3782 <br />redirect_port tcp 192.168.10.100:3783 3783 <br />由于是使用的ppp，它的ip地址是动态分配的，所以使用的dynamic yes这个参数。 <br />4.2.3. 为mpd设置natd <br />在上节中我们说明了natd需要使用一个网络接口来做外网的网卡界面，在mpd中它使用的是ng0或是ngx。可以参考你的mpd.conf的设置。在本文档中使用的是ng0，所以我们的/etc/rc.conf中需要加入以下设置： <br />natd_enable=&quot;YES&quot; <br />natd_interface=&quot;ng0&quot; <br />natd_flags=&quot;-f /etc/natd.conf&quot; <br />对于natd.conf中的设置见上节中的设置，其实在mpd和ppp下natd除了网卡接口不同外，其它都是一样的。 <br />由于mpd不能通过/etc/rc.conf来启动，通过/usr/local/etc/rc.d中的shell脚本启动又会晚于natd启动的时间，所以为了在natd启动前来启动mpd，可以使用以下方法： <br />在/etc/rc.firewall的 <br />############ <br /># Flush out the list before we begin. <br /># <br />${fwcmd} -f flush <br />后面加入 <br />/usr/local/sbin/mpd -b PPPoE <br />sleep 10 <br />这样就可以让natd启动时，mpd已经启动，并已经为ng0网卡动态得到了IP地址。需要注意的是，不要忘记把/usr/local/etc/rc.d中的mpd.sh删除哟。<span class="postsign"><br /></span></p>]]></description><category>FreeBSD</category><comments>http://www.7layer.cn/cat_23/410/410/410.html#comment</comments><wfw:comment>http://www.7layer.cn/</wfw:comment><wfw:commentRss>http://www.7layer.cn/feed.asp?cmt=410</wfw:commentRss><trackback:ping>http://www.7layer.cn/cmd.asp?act=tb&amp;id=410&amp;key=cdbf3583</trackback:ping></item><item><title>如何使用FreeBSD防火墙保护企业网络　 </title><author>dshendry@126.com (劳动局IT培训)</author><link>http://www.7layer.cn/cat_23/409/409/409.html</link><pubDate>Thu, 17 Dec 2009 14:55:27 +0800</pubDate><guid>http://www.7layer.cn/cat_23/409/409/409.html</guid><description><![CDATA[<p><span class="postbody">以前我已经写过一次《利用FreeBSD组建安全的网关》，主要偏向于如何建立一个FreeBSD防火墙，而防火墙在很多时候主要是要看如何使用，现在我们看看如何使用建立好了的FreeBSD防火墙保护企业，关于FreeBSD的防火墙建设过程请参考我的《利用FreeBSD组建安全的网关》，首先假设某企业有以下服务器和工作站：<br /><br />1、WEB服务器两台、一台企业主页，一台做BBS，希望IP地址为xxx.xxx.xxx.001和xxx.xxx.xxx.002<br /><br />2、DNS服务器一台，并且兼带企业E-mail服务，IP地址为xxx.xxx.xxx.003，把www.testdomain.com解析到xxx.xxx.xxx.001以及bbs.testdomain.com解析到xxx.xxx.xxx.002<br /><br />3、企业内部局域网络，计算机N台，IP地址为10.125.0.0到10.125.255.255<br /><br />对于这样的一个企业，我们首先要设计好网络构架，在设计的同时要考虑到各个服务器以及内部网络各放在什么位置，才能更有效的配合防火墙，使得防火墙对每个部分都能充分的保护。<br /><br />我们首先来分析一下&ldquo;黑客&rdquo;入侵的手段和途径，作为一个入侵者，他的第一步自然是先要找到目标企业在网络中的位置，假设他已经知道该企业没有使用主机托管服务，而是和企业的网络放在了一起，那么他只须ping一下该企业的主页就能了解到该企业的IP地址为xxx.xxx.xxx.001和xxx.xxx.xxx.002，而另外还有一台DNS服务器，也可以使用nslookup这样的工具，一下就能查到目标企业的DNS服务器为地址xxx.xxx.xxx.003，并且他还会计划，假设已经进入以上三台服务器中的一台，他就会马上分析网络结构，并且进入内网，获取内部网络员工资料，以及很多重要数据。从上面看得出来，要保护这个网络，我们需要做很多东西，首先我们可以想办法对服务器之间以及服务器和内部网络之间进行隔离，但又能应用到他们应该有的功能，现在对该企业的网络做如下策划：<br /><br /><br /><br />首先确定FreeBSD防火墙是作为企业连接到Internet服务器的唯一途径，然后对FreeBSD进行一定的设置，开启它的ipfirewall以及NATD功能，上图告诉了我们现在是把WWW、BBS、DNS等服务器都放在内部进行保护，所以在防火墙要开启NATD的反向代理功能，首先我们把xxx.xxx.xxx.001，xxx.xxx.xxx.002，xxx.xxx.xxx.003，绑定在FreeBSD外部网卡上，假设外部网卡号为fxp0，在rc.conf里我们需要设置如下：<br /><br />ifconfig_fxp0=&quot;inet xxx.xxx.xxx.001 netmask 255.255.255.0&quot;<br /><br />ifconfig_fxp0_alias0=&quot;inet xxx.xxx.xxx.002 netmask 255.255.255.0&quot;<br /><br />ifconfig_fxp0_alias1=&quot;inet xxx.xxx.xxx.003 netmask 255.255.255.0&quot;<br /><br />绑好之后我们现在就开始分析了，首先我们来看看内部网络，内部要上Internet就必须要有一个网关，并且让他们正常的使用网络，假设FreeBSD内部网卡编号为fxp1，那么我们还要在rc.conf里加入：<br /><br />ifconfig_fxp1=&quot;inet 10.125.0.1 netmask 255.255.0.0&quot;<br /><br />然后在防火墙规则里加上：<br /><br />divert 8668 ip from any to any via fxp0<br /><br />这条规则，允许NATD服务，仅允许NATD服务还不行，还要设置内部网络能连接到Internet，我们再加上：<br /><br />allow ip from any to 10.125.0.0/16<br /><br />allow ip from 10.125.0.0/16 to any<br /><br />内部网络设置Gateway为10.125.0.1，这样企业的内部网络就能正常连接到Internet了。<br /><br />然后我们来看看WWW服务器，这个服务器一般来说只要开放三个端口就够了，第一个端口自然是HTTP端口不用说了，第二个端口那就是ftp端口以及ftp数据端口，其中HTTP端口自然是让Internet上以及企业内部访问的端口，而FTP端口是用来更新主页或做别的事的，并且只须要企业内部人员访问就足够了，当然有必要的话还要开telnet或ssh端口，这是方便企业内部系统管理员远程管理的，这里我建议使用ssh，并且为了防止万一入侵者进来了，他可能要对其他机器进行攻击，我决定对WWW服务器进行单独分离，现在假设FreeBSD的内部网卡编号为fxp1，我们编辑rc.conf文件，加上：<br /><br />ifconfig_fxp1_alias0 =&quot;inet 10.80.0.1 netmask 255.255.255.0&quot;<br /><br />然后我们把WWW的服务器设置成10.80这个网段，网关为10.80.0.1，这样就把WWW服务器单独划在了一个特殊的区域里了，假设我们设置WWW的IP为10.80.0.80现在我们再设置防火墙规则：<br /><br />allow tcp from any to xxx.xxx.xxx.001 80 in<br /><br />allow tcp from xxx.xxx.xxx.001 80 to any out //允许任意地方能访问防火墙的80<br /><br />allow tcp from 10.80.0.80 80 to any out<br /><br />allow tcp from any to 10.80.0.80 80 in //允许任意地方访问WWW服务器的80端口<br /><br />allow tcp from 10.125.0.0/16 to 10.80.0.80 21 in<br /><br />allow tcp from 10.125.0.0/16 to 10.80.0.80 20 in<br /><br />allow tcp from 10.80.0.80 21 to 10.125.0.0/16 out<br /><br />allow tcp from 10.80.0.80 20 to 10.125.0.0/16 out //允许内部网络使用FTP服务器连接WWW服务器<br /><br />设置完成防火墙规则还不行还需要设置NATD，我们设置NATD为：<br /><br />redirect_port tcp 10.80.0.80:80 xxx.xxx.xxx.001:80<br /><br />这样设置以后，WWW服务器就可以允许企业内部人员顺利的更新主页和浏览主页了，而Internet却只能浏览WWW服务器上的主页，就算万一WWW服务器利用HTTP服务器入侵了该机器，由于该服务器的各种连接都被放火墙阻断，而无法对企业内部网络进行入侵和破坏，达到充分保护WWW服务器以及内部网络的目的。<br /><br />现在我们再来分析DNS服务器，由于BBS服务器和WWW服务器实质上都一样这里就不讨论了，DNS服务器自然要提供DNS服务器，也就是UDP53端口，由于同时还带MAIL功能，所以还要开放SMTP端口以及POP3端口，而POP3服务器同样只允许内部企业访问，所以我们给rc.conf加入：<br /><br />ifconfig_fxp1_alias0=&quot;inet 10.80.2.1 netmask 255.255.255.0&quot;<br /><br />然后给DNS服务器设置IP为10.80.2.53，设置防火墙规则为：<br /><br />allow udp from any to xxx.xxx.xxx.003 53 in<br /><br />allow udp from xxx.xxx.xxx.003 53 to any out //允许任意地方能访问防火墙的53端口<br /><br />allow tcp from any to xxx.xxx.xxx.003 25 in<br /><br />allow tcp from xxx.xxx.xxx.003 25 to any out //允许任意地方能访问防火墙的smtp端口<br /><br />allow udp from 10.80.2.53 53 to any out<br /><br />allow udp from any to 10.80.2.53 53 in //允许任意地方访问DNS服务器的53端口<br /><br />allow tcp from any to 10.80.2.53 25 in<br /><br />allow tcp from 10.80.2.53 25 to any out //允许任意地方访问DNS的SMTP端口<br /><br />allow tcp from 10.125.0.0/16 to 10.80.2.53 110 in<br /><br />allow tcp from 10.80.2.53 110 to 10.125.0.0/16 out //允许企业内部访问DNS的POP3端口<br /><br />NATD设置为：<br /><br />redirect_port udp 10.80.2.53:53 xxx.xxx.xxx.003:53 //把10.80.2.53的53转到xxx.xxx.xxx.003的53上，使用的UDP。<br /><br />redirect_port tcp 10.80.2.53:25 xxx.xxx.xxx.003:25 //把10.80.2.53的25转到xxx.xxx.xxx.003的25上，使用的TCP。<br /><br />按照上面的规则设置好企业网络后，使得企业网络保护更加的严密，服务器和服务器之间以及服务器和企业内部网络之间进行了严格控制。当然这里没有考虑内部入侵，以及内部IP盗用行为，这也就是FreeBSD防火墙的局限性。不过可以添加一块网卡，把企业内部人员的网络单独用一个网卡来进行隔离，达到弥补的办法。<br /><br />好了，以上为我使用FreeBSD防火墙保护企业网络的个人做法，希望能给一部分企业网管有所帮助。</span></p>]]></description><category>FreeBSD</category><comments>http://www.7layer.cn/cat_23/409/409/409.html#comment</comments><wfw:comment>http://www.7layer.cn/</wfw:comment><wfw:commentRss>http://www.7layer.cn/feed.asp?cmt=409</wfw:commentRss><trackback:ping>http://www.7layer.cn/cmd.asp?act=tb&amp;id=409&amp;key=a08d43fb</trackback:ping></item><item><title>OpenBSD2.8服务器配置实务手册</title><author>dshendry@126.com (劳动局IT培训)</author><link>http://www.7layer.cn/cat_23/408/408/408.html</link><pubDate>Thu, 17 Dec 2009 14:54:07 +0800</pubDate><guid>http://www.7layer.cn/cat_23/408/408/408.html</guid><description><![CDATA[<p><span class="postbody">OpenBSD2.8服务器配置实务手册<br /><br /><br /><br />第一课、安装OpenBSD 2.8 <br /><br /><br /><br />����如果您的电脑不支持光盘启动，请首先在DOS下进行以下的步骤，制作启动软盘，然后从软盘 <br /><br />启动电脑。（其中e:是光盘所在盘符） <br /><br /><br /><br />e:\2.8\tools\fdimage e:\2.8\i386\floppy28.fs a: <br /><br /><br /><br />����如果您的电脑支持光盘启动，直接从光盘启动后，按照提示一步一步完成安装，以下是安装 <br /><br />过程的简略描述： <br /><br /><br /><br />第一节、建立分区 <br /><br /><br /><br />启动电脑直到出现以下的提示： <br /><br />(I)nstall, (U)pgrade or (S)hell? <br /><br />其中(I)代表安装一个全新的系统，(U)代表升级原有的OpenBSD旧版本，(S)代表退出到命令行状态。 <br /><br />我们要安装一个全新的系统，所以输入I并回车。 <br /><br />在一屏欢迎辞之后，系统询问使用什么终端类型： <br /><br />Specify terminal type [pcvt25]: <br /><br />不用理会它，直接回车，继续以后的步骤。系统将检测到可用的硬盘，并询问对那个硬盘进行处理： <br /><br />Available disks are: <br /><br />wd0 <br /><br />Which disk is the root disk? [wd0] <br /><br />上面的提示表明，电脑只有一个IDE硬盘，如果是SCSI硬盘，将显示成sd0。因为系统只有一个硬盘， <br /><br />所以安装程序已经帮我们选择了硬盘，如果系统有多个硬盘，那就必须输入硬盘的名称，如wd1。现 <br /><br />在直接回车进入下一步。 <br /><br />系统询问是否把整个硬盘给OpenBSD使用： <br /><br />Do you want to use the *entire* disk for OpenBSD? [no] <br /><br />默认是no，不过手册是要做服务器，所以输入yes并回车吧！不过首先要确认这个硬盘上面没有重要 <br /><br />的数据啊！ <br /><br />现在系统会进入fdisk（一个分区程序，输入?并回车可以获得使用帮助）。首先用d命令删除原有的 <br /><br />分区（注意，c分区被OpenBSD系统保留使用，不能够删除或变更），然后用a命令新建分区，您将得 <br /><br />到和下面类似的信息： <br /><br />offset: [xxxxxx] <br /><br />size: [xxxxxxxxxx] <br /><br />Rounding to nearest cylinder: xxxxxxxx <br /><br />FS type: [4.2BSD] <br /><br />mount point: [none] <br /><br />其中，offset是指每一个分区的偏移地址。不用理会，直接回车即可，系统会自动处理。size是分区 <br /><br />的大小，括号里面是剩余的可用磁盘空间大小。可以直接用80m这样的输入来表示分区的大小为80Mb。 <br /><br />Rounding to nearest cylinder由系统返回，是转换成柱头数，不必理会。FS type是文件系统类型， <br /><br />只有4.2BSD和swap两个可选项。默认情况下，b分区会使用swap选项。swap分区建议大小为内存大小 <br /><br />的2倍。mount point相当于DOS系统的目录，系统必须有且只有一个根目录&ldquo;/&rdquo;，swap分区无需 <br /><br />mount point。 <br /><br />可以简单的把swap分区以外的全部磁盘空间定义为&ldquo;/&rdquo;，但是不建议这么做，因为一旦磁盘出现问题， <br /><br />就难于根据分区进行修复了。如果您有一个15Gb的硬盘，并且有128Mb的内存，那么建议划分如下： <br /><br />a 80m 4.2BSD / ；根目录 <br /><br />b 300m swap ；交换分区 <br /><br />d 80m 4.2BSD /tmp ；临时文件目录 <br /><br />e 800m 4.2BSD /usr ；应用程序目录 <br /><br />f 2000m 4.2BSD /var ；应用数据目录 <br /><br />g 剩余空间 4.2BSD /home ；用户目录 <br /><br />如果安装MySQL数据库服务，且要求方便管理的话，那么可以把/var/mysql单独出来一个分区（会在后 <br /><br />面提及）。 <br /><br />划分好分区之后用w命令保存分区信息，q命令退出fdisk程序。 <br /><br />The following partitions will be used for the root filesystem and swap: <br /><br />wd0a / <br /><br />wd0b swap <br /><br />Mount point for wd0d (size=98967k) [/tmp, RET, none, or done]? <br /><br />系统会再次确认目录分配，可以给粗心大意的人一个修正的机会，如果确定没有错误的话，输入done并 <br /><br />回车即可。 <br /><br />系统会提示是否对其它硬盘进行处理，如果没有其它硬盘或者不需要处理，输入done并回车继续下一个 <br /><br />步骤，如果配置其它硬盘，按照上面的步骤进行即可。注意千万不要对已经配置过的硬盘进行再配置。 <br /><br />系统询问是否进行格式化： <br /><br />The next step will overwrite any existing data on: <br /><br />wd0a wd0d wd0e wd0f wd0g <br /><br />Are you really sure that you're ready to proceed? [n] <br /><br />当然输入y并回车了，做了这么多，难道不继续吗？ <br /><br /><br /><br />第二节、配置网络 <br /><br />经过硬盘格式化之后，系统将询问是否配置网络： <br /><br />Configure the network [y] <br /><br />既然是做服务器，当然要网络支持的，回车开始配置网络。 <br /><br />Enter system hostname (short form): [] <br /><br />Enter DNS domain name: [] <br /><br />输入hostname(主机名)和domain name（域名），如果有合法的国际域名的话，就使用国际域名。先假 <br /><br />设hostname为moo，domain name为01tech.nat（避免和国际域名冲突）。 <br /><br />系统提示配置网卡，手册例子使用的是DE-530TX 10/100Mbps自适应网卡，在OpenBSD下面的设备名为vr0， <br /><br />如果是NE2000兼容网卡，可能显示为ne0,系统会自动检测并列出来： <br /><br />You may configure the following network interfaces (the interfaces <br /><br />marked with [X] have been succesfully configured): <br /><br />[ ] vr0 <br /><br />Configure which interface? (or, enter 'done') [vr0] <br /><br />在本例中，系统只有一个网卡，且已经选定，直接回车开始配置，如果没有选定，请输入设备名并回车 <br /><br />进行配置。 <br /><br />IP address (or 'dhcp') ? [] <br /><br />Symbolic (host) name? [moo] <br /><br />Netmask ? [255.255.255.0] <br /><br />在IP address中输入dhcp并回车将会使用动态分配的IP地址，作为服务器应该有固定的IP地址，所以这 <br /><br />里应该输入192.168.32.1并回车（关于IP地址和掩码的知识请参考其它文章）。Symbolic (host) name其 <br /><br />实就是hostname啦！系统会自动使用刚才输入的hostname，直接回车就可以了。Netmask（掩码）默认 <br /><br />是255.255.255.0，就用这个吧，回车继续。 <br /><br />Your use of the network interface may require non-default <br /><br />media directives. The default media is: <br /><br />media: Ethernet autoselect (100baseTX full-duplex) <br /><br />This is a list of supported media: <br /><br />media autoselect <br /><br />media 100baseTX mediaopt full-duplex <br /><br />media 100baseTX <br /><br />media 10baseT mediaopt full-duplex <br /><br />media 10baseT <br /><br />If the default is not satisfactory, and you wish to use another <br /><br />media, copy that line from above (e.g. &quot;media 100baseTX&quot;) <br /><br />Media directives? [] <br /><br />别看这么多信息，其实就做一个事，选择网卡的接入网络方式，最简单的方式就是选择media autoselect <br /><br />并回车。 <br /><br />系统会询问是否配置其它的网卡，如果系统只有一个网卡的话，会自动选定done，只需要回车即可进入下 <br /><br />一个步骤。其它网卡的配置象上面一样配置就可以了。 <br /><br />Enter IP address of default route: [none] <br /><br />Enter IP address of primary nameserver: [none] <br /><br />Would you like to use the nameserver now? [y] <br /><br />路由route不需要输入，除非要链接到不同域的机器。因为要在这台服务器上提供域名解释服务，所以 <br /><br />nameserver就指向自己吧，也就是输入192.168.32.1就可以了。至于是否现在启动nameserver就没所谓了。 <br /><br />回车继续。 <br /><br />第三节、设置管理员口令 <br /><br />Please enter the initial password that the root account will have. <br /><br />系统要求输入管理员口令，并确认一次，千万要记住啊，不然电脑重新启动之后进入不了系统进行管理。 <br /><br />这里假设口令为123456，在实际的应用中千万不要使用这样的口令，而应该采用字母、字符和数字混合 <br /><br />的口令。 <br /><br /><br /><br />第四节、安装应用程序 <br /><br />然后安装程序询问是否会运行X Window： <br /><br />Do you expect to run the X Window System? [y] <br /><br />当然不会，输入n并回车继续下一步。选择安装媒体介质。 <br /><br />Install from (f)tp, (h)ttp, (t)ape, (C)D-ROM, (N)FS or local (d)isk? <br /><br />有多种方式安装系统，我们只选择(C)，通过CD-ROM安装。 <br /><br />The following CD-ROM devices are installed on your system; <br /><br />please make <br /><br />sure the CD is in the CD-ROM drive and select the device containing <br /><br />the CD with the installation sets: <br /><br />cd0 <br /><br />Which CD-ROM contains the installation media? [cd0] <br /><br />系统将检测可用的CD-ROM，并给予选定，这里是只有一个CD-ROM的状态，如果多于一个CD-ROM的状况， <br /><br />请选择正确的放有安装光盘的CD-ROM，否则安装程序会Halt在那里，无法继续。 <br /><br />Enter the directory relative to the mount point that <br /><br />contains the file. [/2.8/i386] <br /><br />确认安装文件所在目录，如果您使用01TECH上面提供的光盘，回车确认即可。 <br /><br />The following sets are available for extraction. <br /><br />Enter filename, `list', `all', or `done'. <br /><br />You may de-select a set by prepending a '-' to its name. <br /><br />[X] base28.tgz <br /><br />[X] etc28.tgz <br /><br />[ ] misc28.tgz <br /><br />[ ] comp28.tgz <br /><br />[X] man28.tgz <br /><br />[ ] game28.tgz <br /><br />[ ] xbase28.tgz <br /><br />[ ] xshare28.tgz <br /><br />[ ] xfont28.tgz <br /><br />[ ] xserv28.tgz <br /><br />[X] bsd <br /><br />File name? [] <br /><br />因为安装服务器，我们只需要上面已经打&ldquo;X&rdquo;的的程序包，另外，因为有部分程序必须由源程序编译 <br /><br />获得，所以必须选择comp28.tgz。也就是说要有base28.tgz、etc28.tgz、comp28.tgz、man28.tgz以 <br /><br />及bsd。 <br /><br />确认这五个项前面都打&ldquo;X&rdquo;后，输入done并回车，询问： <br /><br />Ready to extract selected file sets? [y] <br /><br />当然要解包，这个问题实在有点弱智啊！ <br /><br />Extract more sets? [n] <br /><br />嗯？上帝说，再给你一个忏悔的机会？别管他，回车继续吧！ <br /><br /><br /><br />第五节、设定时区 <br /><br />然后就是选择时区： <br /><br />What timezone are you in? [`?' for list] [GMT] <br /><br />可以用?查看一下有什么可以选择的时区，不过确定没有北京时间，选香港的吧，输入Hongkong并回车。 <br /><br />系统一番自动处理之后，终于出现了命令行模式的提示符&ldquo;#&rdquo;。恭喜，OpenBSD 2.8到此安装完毕。 <br /><br />输入reboot回车，重新启动电脑吧！记住改为硬盘启动啊！现在可以歇一歇了。 <br /><br /><br /><br />����重新启动电脑之后，用root作为用户名，123456作为密码就可以登录您的OpenBSD 2.8系统了。 <br /><br /><br /><br />第二课、设置域名解释服务 <br /><br />����首先解释一下域名服务(DNS-Domain Name Server)的作用。其实，链接到网络的电脑，只需要知 <br /><br />道IP地址就可以实现访问。但是谁会去记住129.128.5.191这个IP地址是代表OpenBSD的服务器呢？当然 <br /><br />是www.openbsd.org容易记忆得多了。域名服务所实现的作用，就是把www.openbsd.org这样的名字转换 <br /><br />成电脑可以识别的129.128.5.191这样的IP地址。 <br /><br />����所以域名解释服务应当包含两种转换过程：从名字到IP地址（正向解释）；从IP地址到名字（反向 <br /><br />解释）。理解了这些基本感念，配置域名解释服务得时候就会比较容易了。 <br /><br /><br /><br />第一节、设置named.boot文件 <br /><br />����OpenBSD 2.8系统在安装完成后就已经有域名解释服务程序named 4.9.7-REL，只是需要人工设定启 <br /><br />动。named的配置文件在/var/named目录里面，文件名是named.boot。一个简单的，可以使用的（当然是 <br /><br />和手册的例子联系起来啦！）的named.boot的文件内容如下： <br /><br />directory /namedb <br /><br />cache . root.cache <br /><br />primary 0.0.127.IN-ADDR.ARPA localhost.rev <br /><br />primary 32.168.192.IN-ADDR.ARPA 01tech.rev <br /><br />primary 01tech.nat 01tech <br /><br />����可以用vi工具来编辑这个文件（vi的使用方法请参考『附录4』）。解释一下这个文件各行的含义： <br /><br />����第一行用于指定域名解释文件所在目录，其实真正的域名解释文件是放在/var/named/namedb目录里 <br /><br />面，因为我们将采用chroot的方式（执行程序的时候切换到程序需要的用户，并以改用户的根目录作为 <br /><br />根目录的方式）执行named，所以这里是/namedb。 <br /><br />����第二行指定了缓存文件，对于曾经访问过的域名，将会记录在缓存文件里面，以后查询的时候就会 <br /><br />快很多。缓存文件的文件名是root.cache。 <br /><br />����第三行指定了对于本机的域名反解文件。0.0.127.IN-ADDR.ARPA的写法其实就是说要反过来求 <br /><br />127.0.0.x（x的范围是1~255）的对应名称。相关的解释文件是localhost.rev <br /><br />����第四行和第三行同理，就是要求192.168.32.x的对应名称。相关的解释文件是01tech.rev <br /><br />����第五行是正解，指定凡是域名为01tech.nat的名称都交给01tech文件进行解释。 <br /><br /><br /><br />第二节、配置域名解释文件 <br /><br />����然后，我们看看/var/namedb目录里面的文件的内容，在系统没有配置域名解释服务的时候，默认 <br /><br />只有两个文件：localhost.rev和root.cache，其中的localhost.rev并非我们需要的内容，要自行改写， <br /><br />改写后的内容如下： <br /><br />@ IN SOA moo.01tech.nat. root.moo.01tech.nat. ( <br /><br />14 ;Serial <br /><br />3600 ;Refresh <br /><br />900 ;Retry <br /><br />3600000 ;Expire <br /><br />3600) ;Minimum <br /><br />IN NS moo.01tech.nat. <br /><br />1 IN PTR localhost. <br /><br />����解释一下这个文件的构成吧！其实这个文件由三个RR(Resource record)构成，或者我们用表格的 <br /><br />方式来分析，会比较容易理解吧： <br /><br />[ name ] [ ttl ] [ class ] type data <br /><br />@ 省略 IN SOA &hellip;&hellip; <br /><br />省略 省略 IN NS &hellip;&hellip; <br /><br />1 省略 IN PTR &hellip;&hellip; <br /><br />Name必须为主机名或者域名，当使用@时代表缩写，就是和named.boot文件中指定的一样，在这里就代 <br /><br />表127.0.0.x了。 <br /><br />ttl是指此条数据的有效保存期限，通常都忽略掉，采用默认的ttl值。 <br /><br />class指定网络类型，IN代表Internet，基本上都不会使用别的类型。 <br /><br />type常见的有SOA、NS、A、PTR、MX、CNAME等。 <br /><br />SOA(Start Of Authority)后面跟负责这个域的主机，管理员邮箱，序列号，副解释域更新间隔，副解 <br /><br />释域更新失败重试间隔，主解释域失败时副解释域提供数据的有效期限，其它域名解释服务器保留本域 <br /><br />名解释服务器的时间。需要注意的是，在主机和管理员邮箱后一定不能缺少&ldquo;.&rdquo;否则系统会自动加上 <br /><br />完整的域名，例如只写moo的话，系统会添加为moo.01tech.nat。所以也可以简单的把SOA语句写 <br /><br />作SOA moo root.moo (&hellip;&hellip;)。 <br /><br />NS(Name Server)后面跟指定的提供域名解释服务的主机名 <br /><br />PTR(Pointer)后面是对应于前面IP地址的名称。 <br /><br />A(Address)后面是对应于前面的名称的IP地址。需要注意正解的A和反解的PTR的记录必须相符，否则会 <br /><br />造成DNS查询不正常，系统变慢。 <br /><br />CNAME用于建立别名，这样访问别名的时候，就会转为访问正式的名称。 <br /><br />MX记录的是一串目的地址列表，用于告诉邮件服务器传送信件的优先顺序。 <br /><br />对于A、CNAME、MX的使用方法将会在后面的正解文件中看到，以后将不再作出解释。 <br /><br />����01tech.rev的文件内容和localhost.rev文件基本相同，如下： <br /><br />@ IN SOA moo.01tech.nat. root.moo.01tech.nat. ( <br /><br />14 ;Serial <br /><br />3600 ;Refresh <br /><br />900 ;Retry <br /><br />3600000 ;Expire <br /><br />3600) ;Minimum <br /><br />IN NS moo.01tech.nat. <br /><br />1 IN PTR moo.01tech.nat. <br /><br />����01tech的内容如下： <br /><br />@ IN SOA moo.01tech.nat. root.moo.01tech.nat. ( <br /><br />14 ;Serial <br /><br />3600 ;Refresh <br /><br />900 ;Retry <br /><br />3600000 ;Expire <br /><br />3600) ;Minimum <br /><br />IN NS moo.01tech.nat. <br /><br />IN MX 5 pop.01tech.nat. <br /><br />moo IN A 192.168.32.1 <br /><br />www IN CNAME moo <br /><br />pop IN CNAME moo <br /><br />smtp IN CNAME moo <br /><br />localhost. IN CNAME moo <br /><br />01tech.nat. IN CNAME moo <br /><br />第三节、测试DNS <br /><br />����好了，说了一大堆的东西，需要好好消化，不过我们还是看看我们的DNS是否正常吧，通过以下 <br /><br />的命令启动named： <br /><br />named �Ct /var/named <br /><br />����然后用nslookup来检查DNS是否正常。以下是nslookup运行的结果，任何时候如果域名不能解释， <br /><br />通过按Ctrl+C可以中断查询。 <br /><br />nslookup <br /><br />Default Server: moo.01tech.nat <br /><br />Address: 192.168.32.1 <br /><br />&gt;pop <br /><br />Server: moo.01tech.nat <br /><br />Address: 192.168.32.1 <br /><br />Name: moo.01tech.nat <br /><br />Address: 192.168.32.1 <br /><br />Aliases: pop.01tech.nat <br /><br />&gt;exit <br /><br />����如果您完全按照手册的例子来配置您的DNS，但是查询却没有这样的结果，那么您需要重新再来， <br /><br />好好吃透上面的说明了。 <br /><br /><br /><br />第四节、在启动系统的时候自动启动DNS <br /><br />����要使系统在启动时自动启动DNS服务非常简单，修改/etc/rc.conf文件里面的相关项就可以了 <br /><br />named_flags=NO 改为 named_flags=&rdquo;&rdquo; <br /><br /><br /><br />第三课、配置数据库服务 <br /><br />����如果您不需要数据库服务可以略过本课，但是后面的课程中相当部分和本课有关，所以即使不打算 <br /><br />配置数据库服务，也应该看看本课的内容。 <br /><br />����MySQL数据库是目前最受欢迎的免费数据库，由于具有优异的效率和简洁的控制方式，所以被众多 <br /><br />的服务商采用。尽管它还有一些不足，例如不支持事务和子选择，但这些缺陷可以通过编程解决。 <br /><br />����在本手册开始写作的时候，MySQL的最新稳定版本是3.23.32，还没有OpenBSD的port（OpenBSD中的 <br /><br />每一个应用都是一个port），所以我们在手册光盘中包含了它的源代码包，并写作了本课以教导您如何 <br /><br />在OpenBSD下面编译并安装MySQL。 <br /><br /><br /><br />第一节、展开MySQL源代码包 <br /><br />����首先需要让系统可以读取光盘（因为源代码包在光盘里面啊！），方法非常简单，只需执行以下 <br /><br />的命令即可： <br /><br />mount /dev/cd0c /mnt <br /><br />����然后转入/usr/src目录，把MySQL-3.23.32的源代码包解压 <br /><br />cd /usr/src <br /><br />tar zxvf /mnt/packages/mysql-3.23.32.tar.gz <br /><br />����这样，在/usr/src目录下面就会有一个名为mysql-3.23.32的目录，里面就是MySQL-3.23.32的源 <br /><br />代码。为了继续后面的工作，我们需要进入该目录。 <br /><br />cd mysql-3.23.32 <br /><br /><br /><br />第二节、为MySQL服务程序建立所需的组和用户 <br /><br />����要正确编译和安装MySQL数据库服务程序，需要建立mysql组和属于mysql组的mysql用户。在以后 <br /><br />运行MySQL数据库服务程序的时候同样需要它们，建立的方法如下： <br /><br />groupadd mysql <br /><br />useradd �Cg mysql mysql <br /><br /><br /><br />第三节、运行配置程序 <br /><br />����因为要编译源代码必须先获得和系统相关的信息，包括编译器版本，系统支持的线程方式 <br /><br />（OpenBSD是一个支持多线程的系统）等。因此需要运行配置程序以获取这些信息。 <br /><br />./configure --prefix=/usr/local \ <br /><br />--localstatedir=/var/mysql \ <br /><br />--with-low-memory \ <br /><br />--without-bench \ <br /><br />--without-debug <br /><br />����我们解释一下配置程序里面各行的含义。./configure就是要执行的配置程序了；--prefix=/usr/local <br /><br />表示，编译后的MySQL数据库服务程序将会安装到/usr/local/bin目录当中，而库文件会安装到 <br /><br />/usr/local/lib/mysql目录中，头文件将安装到/usr/local/include目录中；--localstatedir=/var/mysql <br /><br />表示数据库所用到的数据将会安装到/var/mysql目录中（我们在安装OpenBSD的时候提到如果需要， <br /><br />可以为/var/mysql建立一个独立的分区就是这个原因，这样可以方便管理）；--with-low-memory这一 <br /><br />句至关重要，没有了它，基本上就不要指望在您的机器上面通过编译，除非您拥有超过1Gb的内存，这句 <br /><br />会指导编译程序使用交换分区作为虚拟内存；--without-bench和―without-debug告诉编译器和安装脚本 <br /><br />不需要测试程序和调试信息。 <br /><br />����好了，解释得够清楚吗？ <br /><br /><br /><br />第四节、编译和安装MySQL <br /><br />����这个步骤非常简单，只需要执行下面的命令即可，其它得事情由电脑来完成。因为编译的过程非常久， <br /><br />可以喝杯水歇一歇。 <br /><br />make <br /><br />make install <br /><br />make init-db <br /><br /><br /><br />第五节、测试MySQL <br /><br />����对不起，本节的标题有点含糊。这里的测试是指测试MySQL的编译和安装是否正常。为了测试MySQL <br /><br />是否被正确编译和安装，需要执行以下的命令： <br /><br />/usr/local/bin/safe_mysqld &gt; /dev/null &amp; <br /><br />/usr/local/bin/mysqladmin �Cu root password &lsquo;123456&rsquo; <br /><br />����如果第二条命令无声无息地结束了，那么就证明MySQL可以正常使用了。对了，第二条命令其实是更 <br /><br />改系统管理员的口令啊！那么您知道以后使用MySQL程序的时候需要的口令了吗？ <br /><br /><br /><br />第六节、让MySQL在系统启动的时候自动启动 <br /><br />����我们需要做一些工作来让MySQL在系统启动的时候自动启动。首先我们修改/etc/rc.conf文件，添加 <br /><br />以下的行： <br /><br />mysqld_flags=&rdquo;&rdquo; <br /><br />����然后，需要修改/etc/rc文件，找到启动named的代码（第171行），添加以下的代码： <br /><br />if [ &ldquo;X${mysqld_flags}&rdquo; != X&rdquo;NO&rdquo; ]; then <br /><br />echo &lsquo;starting mysqld&rsquo; <br /><br />/usr/local/bin/safe_mysqld &gt; /dev/null &amp; <br /><br />fi <br /><br />����另外，为了让其它需要用到MySQL的程序编译可以顺利通过，就需要在/etc/rc.local文件中添加以 <br /><br />下的代码： <br /><br />if [ &ldquo;X${mysqld_flags}&rdquo; != X&rdquo;NO&rdquo; ]; then <br /><br />/sbin/ldconfig �Cm /usr/local/lib/mysql <br /><br />fi <br /><br /><br /><br />第四课、配置邮件服务 <br /><br />����其实OpenBSD 2.8在系统安装完成之后，就已经安装且启动了邮件服务sendmail。我们在这里需要为 <br /><br />OpenBSD找一个比sendmail更加安全、更加容易使用和高效能的邮件服务程序，我们选择了qmail（利用 <br /><br />qmail加上vpopmail可以把系统用户和邮件用户分离，并且使用虚拟邮件域。再加上MySQL就可以实现邮件 <br /><br />用户的数据库口令校验，这是我选择qmail的原因）。 <br /><br /><br /><br />第一节、关闭sendmail <br /><br />����因为qmail作为sendmail的替代服务程序，不能和sendmail一起工作，所以必须先关闭sendmail程序。 <br /><br />执行以下的命令关闭正在执行的sendmail程序。 <br /><br />Kill �C9 `cat /var/run/sendmail.pid` <br /><br />����同时，必须把sendmail相关的链接删除，并把senmail更名 <br /><br />chmod 0 /usr/sbin/sendmail /usr/sbin/sendmail.old <br /><br />����最后还必须修改/etc/rc.conf文件，更改sendmail_flags以避免系统重新启动时sendmail自动启动。 <br /><br />sendmail_flags=&rdquo;-q 30m&rdquo; 改为 sendmail_flags=NO <br /><br /><br /><br />第二节、安装qmail <br /><br />����如果一直按照手册的例子进行练习，那么现在应该可以访问CD-ROM，如果系统曾经重新启动，那么 <br /><br />请按照第三课、第一节的内容来访问CD-ROM。 <br /><br />����进入/mnt/packages目录并安装qmail执行代码包： <br /><br />cd /mnt/packages <br /><br />pkg_add qmail-1.03.tgz <br /><br />����安装的过程中会询问是否添加一些组和用户，默认选择Y，不用改变，直接回车继续就可以了。一定 <br /><br />要记录qmaild的uid和nofiles的gid，因为在以后的课程中启动smtp和pop的时候需要它们（例如qmaild的 <br /><br />uid是2850，nofiles的gid是32750）。Qmail被安装到/var/qmail目录。 <br /><br /><br /><br />第三节、配置qmail <br /><br />����要配置和运行需要DNS正确运行，如果还没有配置DNS服务，请按照第二课的内容进行配置。 <br /><br />����首先执行以下的命令建立新的sendmail链接，以实现和sendmail的兼容： <br /><br />ln �Cs /var/qmail/bin/sendmail /usr/sbin/sendmail <br /><br />����然后建立基础的域信息，使用下面的命令来完成： <br /><br />/var/qmail/setup/config-fast 01tech.nat <br /><br />����当然，也可以通过/var/qmail/setup/config来设置基础域信息，不过既然DNS正常，为什么不使用更 <br /><br />快捷的方法呢？config的用法请参考/var/qmail/doc里面的文档。 <br /><br />����复制rc文件，并对其进行修改，让它和sendmail兼容： <br /><br />cp /var/qmail/boot/home /var/qmail/rc <br /><br />����qmail默认使用Mailbox，而sendmail默认使用Maildir，很多的程序都根据sendmail规则来编写，需 <br /><br />要使用Maildir，所以需要更改rc文件，作出以下的更改： <br /><br />Mailbox 改为 Maildir <br /><br /><br /><br />第四节、测试qmail <br /><br />����安装和配置完成之后当然要测试一下qmail的运作是否正常了，执行以下的命令启动qmail服务： <br /><br />csh �Ccf &lsquo;/var/qmail/rc &amp;&rsquo; &gt; /dev/null &amp; <br /><br />����然后使用以下的命令查看是否存在qmail-lspawn ./Maildir。如果已经存在，则证明qmail服务已经 <br /><br />正常启动，如果没有找到，就需要按照第三节的内容重新配置。 <br /><br />ps -x <br /><br /><br /><br />第五节、启动系统时自动运行qmail服务 <br /><br />����首先修改/etc/rc.conf文件，添加以下的内容： <br /><br />qmail_flags=&rdquo;&rdquo; <br /><br />����然后修改/etc/rc文件，找到sendmail的启动代码，在后面添加以下的代码： <br /><br />if [ &ldquo;X${qmail_flags}&rdquo; != X&rdquo;NO&rdquo; ]; then <br /><br />echo �Cn &lsquo; qmail&rsquo;; csh �Ccf &lsquo;/var/qmail/rc &amp;&rsquo; &gt; /dev/null &amp; <br /><br />fi <br /><br /><br /><br />第五课、分离系统用户和邮件用户 <br /><br />����我们使用vpopmail来分离系统用户和邮件用户，这样可以提高系统的安全性。而且vpopmail还可以 <br /><br />使用虚拟域名，也就是同一个IP的不同域名的邮箱。 <br /><br /><br /><br />第一节、展开源代码包 <br /><br />����进入/usr/src目录，并解压vpopmail-4.9.8源代码包，然后进入vpopmail-4.9.8目录： <br /><br />cd /usr/src <br /><br />tar zxvf /mnt/packages/vpopmail-4.9.8.tar.gz <br /><br />cd vpopmail-4.9.8 <br /><br />���� <br /><br />第二节、使用MySQL支持 <br /><br />����如果您的系统没有提供MySQL支持，请跳过这一步。 <br /><br />����修改vmysql.h文件，找到其中的一行内容为： <br /><br />#define MYSQL_PASSWORD &ldquo;gipgap&rdquo; <br /><br />����把里面的gipgap替换成为可以访问MySQL的系统管理员口令123456: <br /><br />#define MYSQL_PASSWORD &ldquo;123456&rdquo; <br /><br /><br /><br />第三节、添加组和用户 <br /><br />����编译和运行vpopmail，需要vchkpw组和属于vchkpw组的vpopmail用户。使用以下的命令添加组和用户： <br /><br />groupadd vchkpw <br /><br />useradd �Cg vchkpw vpopmail <br /><br /><br /><br />第四节、准备/etc/tcp.smtp文件 <br /><br />����要编译vpopmail需要有tcp.smtp文件，默认的存放路径是/etc目录，通过下面的命令产生该文件： <br /><br />echo &lsquo;127.0.0.:allow,RELAYCLIENT=&rdquo;&rdquo;&rsquo; &gt; /etc/tcp.smtp <br /><br /><br /><br />第五节、运行配置程序 <br /><br />����运行配置程序configure，获取编译所需的编译器，外部环境等信息： <br /><br />./configure --enable-default-domain=01tech.nat \ <br /><br />--enable-admin-email=zenz-hu@01tech.nat \ <br /><br />--enable-mysql=y \ <br /><br />--enable-sqlincdir=/usr/local \ <br /><br />--enable-sqllibdir=/usr/local \ <br /><br />--enable-large-site=y \ <br /><br />--enable-passwd=n \ <br /><br />--enable-hardquota=8000000 <br /><br />����解释一下各项的含义：--enable-default-domain=01tech.nat指定默认的邮件域是 <br /><br />01tech.nat；--enable-admin-email=zenz-hu@01tech.nat说明管理员的邮箱；--enable-mysql=y告诉编 <br /><br />译器要使用MySQL数据库作口令检查服务；--enable-sqlincdir=/usr/local和―enable-sqllibdir=/usr/local <br /><br />告诉编译器到哪里寻找MySQL的头文件和库文件；--enable-large-site=y用于把域信息保存到MySQL数据库中， <br /><br />但是如果有太多的虚拟域则不适宜采用本项；--enable-passwd=n告诉系统不在/etc/passwd口令文件中 <br /><br />查找邮箱用户的口令；--enable-hardquota=8000000限制每个用户的邮箱大小为8Mb。 <br /><br />第六节、编译并安装vpopmail <br /><br />����只需要简单的命令，即可编译并安装vpopmail： <br /><br />make <br /><br />make install-strip <br /><br />����安装后的vpopmail在/home/vpopmail目录下。 <br /><br /><br /><br />第七节、添加邮件域和更改postmaster口令 <br /><br />����现在的vpopmail还没有邮件域，即使在编译的时候指定了默认的邮件域也一样需要通过执行以下的 <br /><br />程序来添加邮件域： <br /><br />/home/vpopmail/bin/vadddomain 01tech.nat <br /><br />����系统会询问属于这个域的postmaster的口令并要求确认，输入123456作为口令吧（记住，这里使用的 <br /><br />任何口令都不应该在实际应用中出现，否则您的系统会有很大的安全问题）！ <br /><br />����如果在这个步骤出现错误提示，那么您很可能需要重新进行本课的练习了。 <br /><br />第八节、启动smtp和pop3服务 <br /><br />����要用户可以用smtp方式发送邮件以及使用pop3方式接受邮件，需要修改/etc/rc文件，在qmail启动代 <br /><br />码后面添加以下的代码： <br /><br />if [ -x /home/vpopmail/bin/vchkpw ]; then <br /><br />echo �Cn &lsquo; smtpd&rsquo; <br /><br />/usr/local/bin/tcpserver �Cu2850 �Cg32750 0 smtp \ <br /><br />/var/qmail/bin/qmail-smtpd 2&gt;&amp;1 &gt; /dev/null &amp; <br /><br />echo �Cn &lsquo; popd&rsquo; <br /><br />/usr/local/bin/tcpserver 0 pop3 \ <br /><br />/var/qmail/bin/qmail-popup pop.01tech.nat \ <br /><br />/home/vpopmail/bin/vchkpw \ <br /><br />/var/qmail/bin/qmail-pop3d Maildir &amp; <br /><br />fi <br /><br />����经过上面的修改，系统在每次重新启动之后，都会自动启动smtp和pop3服务了。 <br /><br /><br /><br />����vpopmail的管理手册在/home/vpopmail/doc目录中。</span></p>]]></description><category>FreeBSD</category><comments>http://www.7layer.cn/cat_23/408/408/408.html#comment</comments><wfw:comment>http://www.7layer.cn/</wfw:comment><wfw:commentRss>http://www.7layer.cn/feed.asp?cmt=408</wfw:commentRss><trackback:ping>http://www.7layer.cn/cmd.asp?act=tb&amp;id=408&amp;key=9eb4bd8f</trackback:ping></item><item><title>FREEBSD中使用IPFW来过滤ICMP服务</title><author>dshendry@126.com (劳动局IT培训)</author><link>http://www.7layer.cn/cat_23/407/407/407.html</link><pubDate>Thu, 17 Dec 2009 14:48:44 +0800</pubDate><guid>http://www.7layer.cn/cat_23/407/407/407.html</guid><description><![CDATA[<p><span class="postbody">FREEBSD中使用IPFW来过滤ICMP服务<br /><br /><br /><br />本文出自:http://xfocus.org/ 作者: xundi(xundi@xfocus.org)<br /><br /><br /><br />FREEBSD中可以使用IPFW来停止PING的响应，即可以调制内核和使用IPFW来拒绝 <br /><br />ICMP服务，这样别人用PING就看不到任何信息了。 <br /><br /><br /><br />先介绍下IPFW：在专用路由器系统开始流行之前，Internet上的路由器大部分 <br /><br />是基于Unix的软件路由器，其中多数是BSD Unix。显然这是由于BSD Unix在 <br /><br />Internet上占据的重要地位决定的，即便是在专用硬件路由器流行的今天， <br /><br />当由于价格等因素不能考虑硬件路由器时，BSD系统仍然是用作软件路由器的 <br /><br />首选系统。 <br /><br /><br /><br />　　由于路由器处于网络之间，所有网络间需要交换的数据包都要通过它转发， <br /><br />因此就可以进行一定的限制，即按照预定义的一定规则处理每个数据包，符合 <br /><br />要求的允许通过，不符合要求的就进行丢弃。这样路由器就能用作一个简单的 <br /><br />防火墙系统，保护内部计算机。BSD系统中最早使用ipfw过滤器来定义不同的 <br /><br />过滤规则，随后ipfw也被移植到其它平台上，并根据开发者的理解不同而独立 <br /><br />发展。当前不同系统上的ipfw已经大不相同了，并出现了具备相同功能的其它过 <br /><br />滤器， FreeBSD下的ipfw也经过了不断发展，具备了更强的过滤能力，尤其是 <br /><br />它能和natd守护进程相结合，提供网络地址转换能力，具备更完善的防火墙能力。 <br /><br /><br /><br /><br /><br />FreeBSD的包过滤能力是在内核中实现的，这样才具备最高的效率和性能。因此 <br /><br />为了在FreeBSD上使用这个防火墙功能，需要在编译内核时打开下面选项重新定 <br /><br />制内核。 <br /><br /><br /><br />这文章里需要你在内核编制中打开下面的选项： <br /><br /><br /><br />IPFIREWALL <br /><br />IPFIREWALL_VERBOSE <br /><br />&quot;IPFIREWALL_VERBOSE_LIMIT=100&quot; <br /><br />options IPFIREWALL_DEFAULT_TO_ACCEPT <br /><br /><br /><br />IPFILTER <br /><br />IPFILTER_LOG <br /><br /><br /><br />其中第一项设置IPFIREWALL是用于打开基本的包过滤支持的，只有使用它才能在 <br /><br />内核中支持包过滤。IPFIREWALL_VERBOSE 和IPFIREWALL_VERBOSE_LIMIT设置记 <br /><br />录过滤日志，及日志记录的限制。IPFIREWALL_DEFAULT_TO_ACCEPT是设置 <br /><br />IPFIREWALL的缺省行为，在数据包不符合所有的过滤规则的情况下进行转发， <br /><br />显然这是一种宽松的限制，此时系统主要用于屏蔽特定地址和特定服务，而提 <br /><br />供其它的缺省网络能力。如果没有定义这个选项，系统就只能允许符合已定义 <br /><br />规则的数据包通过，而屏蔽其它任何数据包，这样在没有定义过滤规则的情况 <br /><br />下，系统不能和其它计算机相互通信。而IPFILTER是通知内核支持ipfilter, <br /><br />IPFILTER_LOG是进行ipfilter LOG记录。 <br /><br /><br /><br />OK，再经过内核重新编译（内核编译请参看其它文章），还需要设置内核具备 <br /><br />数据包的转发能力。需要在rc.conf中设置gateway_enable 的值为YES，这样 <br /><br />就能在系统启动时自动打开包转发能力。也可以直接执行下面命令来打开内 <br /><br />核包转发能力。 <br /><br /><br /><br />好了，下面主要描述我们来拒绝ICMP的服务规则，因为测试所用，所以你可以建立 <br /><br />一个文件如(myfile)并增加下面的条目： <br /><br /><br /><br />ip=&quot;你的IP地址&quot; <br /><br />ipfw -f flush #Forces your current firewall to be flushed! <br /><br />ipfw add pass log icmp from $ip to any icmp 8 <br /><br />ipfw add pass log icmp from not $ip to $ip icmp 0 <br /><br /><br /><br />把文件保存后，并使用chmod +x myfile设置文件属性，并运行文件。 <br /><br /><br /><br />其中第一条是设置你的IP为一变量； <br /><br />第二条是flush表示强制清楚你当前防火墙的所有规则； <br /><br />对于第三，第四条，我们先来看看具体指令的意义： <br /><br /><br /><br />add是增加规则，而pass指令是这条规则的处理指令，类似allow,而log <br /><br />是记录指令，这个指令和其它指令不同，其它指令是对数据包进行处理的 <br /><br />指令，而log只是记录这个数据包，而数据包本身还将继续受到其它过滤 <br /><br />规则的处理，而icmp栏本身是过滤规则中规定数据包的协议类型，指定规 <br /><br />则是用于处理哪种数据包的，FreeBSD可以处理TCP,UCP,ICMP 类型的数据， <br /><br />以及在/etc/protocols文件中定义的其它数据包的类型，上例中指定类型 <br /><br />是ICMP，因为我们要对ICMP进行处理，而from $ip to any是规定过滤规则 <br /><br />适用的地址范围，这可以通过指定源和目的计算机的IP地址范围或数据包 <br /><br />通过的网络界面来进行指定： <br /><br /><br /><br />--用from规定数据包的来源地址，可以是主机地址或网络； <br /><br />--用to规定数据包的目的地址，可以是主机地址或网络； <br /><br />--用in或out规定数据包是流向本机，还是向外发送的； <br /><br /><br /><br />所以第三条的规则意思是允许你使用到任何地址使用icmptype 8,echo-request, <br /><br />而第四条是你获得icmptype 0,echo-reponse信息，但阻止你发送echo-reponse. <br /><br /><br /><br />这上面的示例能比较好的阻止一些端口扫描器的扫描，因为多数端口一般开始使用 <br /><br />ping来查看是否主机在线，但上面我们的traceroute就不能工作了，traceroute <br /><br />先发送UDP信息包并等待icmp包返回，因此下面的规则是阻止入站的icmp type 8, <br /><br />但允许所需要的icmp类型入站来进行traceroute的tracing(追踪）： <br /><br /><br /><br />参照下面的列表： <br /><br />0 echo-reply ping <br /><br />3 destination-unreachable Any TCP/UDP traffic. (目标主机不可达） <br /><br />5 redirect routing if not running routing daemon （如没有有运行routing <br /><br />守护程序复位向routing) <br /><br />8 echo-request ping <br /><br />11 time-exceeded traceroute （traceroute超时) <br /><br />当然icmp还有其它类型，请参看Request for Comments: 792 <br /><br /><br /><br /><br /><br />1, ipfw add pass log udp from $ip to any <br /><br />2, ipfw add pass log icmp from $ip to any icmp 8 <br /><br />3, ipfw add pass log icmp from not $ip to any icmp 0 <br /><br />4, ipfw add pass log icmp from not $ip to any icmp 11 <br /><br />5, ipfw add pass log icmp from not $ip to any icmp 3 <br /><br /><br /><br />上面的规则4是接受icmp type 11但拒绝你发送，规则5是接受icmp type 3，但 <br /><br />拒绝你发送icmp type 3的信息。 <br /><br /><br /><br />按照上面的规则并进行测试，你可以traceroutes和ping目标主机防火墙规则能 <br /><br />接受它们的回应，而你可以让你朋友traceroute/ping你的目标主机，但他讲不会 <br /><br />得到任何回应或者出现超时错。 <br /><br /><br /><br /><br /><br />总结：icmp和其它协议不同之处是icmp过滤使用类型而不使用端口，一般应用程序 <br /><br />可以使用端口来增加过滤功能，但icmp是用类型类规定进出站的信息，如&quot;echo-request&quot; <br /><br />是入站信息而&quot;echo-response&quot;是出站信息，这样就可以对信息进行过滤。 <br /><br /><br /><br />具体一般协议的规则使用方法是在目标和源地址后面进行端口规定，如： <br /><br /><br /><br />ipfw add pass tcp from any [要规则处理的端口] to $ip [要规则处理的端口] <br /><br /><br /><br />而ICMP是定义要规则处理的协议，如： <br /><br /><br /><br />ipfw add pass icmp from any to $ip [要规则处理的协议] <br /><br /><br /><br />最后如果你有其它规则加入此文件增加过滤能力，你如果要在FREEBSD启动时候 <br /><br />加入这些规则，FREEBSD有rc.firewall文件进行启动处理，只要把这些规则加入 <br /><br />rc.firewall后就能自动进行处理。 <br /><br /><br /><br />参考文章： <br /><br /><a href="http://www.freebsdrocks.com/show.php3?ThisArticleID=6197&amp;start=1&amp;s" target="_blank">http://www.freebsdrocks.com/show.php3?ThisArticleID=6197&amp;start=1&amp;s</a> <br /><br />Return=25&amp;search_category=8&amp;search_criteria=&amp;search_field= <br /><br /><a href="http://freebsd.online.ha.cn/focus/FreeBSD/index.shtml" target="_blank">http://freebsd.online.ha.cn/focus/FreeBSD/index.shtml</a> <br /><br />Request for Comments: 792</span></p>]]></description><category>FreeBSD</category><comments>http://www.7layer.cn/cat_23/407/407/407.html#comment</comments><wfw:comment>http://www.7layer.cn/</wfw:comment><wfw:commentRss>http://www.7layer.cn/feed.asp?cmt=407</wfw:commentRss><trackback:ping>http://www.7layer.cn/cmd.asp?act=tb&amp;id=407&amp;key=89a8129d</trackback:ping></item><item><title>SSH使用指南 </title><author>dshendry@126.com (劳动局IT培训)</author><link>http://www.7layer.cn/cat_23/406/406/406.html</link><pubDate>Thu, 17 Dec 2009 14:46:50 +0800</pubDate><guid>http://www.7layer.cn/cat_23/406/406/406.html</guid><description><![CDATA[<p><span class="postbody">介绍SSH <br />什么是SSH？ <br />传统的网络服务程序，如：ftp、pop和telnet在本质上都是不安全的，因为它们在网络上用明文传送口令和数据，别有用心的人非常容易就可以截获这些口令和数据。而且，这些服务程序的安全验证方式也是有其弱点的，就是很容易受到&ldquo;中间人&rdquo;（man-in-the-middle）这种方式的攻击。所谓&ldquo;中间人&rdquo;的攻击方式，就是&ldquo;中间人&rdquo;冒充真正的服务器接收你的传给服务器的数据，然后再冒充你把数据传给真正的服务器。服务器和你之间的数据传送被&ldquo;中间人&rdquo;一转手做了手脚之后，就会出现很严重的问题。 <br /><br />SSH的英文全称是Secure SHell。通过使用SSH，你可以把所有传输的数据进行加密，这样&ldquo;中间人&rdquo;这种攻击方式就不可能实现了，而且也能够防止DNS和IP欺骗。还有一个额外的好处就是传输的数据是经过压缩的，所以可以加快传输的速度。SSH有很多功能，它既可以代替telnet，又可以为ftp、pop、甚至ppp提供一个安全的&ldquo;通道&rdquo;。 <br /><br />最初SSH是由芬兰的一家公司开发的。但是因为受版权和加密算法的限制，现在很多人都转而使用OpenSSH。OpenSSH是SSH的替代软件，而且是免费的，可以预计将来会有越来越多的人使用它而不是SSH。 <br /><br />SSH是由客户端和服务端的软件组成的，有两个不兼容的版本分别是：1.x和2.x。用SSH 2.x的客户程序是不能连接到SSH 1.x的服务程序上去的。OpenSSH 2.x同时支持SSH 1.x和2.x。 <br /><br />SSH的安全验证是如何工作的 <br />从客户端来看，SSH提供两种级别的安全验证。 <br /><br />第一种级别（基于口令的安全验证）只要你知道自己帐号和口令，就可以登录到远程主机。所有传输的数据都会被加密，但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器，也就是受到&ldquo;中间人&rdquo;这种方式的攻击。 <br /><br />第二种级别（基于密匙的安全验证）需要依靠密匙，也就是你必须为自己创建一对密匙，并把公用密匙放在需要访问的服务器上。如果你要连接到SSH服务器上，客户端软件就会向服务器发出请求，请求用你的密匙进行安全验证。服务器收到请求之后，先在你在该服务器的家目录下寻找你的公用密匙，然后把它和你发送过来的公用密匙进行比较。如果两个密匙一致，服务器就用公用密匙加密&ldquo;质询&rdquo;（challenge）并把它发送给客户端软件。客户端软件收到&ldquo;质询&rdquo;之后就可以用你的私人密匙解密再把它发送给服务器。 <br /><br />用这种方式，你必须知道自己密匙的口令。但是，与第一种级别相比，第二种级别不需要在网络上传送口令。 <br /><br />第二种级别不仅加密所有传送的数据，而且&ldquo;中间人&rdquo;这种攻击方式也是不可能的（因为他没有你的私人密匙）。但是整个登录的过程可能需要10秒。 <br /><br />安装并测试OpenSSH <br />因为受到美国法律的限制，在很多Linux的发行版中都没有包括OpenSSH。但是，可以从网络上下载并安装OpenSSH（有关OpenSSH的安装和配置请参考：http://www.linuxaid.com.cn/engineer/brimmer/html/OpenSSH.htm）。 <br /><br />安装完OpenSSH之后，用下面命令测试一下： <br /><br />ssh -l [your accountname on the remote host] [address of the remote host] <br /><br />如果OpenSSH工作正常，你会看到下面的提示信息： <br /><br />The authenticity of host [hostname] can't be established. <br />Key fingerprint is 1024 5f:a0:0b:65:d3:82:df:ab:44:62:6d:98:9c:fe:e9:52. <br />Are you sure you want to continue connecting (yes/no)? <br /><br />OpenSSH告诉你它不知道这台主机，但是你不用担心这个问题，因为你是第一次登录这台主机。键入&ldquo;yes&rdquo;。这将把这台主机的&ldquo;识别标记&rdquo;加到&ldquo;~/.ssh/know_hosts&rdquo;文件中。第二次访问这台主机的时候就不会再显示这条提示信息了。 <br /><br />然后，SSH提示你输入远程主机上你的帐号的口令。输入完口令之后，就建立了SSH连接，这之后就可以象使用telnet那样使用SSH了。 <br /><br />SSH的密匙 <br />生成你自己的密匙对 <br />生成并分发你自己的密匙有两个好处： <br /><br />1) 可以防止&ldquo;中间人&rdquo;这种攻击方式 <br /><br />2) 可以只用一个口令就登录到所有你想登录的服务器上 <br /><br />用下面的命令可以生成密匙： <br /><br />ssh-keygen <br /><br />如果远程主机使用的是SSH 2.x就要用这个命令： <br /><br />ssh-keygen �Cd <br /><br />在同一台主机上同时有SSH1和SSH2的密匙是没有问题的，因为密匙是存成不同的文件的。 <br /><br />ssh-keygen命令运行之后会显示下面的信息： <br /><br />Generating RSA keys: ............................ooooooO......ooooooO <br />Key generation complete. <br />Enter file in which to save the key (/home/[user]/.ssh/identity): <br />[按下ENTER就行了] <br />Created directory '/home/[user]/.ssh'. <br />Enter passphrase (empty for no passphrase): <br />[输入的口令不会显示在屏幕上] <br />Enter same passphrase again: <br />[重新输入一遍口令，如果忘记了口令就只能重新生成一次密匙了] <br />Your identification has been saved in /home/[user]/.ssh/identity. <br />[这是你的私人密匙] <br />Your public key has been saved in /home/[user]/.ssh/identity.pub. <br />The key fingerprint is: 2a:dc:71:2f:27:84:a2:e4:a1:1e:a9:63:e2:fa:a5:89 [user]@[local machine] <br /><br />&ldquo;ssh-keygen �Cd&rdquo;做的是几乎同样的事，但是把一对密匙存为（默认情况下）&ldquo;/home/[user]/.ssh/id_dsa&rdquo;（私人密匙）和&ldquo;/home/[user]/.ssh/id_dsa.pub&rdquo;（公用密匙）。 <br /><br />现在你有一对密匙了：公用密匙要分发到所有你想用ssh登录的远程主机上去；私人密匙要好好地保管防止别人知道你的私人密匙。用&ldquo;ls �Cl ~/.ssh/identity&rdquo;或&ldquo;ls �Cl ~/.ssh/id_dsa&rdquo;所显示的文件的访问权限必须是&ldquo;-rw-------&rdquo;。 <br /><br />如果你怀疑自己的密匙已经被别人知道了，不要迟疑马上生成一对新的密匙。当然，你还要重新分发一次公用密匙。 <br /><br />分发公用密匙 <br />在每一个你需要用SSH连接的远程服务器上，你要在自己的家目录下创建一个&ldquo;.ssh&rdquo;的子目录，把你的公用密匙&ldquo;identity.pub&rdquo; 拷贝到这个目录下并把它重命名为&ldquo;authorized_keys&rdquo;。然后执行： <br /><br />chmod 644 .ssh/authorized_keys <br /><br />这一步是必不可少的。如果除了你之外别人对&ldquo;authorized_keys&rdquo;文件也有写的权限，SSH就不会工作。 <br /><br />如果你想从不同的计算机登录到远程主机，&ldquo;authorized_keys&rdquo;文件也可以有多个公用密匙。在这种情况下，必须在新的计算机上重新生成一对密匙，然后把生成的&ldquo;identify.pub&rdquo;文件拷贝并粘贴到远程主机的&ldquo;authorized_keys&rdquo;文件里。当然在新的计算机上你必须有一个帐号，而且密匙是用口令保护的。有一点很重要，就是当你取消了这个帐号之后，别忘了把这一对密匙删掉。 <br /><br />配置SSH <br />配置客户端的软件 <br />OpenSSH有三种配置方式：命令行参数、用户配置文件和系统级的配置文件（&ldquo;/etc/ssh/ssh_config&rdquo;）。命令行参数优先于配置文件，用户配置文件优先于系统配置文件。所有的命令行的参数都能在配置文件中设置。因为在安装的时候没有默认的用户配置文件，所以要把&ldquo;/etc/ssh/ssh_config&rdquo;拷贝并重新命名为&ldquo;~/.ssh/config&rdquo;。 <br /><br />标准的配置文件大概是这样的： <br /><br />[lots of explanations and possible options listed] <br /># Be paranoid by default <br />Host * <br />ForwardAgent no <br />ForwardX11 no <br />FallBackToRsh no <br /><br />还有很多选项的设置可以用&ldquo;man ssh&rdquo;查看&ldquo;CONFIGURATION FILES&rdquo;这一章。 <br /><br />配置文件是按顺序读取的。先设置的选项先生效。 <br /><br />假定你在www.foobar.com上有一个名为&ldquo;bilbo&rdquo;的帐号。而且你要把&ldquo;ssh-agent&rdquo;和&ldquo;ssh-add&rdquo;结合起来使用并且使用数据压缩来加快传输速度。因为主机名太长了，你懒得输入这么长的名字，用&ldquo;fbc&rdquo;作为&ldquo;www.foobar.com&rdquo;的简称。你的配置文件可以是这样的： <br /><br />Host *fbc <br />HostName <a href="http://www.foobar.com/" target="_blank">www.foobar.com</a> <br />User bilbo <br />ForwardAgent yes <br />Compression yes <br /># Be paranoid by default <br />Host * <br />ForwardAgent no <br />ForwardX11 no <br />FallBackToRsh no <br /><br />你输入&ldquo;ssh fbc&rdquo;之后，SSH会自动地从配置文件中找到主机的全名，用你的用户名登录并且用&ldquo;ssh-agent&rdquo;管理的密匙进行安全验证。这样很方便吧！ <br /><br />用SSH连接到其它远程计算机用的还是&ldquo;paranoid（偏执）&rdquo;默认设置。如果有些选项没有在配置文件或命令行中设置，那么还是使用默认的&ldquo;paranoid&rdquo;设置。 <br /><br />在我们上面举的那个例子中，对于到www.foobar.com的SSH连接：&ldquo;ForwardAgent&rdquo;和&ldquo;Compression&rdquo;被设置为&ldquo;Yes&rdquo;；其它的设置选项（如果没有用命令行参数）&ldquo;ForwardX11&rdquo;和&ldquo;FallBackToRsh&rdquo;都被设置成&ldquo;No&rdquo;。 <br /><br />其它还有一些需要仔细看一看的设置选项是： <br /><br />l CheckHostIP yes <br /><br />这个选项用来进行IP地址的检查以防止DNS欺骗。 <br /><br />l CompressionLevel <br /><br />压缩的级别从&ldquo;1&rdquo;（最快）到&ldquo;9&rdquo;（压缩率最高）。默认值为&ldquo;6&rdquo;。 <br /><br />l ForwardX11 yes <br /><br />为了在本地运行远程的X程序必须设置这个选项。 <br /><br />l LogLevel DEBUG <br /><br />当SSH出现问题的时候，这选项就很有用了。默认值为&ldquo;INFO&rdquo;。 <br /><br />配置服务端的软件 <br />SSH服务器的配置使用的是&ldquo;/etc/ssh/sshd_config&rdquo;配置文件，这些选项的设置在配置文件中已经有了一些说明而且用&ldquo;man sshd&rdquo;也可以查看帮助。请注意OpenSSH对于SSH 1.x和2.x没有不同的配置文件。 <br /><br />在默认的设置选项中需要注意的有： <br /><br />l PermitRootLogin yes <br /><br />最好把这个选项设置成&ldquo;PermitRootLogin without-password&rdquo;，这样&ldquo;root&rdquo;用户就不能从没有密匙的计算机上登录。把这个选项设置成&ldquo;no&rdquo;将禁止&ldquo;root&rdquo;用户登录，只能用&ldquo;su&rdquo;命令从普通用户转成&ldquo;root&rdquo;。 <br /><br />l X11Forwarding no <br /><br />把这个选项设置成&ldquo;yes&rdquo;允许用户运行远程主机上的X程序。就算禁止这个选项也不能提高服务器的安全因为用户可以安装他们自己的转发器（forwarder），请参看&ldquo;man sshd&rdquo;。 <br /><br />l PasswordAuthentication yes <br /><br />把这个选项设置为&ldquo;no&rdquo;只允许用户用基于密匙的方式登录。这当然会给那些经常需要从不同主机登录的用户带来麻烦，但是这能够在很大程度上提高系统的安全性。基于口令的登录方式有很大的弱点。 <br /><br />l # Subsystem /usr/local/sbin/sftpd <br /><br />把最前面的＃号去掉并且把路径名设置成&ldquo;/usr/bin/sftpserv&rdquo;，用户就能使用&ldquo;sftp&rdquo;（安全的FTP）了（sftpserv在sftp软件包中）。因为很多用户对FTP比较熟悉而且&ldquo;scp&rdquo;用起来也有一些麻烦，所以&ldquo;sftp&rdquo;还是很有用的。而且2.0.7版本以后的图形化的ftp工具&ldquo;gftp&rdquo;也支持&ldquo;sftp&rdquo;。 <br /><br />拷贝文件 <br />用&ldquo;scp&rdquo;拷贝文件 <br />SSH提供了一些命令和shell用来登录远程服务器。在默认情况下它不允许你拷贝文件，但是还是提供了一个&ldquo;scp&rdquo;命令。 <br /><br />假定你想把本地计算机当前目录下的一个名为&ldquo;dumb&rdquo;的文件拷贝到远程服务器www.foobar.com上你的家目录下。而且你在远程服务器上的帐号名为&ldquo;bilbo&rdquo;。可以用这个命令： <br /><br />scp dumb <a href="mailto:bilbo@www.foobar.com">bilbo@www.foobar.com</a>:. <br /><br />把文件拷贝回来用这个命令： <br /><br />scp <a href="mailto:bilbo@www.foobar.com">bilbo@www.foobar.com</a>:dumb . <br /><br />&ldquo;scp&rdquo;调用SSH进行登录，然后拷贝文件，最后调用SSH关闭这个连接。 <br /><br />如果在你的&ldquo;~/.ssh/config&rdquo;文件中已经为www.foobar.com做了这样的配置： <br /><br />Host *fbc <br />HostName <a href="http://www.foobar.com/" target="_blank">www.foobar.com</a> <br />User bilbo <br />ForwardAgent yes <br /><br />那么你就可以用&ldquo;fbc&rdquo;来代替&ldquo;bilbo@www.foobar.com&rdquo;，命令就简化为&ldquo;scp dumb fbc:.&rdquo;。 <br /><br />&ldquo;scp&rdquo;假定你在远程主机上的家目录为你的工作目录。如果你使用相对目录就要相对于家目录。 <br /><br />用&ldquo;scp&rdquo;命令的&ldquo;-r&rdquo;参数允许递归地拷贝目录。&ldquo;scp&rdquo;也可以在两个不同的远程主机之间拷贝文件。 <br /><br />有时候你可能会试图作这样的事：用SSH登录到www.foobar.com上之后，输入命令&ldquo;scp [local machine]:dumb .&rdquo;想用它把本地的&ldquo;dumb&rdquo;文件拷贝到你当前登录的远程服务器上。这时候你会看到下面的出错信息： <br /><br />ssh: secure connection to [local machine] refused <br /><br />之所以会出现这样的出错信息是因为你运行的是远程的&ldquo;scp&rdquo;命令，它试图登录到在你本地计算机上运行的SSH服务程序&hellip;&hellip;所以最好在本地运行&ldquo;scp&rdquo;除非你的本地计算机也运行SSH服务程序。 <br /><br />用&ldquo;sftp&rdquo;拷贝文件 <br />如果你习惯使用ftp的方式拷贝文件，可以试着用&ldquo;sftp&rdquo;。&ldquo;sftp&rdquo;建立用SSH加密的安全的FTP连接通道，允许使用标准的ftp命令。还有一个好处就是&ldquo;sftp&rdquo;允许你通过&ldquo;exec&rdquo;命令运行远程的程序。从2.0.7版以后，图形化的ftp客户软件&ldquo;gftp&rdquo;就支持&ldquo;sftp&rdquo;。 <br /><br />如果远程的服务器没有安装sftp服务器软件&ldquo;sftpserv&rdquo;，可以把&ldquo;sftpserv&rdquo;的可执行文件拷贝到你的远程的家目录中（或者在远程计算机的$PATH环境变量中设置的路径）。&ldquo;sftp&rdquo;会自动激活这个服务软件，你没有必要在远程服务器上有什么特殊的权限。 <br /><br />用&ldquo;rsync&rdquo;拷贝文件 <br />&ldquo;rsync&rdquo;是用来拷贝、更新和移动远程和本地文件的一个有用的工具，很容易就可以用&ldquo;-e ssh&rdquo;参数和SSH结合起来使用。&ldquo;rsync&rdquo;的一个优点就是，不会拷贝全部的文件，只会拷贝本地目录和远程目录中有区别的文件。而且它还使用很高效的压缩算法，这样拷贝的速度就很快。 <br /><br />用&ldquo;加密通道&rdquo;的ftp拷贝文件 <br />如果你坚持要用传统的FTP客户软件。SSH可以为几乎所有的协议提供&ldquo;安全通道&rdquo;。FTP是一个有一点奇怪的协议（例如需要两个端口）而且不同的服务程序和服务程序之间、客户程序和客户程序之间还有一些差别。 <br /><br />实现&ldquo;加密通道&rdquo;的方法是使用&ldquo;端口转发&rdquo;。你可以把一个没有用到的本地端口（通常大于1000）设置成转发到一个远程服务器上，然后只要连接本地计算机上的这个端口就行了。有一点复杂是吗？ <br /><br />其实一个基本的想法就是，转发一个端口，让SSH在后台运行，用下面的命令： <br /><br />ssh [user@remote host] -f -L 1234:[remote host]:21 tail -f /etc/motd <br /><br />接着运行FTP客户，把它设置到指定的端口： <br /><br />lftp -u [username] -p 1234 localhost <br /><br />当然，用这种方法很麻烦而且很容易出错。所以最好使用前三种方法。 <br /><br />用SSH设置&ldquo;加密通道&rdquo; <br />&ldquo;加密通道&rdquo;的基础知识 <br />SSH的&ldquo;加密通道&rdquo;是通过&ldquo;端口转发&rdquo;来实现的。你可以在本地端口（没有用到的）和在远程服务器上运行的某个服务的端口之间建立&ldquo;加密通道&rdquo;。然后只要连接到本地端口。所有对本地端口的请求都被SSH加密并且转发到远程服务器的端口。当然只有远程服务器上运行SSH服务器软件的时候&ldquo;加密通道&rdquo;才能工作。可以用下面命令检查一些远程服务器是否运行SSH服务： <br /><br />telnet [full name of remote host] 22 <br /><br />如果收到这样的出错信息： <br /><br />telnet: Unable to connect to remote host: Connection refused <br /><br />就说明远程服务器上没有运行SSH服务软件。 <br /><br />端口转发使用这样的命令语法： <br /><br />ssh -f [username@remote host] -L [local port]:[full name of remote host]:[remote port] [some command] <br /><br />你不仅可以转发多个端口而且可以在&ldquo;~/.ssh/config&rdquo;文件中用&ldquo;LocalForward&rdquo;设置经常使用的一些转发端口。 <br /><br />为POP加上&ldquo;加密通道&rdquo; <br />你可以用POP协议从服务器上取email。为POP加上&ldquo;加密通道&rdquo;可以防止POP的密码被网络监听器（sniffer）监听到。还有一个好处就是SSH的压缩方式可以让邮件传输得更快。 <br /><br />假定你在pop.foobar.com上有一个POP帐号，你的用户名是&ldquo;bilbo&rdquo;你的POP口令是&ldquo;topsecret&rdquo;。用来建立SSH&ldquo;加密通道&rdquo;的命令是： <br /><br />ssh -f -C <a href="mailto:bilbo@pop.foobar.com">bilbo@pop.foobar.com</a> -L 1234:pop.foobar.com:110 sleep 5 <br /><br />（如果要测试，可以把&ldquo;sleep&rdquo;的值加到500）。运行这个命令之后会提示你输入POP口令： <br /><br /><a href="mailto:bilbo@pop.foobar.com">bilbo@pop.foobar.com</a>'s password: <br /><br />输入口令之后就可以用&ldquo;telnet&rdquo;连接到本地的转发端口了。 <br /><br />telnet localhost 1234 <br /><br />你会收到远程mail服务器的&ldquo;READY&rdquo;消息。 <br /><br />当然，这个方法要求你手工输入所有的POP命令，这是很不方便的。可以用Fetchmail（参考how to configure Fetchmail）。Secure POP via SSH mini-HOWTO、man fetchmail和在&ldquo;/usr/doc/fetchmail-[&hellip;]&rdquo;目录下的Fetchmail的FAQ都提供了一些具体的例子。 <br /><br />请注意IMAP协议使用的是不同的端口：IMAP v2的端口号为143而IMAP v3的端口号为220。 <br /><br />为X加上&ldquo;加密通道&rdquo; <br />如果你打算在本地计算机上运行远程SSH服务器上的X程序，那么登录到远程的计算机上，创建一个名为&ldquo;~/.ssh/environment&rdquo;的文件并加上这一行： <br /><br />XAUTHORITY=/home/[remote user name]/.Xauthority <br /><br />（如果在远程主机上你的家目录下不存在&ldquo;.Xauthority&rdquo;这个文件，那么当用SSH登录的时候就会自动创建）。 <br /><br />比如启动一个X程序（xterm）可以这个命令： <br /><br />ssh -f -X -l [remote user name] [remote machine] xterm <br /><br />这将在远程运行xterm这个程序。其它的X程序也是用相同的方法。 <br /><br />为linuxconf加上&ldquo;加密通道&rdquo; <br />Linuxconf是Linux的配置工具，它支持远程管理。Linuxconf的FAQ重说明了如何通过SSH使用linuxconf： <br /><br />其命令为： <br /><br />remadmin --exec [link_command] linuxconf --guiproto <br /><br />如果你想在两台计算机之间用加密的方式传送信息，那么最好用ssh。命令是： <br /><br />remadmin --exec ssh -l [account] linuxconf --guiproto <br /><br />这是非常有效的而且运行用图形界面管理计算机。 <br /><br />这种方法需要在客户端安装linuxconf。其它的方法还有直接登录到服务器上用&ldquo;X11Forwarding&rdquo;或字符界面运行linuxconf。 <br /><br />为Webmin加上&ldquo;加密通道&rdquo; <br />Webmin是一个新的基于浏览器的配置工具。它运行在1000端口。你可以用SSH的&ldquo;端口转发&rdquo;对它进行加密： <br /><br />ssh -f -l [remote user name] [remote host] -L 1234:[remote host]:10000 tail -f /etc/motd <br /><br />把浏览器指向 <br /><br /><a href="http://localhost:1234/" target="_blank">http://localhost:1234</a> <br /><br />版权说明 <br />这篇文章翻译和改编自：http://www.mandrakeuser.org/secure/index.html。英文版的版权属于&ldquo;MandrakeSoft SA and LSTB 1999/2000&rdquo;。</span></p>]]></description><category>FreeBSD</category><comments>http://www.7layer.cn/cat_23/406/406/406.html#comment</comments><wfw:comment>http://www.7layer.cn/</wfw:comment><wfw:commentRss>http://www.7layer.cn/feed.asp?cmt=406</wfw:commentRss><trackback:ping>http://www.7layer.cn/cmd.asp?act=tb&amp;id=406&amp;key=6faa764f</trackback:ping></item><item><title>vsftpd的虚拟用户配置：PAM + PgSQL + FreeBSD-4</title><author>dshendry@126.com (劳动局IT培训)</author><link>http://www.7layer.cn/cat_23/405/405/405.html</link><pubDate>Thu, 17 Dec 2009 14:45:03 +0800</pubDate><guid>http://www.7layer.cn/cat_23/405/405/405.html</guid><description><![CDATA[<p><span class="postbody">vsftpd的虚拟用户配置：PAM + PgSQL + FreeBSD-4 <br />(1.0beta，欢迎debug，本人也会随时更新) <br />vsftpd可能是世界上最好的ftpd。它在linux世界非常流行，安全，性能高。 <br />本文的目的是让PgSQL存储你的vsftp的虚拟用户和密码，通过一个叫做pam的东东来认证。 <br /><br /><span style="font-weight: bold">零、简述PAM原理。</span> <br /><span style="font-style: italic">如果你已经对pam有所了解，请跳过，我知道的可能还不如你多。你不感兴趣也请跳过，因为不看这个也可配置。</span> <br /></span><table cellspacing="1" cellpadding="3" width="90%" align="center" border="0">    <tbody>        <tr>            <td><span class="genmed"><b>代码:</b></span></td>        </tr>        <tr>            <td class="code"><br />            用户 &lt;-&gt; vsftpd &lt;-&gt; PAM模块 &lt;-&gt; 用户和密码数据库 <br />            &nbsp;</td>        </tr>    </tbody></table><span class="postbody"><br />vsftpd用了一种很聪明同时也是unix/linux规范的方法来认证用户，就是PAM。大家对于PAM，也许有些陌生，但是一直在用。所谓PAM，英文是：Pluggable Authentication Modules，可拔插认证模块(不知道这样翻译对不对)。看见plug这个关键字，就知道是很灵活的。 <br />现在几乎所有daemon程序一般都是用PAM来进行认证的，包括telnet/sshd/imapd，甚至你的login，都是用PAM。在fbsd 4上的朋友，你可以打ps -ax|grep pam，你会发现login了多少个控制台，就会有多少个写着pam的进程。 <br /><br />PAM的最大好处是灵活。它不管你的用户和密码用什么数据格式存储（数据库也好，通常用的密码文件也好），只要有相应的PAM模块就可以存储。比如说，大家不仅可以用vsftpd + PgSQL做用户登陆验证，只要你喜欢你还可以用MySQL，Oracle，LDAP数据库存储用户数据，只要有相应的PAM就可以。所有的daemon都可以用一个后台数据库来做用户验证登陆，包括telnet/sshd等等。 <br /><br />pam的配置机制在不同版本的freebsd上有差异。 <br />freebsd-4放在/etc/pam.conf，一个文件记录所有pam服务。 <br />freebsd-5放在/etc/pam.d，/usr/local/etc/pam.d。每个pam服务由一个独立的文件记录。 <br /><br />本文不打算详细叙述PAM的配置。PAM的配置不是很难，毕竟，只是要你配置一些参数，不是叫你开发一个pam模块出来。而且本文的篇幅所限，偶刚刚知道的一点东西希望能够起到抛砖引玉的作用。等偶对pam再玩得深入和熟一点的时候，再写一篇关于深入一点关于pam的东东？ <br /><br /><span style="font-weight: bold">准备开始：提要</span> <br />简单讲讲要用到的配置文件的作用。 <br /></span><table cellspacing="1" cellpadding="3" width="90%" align="center" border="0">    <tbody>        <tr>            <td><span class="genmed"><b>引用:</b></span></td>        </tr>        <tr>            <td class="quote"><br />            /etc/pam.conf #pam服务的配置 <br />            /etc/pam_pgsql.conf #pam_pgsql.so的配置 <br />            /usr/local/etc/vsftpd.conf #vsftpd的配置 <br />            &nbsp;</td>        </tr>    </tbody></table><span class="postbody"><br /><br /><span style="font-weight: bold">一、安装vsftpd，PostgreSQL，pam_pgsql。</span> <br /><span style="color: red">我都是使用port来安装的，请大家用port/package来安装，不要自己下载源码来编译，否则可能根据本文的方法可能无法正常使用。其中vsftpd和pam-pgsql一定要用port/package来安装。</span> <br />以下是他们的port目录： <br /></span><table cellspacing="1" cellpadding="3" width="90%" align="center" border="0">    <tbody>        <tr>            <td><span class="genmed"><b>引用:</b></span></td>        </tr>        <tr>            <td class="quote"><br />            /usr/ports/ftp/vsftpd <br />            /usr/ports/databases/postgresql7 <br />            /usr/ports/security/pam-pgsql <br />            &nbsp;</td>        </tr>    </tbody></table><span class="postbody"><br /><br />安装：只要cd进去，然后make install就OK了。 <br /><br /><span style="font-weight: bold">二、PostgreSQL安装<span style="color: red">（如果你已经有了PostgreSQL，不需要看这一节）</span></span> <br />简单提提用port来装PostgreSQL的过程，因为BSD版上的装PgSQL的方法都是自己下载源码编译的。我是用port来编译安装，因为这是fbsd推荐的安装方法，而且安装的软件会根据bsd的hier（目录结构）来安装，比较便于管理。 <br />当用port来安装好PostgreSQL，默认的数据库管理用户是pgsql(port里头的安装程序自动添加的)，其他系统默认的是postgres。初始化PostgreSQL的程序如下： <br />1、初始数据库。请先用root登陆或者su到root。然后，打命令: <br /></span><table cellspacing="1" cellpadding="3" width="90%" align="center" border="0">    <tbody>        <tr>            <td><span class="genmed"><b>代码:</b></span></td>        </tr>        <tr>            <td class="code"><br />            # su pgsql <br />            # initdb <br />            &nbsp;</td>        </tr>    </tbody></table><span class="postbody"><br />正常初始化的应该有以下提示: <br /></span><table cellspacing="1" cellpadding="3" width="90%" align="center" border="0">    <tbody>        <tr>            <td><span class="genmed"><b>引用:</b></span></td>        </tr>        <tr>            <td class="quote"><br />            This database system will be initialized with username &quot;pgsql&quot;. <br />            This user will own all the data files and must also own the server process. <br />            <br />            Creating directory /usr/local/pgsql/data <br />            Creating directory /usr/local/pgsql/data/base <br />            Creating directory /usr/local/pgsql/data/global <br />            Creating directory /usr/local/pgsql/data/pg_xlog <br />            Creating template1 database in /usr/local/pgsql/data/base/1 <br />            <br />            [snip] <br />            <br />            Success. You can now start the database server using: <br />            <br />            /usr/local/bin/postmaster -D /usr/local/pgsql/data <br />            or <br />            /usr/local/bin/pg_ctl -D /usr/local/pgsql/data -l logfile start <br />            &nbsp;</td>        </tr>    </tbody></table><span class="postbody"><br /><br />2、启动PostgreSQL <br /></span><table cellspacing="1" cellpadding="3" width="90%" align="center" border="0">    <tbody>        <tr>            <td><span class="genmed"><b>代码:</b></span></td>        </tr>        <tr>            <td class="code"><br />            # /usr/local/etc/rc.d/010.pgsql.sh start <br />            &nbsp;</td>        </tr>    </tbody></table><span class="postbody"><br />更多详细的帮助，请看freebsddiary上面的一篇用port来安装PostgreSQL的文章，全英文。 <br /><a href="http://www.freebsddiary.org/postgresql.php" target="_blank">http://www.freebsddiary.org/postgresql.php</a> <br /><br /><span style="font-weight: bold">三、设定用户数据库。</span> <br />我是PgSQL的初学者，命令行用得不熟，因而要借助phpPgAdmin来管理数据库。 <br />1、先创建一个数据库，叫做mydb。 <br />2、建立一个数据表叫做ftp，用来存储用户名和帐号。这个数据表的结构是pam_pgsql模块规定的最简单的表了，每一个字段都是必须的，你可以扩展这个表的结构，但是不要删除这些字段。我导出了一个SQL脚本，方便大家创建。 <br /></span><table cellspacing="1" cellpadding="3" width="90%" align="center" border="0">    <tbody>        <tr>            <td><span class="genmed"><b>代码:</b></span></td>        </tr>        <tr>            <td class="code"><br />            CREATE TABLE &quot;ftp&quot; ( <br />            &nbsp;&quot;ID&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; int4 DEFAULT nextval('public.&quot;ftp_ID_seq&quot;')&nbsp; NOT NULL , <br />            &nbsp;&quot;usr&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;varchar(32) NOT NULL , <br />            &nbsp;&quot;pass&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; varchar(32) NOT NULL , <br />            &nbsp;&quot;expired&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;bool DEFAULT false&nbsp; NOT NULL , <br />            &nbsp;&quot;newtok&quot;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bool DEFAULT false&nbsp; NOT NULL <br />            ); <br />            &nbsp;</td>        </tr>    </tbody></table><span class="postbody"><br /><br />请创建一些用户，方便调试： <br />这是我的ftp表，这些记录名字都是随便起的。但请注意只有expired为f(假)的可以成功登陆。 <br /></span><table cellspacing="1" cellpadding="3" width="90%" align="center" border="0">    <tbody>        <tr>            <td><span class="genmed"><b>代码:</b></span></td>        </tr>        <tr>            <td class="code"><br />            &nbsp;ID |&nbsp; &nbsp;usr&nbsp; &nbsp;|&nbsp; pass&nbsp; &nbsp;| expired | newtok <br />            ----+---------+---------+---------+-------- <br />            &nbsp; 1 | ftp&nbsp; &nbsp; &nbsp;| ftp&nbsp; &nbsp; &nbsp;| f&nbsp; &nbsp; &nbsp; &nbsp;| f <br />            &nbsp; 2 | ftp1&nbsp; &nbsp; | ftp1&nbsp; &nbsp; | t&nbsp; &nbsp; &nbsp; &nbsp;| t <br />            &nbsp; 4 | ftp3&nbsp; &nbsp; | ftp3&nbsp; &nbsp; | f&nbsp; &nbsp; &nbsp; &nbsp;| f <br />            &nbsp; 6 | go&nbsp; &nbsp; &nbsp; | abcdef&nbsp; | f&nbsp; &nbsp; &nbsp; &nbsp;| f <br />            &nbsp; 3 | ftp2&nbsp; &nbsp; | ftp2&nbsp; &nbsp; | f&nbsp; &nbsp; &nbsp; &nbsp;| f <br />            &nbsp; 5 | downftp | downftp | f&nbsp; &nbsp; &nbsp; &nbsp;| f <br />            &nbsp;</td>        </tr>    </tbody></table><span class="postbody"><br /><br />3、创建一个pgsql用户叫做pamusr，密码也是pamusr。赋予pamusr对于ftp表的select权限，注意select就够了。pam_pgsql只是读数据表，而不是修改它。<span style="color: red">你也可以用其他用户，比如管理PgSQL的pgsql/postgres用户，但是从安全角度着想，建一个专门提供给pam_pgsql的弱权限的用户更好！</span> <br /><br />备注： <br />数据库，数据表，用户名都不必跟我一样，pam_pgsql没有规定，但是这些设定，必须跟pam_pgsql的配置文件/etc/pam_pgsql.conf的一致。 <br /><br /><span style="font-weight: bold">四、设定pam_pgsql模块：编辑/etc/pam_pgsql.conf</span> <br />在/etc/pam.conf里头加上以上的几行，更多的资料参考/usr/local/share/doc/pam-pgsql/README <br /></span><table cellspacing="1" cellpadding="3" width="90%" align="center" border="0">    <tbody>        <tr>            <td><span class="genmed"><b>代码:</b></span></td>        </tr>        <tr>            <td class="code"><br />            #host = 127.0.0.1&nbsp; 这个不需要，默认是本地连接的。如果要连接远程服务器，请设置你的IP，并且去掉# <br />            database = mydb <br />            user = pamusr&nbsp; #刚才添加的访问PgSQL的用户 <br />            password = pamusr #访问PgSQL的密码 <br />            table = ftp <br />            user_column = usr&nbsp; &nbsp;&nbsp; #用户名在数据表中的字段 <br />            pwd_column = pass&nbsp; &nbsp;&nbsp; #用户密码在数据表中的字段 <br />            expired_column = expired&nbsp; #用户是否已经过期的字段名 <br />            newtok_column = newtok&nbsp; &nbsp; #用户是否需要修改密码的字段 <br />            &nbsp;</td>        </tr>    </tbody></table><span class="postbody"><br /><br /><span style="font-weight: bold">五、设置pam服务。在/etc/pam.conf，加入以下几项</span> <br /></span><table cellspacing="1" cellpadding="3" width="90%" align="center" border="0">    <tbody>        <tr>            <td><span class="genmed"><b>代码:</b></span></td>        </tr>        <tr>            <td class="code"><br />            # service-name&nbsp; module-type&nbsp; &nbsp; &nbsp;control-flag&nbsp; &nbsp; module-path&nbsp; argument <br />            <br />            vsftpd&nbsp; &nbsp; auth&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; required&nbsp; &nbsp; &nbsp; &nbsp; pam_pgsql.so&nbsp; # <br />            vsftpd&nbsp; &nbsp;account&nbsp; &nbsp; &nbsp; &nbsp; required&nbsp; &nbsp; &nbsp; &nbsp; pam_pgsql.so # <br />            vsftpd&nbsp; &nbsp; password&nbsp; &nbsp; &nbsp; required&nbsp; &nbsp; &nbsp; &nbsp; pam_pgsql.so# <br />            &nbsp;</td>        </tr>    </tbody></table><span class="postbody"><br />注意这里的service name为vsftpd，这不是必须的。前提是不要跟pam.conf已经有的service name冲突。vsftpd.conf中的pam_service_name一项要跟这里的service name对应。 <br /><span style="font-weight: bold">关于freebsd-5的PAM的配置</span> <br />在freebsd-5中的pam配置机制，跟freebsd-4有不同。你应该在/etc/pam.d或者/usr/local/etc/pam.d里头建立一个名位vsftpd的文件，内容跟上面的内容一样。<span style="color: red">本人在fbsd 5-current上尝试过配置，但总不成功，无论是pam_pgsql还是pam_mysql，总是提示说找不到这些pam。google了一下，发现这个错误好像是fbsd 5-current的bug <br /><a href="http://unix.derkeiler.com/Mailing-Lists/FreeBSD/current/2003-07/0278.html" target="_blank">http://unix.derkeiler.com/Mailing-Lists/FreeBSD/current/2003-07/0278.html</a> <br /></span><br /><br /><span style="font-weight: bold">六、配置vsftpd。这个是参考vsftpd虚拟用户设置1的官方文档进行配置的</span> <br />1、用adduser增加一个用户，名为virtual。 <br /><br />2、配置/usr/local/etc/vsftpd.conf <br /></span><table cellspacing="1" cellpadding="3" width="90%" align="center" border="0">    <tbody>        <tr>            <td><span class="genmed"><b>代码:</b></span></td>        </tr>        <tr>            <td class="code"><br />            anonymous_enable=NO <br />            local_enable=YES <br />            write_enable=NO <br />            anon_upload_enable=NO <br />            anon_mkdir_write_enable=NO <br />            anon_other_write_enable=NO <br />            chroot_local_user=YES <br />            guest_enable=YES <br />            dual_log_enable=YES <br />            guest_username=virtual&nbsp; &nbsp;#我们刚才增加的本地用户，虚拟用户将会享有这个名为virtual本地用户的权限。 <br />            pam_service_name=<font color="red">vsftpd</font>&nbsp; # 这个就是我在pam.conf里头设置的pam服务的名称，没有这一项，vsftpd是用名为ftp的pam服务。 <br />            listen=YES <br />            secure_chroot_dir=/usr/local/share/vsftpd/empty&nbsp; &nbsp;#请加上这一项，vsftpd默认的secure_chroot_dir是/usr/share/empty，用port安装的话，不会自动创建这个目录，而是放在/usr/local/share/vsftpd/empty。当然你也可以自己创建一个目录。 <br />            &nbsp;</td>        </tr>    </tbody></table><span class="postbody"><br /><br /><span style="font-weight: bold">七、调试</span> <br />用standalone的方法来启动vsftpd，不要用inetd。 <br /></span><table cellspacing="1" cellpadding="3" width="90%" align="center" border="0">    <tbody>        <tr>            <td><span class="genmed"><b>代码:</b></span></td>        </tr>        <tr>            <td class="code"><br />            /usr/local/libexec/vsftpd <br />            或者 <br />            /usr/local/libexec/vsftpd 配置文件名(如vsftpd.conf.1, vsftpd.conf.2) <br />            一般他是搜索/usr/local/etc目录，如果你放在其他地方就要写上完整的路径。 <br />            &nbsp;</td>        </tr>    </tbody></table><span class="postbody"><br />如果没有没有出什么提示证明vsftpd启动成功。实践中，我常常出现的错误是没有用root来启动vsftpd，或者chroot路径不对。 <br />下面ftp试试 <br /></span><table cellspacing="1" cellpadding="3" width="90%" align="center" border="0">    <tbody>        <tr>            <td><span class="genmed"><b>代码:</b></span></td>        </tr>        <tr>            <td class="code"><br />            &gt; ftp 192.168.1.10 <br />            Connected to 192.168.1.10. <br />            220 (vsFTPd 1.2.0) <br />            Name (192.168.1.10:powerplane): downftp <br />            331 Please specify the password. <br />            Password: <br />            230 Login successful. <br />            Remote system type is UNIX. <br />            Using binary mode to transfer files. <br />            &nbsp;</td>        </tr>    </tbody></table><span class="postbody"><br />yeah，成功了。 <br /><br /><span style="font-weight: bold">总结</span> <br />想要配置vsftpd + 其他的PAM认证方法，本文都可做参考。当然，你可能会修改有关pam.conf的设置了。 <br />freebsd的port里头除了有pam_pgsql的模块以外，还有pam_mysql，pam_ldap的。 <br />一般都是放在/usr/ports/security</span></p>]]></description><category>FreeBSD</category><comments>http://www.7layer.cn/cat_23/405/405/405.html#comment</comments><wfw:comment>http://www.7layer.cn/</wfw:comment><wfw:commentRss>http://www.7layer.cn/feed.asp?cmt=405</wfw:commentRss><trackback:ping>http://www.7layer.cn/cmd.asp?act=tb&amp;id=405&amp;key=8ceb3efc</trackback:ping></item><item><title>使用IPFILTER设置小型企业防火墙 </title><author>dshendry@126.com (劳动局IT培训)</author><link>http://www.7layer.cn/cat_23/404/404/404.html</link><pubDate>Thu, 17 Dec 2009 14:43:20 +0800</pubDate><guid>http://www.7layer.cn/cat_23/404/404/404.html</guid><description><![CDATA[<p><span class="postbody">作者：peijun.jiang <br />一、 网络环境 <br />1、主机A：安装freebsd4.7，安装三块网卡fxp0、xl0和xl1。 <br />fxp0为对外网卡，IP：x.x.x.x ISP为我提供的IP地址 <br />xl0为对内公共区域网卡，IP：192.168.0.1 <br />xl1为对内服务提供区域网卡，IP：192.168.80.1 <br />2、主机B：对外提供www服务主机，ip地址为：192.168.80.80 <br />3、主机C：对外提供ftp服务主机，ip：192.168.80.3。 <br />4、其他工作站N台。 <br />二、编译内核 <br /><br />1、#cd /sys/i386/conf <br />#cp GENERIC kernel_IPF <br /><br />2、编译kernel_IPF,加入一下选项： <br />options IPFILTER <br />options IPFILTER_LOG <br />options IPFILTER_DEFAULT_BLOCK <br /><br />3、#/usr/sbin/config kernel_IPF <br />#cd ../../compile/kernel_IPF <br />#make kepend <br />#make <br />#make install <br /><br />4、编辑/etc/rc.rc.conf,打开以下选项： <br />defaultrouter=&quot;x.x.x.1&quot; x.x.x.1为ISP提供的网关 <br />gateway_enable=&quot;YES&quot; <br />ipfilter_enable＝&quot;YES&quot; <br />ipnat_enable=&quot;YES&quot; <br />5、重新启动系统：reboot <br />三、配置防火墙 <br /><br />1、 设置地址转换ipnat。在/etc下新建文件ipnat.rules,内容为： <br />map fxp0 192.168.0.0/16 -&gt; 0/32 proxy port ftp ftp/tcp <br />map fxp0 192.168.0.0/24 -&gt; 0/32 portmap tcp/udp 10000:30000 <br />map fxp0 192.168.0.0/24 -&gt; 0/32 <br />map fxp0 192.168.80.0/24 -&gt; 0/32 portmap tcp/udp 300001:60000 <br />map fxp0 192.168.80.0/24 -&gt; 0/32 portmap <br />rdr fxp0 x.x.x.x/32 port 80 -&gt; 192.168.0.2 port 80 <br />rdr fxp0 x.x.x.x/32 port ftp -&gt; 192.168.0.3 port ftp <br />rdr fxp0 x.x.x.x/32 port 30001-50000 -&gt; 192.168.80.3 port 30001 tcp <br /><br />2、设置包过滤ipfilter。在/etc下新建文件ipf.rules,内容为： <br />block in log quick all with short <br />block in log quick all with ipopts <br />block in log quick all with frag <br />block in log quick all with opt lsrr <br />block in log quick all with opt ssrr <br /><br />以上五句为过滤掉可能会带来安全问题的短数据包或具备路由信息的数据包以及防止非法扫描服务器 <br /><br />pass out on xl0 all <br />pass in on xlo all <br />pass out on xl1 all <br />pass in on xl1 all <br />pass out quick on lo0 all <br />pass in quick on lo0 all <br />以上为内部网络界面和loopback网络界面可以自由发送和接受数据包 <br /><br />block out on fxp0 all <br />以上为屏蔽外部网络界面向外发送数据包 <br /><br />block out log on fxp0 from any to 192.168.0.0/16 <br />block out log quick on fxp0 from any to 0.0.0.0/8 <br />block out log quick on fxp0 from any to 169.254.0.0/8 <br />block out log quick on fxp0 from any to 10.0.0.0/8 <br />block out log quick on fxp0 from any to 127.16.0.0/12 <br />block out log quick on fxp0 from any to 127.0.0.0/8 <br />block out log quick on fxp0 from any to 192.0.2.0/24 <br />block out log quick on fxp0 from any to 204.152.64.0/23 <br />block out log quick on fxp0 from any to 224.0.0.0/3 <br />以上为屏蔽不合法地址的输出数据 <br /><br />pass out log on fxp0 proto tcp/udp from any to any keep state <br />pass out log on fxp0 proto icmp all keep state <br />以上为允许TCP 、UDP、ICMP数据包向外发送出去，并且允许回应数据包发送回到内部网络 <br /><br />block in log on fxp0 from 192.168.0.0/16 to any <br />block in log quick on fxp0 from 10.0.0.0/8 to any <br />block in log quick on fxp0 from 172.16.0.0/12 to any <br />block in log quick on fxp0 from 127.0.0.0/8 to any <br />block in log quick on fxp0 from 192.0.2.0/24 to any <br />block in log quick on fxp0 from 169.254.0.0/16 to any <br />block in log quick on fxp0 from 224.0.0.0/3 to any <br />block in log quick on fxp0 from 204.152.64.0/23 to any <br />block in log quick on fxp0 from x.x.x.x/32 to any <br />block in log quick on fxp0 from any to x.x.x.0/32 <br />block in log quick on fxp0 from any to x.x.x.255/32 <br />以上为屏蔽具备内部网络地址的数据包被转发到外部网络 <br /><br />pass in quick on fxp0 proto tcp from any to any port = 80 flags S/SA keep state <br />pass in quick on fxp0 proto tcp from any to any port = ftp flags S/SA keep state <br />pass in quick on fxp0 proto tcp from any to any port = ftp-data flags S/SA keep state <br />pass in quick on fxp0 proto tcp from any to any port 30000 &gt;&lt; 50001 flags S/SA keep state <br />以上为允许www和ftp进入，并且允许对ftp数据端口的数据进行转发 <br /><br />block in quick on fxp0 all <br />禁止其他的连接进入fxp0 <br /><br />block in log quick on fxp0 proto icmp from any to any icmp-type redir <br />block in log quick on fxp0 proto icmp from any to any <br />block in log quick on fxp0 proto icmp from any to any icmp-type echo <br />以上为禁止别人ping我得网络 <br /><br />block return-rst in log on fxp0 proto tcp from any to any flags S/SA <br />block return-icmp(net-unr) in log on fxp0 proto udp from any to any <br />以上对其他tcp请求，防火墙回应一个RST数据包关闭连接。对UDP请求，防火墙回应网络不可达到的ICMP包。 <br />或者在/etc/sysctl.conf中加入： <br />net.inet.tcp.blackhole=2 <br />net.inet.udp.blackhole=1 <br />能够有效地避免端口扫描 <br /><br />3、然后编辑/etc/rc.conf，加入一下命令，让ipfilter和ipnat在系统启动的时候可以自动加载： <br />ipfilter_enables=&rdquo;YES&rdquo; <br />ipf �CC �Cf /etc/ipf.rules <br />ipfilter_flags=&rdquo;-E&rdquo; <br /><br />ipnat_enable=&rdquo;YES&rdquo; <br />ipnat_program=&rdquo;/sbin/ipnat �CCF -f&rdquo; <br />ipnat_rules=&rdquo;/etc/ipnat.rules&rdquo; <br /><br />ipmon_enable=&rdquo;YES&rdquo; <br />ipmon_flags=&rdquo;-D /var/log/ipfilter.log&rdquo; <br />4、在/usr/log/建立文件ipfilter.log,并更改其属性为755，这样你的防火墙日志就记录到/var/log/ipfilter.log文件中，可以随时对其进行查看。 <br /><br />四、设置FTP服务器，使其支持被动连接（pasv） <br />1．Proftpd：编辑你的proftpd的配置文件proftpd.conf,加入一下内容： <br />MasqueradeAddress x.x.x.x <br />PassivePorts 30001 50000 <br />2．Pure-ftpd:编辑你的FTP配置文件，加入一下内容： <br />PassivePortRange 30001 50000 <br />ForcePassiveIP x.x.x.x <br />3．Serv-U: <br />a、在serv-U的&rdquo;本地服务器&rdquo;�D�D�D&rdquo;设置&rdquo;�D�D�D&rdquo;高级&rdquo;�D�D�D&rdquo;PASV端口范围&rdquo;输入30001 50000 <br />b、在serv-U的&rdquo;域&rdquo;�D�D�D&rdquo;你自己建立的域&rdquo;�D�D�D&rdquo;设置&rdquo;�D�D�D&rdquo;高级&rdquo;选中&rdquo;允许被动模式传送&rdquo;，&rdquo; 使用IP&rdquo;输入：x.x.x.x</span></p>]]></description><category>FreeBSD</category><comments>http://www.7layer.cn/cat_23/404/404/404.html#comment</comments><wfw:comment>http://www.7layer.cn/</wfw:comment><wfw:commentRss>http://www.7layer.cn/feed.asp?cmt=404</wfw:commentRss><trackback:ping>http://www.7layer.cn/cmd.asp?act=tb&amp;id=404&amp;key=74ba417d</trackback:ping></item><item><title>在FreeBSD中安装双网卡实例</title><author>dshendry@126.com (劳动局IT培训)</author><link>http://www.7layer.cn/cat_23/403/403/403.html</link><pubDate>Thu, 17 Dec 2009 14:40:48 +0800</pubDate><guid>http://www.7layer.cn/cat_23/403/403/403.html</guid><description><![CDATA[<p><span class="postbody">在FreeBSD中安装双网卡实例<br /><br />meaculpa<br /><br />04/13/2000<br /><br /><br />当我们使用FreeBSD作网关或防火墙时，会要求在系统中安装两块网卡，分别跨越两个网络，一块卡用于外部网络，而另一块用于内部网络。好了，就象大家知道的那样，现在需要让系统支持这些新设备，而对于网络适配器，FreeBSD是通过定制内核来支持的。当然，首先要让内核了解设备所用的硬件资源，对于使用PCI接口的网卡，我只能说，拥有高科技真是幸福，因为这类网卡在PCI PnP BOIS的支持下，只要在内核中多添一个设备配置就可在新内核引导时自动检测并启动；而对于ISA的卡，就没有这样简单了，不过只要去PnP用jumpless模式，用卡所带的设置程序设好适当的资源，就可以在内核中用相应的配置来通知系统在引导时按这样的资源来启动设备。我们来看看具体步骤：<br /><br /><br /><br />1、定制新内核以适应新设备<br /><br /><br /><br />这里有一个问题需要注意一下，众所周知，定制内核至少需要在系统上安装原代码中的&quot;内核原代码&quot;(FreeBSD Kernel Sources)部分，先前没有安装的可以用 /stand/sysinstall添加这部分。<br /><br /><br /><br />对于PCI网卡，例如你用的是Realtek 8139，可以在内核配置文件中添加一行：<br /><br /><br /><br />device de0 # 你原有的DC21040 Ethernet adapters<br /><br />device rl0 # 新加入的Realtek 8139，因为是PCI卡，系统会自动检测卡资源<br /><br /><br /><br />对于ISA网卡，例如你用的是NE2000兼容卡，同样在内核配置文件中添加与已设定资源相符合的描述行：<br /><br /><br /><br />device de0 # 你原有的DC21040 Ethernet adapters<br /><br />device ed0 at isa? port 0x300 net irq 3 iomem 0xd8000 vector edintr<br /><br /><br /><br />上面第二行是新加入的NE2000兼容网卡，因为是ISA卡，所以一定要指定卡所用的资源以便系统可以在引导时检测到。可能你会问，如果用的都是同样芯片类型的卡，该如何配置呢？可以这样做：<br /><br /><br /><br />device ed0 at isa? port 0x300 net irq 3 iomem 0xd8000 vector edintr<br /><br />device ed1 at isa? port 0x320 net irq 10 iomem 0xd8000 vector edintr<br /><br /><br /><br />可以看到，有多个同样类型的设备时，按照UNIX的编号习惯依次就是ed0、ed1&hellip;。不过，在上面的配置中两块卡的BOOTROM资源会发生冲突，但不影响启动，你可以根据情况用卡所带设置程序把它们适当设开即可。<br /><br /><br /><br />此时已经按要求定制好了新的内核配置，现在就可以按FreeBSD handbook中的描述把新内核编译并安装好。编译工作一切顺利的话我们的系统就已经支持了新的网卡设备，接下来就是为新网卡配置相应的网络接口。<br /><br /><br /><br />2、添加新网络接口<br /><br /><br /><br />比较简单直观的方法是用/stand/sysinstall来对新设备配置新接口的一系列参数，当然BSD的传统方法是以修改相应的配置文件来达到目的的，编辑/etc/rc.conf：<br /><br /><br /><br />hostname=&quot;example.host.net&quot;<br /><br />network_interfaces=&quot;ed0 ed1 lo0&quot; <br /><br /># 上面加入新的网络接口以便在引导时用后面ifconfig配置的参数进行初始化<br /><br />ifconfig_ed0=&quot;inet 192.168.0.1 netmask 255.255.255.0&quot; # 原有的网络接口参数<br /><br />ifconfig_ed1=&quot;inet 192.168.1.1 netmask 255.255.255.0&quot; # 新网络接口参数<br /><br />defaultroute=&quot;xxx.xxx.xxx.xxx&quot; # 原有的网络默认路由<br /><br /><br /><br />好了，安装双网卡的工作就完成了，以后可以根据具体使用情况自行配置NAT、GATEWAY等东东了。<br /><br /><br /><br />-- 错误在所难免，欢迎批评指正</span></p>]]></description><category>FreeBSD</category><comments>http://www.7layer.cn/cat_23/403/403/403.html#comment</comments><wfw:comment>http://www.7layer.cn/</wfw:comment><wfw:commentRss>http://www.7layer.cn/feed.asp?cmt=403</wfw:commentRss><trackback:ping>http://www.7layer.cn/cmd.asp?act=tb&amp;id=403&amp;key=25b4f97c</trackback:ping></item><item><title>使用FreeBSD构建流量控制防火墙 </title><author>dshendry@126.com (劳动局IT培训)</author><link>http://www.7layer.cn/cat_23/402/402/402.html</link><pubDate>Thu, 17 Dec 2009 14:23:20 +0800</pubDate><guid>http://www.7layer.cn/cat_23/402/402/402.html</guid><description><![CDATA[<p><span class="postbody"> </span></p><h2>概述</h2><p><br />&nbsp;</p><p>利用FreeBSD内核支持的BRIDGE、IPFIREWALL以及DUMMYNET选项，可以建立基于FreeBSD的透明流量控制防火墙（桥接模式），起到限制流量和包过滤的功能。<br /><br /><br /><br />&nbsp;</p><h2>准备</h2><p><br />&nbsp;</p><p>可以在任何FreeBSD的兼容硬件上构建流量控制防火墙，但是基于性能和管理上的考虑，建议：<br /><br />&nbsp;</p><ul><br />    <li>使用Intel PII450以上的处理器<br />    <br />    &nbsp;</li>    <li>使用至少128MB RAM<br />    <br />    &nbsp;</li>    <li>使用高性能10/100Mbps自适应网络适配器<br />    <br />    &nbsp;</li>    <li>如果多于一组桥接设备，建议使用双处理器系统<br />    <br />    &nbsp;</li>    <li>另外准备一块单独的网络适配器用于管理<br />    <br />    &nbsp;</li></ul><p><br />&nbsp;</p><hr /><p><br /><b>实例</b><br /><br />联想万全1300 PC服务器，具有一颗Intel PII300处理器，配置有128MB RAM，主板集成Intel 82557网络适配器，另外安装了4块3Com 3C905B 10/100Mbps自适应PCI网络适配器。<br /><br />&nbsp;</p><hr /><p><br /><br /><br />&nbsp;</p><h2>安装</h2><p><br />&nbsp;</p><p>安装最新版本的FreeBSD。可以从www.FreeBSD.org获取当前的FreeBSD版本信息，并且获得安装源文件。可以使用光盘安装和FTP安装方式。为了保证最好的硬件兼容性，请使用FreeBSD 4.3 RELEASE或者更高的版本。<br /><br />&nbsp;</p><p>必须安装操作系统源代码中的&quot;sys&quot;部分，安装完成以后需要重新编译系统内核以支持必要的流量控制防火墙选项。<br /><br />&nbsp;</p><hr /><p><br /><b>实例</b><br /><br />安装FreeBSD-4.3-20010818-STABLE版本，从<br /><br />&nbsp;</p><pre><br />	ftp://releng4.freebsd.org/pub/FreeBSD/snapshots/i386/<br /><br /></pre><p><br />获得。使用FTP安装方式，安装选项为：<br /><br />&nbsp;</p><pre><br />	[X] bin<br /><br />	[X] crypto<br /><br />	[X] man<br /><br />	[X] src-&gt;sys<br /><br /></pre><p><br />&nbsp;</p><hr /><p><br /><br /><br />&nbsp;</p><h2>配置</h2><p><br />&nbsp;</p><p>完成操作系统安装以后，必须重新编译系统内核使其支持桥接流量控制防火墙选项。必须在系统内核编译配置文件中添加以下内容：<br /><br />&nbsp;</p><pre><br />	options BRIDGE<br /><br />	options DUMMYNET<br /><br />	options IPFIREWALL<br /><br />	options IPFIREWALL_DEFAULT_TO_ACCEPT<br /><br /></pre><p><br />&nbsp;</p><p>重新编译完系统内核以后必须重新启动计算机。<br /><br />&nbsp;</p><hr /><p><br /><b>实例</b><br /><br />&nbsp;</p><pre><br />	# cd /usr/src/sys/i386/conf<br /><br />	# cp GENERIC BRGFW<br /><br />	# echo &quot;options BRIDGE&quot; &gt;&gt; BRGFW<br /><br />	# echo &quot;options DUMMYNET&quot; &gt;&gt; BRGFW<br /><br />	# echo &quot;options IPFIREWALL&quot; &gt;&gt; BRGFW<br /><br />	# echo &quot;options IPFIREWALL_DEFAULT_TO_ACCEPT&quot; &gt;&gt; BRGFW<br /><br />	# config<br /><br />	# cd ../../compile/BRGFW<br /><br />	# make depend all install<br /><br />	# reboot<br /><br /></pre><p><br />&nbsp;</p><hr /><p><br />&nbsp;</p><p>重新启动计算机以后，使用以下命令激活桥接流量控制防火墙选项：<br /><br />&nbsp;</p><pre><br />	sysctl -w net.link.ether.bridge_ipfw=1<br /><br />	sysctl -w net.link.ether.bridge_cfg=&quot;&quot;<br /><br />	sysctl -w net.link.ether.bridge=1<br /><br /></pre><p><br />&nbsp;</p><p>其中bridge_cfg参数用于设置多组桥接设备，如果仅考虑单组桥接，可以忽略。实例使用集成的Intel 82557网络适配器作为管理网络，其他3Com 3C905B网络适配器分为两组网桥使用。<br /><br />&nbsp;</p><hr /><p><br /><b>实例</b><br /><br />&nbsp;</p><pre><br />	# sysctl -w net.link.ether.bridge_ipfw=1<br /><br />	# sysctl -w net.link.ether.bridge_cfg=&quot;xl0:0,xl1:0,xl2:1,xl3:1&quot;<br /><br />	# sysctl -w net.link.ether.bridge=1<br /><br /></pre><p><br />&nbsp;</p><hr /><p><br /><br /><br />&nbsp;</p><h2>使用</h2><p><br />&nbsp;</p><p>使用ipfw命令来控制流量和防火墙策略。其中流量控制是作为一条防火墙策略实现的，因此ipfw是唯一的管理界面。通过实例来说明ipfw的使用。<br /><br />&nbsp;</p><p>在实例中，网段192.168.254.0/24经过第一组网桥，网段192.168.250.0/24经过第二组网桥，并建立以下策略：<br /><br />&nbsp;</p><ul><br />    <li>允许所有的ICMP连接，限制总流量为10Kbit/s<br />    <br />    &nbsp;</li>    <li>允许所有的UDP链接，限制总流量为100Kbit/s<br />    <br />    &nbsp;</li>    <li>允许TCP到网段192.168.254.0/24的所有连接，限制流量为5Mbit/s<br />    <br />    &nbsp;</li>    <li>允许TCP到主机192.168.250.222的HTTP连接，限制流量为2Mbit/s<br />    <br />    &nbsp;</li>    <li>允许TCP到主机192.168.250.0/24的所有其他连接，限制流量为1Mbit/s<br />    <br />    &nbsp;</li>    <li>禁止其他所有连接<br />    <br />    &nbsp;</li></ul><p><br />&nbsp;</p><hr /><p><br /><b>实例</b><br /><br />&nbsp;</p><pre><br />	# ipfw -flush<br /><br />	# ipfw add 100 pipe 1 icmp from any to any<br /><br />	# ipfw pipe 1 config bw 10Kbit/s<br /><br />	# ipfw add 200 pipe 2 udp from any to any<br /><br />	# ipfw pipe 2 config bw 100Kbit/s<br /><br />	# ipfw add 300 pipe 3 tcp from 192.168.254.0/24 to any<br /><br />	# ipfw pipe 3 config bw 5Mbit/s<br /><br />	# ipfw add 400 pipe 4 tcp from any to 192.168.254.0/24<br /><br />	# ipfw pipe 4 config bw 5Mbit/s<br /><br />	# ipfw add 500 pipe 5 tcp from any to 192.168.250.222 80<br /><br />	# ipfw pipe 5 config bw 2Mbit/s<br /><br />	# ipfw add 600 pipe 6 tcp from 192.168.250.222 80 to any<br /><br />	# ipfw pipe 6 config bw 2Mbit/s<br /><br />	# ipfw add 700 pipe 7 tcp from 192.168.250.0/24 to any<br /><br />	# ipfw pipe 7 config bw 1Mbit/s<br /><br />	# ipfw add 800 pipe 8 tcp from any to 192.168.250.0/24<br /><br />	# ipfw pipe 8 config bw 1Mbit/s<br /><br />	# ipfw add 60000 deny ip from any to any<br /><br />	# ipfw -a l<br /><br /></pre>]]></description><category>FreeBSD</category><comments>http://www.7layer.cn/cat_23/402/402/402.html#comment</comments><wfw:comment>http://www.7layer.cn/</wfw:comment><wfw:commentRss>http://www.7layer.cn/feed.asp?cmt=402</wfw:commentRss><trackback:ping>http://www.7layer.cn/cmd.asp?act=tb&amp;id=402&amp;key=8f615d93</trackback:ping></item><item><title>利用FreeBSD组建安全的网关 </title><author>dshendry@126.com (劳动局IT培训)</author><link>http://www.7layer.cn/cat_23/401/401/401.html</link><pubDate>Thu, 17 Dec 2009 14:21:37 +0800</pubDate><guid>http://www.7layer.cn/cat_23/401/401/401.html</guid><description><![CDATA[<p><span class="postbody"> </span></p><p>FreeBSD在网络服务器的领域里占有一席之地，不管是在高端应用，还是小型企业里，使用FreeBSD做服务器都是不错的选择，但是如何才能建立一个安全的网络呢？<br /><br />&nbsp;</p><p>首先我们来做一个这样的假设，某公司有两台服务器，需要建立一个以FreeBSD为平台的网关，并且还能提供电子邮件、DNS、WEB等服务，看起来好象这是一个很简单的事情，然而要建立一个安全性高的却不简单，在此我将为大家介绍如何去做，首先我凭着自己对FreeBSD的熟练程度，做了以下设计：<br /><br /><br /><br />&nbsp;</p><pre><br />                  Internet<br /><br />                  ____|____<br /><br />                 |         |<br /><br />                 | Gateway |<br /><br />                  ---------<br /><br />                      |<br /><br />          ____________|______________<br /><br />       ___|____                  ____|____<br /><br />      |        |                |         |<br /><br />      |  LAN   |                |  WWW    |<br /><br />      ----------                ----------<br /><br /></pre><p><br /><br /><br />&nbsp;</p><p>以上是我为该公司设计的网络结构图，首先我们来分析一下这个图，由于Gateway是一个与Internet直接连接的服务器，糟受的攻击自然也是最多的，所以也是最危险了。而且由于该服务器担任着公司的网关，该服务器只要一出问题，也将影响到全公司。为了稳定性、安全性，我考虑该服务器要跑的服务越少越好。服务越少，那么漏洞出现的可能性也越少。而WWW服务器由于放在了Gateway里面，受Gateway的保护，所以一般来说遭受的攻击比较少，所以一般可以满足足够多的服务，但是这些服务怎么样才能让Internet上的人访问呢？这就会在下面我们详细介绍了。<br /><br />&nbsp;</p><p>首先我们来安装Gateway，Gateway要使用的Internet的IP为x.x.x.x网卡为xl0，内部IP为192.168.0.1网卡为xl1,由于Gateway起到网关的作用，所以为了安全性，在该服务器上做安全是非常重要的，FreeBSD有自带了一个ipfirewall防火墙，既然有，我们当然要利用上了，首先编译内核:<br /><br /><br /><br />&nbsp;</p><pre><br />cd /sys/i386/conf<br /><br />cp GENERIC ./kernel_IPFW<br /><br /></pre><p><br /><br /><br />&nbsp;</p><p>用编辑器打开kernel_IPFW这个文本文件，在该文件里加入以下内容：<br /><br /><br /><br />&nbsp;</p><pre><br />options		IPFIREWALL        //通知操作系统的内核检查每个IP数据包，将它们与规则集进行比较<br /><br />options		IPDIVERT        //启用由ipfw divert使用的转向IP套接字。这一选项需要与natd联合使用。<br /><br />options		IPFIREWALL_VERBOSE       //向系统的注册程序发送注册信息包。<br /><br />options		IPFIREWALL_VERBOSE_LIMIT=100       //限制一台机器注册的次数。<br /><br />options		IPSTEALTH        //启动支持秘密转发的代码，这一选项在使防火墙不被traceroute和类似工具发现时很有用。<br /><br />options		ACCEPT_FILTER_DATA      <br /><br />options		ACCEPT_FILTER_HTTP      //接受过滤器中的静态连接<br /><br />options		ICMP_BANDLIM        //ICMP_BANDLIM根据带宽限制产生icmp错误。一般情况下我们需要这个选项，它有助于你的系统免受D.O.S.攻击。<br /><br /></pre><p><br /><br /><br />&nbsp;</p><p>把以上参数加入以后保存kernel_IPFW文件。<br /><br /><br /><br />&nbsp;</p><pre><br />make depend<br /><br />cd ../../compile/kernel_IPFW<br /><br />make<br /><br />make install<br /><br /></pre><p><br /><br /><br />&nbsp;</p><p>（注意！！！！！请不要使用远程方式来设置服务器！为什么？等下你就能知道了。）<br /><br />&nbsp;</p><p>以上完成以后，你就可以重新启动系统使用新的内核了。<br /><br />&nbsp;</p><p>使用新内核以后，如果该系统本来是连在网络上的，那么这时他的网络部分已经完全丧失，这表示系统新的内核已经起作用了，防火墙也起作用了，但由于FreeBSD的防火墙默认情况下是不允许任何机器访问，所以该机器的任何网络功能都暂时丧失。不过不要着急，接着往下看，你就会觉得非常有意思了。<br /><br />&nbsp;</p><p>既然该服务器担当是的网关，那么让网关启动起来是必须的。我们现在再：<br /><br /><br /><br />&nbsp;</p><pre><br />cd /etc<br /><br /></pre><p><br /><br /><br />&nbsp;</p><p>用编译器编译rc.conf<br /><br />&nbsp;</p><p>加入如下参数：<br /><br /><br /><br />&nbsp;</p><pre><br />gateway_enable=&quot;YES&quot;      //启动网关<br /><br />##########IP-firewall#################<br /><br />firewall_enable=&quot;YES&quot;     //激活firewall防火墙<br /><br />firewall_script=&quot;/etc/rc.firewall&quot;      //firewall防火墙的默认脚本<br /><br />firewall_type=&quot;/etc/ipfw.conf&quot;         //firewall自定义脚本<br /><br />firewall_quiet=&quot;NO&quot;         //起用脚本时，是否显示规则信息。现在为&ldquo;NO&rdquo;假如你的防火墙脚本已经定型，那么就可以把这里设置成&ldquo;YES&rdquo;了。<br /><br />firewall_logging_enable=&quot;YES&quot;      //启用firewall的log记录。<br /><br />##########NATD#######################<br /><br />natd_interface=&quot;xl0&quot;       //NATD服务启用在哪块网卡。<br /><br />natd_enable=&quot;YES&quot;        //激活NATD服务<br /><br />natd_flags=&quot;-config /etc/natd.conf&quot;    //NATD服务参数设置文件。<br /><br /></pre><p><br /><br /><br />&nbsp;</p><p>设置完成后我们再编译/etc/syslog.conf文件。<br /><br />&nbsp;</p><p>加入以下行：<br /><br /><br /><br />&nbsp;</p><pre><br />!ipfw<br /><br />*.*                 /var/log/ipfw.log<br /><br /></pre><p><br /><br /><br />&nbsp;</p><p>好了rc.conf文件设置完毕，然后就是其他文件了。<br /><br />&nbsp;</p><p>新建/etc/ipfw.conf 文件，在文件里写入以下内容：<br /><br /><br /><br />&nbsp;</p><pre><br />add 00400 divert natd ip from any to any via xl0   //natd服务启动设置<br /><br />add 00001 deny log ip from any to any ipopt rr<br /><br />add 00002 deny log ip from any to any ipopt ts<br /><br />add 00003 deny log ip from any to any ipopt ssrr<br /><br />add 00004 deny log ip from any to any ipopt lsrr<br /><br />add 00005 deny tcp from any to any in tcpflags syn,fin    //这5行是过滤各种扫描包<br /><br />#######tcp#########<br /><br />add 10000 allow tcp from xx.xx.xx.xx to x.x.x.x 22 in         //向Internet的xx.xx.xx.xx这个IP开放SSH服务。也就是只信任这个IP的SSH登陆。<br /><br />add 10001 allow tcp from any to x.x.x.x 80 in     //向整个Internet开放HTTP服务。<br /><br />add 10002 allow tcp from any to x.x.x.x 25 in     //向整个Internet开放smtp服务。<br /><br />add 10003 allow tcp from any to x.x.x.x 110 in    //向整个Internet开放pop3服务。<br /><br />add 19997 check-state<br /><br />add 19998 allow tcp from any to any out keep-state setup<br /><br />add 19999 allow tcp from any to any out           //这三个组合起来是允许内部网络访问出去，如果想服务器自己不和Internet进行tcp连接出去，可以把19997和19998去掉。（不影响Internet对服务器的访问）<br /><br />######udp##########<br /><br />add 20001 allow udp from any 53 to me in recv xl0     //允许其他DNS服务器的信息进入该服务器，因为自己要进行DNS解析嘛~<br /><br />add 20002 allow udp from any to x.x.x.x 53 in recv xl0    //向整个Internet开放DNS服务。<br /><br />add 29999 allow udp from any to any out         //允许自己的UDP包往外发送。<br /><br />######icmp#########<br /><br />add 30000 allow icmp from any to any icmptypes 3<br /><br />add 30001 allow icmp from any to any icmptypes 4<br /><br />add 30002 allow icmp from any to any icmptypes 8 out<br /><br />add 30003 allow icmp from any to any icmptypes 0 in<br /><br />add 30004 allow icmp from any to any icmptypes 11 in    //允许自己ping别人的服务器。也允许内部网络用router命令进行路由跟踪。<br /><br />#######lan##########<br /><br />add 40000 allow all from 192.168.0.0/16 to any<br /><br />add 40001 allow all from any to 192.168.0.0/16          //允许内部网络访问Internet。<br /><br /></pre><p><br /><br /><br />&nbsp;</p><p>好了，还有natd没设置了，我们再次添加/etc/natd.conf这个文件，其内容如下：<br /><br /><br /><br />&nbsp;</p><pre><br />log yes              //启动natd的log记录。<br /><br />redirect_port tcp 192.168.0.2:25 x.x.x.x:25     //把对服务器IP为x.x.x.x的smtp访问转到192.168.0.2的25上去。<br /><br />redirect_port tcp 192.168.0.2:80 x.x.x.x:80     //把对服务器IP为x.x.x.x的http访问转到192.168.0.2的80上去。<br /><br />redirect_port tcp 192.168.0.2:110 x.x.x.x:110     //把对服务器IP为x.x.x.x的pop3访问转到192.168.0.2的110上去。<br /><br /></pre><p><br /><br /><br />&nbsp;</p><p>好了，natd也设置完了~重新启动一下系统让防火墙和natd生效，现在就是该装的服务没装了，虽然防火墙已经让这些服务通行。<br /><br />&nbsp;</p><p>我们现在在Gateway上安装DNS服务，我现在选择的是bind 9.2.0，安装过程不是我们的重点，所以这里就不详细介绍了，我这里只对bind的安全设置做一个说明，假设bind的工作目录是/etc/namedb现在我们对bind设置一下，因为bind的大多数版本都存在问题，这个版本虽然目前没有，但还是提防为好，我在这里建议使用chroot技术来增强bind的安全，假设我们把chroot目录设在/chroot，我们做以下事情：<br /><br /><br /><br />&nbsp;</p><pre><br />pw useradd bind -g 53 -u 53 -d /nologin -s /nologin<br /><br />mkdir /chroot<br /><br />mkdir /chroot/etc<br /><br />mkdir /chroot/var<br /><br />mkdir /chroot/var/run<br /><br />cp -rp /etc/namedb /chroot/etc/namedb  //建立bind的工作环境和目录。<br /><br /></pre><p><br /><br /><br />&nbsp;</p><p>然后再运行<br /><br /><br /><br />&nbsp;</p><pre><br />$PATH/sbin/named -t /chroot -u bind<br /><br /></pre><p><br /><br /><br />&nbsp;</p><p>这样做了后运行ps -ax |grep named会发现bind是以bind这个权限很底的身份运行，我们到/chroot/var/run目录下看，会发现有named.pid这个文件，表示bind已经很成功的被chroot在/chroot这个目录里了，就算被&ldquo;黑客&rdquo;利用bind入侵了，由于权限很底，而且被限制在/chroot这个目录里，并且里面没有任何的shell，不给&ldquo;黑客&rdquo;任何的破坏条件。所以说bind这时已经相当安全了。<br /><br />&nbsp;</p><p>到此整个Gateway服务器就已经完全设置完毕。<br /><br />&nbsp;</p><p>现在就是内部服务器了，而内部服务器受到Gateway以及防火墙的保护，所以在安装上没有多大的问题，只要注意一下邮件服务软件以及HTTP服务软件是否有漏洞就行了，比如不要使用老版本的sendmail，因为sendmail的每个版本都存在一定的安全问题，我这里建议使用Qmail，关于Qmail的安装可以下载我提供的Qmail安装包http://www.linuxaid.com.cn/training/tips/showtip.jsp?i=245 ，而在HTTP上就要注意不要使用带漏洞的新闻发布系统，论坛等。<br /><br />&nbsp;</p><p>好了，整个服务器都已经安装完了，以上本人已经在两台FreeBSD 4.5的机器上测试通过。使用FreeBSD4.5的朋友们，如果按以上方法去设置自己的服务器的话，基本能保证正常工作。<br /><br /><br /><br />&nbsp;</p><p>声明：该文章由iceblood本人原创，如有什么问题欢迎大家与我交流经验，文章如要转载，请保持文章的完整性，包括&ldquo;声明&rdquo;部分！</p>]]></description><category>FreeBSD</category><comments>http://www.7layer.cn/cat_23/401/401/401.html#comment</comments><wfw:comment>http://www.7layer.cn/</wfw:comment><wfw:commentRss>http://www.7layer.cn/feed.asp?cmt=401</wfw:commentRss><trackback:ping>http://www.7layer.cn/cmd.asp?act=tb&amp;id=401&amp;key=4dd23423</trackback:ping></item><item><title>FreeBSD网站使用最流行的一些服务器软件！</title><author>dshendry@126.com (劳动局IT培训)</author><link>http://www.7layer.cn/cat_23/400/400/400.html</link><pubDate>Thu, 17 Dec 2009 14:19:50 +0800</pubDate><guid>http://www.7layer.cn/cat_23/400/400/400.html</guid><description><![CDATA[<p><span class="postbody">服务名称： 使用软件：<br /><br />媒体发布 Apache、Realserver<br /><br />文件传输 Proftp、Wuftp<br /><br />电子邮件 Sqwebmail、Sendmail、Postfix、Qmail <br /><br />域名解析 BIND8、BIND9<br /><br />数据库 Mysql、Postgresql<br /><br />脚本语言 Php<br /><br />媒体播放 Realplayer、mpg123、Xmms<br /><br />防火墙 Ipfirewall<br /><br />声卡驱动 Oss<br /><br />以上的收集只是来自于网上，有错误的还望大家指正。有遗漏的还请补上。</span></p>]]></description><category>FreeBSD</category><comments>http://www.7layer.cn/cat_23/400/400/400.html#comment</comments><wfw:comment>http://www.7layer.cn/</wfw:comment><wfw:commentRss>http://www.7layer.cn/feed.asp?cmt=400</wfw:commentRss><trackback:ping>http://www.7layer.cn/cmd.asp?act=tb&amp;id=400&amp;key=6054ae8f</trackback:ping></item></channel></rss>
