<?xml version="1.0" encoding="UTF-8" ?>















<rss version="2.0" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">

<channel>
<title><![CDATA[洞庭飞虹]]> </title>
<description>
<![CDATA[网络工程师
我的求职连接www.bokee.net/hrmodule/resume_view.do?id=ylnba ]]>
</description>
<link>http://ylnba.blog.bokee.net/</link>
<language>zh-cn</language>
<creator>ylnba</creator>
<pubDate>Thu, 09 Nov 2006 09:28:14 CST </pubDate>
<generatorAgent rdf:resource="http://www.bokee.net"/>
<ttl>5</ttl>

<item>
<title>教你完全免费自建Linux防火墙</title>
<link>http://www.bokee.net/blogmodule/weblogcomment_viewEntry/2007362.html</link>
<description>
<![CDATA[<a target="_blank" href="http://security.chinaitlab.com/List_1291.html" class="channel_keylink">防火墙</a>(Firewall)是在一个可信的网络和不可信的网络之间建立<a target="_blank" href="http://security.chinaitlab.com/" class="channel_keylink">安全</a>屏障的软件或硬件产品。Linux操作系统内核具有包过滤能力，系统管理员通过管理工具设置一组规则即可建立一个基于Linux的<a target="_blank" href="http://security.chinaitlab.com/List_1291.html" class="channel_keylink">防火墙</a>，用这组规则过滤被主机接收、发送的包或主机从一个网卡转发到另一个网卡的包，用一台闲置的PC就可以替代昂贵的专门防火墙硬件，对于某些中小企业或部门级用户，很值得参考。
<p>&nbsp;&nbsp;&nbsp;<strong> 一、防火墙的类型和设计策略</strong></p>
<p>　　在构造防火墙时，常采用两种方式，包过滤和应用代理服务。包过滤是指建立包过滤规则，根据这些规则及IP包头的信息，在网络层判定允许或拒绝包 的通过。如允许或禁止FTP的使用，但不能禁止FTP特定的功能（例如Get和Put的使用）。应用代理服务是由位于内部网和外部网之间的代理<a target="_blank" href="http://server.chinaitlab.com/" class="channel_keylink">服务器</a>完成的，它工作在应用层，代理用户进、出网的各种服务请求，如FTP和Telenet等。</p>
<p>　　目前，防火墙一般采用双宿主机（Dual-homedFirewall）、屏蔽主机(ScreenedHostFirewall)和屏蔽子网 (ScreenedSubnetFirewall)等结构。双宿主机结构是指承担代理服务任务的计算机至少有2个网络接口连接到内部网和外部网之间。屏蔽 主机结构是指承担代理服务任务的计算机仅仅与内部网的主机相连。屏蔽子网结构是把额外的<a target="_blank" href="http://security.chinaitlab.com/" class="channel_keylink">安全</a>层添加到屏蔽主机的结构中，即添加了周边网络，进一步把内部网和外部网隔开。</p>
<p>　　防火墙规则用来定义哪些数据包或服务允许/拒绝通过，主要有2种策略。一种是先允许任何接入，然后指明拒绝的项;另一种是先拒绝任何接入，然后 指明允许的项。一般地，我们会采用第2种策略。因为从逻辑的观点看，在防火墙中指定一个较小的规则列表允许通过防火墙，比指定一个较大的列表不允许通过防 火墙更容易实现。从Internet的发展来看，新的<a target="_blank" href="http://cisco.chinaitlab.com/List_11.html" class="channel_keylink">协议</a>和服务不断出现，在允许这些<a target="_blank" href="http://cisco.chinaitlab.com/List_11.html" class="channel_keylink">协议</a>和服务通过防火墙之前，有时间审查安全漏洞。</p>
<p>　<strong>　二、基于Linux操作系统防火墙的实现</strong></p>
<p>　　基于Linux操作系统的防火墙是利用其内核具有的包过滤能力建立的包过滤防火墙和包过滤与代理服务组成的复合型防火墙。下面，让我们来看看怎样配置一个双宿主机的基于Linux的防火墙。</p>
<p>　　由于Linux的内核各有不同，提供的包过滤的设置办法也不一样。IpFwadm是基于Unix中的ipfw，它只适用于 Linux2.0.36以前的内核；对于Linux2.2以后的版本，使用的是Ipchains。IpFwadm和Ipchains的工作方式很相似。用 它们配置的4个链中，有3个在Linux内核启动时进行定义，分别是：进入链（InputChains）、外出链（OutputChains）和转发链 （ForwardChains），另外还有一个用户自定义的链（UserDefinedChains）。进入链定义了流入包的过滤规则，外出链定义了流出 包的过滤规则，转发链定义了转发包的过滤规则。</p>
<p>　　这些链决定怎样处理进入和外出的IP包，即当一个包从网卡上进来的时候，内核用进入链的规则决定了这个包的流向;如果允许通过，内核决定这个包 下一步发往何处，如果是发往另一台机器，内核用转发链的规则决定了这个包的流向;当一个包发送出去之前，内核用外出链的规则决定了这个包的流向。某个特定 的链中的每条规则都是用来判定IP包的，如果这个包与第一条规则不匹配，则接着检查下一条规则，当找到一条匹配的规则后，规则指定包的目标，目标可能是用 户定义的链或者是Accept、Deny、Reject、Return、Masq和Redirect等。</p>
<p>　　其中，Accept指允许通过;Deny指拒绝;Reject指把收到的包丢弃，但给发送者产生一个ICMP回复；Return指停止规则处 理，跳到链尾；Masq指对用户定义链和外出链起作用，使内核伪装此包;Redirect只对进入链和用户定义链起作用，使内核把此包改送到本地端口。为 了让Masq和Redirect起作用，在编译内核时，我们可以分别选择Config_IP_Masquerading和 Config_IP_Transparent_Proxy。</p>
<p>&nbsp;&nbsp;&nbsp; </p>
<p align="center"><strong><img border="0" twffan="done" src="http://linux.chinaitlab.com/UploadFiles_7565/200807/20080724135954360.jpg" alt="拓扑" title="拓扑" /></strong></p>
&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp; 假设有一个局域网要连接到Internet上，公共网络地址为202.101.2.25。内部网的私有地址根据RFC1597中的规定，采用C类地址 192.168.0.0～192.168.255.0。为了说明方便，我们以3台计算机为例。实际上，最多可扩充到254台计算机。<br />
<p>&nbsp;&nbsp;&nbsp; 具体操作步骤如下。</p>
<p>　　1、在一台Linux主机上安装2块网卡ech0和ech1，给ech0网卡分配一个内部网的私有地址191.168.100.0，用来与Intranet相连;给ech1网卡分配一个公共网络地址202.101.2.25，用来与Internet相连。</p>
<p>　　2、Linux主机上设置进入、转发、外出和用户自定义链。本文采用先允许所有信息可流入和流出，还允许转发包，但禁止一些危险包，如IP欺骗包、广播包和ICMP服务类型攻击包等的设置策略。</p>
<p>　　具体设置如下。</p>
<p>　　(1)刷新所有规则</p>
<p>&nbsp;&nbsp;&nbsp; </p>
<p align="center"><img border="0" twffan="done" src="http://linux.chinaitlab.com/UploadFiles_7565/200807/20080724135954622.jpg" alt="刷新所有规则" title="刷新所有规则" /></p>
<p><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp; (2)设置初始规则<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp; </p>
<p align="center"><img border="0" twffan="done" src="http://linux.chinaitlab.com/UploadFiles_7565/200807/20080724135954592.jpg" alt="设置初始规则" title="设置初始规则" /></p>
<p><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp; (3)设置本地环路规则<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;</p>
<p align="center"><img border="0" twffan="done" src="http://linux.chinaitlab.com/UploadFiles_7565/200807/20080724135954165.jpg" alt="设置本地环路规则 " title="设置本地环路规则 " /></p>
<p>&nbsp;&nbsp;&nbsp; 本地进程之间的包允许通过。</p>
<p>　　(4)禁止IP欺骗</p>
<p>&nbsp;&nbsp;&nbsp;</p>
<p align="center"><img border="0" twffan="done" src="http://linux.chinaitlab.com/UploadFiles_7565/200807/20080724135954110.jpg" alt="禁止IP欺骗" title="禁止IP欺骗" /></p>
<p><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp; (5)禁止广播包<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p align="center"><img border="0" twffan="done" src="http://linux.chinaitlab.com/UploadFiles_7565/200807/20080724135954963.jpg" alt="禁止广播包 " title="禁止广播包 " /></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp; (6)设置ech0转发规则<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;</p>
<p align="center"><img border="0" twffan="done" src="http://linux.chinaitlab.com/UploadFiles_7565/200807/20080724135954415.jpg" alt="设置ech0转发规则 " title="设置ech0转发规则 " /></p>
<p><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp; (7)设置ech1转发规则</p>
<p>&nbsp;&nbsp;</p>
<p align="center"><img border="0" twffan="done" src="http://linux.chinaitlab.com/UploadFiles_7565/200807/20080724135954706.jpg" alt="设置ech1转发规则" title="设置ech1转发规则" /></p>
<br />
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 将规则保存到/etc/rc.firewallrules文件中，用chmod赋予该文件执行权限，在/etc/rc.d.rc.local中加入一行/etc/rc.firewallrules，这样当系统启动时，这些规则就生效了。</p>
<p>　　 通过以上各步骤的配置，我们可以建立一个基于Linux操作系统的包过滤防火墙。它具有配置简单、安全性高和抵御能力强等优点，特别是可利用闲置的计算机和免费的Linux操作系统实现投入最小化、产出最大化的防火墙的构建。另外，如果在包过滤的基础上再加上代理<a target="_blank" href="http://server.chinaitlab.com/" class="channel_keylink">服务器</a>，如TIS Firewall Toolkit 免费软件包，还可构建更加安全的复合型防火墙。</p>]]>
</description>
<guid isPermaLink="false">http://www.bokee.net/blogmodule/weblogcomment_viewEntry/2007362.html</guid>
<subject>linux</subject>
<author>ylnba</author>
<category>linux</category>
<pubDate>Thu, 24 Jul 2008 16:15:35 CST </pubDate>
</item>

<item>
<title>VPN速度快,还是做NAT速度快?</title>
<link>http://www.bokee.net/blogmodule/weblogcomment_viewEntry/2007292.html</link>
<description>
<![CDATA[应用的场景通常为有<a target="_blank" href="http://server.chinaitlab.com/" class="channel_keylink">服务器</a>需要让外部人员访问,有两种方法来实现,一是做端口转发,一是通过VPN.如果排除<a target="_blank" href="http://security.chinaitlab.com/" class="channel_keylink">安全</a>性方面的问题,那么随便用哪种方式都可以满足这个需要了.但是,即然不考虑<a target="_blank" href="http://security.chinaitlab.com/" class="channel_keylink">安全</a>性,那总要考虑哪个方法速度更快吧!那么,这两种方式,哪种更快呢?
<p>　　很多设备厂商都说,他们使用的VPN加速芯片,在定量的情况,基本上不会有速度问题.所谓定量是指,假如你VPN的吞吐量为10M,那么如果你带宽不超过10M,那么这个速度就不会有区别了!事实是这样吗?</p>
<p>　　刚好手上有个环境,正好拿来测试一下.</p>
<p>　　拓朴是这样的:??server(192.168.0.250)---FW1----Internet-----FW2---PC(192.168.35.18)</p>
<p>　　FW1为hillstone SA5020,<a target="_blank" href="http://security.chinaitlab.com/List_1291.html" class="channel_keylink">防火墙</a>吞吐为4G,IPSEC VPN吞吐量(3DES+SHA-1)也为4G,FW2为hillstone SA-2003,<a target="_blank" href="http://security.chinaitlab.com/List_1291.html" class="channel_keylink">防火墙</a>及VPN吞吐量同为300M,这已经算是极限了,VPN吞吐量跟防火墙相同,应该说,速度应该是完全相等了.可事实是这样吗?</p>
<p>　　我们在SA5020上对<a target="_blank" href="http://server.chinaitlab.com/" class="channel_keylink">服务器</a>做端口转发和与SA-2003建立VPN连接,然后在PC上同时用两种方法telnet 到这个端口,即:</p>
<p>　　? ?? ?telnet 192.168.0.250 XXXX<br />　　? ?? ?telnet 59.61.XXX.XXX XXXX</p>
<p>　　同时在PC上抓包,得到哪下图:</p>
<p>&nbsp;&nbsp;&nbsp; </p>
<p align="center"><img border="0" twffan="done" src="http://cisco.chinaitlab.com/UploadFiles_6776/200807/20080724103549944.jpg" alt="" /></p>
<p><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp; 1.jpg.jpg (34.25 KB)<br />　　2008-5-29 14:53</p>
<p>&nbsp;&nbsp;&nbsp; <img border="0" twffan="done" src="http://cisco.chinaitlab.com/UploadFiles_6776/200807/20080724103550202.jpg" alt="" /><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp; 这是通过VPN所建立的连接，我们看到，从客户端发出SYN请求，到服务器响应ACK，仅花费了0.001678秒的时间，接着我们看通过外网来访问的：</p>
<p>　　2.jpg (25.77 KB)<br />　　2008-5-29 14:53</p>
<p>　　我们看到，通过外网来访问建立的连接，从客户端发SYN请求到服务器响应ACK，仅花费了0.001465秒，比之通过VPN，要快上 0.00002秒的时间，也就是说，通过外网对服务器进行访问，网络的延时会比通过VPN的少，体现在速度上，那么应该会比通过VPN访问要快。</p>
<p>　　在等同条件下,这个时间差0.00002秒,那么就是精确的NAT与VPN的速度差别,虽然说这个差别已经无法从感觉上去体验了!!!</p>
<p>　　所以,无论说VPN速度有多快,那还是会跟NAT有差别的.</p>
<p>　　但同时,我们也看到,SA在处理VPN的速度上,确实也已经达到极限了~</p>]]>
</description>
<guid isPermaLink="false">http://www.bokee.net/blogmodule/weblogcomment_viewEntry/2007292.html</guid>
<subject>vpn</subject>
<author>ylnba</author>
<category>vpn</category>
<pubDate>Thu, 24 Jul 2008 16:02:16 CST </pubDate>
</item>

<item>
<title>最全的ARP欺骗攻击原理深入分析</title>
<link>http://www.bokee.net/blogmodule/weblogcomment_viewEntry/2006665.html</link>
<description>
<![CDATA[<p align="left"><strong>1、ARP协议概述</strong></p>
<p align="left"><strong>IP数据包常通过以太网发送。以太网设备并不识别32位IP地址：它们是以48位以太网地址传输以太网 数据包的。因此，IP驱动器必须把IP目的地址转换成以太网网目的地址。在这两种地址之间存在着某种静态的或算法的映射，常常需要查看一张表。地址解析协 议(Address Resolution Protocol，ARP)就是用来确定这些映象的协议。</strong></p>
<p align="left"><strong>ARP工作时，送出一个含有所希望的IP地址的以太网广播数据包。目的地主机，或另一个代表该主机的系统，以一个含有IP和以太网地址对的数据包作为应答。发送者将这个地址对高速缓存起来，以节约不必要的ARP通信。</strong></p>
<p align="left"><strong>如果有一个不被信任的节点对本地网络具有写访问许可权，那么也会有某种风险。这样一台机器可以发布虚假 的ARP报文并将所有通信都转向它自己，然后它就可以扮演某些机器，或者顺便对数据流进行简单的修改。ARP机制常常是自动起作用的。在特别安全的网络 上， ARP映射可以用固件，并且具有自动抑制协议达到防止干扰的目的。<br /></strong></p>
<div align="center"><strong><img width="500" border="0" onload="javascript:if(this.width&gt;500)this.width=500;" src="http://blogimg.chinaunix.net/blog/upfile2/080719104454.gif" alt="" /></strong></div>
<p><strong>图1是一个用作IP到以太网地址转换的ARP报文的例子。在图中每一行为32位，也就是4个八位组表示，在以后的图中，我们也将遵循这一方式。</strong></p>
<p><strong>硬件类型字段指明了发送方想知道的硬件接口类型，以太网的值为1。协议类型字段指明了发送方提供的高层协议类型，IP为0806 （16进制）。硬件地址长度和协议长度指明了硬件地址和高层协议地址的长度，这样ARP报文就可以在任意硬件和任意协议的网络中使用。操作字段用来表示这 个报文的目的，ARP请求为1，ARP响应为2，RARP请求为3，RARP响应为4。</strong></p>
<p><strong>当发出ARP请求时，发送方填好发送方首部和发送方IP地址，还要填写目标IP地址。当目标机器收到这个ARP广播包时，就会在响应报文中填上自己的48位主机地址。</strong></p>
<p><strong>2、ARP使用举例<br />我们先看一下linux下的arp命令(如果开始arp表中的内容为空的话,需要先对某台主机进行一个连接,例如ping一下目标主机来产生一个arp项)：<br /></strong></p>
<p>
<table width="400" cellspacing="0" cellpadding="2" border="1" align="center" bordercolorlight="black" bordercolordark="#ffffff">
    <tbody>
        <tr>
            <td bgcolor="#e6e6e6" class="code">
            <pre>d2server:/home/kerberos# arp<br />Address          HWtype  HWaddress         Flags Mask            Iface<br />211.161.17.254   ether   00:04:9A:AD:1C:0A      C                 eth0<br /></pre>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p><strong>Address：主机的IP地址<br />Hwtype：主机的硬件类型<br />Hwaddress：主机的硬件地址<br />Flags Mask：记录标志，&quot;C&quot;表示arp高速缓存中的条目，&quot;M&quot;表示静态的arp条目。<br />用&quot;arp --a&quot;命令可以显示主机地址与IP地址的对应表，也就是机器中所保存的arp缓存信息。这个高速缓存存放了最近Internet地址到硬件地址之间的映射记录。高速缓存中每一项的生存时间一般为20分钟，起始时间从被创建时开始算起。<br /></strong></p>
<p>
<table width="400" cellspacing="0" cellpadding="2" border="1" align="center" bordercolorlight="black" bordercolordark="#ffffff">
    <tbody>
        <tr>
            <td bgcolor="#e6e6e6" class="code">
            <pre>d2server:/home/kerberos# arp -a<br />(211.161.17.254) at 00:04:9A:AD:1C:0A [ether] on eth0<br /></pre>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p><strong>可以看到在缓存中有一条211.161.17.254相对应的arp缓存条目。<br /></strong></p>
<p>
<table width="400" cellspacing="0" cellpadding="2" border="1" align="center" bordercolorlight="black" bordercolordark="#ffffff">
    <tbody>
        <tr>
            <td bgcolor="#e6e6e6" class="code">
            <pre>d2server:/home/kerberos# telnet 211.161.17.21<br />Trying 211.161.17.21...<br />Connected to 211.161.17.21.<br />Escape character is '^]'.<br />^].<br />telnet&gt;quit<br />connetion closed.<br /></pre>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p><strong>在执行上面一条telnet命令的同时，用tcpdump进行监听：<br /></strong></p>
<p>
<table width="400" cellspacing="0" cellpadding="2" border="1" align="center" bordercolorlight="black" bordercolordark="#ffffff">
    <tbody>
        <tr>
            <td bgcolor="#e6e6e6" class="code">
            <pre>d2server:/home/kerberos# tcpdump -e dst host 211.161.17.21<br />tcpdump: listening on eth0<br /></pre>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p><strong><br />我们将会听到很多包，我们取与我们arp协议相关的2个包：<br /></strong></p>
<p>
<table width="400" cellspacing="0" cellpadding="2" border="1" align="center" bordercolorlight="black" bordercolordark="#ffffff">
    <tbody>
        <tr>
            <td bgcolor="#e6e6e6" class="code">
            <pre>1  0.0 00:D0:F8:0A:FB:83 FF:FF:FF:FF:FF:FF  arp  60<br />who has 211.161.17.21 tell d2server<br />2  0.002344(0.0021)00:E0:3C:43:0D:24 00:D0:F8:0A:FB:83  arp  60<br />arp reply 211.161.17.21 is at 00:E0:3C:43:0D:24<br /></pre>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p><strong>在第1行中，源端主机（d2server）的硬件地址是00:D0:F8:0A:FB:83。目的端主机的硬件地址是FF:FF:FF:FF:FF:FF，这是一个以太网广播地址。电缆上的每个以太网接口都要接收这个数据帧并对它进行处理。<br />第1行中紧接着的一个输出字段是arp，表明帧类型字段的值是0x0806，说明此数据帧是一个ARP请求或回答。<br />在每行中，单词后面的值60指的是以太网数据帧的长度。由于ARP请求或回答的数据帧长都是42字节（28字节的ARP数据，14字节的以太网帧头），因此，每一帧都必须加入填充字符以达到以太网的最小长度要求：60字节。<br />第1行中的下一个输出字段arp who-has表示作为ARP请求的这个数据帧中，目的I P地址是211.161.17.21的地址，发送端的I P地址是d2server的地址。tcpdump打印出主机名对应的默认I P地址。<br />从 第2行中可以看到，尽管ARP请求是广播的，但是ARP应答的目的地址却是211.161.17.21(00:E0:3C:43:0D:24)。ARP应 答是直接送到请求端主机的，而是广播的。tcpdump打印出arp reply的字样，同时打印出响应者的主机ip和硬件地址。<br />在每一行中，行号后面的数字表示tcpdump收到分组的时间（以秒为单位）。除第1行外，每行在括号中还包含了与上一行的时间差异（以秒为单位）。<br />这个时候我们再看看机器中的arp缓存：<br /></strong></p>
<p>
<table width="400" cellspacing="0" cellpadding="2" border="1" align="center" bordercolorlight="black" bordercolordark="#ffffff">
    <tbody>
        <tr>
            <td bgcolor="#e6e6e6" class="code">
            <pre>d2server:/home/ke<br />rberos# arp -a (211.161.17.254) at 00:04:9A:AD:1C:0A <br />[ether] on eth0 (211.161.17.21) at 00:E0:3C:43:0D:24 [ether] on eth0 <br /></pre>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p><strong>arp高速缓存中已经增加了一条有关211.161.17.21的映射。<br />再看看其他的arp相关的命令：<br /></strong></p>
<p>
<table width="400" cellspacing="0" cellpadding="2" border="1" align="center" bordercolorlight="black" bordercolordark="#ffffff">
    <tbody>
        <tr>
            <td bgcolor="#e6e6e6" class="code">
            <pre>d2server:/home/kerberos# arp -s 211.161.17.21 00:00:00:00:00:00<br />d2server:/home/kerberos# arp<br />Address          HWtype  HWaddress        Flags Mask       Iface<br />211.161.17.254     ether   00:04:9A:AD:1C:0A     C            eth0<br />211.161.17.21      ether   00:00:00:00:00:00      CM           eth0<br />d2server:/home/kerberos# arp -a<br />(211.161.17.254) at 00:04:9A:AD:1C:0A [ether] on eth0<br />(211.161.17.21) at 00:00:00:00:00:00 [ether] PERM on eth0<br /></pre>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p><strong><br />可以看到我们用arp -s选项设置了211.161.17.21对应的硬件地址为00:00:00:00:00:00，而且这条映射的标志字段为CM,也就是说我们手工设置的 arp选项为静态arp选项，它保持不变没有超时，不像高速缓存中的条目要在一定的时间间隔后更新。<br />如果想让手工设置的arp选项有超时时间的话，可以加上temp选项<br /></strong></p>
<p>
<table width="400" cellspacing="0" cellpadding="2" border="1" align="center" bordercolorlight="black" bordercolordark="#ffffff">
    <tbody>
        <tr>
            <td bgcolor="#e6e6e6" class="code">
            <pre>d2server:/home/kerberos# arp -s 211.161.17.21 00:00:00:00:00:00 temp<br />d2server:/home/kerberos# arp -a<br />(211.161.17.254) at 00:04:9A:AD:1C:0A [ether] on eth0<br />(211.161.17.21) at 00:00:00:00:00:00 [ether] on eth0<br />d2server:/home/kerberos# arp<br />Address        HWtype  HWaddress         Flags Mask      Iface<br />211.161.17.254   ether   00:04:9A:AD:1C:0A     C            eth0<br />211.161.17.21    ether   00:00:00:00:00:00       C            eth0<br /></pre>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p><strong><br />可以看到标志字段的静态arp标志&quot;M&quot;已经去掉了，我们手工加上的是一条动态条目。<br />请大家注意arp静态条目与动态条目的区别。<br />在不同的系统中，手工设置的arp静态条目是有区别的。在linux和win2000中，静态条目不会因为伪造的arp响应包而改变，而动态条目会改变。而在win98中，手工设置的静态条目会因为收到伪造的arp响应包而改变。<br />如果您想删除某个arp条目（包括静态条目），可以用下面的命令：<br /></strong></p>
<p>
<table width="400" cellspacing="0" cellpadding="2" border="1" align="center" bordercolorlight="black" bordercolordark="#ffffff">
    <tbody>
        <tr>
            <td bgcolor="#e6e6e6" class="code">
            <pre>d2server:/home/kerberos# arp -d 211.161.17.21  <br />d2server:/home/kerberos# arp -a<br />(211.161.17.254) at 00:04:9A:AD:1C:0A [ether] on eth0<br />(211.161.17.21) at  on eth0<br /></pre>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p><strong>可以看到211.161.17.21的arp条目已经是不完整的了。<br />还有一些其他的命令，可以参考linux下的man文档：d2server:/home/kerberos# man arp</strong></p>
<p><strong>3、ARP欺骗<br />我们先复习一下上面所讲的ARP协议的原理。在实现TCP/IP协议的网络环境下，一个ip包走到哪里，要 怎么走是靠路由表定义，但是，当ip包到达该网络后，哪台机器响应这个ip包却是靠该ip包中所包含的硬件mac地址来识别。也就是说，只有机器的硬件 mac地址和该ip包中的硬件mac地址相同的机器才会应答这个ip包，因为在网络中，每一台主机都会有发送ip包的时候，所以，在每台主机的内存中，都 有一个 arp--&gt; 硬件mac 的转换表。通常是动态的转换表（该arp表可以手工添加静态条目）。也就是说，该对应表会被主机在一定的时间间隔后刷新。这个时间间隔就是ARP高速缓存 的超时时间。<br />通常主机在发送一个ip包之前，它要到该转换表中寻找和ip包对应的硬件mac地址，如果没有找到，该主机就发送一个ARP广播包，于是，主机刷新自己的ARP缓存。然后发出该ip包。 <br />了解这些常识后，现在就可以谈在以太网络中如何实现ARP欺骗了，可以看看这样一个例子。<br /><strong>3.1 同一网段的ARP欺骗<br /></strong></strong></p>
<p>
<table cellspacing="0" border="1" bgcolor="#ddddd0" align="center" bordercolorlight="#999999" bordercolordark="#ffffff" class="ln">
    <tbody>
        <tr>
            <td bgcolor="#ffffff"><a target="_blank" href="http://netsecurity.51cto.com/files/uploadimg/20071010/1553511.gif"><img width="355" height="337" border="0" onload="javascript:if(this.width&gt;498)this.style.width=498;" src="http://netsecurity.51cto.com/files/uploadimg/20071010/1553511.gif" alt="" onmousewheel="javascript:return big(this)" class="fit-image" /></a></td>
        </tr>
        <tr>
            <td bgcolor="#dddddd" align="center" class="it">图2 同一网段的arp欺骗</td>
        </tr>
    </tbody>
</table>
</p>
<p><strong><br />如图2所示，三台主机<br /></strong></p>
<p>
<table width="400" cellspacing="0" cellpadding="2" border="1" align="center" bordercolorlight="black" bordercolordark="#ffffff">
    <tbody>
        <tr>
            <td bgcolor="#e6e6e6" class="code">
            <pre>A: ip地址 192.168.0.1 硬件地址 AA:AA:AA:AA:AA:AA<br />B: ip地址 192.168.0.2 硬件地址 BB:BB:BB:BB:BB:BB<br />C: ip地址 192.168.0.3 硬件地址 CC:CC:CC:CC:CC:CC</pre>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p><strong>一个位于主机B的入侵者想非法进入主机A，可是这台主机上安装有防火墙。通过收集资料他知道这台主机A的防火墙只对主机C有信任关系（开放23端口(telnet)）。而他必须要使用telnet来进入主机A，这个时候他应该如何处理呢？</strong></p>
<p><strong>我们这样考虑，入侵者必须让主机A相信主机B就是主机C，如果主机A和主机C之间的信任关系是建立在ip地址之上的。如果单单把主 机B的ip地址改的和主机C的一样，那是不能工作的，至少不能可靠地工作。如果你告诉以太网卡设备驱动程序， 自己IP是192.168.0.3，那么这只是一种纯粹的竞争关系，并不能达到目标。我们可以先研究C这台机器如果我们能让这台机器暂时当掉，竞争关系就 可以解除,这个还是有可能实现的。在机器C当掉的同时，将机器B的ip地址改为192.168.0.3,这样就可以成功的通过23端口telnet到机器 A上面，而成功的绕过防火墙的限制。</strong></p>
<p><strong>上面的这种想法在下面的情况下是没有作用的，如果主机A和主机C之间的信任关系是建立在硬件地址的基础上。这个时候还需要用ARP欺骗的手段让主机A把自己的ARP缓存中的关于192.168.0.3映射的硬件地址改为主机B的硬件地址。</strong></p>
<p><strong>我们可以人为的制造一个arp_reply的响应包,发送给想要欺骗的主机,这是可以实现的,因为协议并没有规定必须在接收到arp_echo后才可以发送响应包.这样的工具很多,我们也可以直接用snifferpro抓一个arp响应包,然后进行修改。</strong></p>
<p><strong>你可以人为地制造这个包。可以指定ARP包中的源IP、目标IP、源MAC地址、目标MAC地址。这样你就可以通过虚假的ARP响应包来修改主机A上的动态ARP缓存达到欺骗的目的。<br /><strong>下面是具体的步骤：</strong><br />1.他先研究192.0.0.3这台主机，发现这台主机的漏洞。 <br />2.根据发现的漏洞使主机C当掉，暂时停止工作。 <br />3.这段时间里，入侵者把自己的ip改成192.0.0.3 <br />4.他用工具发一个源ip地址为192.168.0.3源MAC地址为BB:BB:BB:BB:BB:BB的包给主机A，要求主机A更新自己的arp转换表。 <br />5.主机更新了arp表中关于主机C的ip--&gt;mac对应关系。 <br />6.防火墙失效了，入侵的ip变成合法的mac地址，可以telnet 了。 <br />上面就是一个ARP的欺骗过程，这是在同网段发生的情况，但是，提醒注意的是，在B和C处于不同网段的时候，上面的方法是不起作用的。</strong></p>
<p><strong><strong>3.2 不同网段的ARP欺骗</strong></strong></p>
<p>
<table cellspacing="0" border="1" bgcolor="#ddddd0" align="center" bordercolorlight="#999999" bordercolordark="#ffffff" class="ln">
    <tbody>
        <tr>
            <td bgcolor="#ffffff"><a target="_blank" href="http://netsecurity.51cto.com/files/uploadimg/20071010/161535760.gif"><img width="468" height="336" border="0" onload="javascript:if(this.width&gt;498)this.style.width=498;" src="http://netsecurity.51cto.com/files/uploadimg/20071010/161535760.gif" alt="" style="" onmousewheel="javascript:return big(this)" class="fit-image" /></a></td>
        </tr>
        <tr>
            <td bgcolor="#dddddd" align="center" class="it">图3 不同网段之间的ARP欺骗</td>
        </tr>
    </tbody>
</table>
</p>
<p><strong>如图3所示A、C位于同一网段而主机B位于另一网段，三台机器的ip地址和硬件地址如下：<br /></strong></p>
<p>
<table width="400" cellspacing="0" cellpadding="2" border="1" align="center" bordercolorlight="black" bordercolordark="#ffffff">
    <tbody>
        <tr>
            <td bgcolor="#e6e6e6" class="code">
            <pre>A: ip地址 192.168.0.1 硬件地址 AA:AA:AA:AA:AA:AA<br />B: ip地址 192.168.1.2 硬件地址 BB:BB:BB:BB:BB:BB<br />C: ip地址 192.168.0.3 硬件地址 CC:CC:CC:CC:CC:CC<br /></pre>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p><strong>在现在的情况下，位于192.168.1网段的主机B如何冒充主机C欺骗主机A呢？显然用上面的办法的话，即使欺骗成功，那么由主 机B和主机A之间也无法建立telnet会话，因为路由器不会把主机A发给主机B的包向外转发，路由器会发现地址在192.168.0.这个网段之内。</strong></p>
<p><strong>现在就涉及到另外一种欺骗方式―ICMP重定向。把ARP欺骗和ICMP重定向结合在一起就可以基本实现跨网段欺骗的目的。</strong></p>
<p><strong><strong>什么是ICMP重定向呢？</strong><br />ICMP重定向报文是ICMP控制报文中的一种。在特定的情况下，当路由器检测到一台机器使用非优化路由的时候，它会向该主机发送一个ICMP重定向报文，请求主机改变路由。路由器也会把初始数据报向它的目的地转发。</strong></p>
<p><strong>我们可以利用ICMP重定向报文达到欺骗的目的。下面是结合ARP欺骗和ICMP重定向进行攻击的步骤：<br />1.为了使自己发出的非法ip包能在网络上能够存活长久一点，开始修改ip包的生存时间ttl为下面的过程中可能带来的问题做准备。把ttl改成255. (ttl定义一个ip包如果在网络上到不了主机后，在网络上能存活的时间，改长一点在本例中有利于做充足的广播) <br />2.下载一个可以自由制作各种包的工具（例如hping2） <br />3.然后和上面一样，寻找主机C的漏洞按照这个漏洞当掉主机C。 <br />4.在该网络的主机找不到原来的192.0.0.3后，将更新自己的ARP对应表。于是他发送一个原ip地址为192.168.0.3硬件地址为BB:BB:BB:BB:BB:BB的ARP响应包。 <br />5.好了，现在每台主机都知道了，一个新的MAC地址对应192.0.0.3,一个ARP欺骗完成了，但是，每台主机都只会在局域网中找这个地址而根本就不会把发送给192.0.0.3的ip包丢给路由。于是他还得构造一个ICMP的重定向广播。 <br />6.自己定制一个ICMP重定向包告诉网络中的主机：&quot;到192.0.0.3的路由最短路径不是局域网，而是路由，请主机重定向你们的路由路径，把所有到192.0.0.3的ip包丢给路由。&quot; <br />7.主机A接受这个合理的ICMP重定向，于是修改自己的路由路径，把对192.0.0.3的通讯都丢给路由器。 <br />8.入侵者终于可以在路由外收到来自路由内的主机的ip包了，他可以开始telnet到主机的23口。 <br />其实上面的想法只是一种理想话的情况，主机许可接收的ICMP重定向包其实有很多的限制条件，这些条件使ICMP重定向变的非常困难。</strong></p>
<p><strong>TCP/IP协议实现中关于主机接收ICMP重定向报文主要有下面几条限制：<br />1.新路由必须是直达的 <br />2.重定向包必须来自去往目标的当前路由 <br />3.重定向包不能通知主机用自己做路由 <br />4.被改变的路由必须是一条间接路由 <br />由于有这些限制，所以ICMP欺骗实际上很难实现。但是我们也可以主动的根据上面的思维寻找一些其他的方法。更为重要的是我们知道了这些欺骗方法的危害性，我们就可以采取相应的防御办法。</strong></p>
<p><strong>3.3 ARP欺骗的防御<br />知道了ARP欺骗的方法和危害，我们给出一些初步的防御方法：<br />1.不要把你的网络安全信任关系建立在ip地址的基础上或硬件mac地址基础上，（rarp同样存在欺骗的问题），理想的关系应该建立在ip+mac基础上。 <br />2.设置静态的mac--&gt;ip对应表，不要让主机刷新你设定好的转换表。 <br />3.除非很有必要，否则停止使用ARP，将ARP做为永久条目保存在对应表中。在linux下可以用ifconfig -arp可以使网卡驱动程序停止使用ARP。 <br />4.使用代理网关发送外出的通讯。 <br />5.修改系统拒收ICMP重定向报文 <br />在linux下可以通过在防火墙上拒绝ICMP重定向报文或者是修改内核选项重新编译内核来拒绝接收ICMP重定向报文。<br />在win2000下可以通过防火墙和IP策略拒绝接收ICMP报文。<br />4 代理ARP的应用<br />代理ARP有两大应用,一个是有利的就是我们在防火墙实现中常说的透明模式的实现,另一个是有害的就是通过它可以达到在交换环境中进行嗅探的目的.由此可见同样一种技术被应用于不同的目的,效果是不一样的.<br />我们先来看交换环境中局域网的嗅探.<br />通常在局域网环境中，我们都是通过交换环境的网关上网的。在交换环境中使用NetXray或者NAI Sniffer一类的嗅探工具除了抓到自己的包以外，是不能看到其他主机的网络通信的。<br />但是我们可以通过利用ARP欺骗可以实现Sniffer的目的。<br />ARP协议是将IP地址解析为MAC地址的协议，局域网中的通信都是基于MAC地址的。 </strong></p>
<p>
<table cellspacing="0" border="1" bgcolor="#ddddd0" align="center" bordercolorlight="#999999" bordercolordark="#ffffff" class="ln">
    <tbody>
        <tr>
            <td bgcolor="#ffffff"><a target="_blank" href="http://netsecurity.51cto.com/files/uploadimg/20071010/1553513.gif"><img width="468" height="336" border="0" onload="javascript:if(this.width&gt;498)this.style.width=498;" src="http://netsecurity.51cto.com/files/uploadimg/20071010/1553513.gif" alt="" style="" onmousewheel="javascript:return big(this)" class="fit-image" /></a></td>
        </tr>
        <tr>
            <td bgcolor="#dddddd" align="center" class="it">图4 交换网络中的ARP欺骗</td>
        </tr>
    </tbody>
</table>
</p>
<p><strong>如图4所示，三台主机位于一个交换网络的环境中，其中A是网关：<br /></strong></p>
<p>
<table width="400" cellspacing="0" cellpadding="2" border="1" align="center" bordercolorlight="black" bordercolordark="#ffffff">
    <tbody>
        <tr>
            <td bgcolor="#e6e6e6" class="code">
            <pre>A: ip地址 192.168.0.1 硬件地址 AA:AA:AA:AA:AA<br />B: ip地址 192.168.0.2 硬件地址 BB:BB:BB:BB:BB<br />C：ip地址 192.168.0.3 硬件地址 CC:CC:CC:CC:CC</pre>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p><strong>在局域网中192.168.0.2和192.168.0.3都是通过网关192.168.0.1上网的，假定攻击者的系统为192.168.0.2，他希望听到192.168.0.3的通信，那么我们就可以利用ARP欺骗实现。</strong></p>
<p><strong>这种欺骗的中心原则就是arp代理的应用.主机A是局域网中的代理服务器,局域网中每个节点的向外的通信都要通过它.主机B想要听 主机C的通信,它需要先使用ARP欺骗,让主机C认为它就是主机A,这个时候它发一个IP地址为192.168.0.1,物理地址为BB:BB:BB: BB:BB:BB的ARP响应包给主机C,这样主机C会把发往主机A的包发往主机B.同理,还要让网关A相信它就是主机C,向网关A发送一个IP地址为 192.168.0.3,物理地址为BB:BB:BB:BB:BB:BB的包。</strong></p>
<p><strong>上面这一步的操作和前面的ARP欺骗的原理是一样的，但是还是有问题,过一段时间主机B会发现自己无法上网.所以下面还有一个步骤 就是需要在主机B上转发从主机A到主机C的包,并且转发从主机C到主机A的包.现在我们可以看到其实主机B在主机A和主机C的通讯中起到了一个代理的作 用,这就是为什么叫做ARP代理的原因.</strong></p>
<p><strong>具体实现要用到两个工具dsniff和fragrouter,dsniff用来实现ARP欺骗,fragroute用来进行包的转发.<br />首先利用dsniff中的arpspoof来实现ARP欺骗,dsniff软件可以在下面的网址下载:<br /><a href="http://naughty.monkey.org/%7Edugsong/dsniff"><font color="#000000">http://naughty.monkey.org/~dugsong/dsniff</font></a><br />安装这个软件包之前先要下载安装libnet.</strong></p>
<p><strong>欺骗192.168.0.3，告诉这台机器网关192.168.0.1的MAC地址是192.168.0.2的MAC地址. <br />[root@sound dsniff-2.3]# ./arpspoof -i eth0 -t 192.168.0.3 192.168.0.1<br />欺骗192.168.0.1，告诉192.168.0.1主机192.168.0.3的MAC地址是192.168.0.2的MAC地址。<br />[root@sound dsniff-2.3]# ./arpspoof -i eth0 -t 192.168.0.1 192.168.0.3</strong></p>
<p><strong>现在我们已经完成了第一步的欺骗,这个欺骗是通过arpspoof来完成的,当然您也可以使用别的工具甚至自己发包来完成.现在我们可以看到在主机A和主机C的arp列表里面都完成了我们需要的工作.在后面的透明代理中我们将使用另外一种不同的理念.</strong></p>
<p><strong>下面我们先打开linux系统中的转发包的选项:<br />[root@sound /root]# echo &quot;1&quot; &gt;/proc/sys/net/ipv4/ip_forward</strong></p>
<p><strong>下面我们可以下载大名鼎鼎的dugsong的另外一个工具fragroute,这个工具以前叫做fragrouter(仅有1字的差别)主要用于实现入侵检测系统处理分片的ip和tcp包功能的检测,本身自代包转发的功能.可以到下面的网站下载:<br /><a href="http://monkey.org/%7Edugsong/fragroute/"><font color="#000000">http://monkey.org/~dugsong/fragroute/</font></a><br />安装这个软件包之前先要下载安装libpcap和libevent.</strong></p>
<p><strong>当然我们也可以使用fragrouter来完成:<br /><a href="http://www.packetstormsecurity.org/groups/"><font color="#000000">http://www.packetstormsecurity.org/groups/</font></a> w00w00/sectools/fragrouter/ <br />[root@sound fragrouter-1.6]# ./fragrouter -B1 <br />fragrouter: base-1: normal IP forwarding</strong></p>
<p><strong>现在就可以实现在交换局域网中嗅探的目标.当然上面这些只是一些原理性的介绍,在真正的使用中会遇到很多的问题,比如如何实现对网 关A和主机C的欺骗,以及如何处理可能出现的广播风暴问题,这些可以在实践中学习.还有一个叫arpsniff的工具能够很方便的完成这一功能,很多网站 都提供下载,界面比较友好,由于和上面的原理一样,只是工具使用上的不同并且添加了一些附加的功能,所以这里不在进行介绍.</strong></p>
<p><strong>代理ARP的另外一个应用就是防火墙的透明代理的实现.我们都知道早期的防火墙大都是基于路由模式,也就是防火墙要完成一个路由的 作用.这种接入方式需要在局域网内的主机上设置防火墙的IP为代理,而且需要在外部路由器的路由表中加入一条指向防火墙的路由.这种方式的缺点在于不透 明,需要进行过多的设置,并且破坏了原有的网络拓扑.所以现在几乎全部的防火墙都实现了一种透明接入的功能,用户的路由器和客户端不用做任何修改,用户甚 至感觉不到透明接入方式防火墙的存在.这种透明接入的原理就是ARP代理.</strong></p>
<p><strong>我们现在看如何配置一台主机作为透明接入模式的防火墙(透明接入的防火墙不需要IP),</strong></p>
<p>
<table cellspacing="0" border="1" bgcolor="#ddddd0" align="center" bordercolorlight="#999999" bordercolordark="#ffffff" class="ln">
    <tbody>
        <tr>
            <td bgcolor="#ffffff"><a target="_blank" href="http://netsecurity.51cto.com/files/uploadimg/20071010/1553514.gif"><img width="307" height="176" border="0" onload="javascript:if(this.width&gt;498)this.style.width=498;" src="http://netsecurity.51cto.com/files/uploadimg/20071010/1553514.gif" alt="" onmousewheel="javascript:return big(this)" class="fit-image" /></a></td>
        </tr>
        <tr>
            <td bgcolor="#dddddd" align="center" class="it">图5 </td>
        </tr>
    </tbody>
</table>
</p>
<p><strong>如图5所示,一台防火墙连接内部网段和DMZ网段到外部路由.我们在这台用作防火墙的主机上使用linux操作系统,这样我们可以 方便的使用iptables防火墙.假设三块网卡为eth0,eth1和eth2,eth0和路由器相连,eth1和内网相连.eth2和外网相连.假设 DMZ区有2台服务器.</strong></p>
<p>
<table width="400" cellspacing="0" cellpadding="2" border="1" align="center" bordercolorlight="black" bordercolordark="#ffffff">
    <tbody>
        <tr>
            <td bgcolor="#e6e6e6" class="code">
            <pre>内网地址:192.168.1.0/24<br />DMZ地址:192.168.1.2---192.168.1.3<br />路由器的ip地址:192.168.1.1<br />eth0:AA:AA:AA:AA:AA:AA<br />eth1:BB:BB:BB:BB:BB:BB<br />eth2:CC:CC:CC:CC:CC:CC</pre>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p><strong>和前面差不多,第一步需要实现ARP欺骗,这次我们有个简单的实现.我们把路由器的IP地址和防火墙的eth1和eth2的网卡物理地址绑定,将内网和DMZ网段的IP地址和eth0的网卡绑定,在linux系统上我们用arp命令实现:</strong></p>
<p>
<table width="400" cellspacing="0" cellpadding="2" border="1" align="center" bordercolorlight="black" bordercolordark="#ffffff">
    <tbody>
        <tr>
            <td bgcolor="#e6e6e6" class="code">
            <pre>arp -s 192.168.1.1 BB:BB:BB:BB:BB:BB<br />arp -s 192.168.1.1 CC:CC:CC:CC:CC:CC <br />arp -s 192.168.1.0/24 AA:AA:AA:AA:AA:AA<br /></pre>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p><strong>第二部我们需要在基于linux的防火墙上设置路由,把目标地址是外部路由的包转发到eth0,把目标地址为内网的包转发到eth1,把目标地址是DMZ网段服务器的包转发到eth2.在linux下面用route命令实现<br /></strong></p>
<p>
<table width="400" cellspacing="0" cellpadding="2" border="1" align="center" bordercolorlight="black" bordercolordark="#ffffff">
    <tbody>
        <tr>
            <td bgcolor="#e6e6e6" class="code">
            <pre>route add 192.168.1.1 dev eth0<br />route add -net 192.168.1.0/24  dev eth1<br />route add 192.168.1.2  dev eth2route add 192.168.1.3  dev eth3 <br /></pre>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p><strong><br />(针对DMZ网段里面的每台服务器都要增加一条单独的路由) 现在我们就已经实现了一个简单的arp代理的透明接入,当然对应于防火墙的iptables部分要另外配置,iptables的配置不在本文范畴之内.</strong></p>
<strong><strong>小结</strong><br />本文介绍了ARP协议以及与其相关的安全问题。一个重要的安全问题就是ARP欺 骗，我们讲到了同一网段的ARP欺骗以及跨网段的ARP欺骗和ICMP重定向相结合的方法。由于有这些安全问题的存在，我们给出一些最基本的解决办法。最 后谈到了利用代理ARP实现在交换网络中嗅探和防火墙的透明接入。</strong>]]>
</description>
<guid isPermaLink="false">http://www.bokee.net/blogmodule/weblogcomment_viewEntry/2006665.html</guid>
<subject>Knowledge</subject>
<author>ylnba</author>
<category>Knowledge</category>
<pubDate>Thu, 24 Jul 2008 13:50:22 CST </pubDate>
</item>

<item>
<title>学会使用Linux性能分析工具</title>
<link>http://www.bokee.net/blogmodule/weblogcomment_viewEntry/2004587.html</link>
<description>
<![CDATA[Linux在具有高稳定性、可靠性的同时，具有很好的可伸缩性和扩展性，能够针对不同的应用和硬件环境调整，优化出满足当前应用需要的最佳性能。因此企业在维护Linux系统、进行系统调优时，了解系统性能分析工具是至关重要的。
<p>&nbsp;&nbsp;&nbsp; 在Linux下有很多系统性能分析工具，比较常见的有top、free、ps、time、timex、uptime等。下文将介绍几个较为重要的性能分析工具vmstat、iostat和sar及其使用。</p>
<p>&nbsp;&nbsp;<strong>&nbsp; 用vmstat监视内存使用情况</strong></p>
<p>&nbsp;&nbsp;&nbsp; vmstat是Virtual Meomory Statistics（虚拟内存统计）的缩写，可对操作系统的虚拟内存、进程、CPU活动进行监视。它是对系统的整体情况进行统计，不足之处是无法对某个进程进行深入分析。</p>
<p>&nbsp;&nbsp;&nbsp; vmstat的语法如下：</p>
<p>&nbsp;&nbsp;&nbsp; vmstat [-V] [-n] [delay [count]]</p>
<p>&nbsp;&nbsp;&nbsp; 其中，－V表示打印出版本信息；－n表示在周期性循环输出时，输出的头部信息仅显示一次；delay是两次输出之间的延迟时间；count是指按照这个时间间隔统计的次数。对于vmstat输出各字段的含义，可运行man vmstat查看。</p>
<p>&nbsp;&nbsp;&nbsp;<strong> 用iostat监视I/O子系统情况</strong></p>
<p>&nbsp;&nbsp;&nbsp; iostat是I/Ostatistics（输入/输出统计）的缩写，iostat工具将对系统的磁盘操作活动进行监视。它的特点是汇报磁盘活动统计情 况，同时也会汇报出CPU使用情况。同vmstat一样，iostat也有一个弱点，就是它不能对某个进程进行深入分析，仅对系统的整体情况进行分析。</p>
<p>&nbsp;&nbsp;&nbsp; iostat的语法如下：</p>
<p>&nbsp;&nbsp;&nbsp; iostat [ -c | -d ] [ -k ] [ -t ] [ -V ] [ -x [ device ] ] [ interval [ count ] ]</p>
<p>&nbsp;&nbsp;&nbsp; 其中，-c为汇报CPU的使用情况；-d为汇报磁盘的使用情况；-k表示每秒按kilobytes字节显示数据；-t为打印汇报的时间；-v表示打印出版 本信息和用法；-xdevice指定要统计的设备名称，默认为所有的设备；interval指每次统计间隔的时间；count指按照这个时间间隔统计的次 数。</p>
<p>&nbsp;&nbsp;&nbsp; iostat一般的输出格式如下：</p>
<p>&nbsp;&nbsp;&nbsp; Linux 2.4.18-18smp (builder.<a target="_blank" href="http://linux.chinaitlab.com/" class="channel_keylink">linux</a>.com) 2003年03月07日</p>
<p>&nbsp;&nbsp;&nbsp; avg-cpu: %user %nice %sys %idle</p>
<p>&nbsp;&nbsp;&nbsp; 4.81 0.01 1.03 94.15</p>
<p>&nbsp;&nbsp;&nbsp; Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn<br />&nbsp;&nbsp;&nbsp; dev3-0 30.31 1117.68 846.52 16104536 12197374<br />&nbsp;&nbsp;&nbsp; dev3-1 7.06 229.61 40.40 3308486 582080</p>
<p>&nbsp;&nbsp;&nbsp; 对于输出中各字段的含义，iostat的帮助中有详细的说明。</p>
<p>&nbsp;&nbsp;&nbsp; 用sar进行综合分析</p>
<p>&nbsp;&nbsp;&nbsp; 表1 sar参数说明</p>
<p>　　选项 功能</p>
<p>　　-A 汇总所有的报告</p>
<p>　　-a 报告文件读写使用情况</p>
<p>　　-B 报告附加的缓存的使用情况</p>
<p>　　-b 报告缓存的使用情况</p>
<p>　　-c 报告系统调用的使用情况</p>
<p>　　-d 报告磁盘的使用情况</p>
<p>　　-g 报告串口的使用情况</p>
<p>　　-h 报告关于buffer使用的统计数据</p>
<p>　　-m 报告IPC消息队列和信号量的使用情况</p>
<p>　　-n 报告命名cache的使用情况</p>
<p>　　-p 报告调页活动的使用情况</p>
<p>　　-q 报告运行队列和<a target="_blank" href="http://cisco.chinaitlab.com/List_7.html" class="channel_keylink">交换</a>队列的平均长度</p>
<p>　　-R 报告进程的活动情况</p>
<p>　　-r 报告没有使用的内存页面和硬盘块</p>
<p>　　-u 报告CPU的利用率</p>
<p>　　-v 报告进程、i节点、文件和锁表状态</p>
<p>　　-w 报告系统<a target="_blank" href="http://cisco.chinaitlab.com/List_7.html" class="channel_keylink">交换</a>活动状况</p>
<p>　　-y 报告TTY设备活动状况</p>
<p>　sar是System ActivityReporter（系统活动情况报告）的缩写。顾名思义，sar工具将对系统当前的状态进行取样，然后通过计算数据和比例来表达系统的当 前运行状态。它的特点是可以连续对系统取样，获得大量的取样数据；取样数据和分析的结果都可以存入文件，所需的负载很小。sar是目前Linux上最为全 面的系统性能分析工具之一，可以从14个大方面对系统的活动进行报告，包括文件的读写情况、系统调用的使用情况、串口、CPU效率、内存使用状况、进程活 动及IPC有关的活动等，使用也是较为复杂。 </p>
<p>　　sar的语法如下：</p>
<p>&nbsp;&nbsp;&nbsp; sar [-option] [-o file] t [n]</p>
<p>　　它的含义是每隔t秒取样一次，共取样n次。其中-o file表示取样结果将以二进制形式存入文件file中。</p>
<p>　　另一种语法如下：</p>
<p>&nbsp;&nbsp;&nbsp; sar [-option] [-s time] [-e time] [-i sec] [-f file]</p>
<p>　　含义是表示从file文件中取出数据，如果没有指定-ffile，则从标准数据文件/var/adm/sa/sadd取数据，其中dd表示当前 天。另外，-s time表示起始时间；-etime表示停止时间；-i sec表示取样的时间间隔，如果不指定则表示取文件中所有的数据。对于具体的选项参见表1。</p>
<p>　　一般它与-q和-u联合使用，以便对每个CPU的使用情况进行分析，比如运行如下命令：</p>
<p>&nbsp;&nbsp;&nbsp; sar -q -u 5 1</p>
<p>　　将输出如下：</p>
<p>&nbsp;&nbsp;&nbsp; Linux 2.4.18-18smp (builder.<a target="_blank" href="http://linux.chinaitlab.com/" class="channel_keylink">linux</a>.com) 2003年03月07日</p>
<p>&nbsp;&nbsp;&nbsp; 09时46分16? CPU %user %nice %system %idle<br />&nbsp;&nbsp;&nbsp; 09时46分21? all 0.20 0.00 0.00 99.80</p>
<p>&nbsp;&nbsp;&nbsp; 09时46分16? runq-sz plist-sz ldavg-1 ldavg-5<br />&nbsp;&nbsp;&nbsp; 09时46分21? 0 91 0.00 0.00</p>
<p>&nbsp;&nbsp;&nbsp; Average: CPU %user %nice %system %idle<br />&nbsp;&nbsp;&nbsp; Average: all 0.20 0.00 0.00 99.80</p>
<p>&nbsp;&nbsp;&nbsp; Average: runq-sz plist-sz ldavg-1 ldavg-5<br />&nbsp;&nbsp;&nbsp; Average: 0 91 0.00 0.00</p>
<p>　　由于sar命令太复杂，只有通过熟练使用才能了解每个选项的含义，对于sar输出中每个字段的含义运行man sar命令可以得到详细的解释。</p>
<p>&nbsp;&nbsp;&nbsp; 补充：<br />&nbsp;&nbsp;&nbsp; Sar<br />&nbsp;&nbsp;&nbsp; -A 所有的报告总和<br />&nbsp;&nbsp;&nbsp; -a 文件读，写报告<br />&nbsp;&nbsp;&nbsp; -B 报告附加的buffer cache使用情况<br />&nbsp;&nbsp;&nbsp; -b buffer cache使用情况<br />&nbsp;&nbsp;&nbsp; -c 系统调用使用报告<br />&nbsp;&nbsp;&nbsp; -d 硬盘使用报告<br />&nbsp;&nbsp;&nbsp; -g 有关串口I/O情况<br />&nbsp;&nbsp;&nbsp; -h 关于buffer使用统计数字<br />&nbsp;&nbsp;&nbsp; -m IPC消息和信号灯活动<br />&nbsp;&nbsp;&nbsp; -n 命名cache<br />&nbsp;&nbsp;&nbsp; -p 调页活动<br />&nbsp;&nbsp;&nbsp; -q 运行队列和交换队列的平均长度<br />&nbsp;&nbsp;&nbsp; -R 报告进程的活动<br />&nbsp;&nbsp;&nbsp; -r 没有使用的内存页面和硬盘块<br />&nbsp;&nbsp;&nbsp; -u CPU利用率<br />&nbsp;&nbsp;&nbsp; -v 进程，i节点，文件和锁表状态<br />&nbsp;&nbsp;&nbsp; -w 系统交换活动<br />&nbsp;&nbsp;&nbsp; -y TTY设备活动</p>
<p>&nbsp;&nbsp;&nbsp; -a 报告文件读，写报告<br />&nbsp;&nbsp;&nbsp; sar &ndash;a 5 5<br />&nbsp;&nbsp;&nbsp; SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/07/2002<br />&nbsp;&nbsp;&nbsp; 11:45:40 iget/s namei/s dirbk/s (-a)<br />&nbsp;&nbsp;&nbsp; 11:45:45 6 2 2<br />&nbsp;&nbsp;&nbsp; 11:45:50 91 20 28<br />&nbsp;&nbsp;&nbsp; 11:45:55 159 20 18<br />&nbsp;&nbsp;&nbsp; 11:46:00 157 21 19<br />&nbsp;&nbsp;&nbsp; 11:46:05 177 30 35<br />&nbsp;&nbsp;&nbsp; Average 118 18 20<br />&nbsp;&nbsp;&nbsp; iget/s 每秒由i节点项定位的文件数量<br />&nbsp;&nbsp;&nbsp; namei/s 每秒文件系统路径查询的数量<br />&nbsp;&nbsp;&nbsp; dirbk/s 每秒所读目录块的数量<br />&nbsp;&nbsp;&nbsp; ＊这些值越大，表明核心花在存取用户文件上的时间越多，它反映着一些程序和应用文件系统产生的负荷。一般地，如果iget/s与namei/s的比值大于 5，并且namei/s的值大于30，则说明文件系统是低效的。这时需要检查文件系统的自由空间，看看是否自由空间过少。</p>
<p>-b 报告缓冲区（buffer cache）的使用情况<br />&nbsp;&nbsp;&nbsp; sar -b 2 3<br />&nbsp;&nbsp;&nbsp; SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/07/2002<br />&nbsp;&nbsp;&nbsp; 13:51:28 bread/s lread/s %rcache bwrit/s lwrit/s<br />&nbsp;&nbsp;&nbsp; %wcache pread/s pwrit/s (-b)<br />&nbsp;&nbsp;&nbsp; 13:51:30 382 1380 72 131 273 52<br />&nbsp;&nbsp;&nbsp; 0 0<br />&nbsp;&nbsp;&nbsp; 13:51:32 378 516 27 6 22 72<br />&nbsp;&nbsp;&nbsp; 0 0<br />&nbsp;&nbsp;&nbsp; 13:51:34 172 323 47 39 57 32<br />&nbsp;&nbsp;&nbsp; 0 0<br />&nbsp;&nbsp;&nbsp; Average 310 739 58 58 117 50<br />&nbsp;&nbsp;&nbsp; 0 0<br />&nbsp;&nbsp;&nbsp; bread/s 平均每秒从硬盘（或其它块设备）读入系统buffer的物理块数<br />&nbsp;&nbsp;&nbsp; lread/s 平均每秒从系统buffer读出的逻辑块数<br />&nbsp;&nbsp;&nbsp; %rcache 在buffer cache中进行逻辑读的百分比（即100％ - bread/lreads）<br />&nbsp;&nbsp;&nbsp; bwrit/s 平均每秒从系统buffer向磁盘（或其它块设备）所写的物理块数<br />&nbsp;&nbsp;&nbsp; lwrit/s 平均每秒写到系统buffer的逻辑块数<br />&nbsp;&nbsp;&nbsp; %wcache 在buffer cache中进行逻辑写的百分比（即100％ - bwrit/lwrit）.<br />&nbsp;&nbsp;&nbsp; pread/sgu 平均每秒请求进行物理读的次数<br />&nbsp;&nbsp;&nbsp; pwrit/s 平均每秒请求进行物理写的次数<br />&nbsp;&nbsp;&nbsp; ＊所显示的内容反映了目前与系统buffer有关的读，写活。在所报告的数字中，最重要的是%rcache和%wcache（统称为cache命中率）两列，它们具体体现着系统buffer的效率。衡量cache效率的标准是它的命中率值的大小。<br />&nbsp;&nbsp;&nbsp; ＊如果%rcache的值小于90或者%wcache的值低于65，可能就需要增加系统buffer的数量。如果在系统的应用中，系统的I/O活动十分频繁，并且在内存容量配置比较大时，可以增加buffer<br />&nbsp;&nbsp;&nbsp; cache，使%rcache达到95左右，%wcache达到80左右。<br />&nbsp;&nbsp;&nbsp; ＊系统buffer<br />&nbsp;&nbsp;&nbsp; cache中，buffer的数量由核心参数NBUF控制。它是一个要调的参数。系统中buffer数量的多少是影响系统I/O效率的瓶颈。要增加系统 buffer数量，则要求应该有较大的内存配置。否则一味增加buffer数量，势必减少用户进程在内存中的运行空间，这同样会导致系统效率下降。 </p>
<p>&nbsp;&nbsp;&nbsp; -c 报告系统调用使用情况<br />&nbsp;&nbsp;&nbsp; sar -c 2 3<br />&nbsp;&nbsp;&nbsp; SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/07/2002<br />&nbsp;&nbsp;&nbsp; 17:02:42 scall/s sread/s swrit/s fork/s exec/s<br />&nbsp;&nbsp;&nbsp; rchar/s wchar/s (-c)<br />&nbsp;&nbsp;&nbsp; 17:02:44 2262 169 141 0.00 0.00<br />&nbsp;&nbsp;&nbsp; 131250 22159<br />&nbsp;&nbsp;&nbsp; 17:02:46 1416 61 38 0.00 0.00<br />&nbsp;&nbsp;&nbsp; 437279 6464<br />&nbsp;&nbsp;&nbsp; 17:02:48 1825 43 25 0.00 0.00<br />&nbsp;&nbsp;&nbsp; 109397 42331<br />&nbsp;&nbsp;&nbsp; Average 1834 91 68 0.00 0.00<br />&nbsp;&nbsp;&nbsp; 225975 23651<br />&nbsp;&nbsp;&nbsp; scall/s 每秒使用系统调用的总数。一般地，当4~6个用户在系统上工作时，每秒大约30个左右。<br />&nbsp;&nbsp;&nbsp; sread/s 每秒进行读操作的系统调用数量。<br />&nbsp;&nbsp;&nbsp; swrit/s 每秒进行写操作的系统调用数量。<br />&nbsp;&nbsp;&nbsp; fork/s 每秒fork系统调用次数。当4~6个用户在系统上工作时，每秒大约0.5秒左右。<br />&nbsp;&nbsp;&nbsp; exec/s 每秒exec系统调用次数。<br />&nbsp;&nbsp;&nbsp; rchar/s 每秒由读操作的系统调用传送的字符（以字节为单位）。<br />&nbsp;&nbsp;&nbsp; wchar/s 每秒由写操作的系统调用传送的字符（以字节为单位）。<br />&nbsp;&nbsp;&nbsp; ＊如果scall/s持续地大于300，则表明正在系统中运行的可能是效率很低的应用程序。在比较<br />&nbsp;&nbsp;&nbsp; 典型的情况下，进行读操作的系统调用加上进行写操作的系统调用之和，约是scall的一半左右。<br />&nbsp;&nbsp;&nbsp; -d 报告硬盘使用情况<br />&nbsp;&nbsp;&nbsp; sar -d 2 3<br />&nbsp;&nbsp;&nbsp; SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/07/2002<br />&nbsp;&nbsp;&nbsp; 17:27:49 device %busy avque r+w/s blks/s<br />&nbsp;&nbsp;&nbsp; avwait avserv (-d)<br />&nbsp;&nbsp;&nbsp; 17:27:51 ida-0 6.93 1.00 13.86 259.41<br />&nbsp;&nbsp;&nbsp; 0.00 5.00<br />&nbsp;&nbsp;&nbsp; ida-1 0.99 1.00 17.33 290.10<br />&nbsp;&nbsp;&nbsp; 0.00 0.57<br />&nbsp;&nbsp;&nbsp; 17:27:53 ida-0 75.50 1.00 54.00 157.00<br />&nbsp;&nbsp;&nbsp; 0.00 13.98<br />&nbsp;&nbsp;&nbsp; ida-1 9.50 1.00 12.00 75.00<br />&nbsp;&nbsp;&nbsp; 0.00 7.92<br />&nbsp;&nbsp;&nbsp; 17:27:55 ida-0 7.46 1.00 46.77 213.93<br />&nbsp;&nbsp;&nbsp; 0.00 1.60<br />&nbsp;&nbsp;&nbsp; ida-1 17.41 1.00 57.71 494.53<br />&nbsp;&nbsp;&nbsp; 0.00 3.02<br />&nbsp;&nbsp;&nbsp; Average ida-0 29.85 1.00 38.14 210.28<br />&nbsp;&nbsp;&nbsp; 0.00 7.83<br />&nbsp;&nbsp;&nbsp; ida-1 9.29 1.00 29.02 286.90<br />&nbsp;&nbsp;&nbsp; 0.00 3.20</p>
<p>&nbsp;&nbsp;&nbsp; device 这是sar命令正在监视的块设备的名字。<br />&nbsp;&nbsp;&nbsp; %busy 设备忙时，运行传送请求所占用的时间。这个值以百分比表示。<br />&nbsp;&nbsp;&nbsp; avque 在指定的时间周期内，没有完成的请求数量的平均值。仅在队列被占满时取这个值。<br />&nbsp;&nbsp;&nbsp; r+w/s 每秒传送到设备或者从设备传送出的数据量。<br />&nbsp;&nbsp;&nbsp; blks/s 每秒传送的块数。每块512个字节。<br />&nbsp;&nbsp;&nbsp; avwait 传送请求等待队列空闲的平均时间（以毫秒为单位）。仅在队列被占满时取这个值。<br />&nbsp;&nbsp;&nbsp; avserv 完成传送请求所需平均时间（以毫秒为单位）<br />&nbsp;&nbsp;&nbsp; ＊ida-0和ida-1是硬盘的设备名字。在显示的内容中，如果%busy的值比较小，说明用于处理<br />&nbsp;&nbsp;&nbsp; 传送请求的有效时间太少，文件系统的效率不高。要使文件系统的效率得到优化，应使%busy的数值相对高一些，而avque的值应该低一些。<br />&nbsp;&nbsp;&nbsp; -g 报告有关串口I/O情况<br />&nbsp;&nbsp;&nbsp; sar -g 3 3<br />&nbsp;&nbsp;&nbsp; SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/13/2002<br />&nbsp;&nbsp;&nbsp; 11:10:09 ovsiohw/s ovsiodma/s ovclist/s (-g)<br />&nbsp;&nbsp;&nbsp; 11:10:12 0.00 0.00 0.00<br />&nbsp;&nbsp;&nbsp; 11:10:15 0.00 0.00 0.00<br />&nbsp;&nbsp;&nbsp; 11:10:18 0.00 0.00 0.00<br />&nbsp;&nbsp;&nbsp; Average 0.00 0.00 0.00<br />&nbsp;&nbsp;&nbsp; ovsiohw/s 每秒在串囗I/O硬件出现的溢出。<br />&nbsp;&nbsp;&nbsp; ovsiodma/s 每秒在串囗I/O的直接输入，输出信道高速缓存出现的溢出。<br />&nbsp;&nbsp;&nbsp; ovclist/s 每秒字符队列出现的溢出。<br />&nbsp;&nbsp;&nbsp; -m 报告进程间的通信活动（IPC消息和信号灯活动）情况<br />&nbsp;&nbsp;&nbsp; sar -m 4 3<br />&nbsp;&nbsp;&nbsp; SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/13/2002<br />&nbsp;&nbsp;&nbsp; 13:24:28 msg/s sema/s (-m)<br />&nbsp;&nbsp;&nbsp; 13:24:32 2.24 9.95<br />&nbsp;&nbsp;&nbsp; 13:24:36 2.24 21.70<br />&nbsp;&nbsp;&nbsp; 13:24:40 2.00 36.66<br />&nbsp;&nbsp;&nbsp; Average 2.16 22.76<br />&nbsp;&nbsp;&nbsp; msg/s 每秒消息操作的次数（包括发送消息的接收信息）。<br />&nbsp;&nbsp;&nbsp; sema/s 每秒信号灯操作次数。<br />&nbsp;&nbsp;&nbsp; ＊信号灯和消息作为进程间通信的工具，如果在系统中运行的应用过程中没有使用它们，那么由sar命令报告的msg<br />&nbsp;&nbsp;&nbsp; 和sema的值都将等于0.00。如果使用了这些工具，并且其中或者msg/s大于100，或者sema/s大于100，则表明这样的应用程序效率比较 低。原因是在这样的应用程序中，大量的时间花费在进程之间的沟通上，而对保证进程本身有效的运行时间必然产生不良的影响。</p>
<p>-n 报告命名缓冲区活动情况<br />&nbsp;&nbsp;&nbsp; sar -n 4 3<br />&nbsp;&nbsp;&nbsp; SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/13/2002<br />&nbsp;&nbsp;&nbsp; 13:37:31 c_hits cmisses (hit %) (-n)<br />&nbsp;&nbsp;&nbsp; 13:37:35 1246 71 (94%)<br />&nbsp;&nbsp;&nbsp; 13:37:39 1853 81 (95%)<br />&nbsp;&nbsp;&nbsp; 13:37:43 969 56 (94%)<br />&nbsp;&nbsp;&nbsp; Average 1356 69 (95%)<br />&nbsp;&nbsp;&nbsp; c_hits cache命中的数量。<br />&nbsp;&nbsp;&nbsp; cmisses cache未命中的数量。<br />&nbsp;&nbsp;&nbsp; (hit %) 命中数量/(命中数理+未命中数量)。<br />&nbsp;&nbsp;&nbsp; ＊不难理解，(hit %)值越大越好，如果它低于90％，则应该调整相应的核心参数。 </p>
<p>&nbsp;&nbsp;&nbsp; -p 报告分页活动<br />&nbsp;&nbsp;&nbsp; sar -p 5 3<br />&nbsp;&nbsp;&nbsp; SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/13/2002<br />&nbsp;&nbsp;&nbsp; 13:45:26 vflt/s pflt/s pgfil/s rclm/s (-p)<br />&nbsp;&nbsp;&nbsp; 13:45:31 36.25 50.20 0.00 0.00<br />&nbsp;&nbsp;&nbsp; 13:45:36 32.14 58.48 0.00 0.00<br />&nbsp;&nbsp;&nbsp; 13:45:41 79.80 58.40 0.00 0.00<br />&nbsp;&nbsp;&nbsp; Average 49.37 55.69 0.00 0.00<br />&nbsp;&nbsp;&nbsp; vflt/s 每秒进行页面故障地址转换的数量（由于有效的页面当前不在内存中）。<br />&nbsp;&nbsp;&nbsp; pflt/s 每秒来自由于保护错误出现的页面故障数量（由于对页面的非法存，取引起的页面故障）。<br />&nbsp;&nbsp;&nbsp; pgfil/s 每秒通过&rdquo;页&mdash;入&rdquo;满足vflt/s的数量。<br />&nbsp;&nbsp;&nbsp; rclm/s 每秒由系统恢复的有效页面的数量。有效页面被增加到自由页面队列上。<br />&nbsp;&nbsp;&nbsp; ＊如果vflt/s的值高于100，可能预示着对于页面系统来说，应用程序的效率不高，也可能分页参数需要调整，或者内存配置不太合适。<br />&nbsp;&nbsp;&nbsp; -q 报告进程队列（运行队列和交换队列的平均长度）情况<br />&nbsp;&nbsp;&nbsp; sar -q 2 3<br />&nbsp;&nbsp;&nbsp; SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/13/2002<br />&nbsp;&nbsp;&nbsp; 14:25:50 runq-sz %runocc swpq-sz %swpocc (-q)<br />&nbsp;&nbsp;&nbsp; 14:25:52 4.0 50<br />&nbsp;&nbsp;&nbsp; 14:25:54 9.0 100<br />&nbsp;&nbsp;&nbsp; 14:25:56 9.0 100<br />&nbsp;&nbsp;&nbsp; Average 7.3 100<br />&nbsp;&nbsp;&nbsp; runq-sz 准备运行的进程运行队列。<br />&nbsp;&nbsp;&nbsp; %runocc 运行队列被占用的时间（百分比）<br />&nbsp;&nbsp;&nbsp; swpq-sz 要被换出的进程交换队列。<br />&nbsp;&nbsp;&nbsp; %swpocc 交换队列被占用的时间（百分比）。<br />&nbsp;&nbsp;&nbsp; ＊如果%runocc大于90，并且runq-sz的值大于2，则表明CPU的负载较重。其直接后果，可能使系统的响应速度降低。如果%swpocc大于 20，表明交换活动频繁，将严重导致系统效率下降。解决的办法是加大内存或减少缓存区数量，从而减少交换及页&mdash;入,页&mdash;出活动。<br />&nbsp;&nbsp;&nbsp; -r 报告内存及交换区使用情况（没有使用的内存页面和硬盘块）<br />&nbsp;&nbsp;&nbsp; sar -r 2 3<br />&nbsp;&nbsp;&nbsp; SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/14/2002<br />&nbsp;&nbsp;&nbsp; 10:14:19 freemem freeswp availrmem availsmem (-r)<br />&nbsp;&nbsp;&nbsp; 10:14:22 279729 6673824 93160 1106876<br />&nbsp;&nbsp;&nbsp; 10:14:24 279663 6673824 93160 1106876<br />&nbsp;&nbsp;&nbsp; 10:14:26 279661 6673824 93160 1106873<br />&nbsp;&nbsp;&nbsp; Average 279684 6673824 93160 1106875<br />&nbsp;&nbsp;&nbsp; freemem 用户进程可以使用的内存页面数，4KB为一个页面。<br />&nbsp;&nbsp;&nbsp; freeswp 用于进程交换可以使用的硬盘盘块，512B为一个盘块。</p>
<p>&nbsp;&nbsp;&nbsp; -u CPU利用率<br />&nbsp;&nbsp;&nbsp; sar -u 2 3<br />&nbsp;&nbsp;&nbsp; SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/14/2002<br />&nbsp;&nbsp;&nbsp; 10:27:23 %usr %sys %wio %idle (-u)<br />&nbsp;&nbsp;&nbsp; 10:27:25 2 3 8 88<br />&nbsp;&nbsp;&nbsp; 10:27:27 3 3 5 89<br />&nbsp;&nbsp;&nbsp; 10:27:29 0 0 0 100<br />&nbsp;&nbsp;&nbsp; Average 2 2 4 92<br />&nbsp;&nbsp;&nbsp; .<br />&nbsp;&nbsp;&nbsp; %usr cpu处在用户模式下时间（百分比）<br />&nbsp;&nbsp;&nbsp; %sys cpu处在系统模式下时间（百分比）<br />&nbsp;&nbsp;&nbsp; %wio cpu等待输入，输出完成（时间百分比）<br />&nbsp;&nbsp;&nbsp; %idle cpu空闲时间（百分比）<br />&nbsp;&nbsp;&nbsp; ＊在显示的内容中，%usr和<br />&nbsp;&nbsp;&nbsp; %sys这两个值一般情况下对系统无特别影响，%wio的值不能太高，如果%wio的值过高，则CPU花在等待输入，输出上的时间太多，这意味着硬盘存在 I/O瓶颈。如果%idle的值比较高，但系统响应并不快，那么这有可能是CPU花时间等待分配内存引起的。%idle的值可以较深入帮助人们了解系统的 性能，在这种情况上，%idle的值处于40~100之间，一旦它持续低于30，则表明进程竟争的主要资源不是内存而是CPU。<br />&nbsp;&nbsp;&nbsp; ＊在有大量用户运行的系统中，为了减少CPU的压力，应该使用智能多串卡，而不是非智能多串卡。智能多串卡可以承担CPU的某些负担。<br />&nbsp;&nbsp;&nbsp; ＊此外，如果系统中有大型的作业运行，应该把它们合理调度，错开高峰，当系统相对空闲时再运行。</p>
<p>&nbsp;&nbsp;&nbsp; -v 报告系统表的内容（进程，i节点，文件和锁表状态）<br />&nbsp;&nbsp;&nbsp; sar -v 2 3<br />&nbsp;&nbsp;&nbsp; SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/14/2002<br />&nbsp;&nbsp;&nbsp; 10:56:46 proc-sz ov inod-sz ov file-sz ov<br />&nbsp;&nbsp;&nbsp; lock-sz (-v)<br />&nbsp;&nbsp;&nbsp; 10:56:48 449/ 500 0 994/4147 0 1313/2048 0 5/ 128<br />&nbsp;&nbsp;&nbsp; 10:56:50 450/ 500 0 994/4147 0 1314/2048 0 5/ 128<br />&nbsp;&nbsp;&nbsp; 10:56:52 450/ 500 0 994/4147 0 1314/2048 0 5/ 128<br />&nbsp;&nbsp;&nbsp; proc-sz 目前在核心中正在使用或分配的进程表的表项数<br />&nbsp;&nbsp;&nbsp; inod-sz 目前在核心中正在使用或分配的i节点表的表项数<br />&nbsp;&nbsp;&nbsp; file-sz 目前在核心中正在使用或分配的文件表的表项数<br />&nbsp;&nbsp;&nbsp; ov 溢出出现的次数<br />&nbsp;&nbsp;&nbsp; lock-sz 目前在核心中正在使用或分配的记录加锁的表项数<br />&nbsp;&nbsp;&nbsp; ＊除ov外，均涉及到unix的核心参数，它们分别受核心参数NPROC,NIMODE,NFILE和FLOCKREC的控制。<br />&nbsp;&nbsp;&nbsp; ＊显示格式为：<br />&nbsp;&nbsp;&nbsp; 实际使用表项/整个表可以使用的表项数</p>
<p>&nbsp;&nbsp;&nbsp; 比如，proc-sz一列所显示的四个数字中，分母的100是系统中整个进程表的长度（可建立100个表项），分子上的24，26和25分别是采样的那一段时间所使用的进程表项。inod-sz，file-sz和lock-sz三列数字的意义也相同。</p>
<p>&nbsp; 三列ov的值分别对应进程表，i节点表和文件表，表明目前这三个表都没有出现溢出现象，当出现溢出时，需要调整相应的核心参数，将对应表加大。<br />&nbsp;&nbsp;&nbsp; -w 系统交换活动<br />&nbsp;&nbsp;&nbsp; sar -w 2 3<br />&nbsp;&nbsp;&nbsp; SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/14/2002<br />&nbsp;&nbsp;&nbsp; 11:22:05 swpin/s bswin/s swpot/s bswots pswch/s (-w)<br />&nbsp;&nbsp;&nbsp; 11:22:07 0.00 0.0 0.00 0.0 330<br />&nbsp;&nbsp;&nbsp; 11:22:09 0.00 0.0 0.00 0.0 892<br />&nbsp;&nbsp;&nbsp; 11:22:11 0.00 0.0 0.00 0.0 1053<br />&nbsp;&nbsp;&nbsp; Average 0.00 0.0 0.00 0.0 757<br />&nbsp;&nbsp;&nbsp; swpin/s 每秒从硬盘交换区传送进入内存的次数。<br />&nbsp;&nbsp;&nbsp; bswin/s 每秒为换入而传送的块数。<br />&nbsp;&nbsp;&nbsp; swpot/s 每秒从内存传送到硬盘交换区的次数。<br />&nbsp;&nbsp;&nbsp; bswots 每秒为换出而传送的块数。<br />&nbsp;&nbsp;&nbsp; pswch/s 每秒进程交换的数量。<br />&nbsp;&nbsp;&nbsp; ＊swpin/s，bswin/s，swpot/s和bswots描述的是与硬盘交换区相关的交换活动。交换关系到系统的效率。交换区在硬盘上对硬盘的 读，写操作比内存读，写慢得多，因此，为了提高系统效率就应该设法减少交换。通常的作法就是加大内存，使交换区中进行的交换活动为零，或接近为零。如果 swpot/s的值大于1，预示可能需要增加内存或减少缓冲区（减少缓冲区能够释放一部分自由内存空间）。 </p>
<p>&nbsp;&nbsp;&nbsp; -y 报告终端的I/O活动（TTY设备活动）情况<br />&nbsp;&nbsp;&nbsp; sar -y 2 3<br />&nbsp;&nbsp;&nbsp; SCO_SV scosvr 3.2v5.0.5 PentII(D)ISA 06/14/2002<br />&nbsp;&nbsp;&nbsp; 11:38:03 rawch/s canch/s outch/s rcvin/s xmtin/s<br />&nbsp;&nbsp;&nbsp; mdmin/s (-y)<br />&nbsp;&nbsp;&nbsp; 11:38:05 5 0 951 0 1 0<br />&nbsp;&nbsp;&nbsp; 11:38:07 10 0 996 0 0 0<br />&nbsp;&nbsp;&nbsp; 11:38:09 4 0 2264 0 0 0<br />&nbsp;&nbsp;&nbsp; Average 6 0 1404 0 1 0<br />&nbsp;&nbsp;&nbsp; rawch/s 每秒输入的字符数（原始队列）<br />&nbsp;&nbsp;&nbsp; canch/s 每秒由正则队列（canonical<br />&nbsp;&nbsp;&nbsp; queue）处理的输入字符数。进行正则处理过程中，可以识别出一些有特殊意义的字符。比如，&lt;Del&gt;;(中断字符)，&lt; ctrl&gt;;(退出符)，&lt;Bksp&gt;;(退格键)等。因此，canch/s中的计数不包括这些有特殊意义的字符。<br />&nbsp;&nbsp;&nbsp; outch/s 每秒输出的字符数。<br />&nbsp;&nbsp;&nbsp; rcvin/s 每秒接收的硬件中断次数。<br />&nbsp;&nbsp;&nbsp; xmtin/s 每秒发出的硬件中断次数。<br />&nbsp;&nbsp;&nbsp; mdmin/s 每秒modem中断次数。<br />&nbsp;&nbsp;&nbsp; ＊应该特别说明，sar命令可以对任意终端活动进行统计，所谓任意终端，是指任意tty设备。它们可以是串行终端，主控台，伪终端等等。<br />&nbsp;&nbsp;&nbsp; ＊在这几个量中，modem中断次数mdmin/s应该接近0。其它没有特殊要求，但如果每发送一个字符，中断的数量就动态地增加，这表明终端线出了差错，可能是接触不好。</p>]]>
</description>
<guid isPermaLink="false">http://www.bokee.net/blogmodule/weblogcomment_viewEntry/2004587.html</guid>
<subject>linux</subject>
<author>ylnba</author>
<category>linux</category>
<pubDate>Wed, 23 Jul 2008 16:45:19 CST </pubDate>
</item>

<item>
<title>linux软件优化</title>
<link>http://www.bokee.net/blogmodule/weblogcomment_viewEntry/2003935.html</link>
<description>
<![CDATA[<font size="3"><font face="宋体 ">系统需要优化，软件同样需要优化^_^<br /> 1。firefox终极优化<br /> firefox3.0是目前浏览器中算是最好的一款，但通过优化之后，你会发现它会速度更快更好用！<br /> 在firefox的url栏中输入：about:config进入配置页面，然后搜索以下的关键项,如果搜索不到这些关键项就自己新建，bool的就建布尔，整数的就建整数，字符串的就建字符串<br /> <br /> 更改　<br /> network.http.pipelining　为　true<br /> network.http.pipelining.firstrequest&nbsp;&nbsp;true <br /> network.http.proxy.pipeliningtrue <br /> network.http.pipelining.maxrequests 为48 <br /> nglayout.ititialpaint.delay&nbsp; &nbsp;0 <br /> network.http.max-connections&nbsp; &nbsp; 48 <br /> network.http.max-connections-per-server 24 <br /> network.http.max-persistent-connections-per-proxy&nbsp;&nbsp;16 <br /> network.http.max-persistent-connections-per-server 8 <br /> network.http.pipeliningtrue<br /> network.dns.disableIPv6&nbsp;&nbsp;true <br /> ui.submenuDelay 0 <br /> dom.disable_window_status_change&nbsp;&nbsp;true <br /> browser.cache.memory.capacity30720<br /> browser.cache.disk.capacity 110592 <br /> browser.search.openintabtrue <br /> content.notify.backoffcount 5 <br /> plugin.expose_full_path true <br /> content.switch.threshold750000 <br /> content.notify.ontimertrue <br /> content.notify.interval750000 <br /> content.max.tokenizing.time2250000 <br /> content.interrupt.parsingtrue<br /> <br /> <font color="#000000">browser.cache.disk.parent_directory&nbsp; &nbsp;/tmp</font><br /> <br /> <font color="#000000">注意：最后一条browser.cache.disk.parent_directory&nbsp;&nbsp;/tmp是必须将/tmp目录通过tmpfs虚拟后才有优化效果，详情请参考《ubuntu8.04系列二－－系统优化篇》第十六条优化方法。</font><br /> <br /> 修改后重启firefox即可<br /> <br /> 2。amule的优化<br /> 打开amule--设置--常规，把昵称改成：<br /> [TLF][CHN][VeryCD][Cyndi][TwED2K]yourname<br /> <br /> 打开amule--设置--连接，进行如下设置：<br /> 空挡分派：1kb/s<br /> 绝对上限：500<br /> 最大连接数：7500<br /> <br /> 打开amule--设置--服务器--列表，把下面的服务器列表添加进去：<br /> http://www.emule.org.cn/server.met<br /> http://www.srv1000.com/x1/server.met<br /> http://emule.945.cn/server.met<br /> http://www.edk-files.com/x1/server.met<br /> http://corpo.free.fr/server.met<br /> <br /> 可以把你windows下的emule目录的config目录中拷贝所有的server.met到.aMule目录中去，aMule的默认路径是~/.aMule/ <br /> <br /> 打开Networks--Kad,然后把原来的地址替换成这个：<br /> http://www.emule-inside.net/nodes.dat<br /> 然后按左边的按钮下载链接点<br /> <br /> 使用amule的时候如果不开防火墙，速度会更快一些<br /> <br /> amule与Firefox的关联:<br /> <br /> 在Firefox中输入about:config ，新建下面2个变量:<br /> <br /> 1.新建一个boolean类型network.protocol-handler.external.ed2k,值为true,表示处理ed2k的协议<br /> 2.新建一个string类型network.protocol-handler.app.ed2k,值为/usr/bin/ed2k,指定处理ed2k协议的程序为/usr/bin/ed2k<br /> <br /> 3。OpenOffice的启动速度优化<br /> 1).打开 OpenOfficeWriter，在菜单中选择：工具-&gt;选项-&gt;内存：<br /> 2).修改：撤销命令-&gt;步数：20<br /> 3).修改：图形缓冲区-&gt;用于openoffice：128m，每个对象的内存：20m<br /> 4).激活：系统栏快速启动 <br /> </font></font>
<ul type="1"><font size="3"><font face="宋体 ">
    <li>取消Java 选项页中的&lsquo;使用Java 运行环境&rsquo;设置input method<br /> </li>
    </font></font></ul>
    <font size="3"><font face="宋体 "><br /> 4。adobeflash for firefox 的优化问题<br /> 对于32位的ubuntu来说，adobeflash不是一个问题，当使用firefox时，ff会自动提醒下载flash插件，安装的过程会比较顺利<br /> 但对于64位的ubuntu来说，安装flash会麻烦一点，请按照以下步骤进行：<br /> 首先必须确定已经安装了32位的兼容包：<br /> sudoapt-get install ia32-libs ia32-libs-gtk linux32 lib32asound2<br /> 然后安装以下软件：<br /> sudoapt-get install nspluginwrapper gsfonts-x11<br /> <br /> 8.04的默认浏览器是firefox3.0beta5,刚开始使用firefox时，它会提示需要下载flash插件，如图：<br /> <br /> <img width="232" height="363" border="0" alt="" src="http://images.blogcn.com/2008/4/20/11/luckiss,20080420110418298.png" /><br /> <br /> <font color="#000000"><br /> </font>按下按钮，会出现下图：<br /> <br /> <img width="801" height="275" border="0" alt="" src="http://images.blogcn.com/2008/4/20/11/luckiss,20080420110533062.png" /><br /> <br /> 选择安装adobeflash player,然后再选择安装flashplugin-nonfree:<br /> <br /> <img border="0" alt="" onmousewheel="return imgzoom(this);" onclick="if(!this.resized) {return true;} else {window.open(this.src);}" onmouseover="if(this.width&gt;screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onload="if(this.width&gt;screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" src="http://images.blogcn.com/2008/4/20/11/luckiss,20080420110532899.png" /><br /> <font color="#000000"><br /> </font>安装完后重启firefox就能浏览flash了，我们打开浏览器的：工具（tools）--附加组件（Add-ones），就会看到安装了flash9.0r124插件：<br /> <br /> <img border="0" alt="" onmousewheel="return imgzoom(this);" onclick="if(!this.resized) {return true;} else {window.open(this.src);}" onmouseover="if(this.width&gt;screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onload="if(this.width&gt;screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" src="http://images.blogcn.com/2008/4/20/11/luckiss,20080420110418640.png" /><br /> <br /> <font color="#000000"><br /> </font>通过以上方法安装flash后，有些朋友会觉得浏览器的cpu占用率会比较高，例如打开:<br /> http://news.sina.com.cn这种flash比较多的网站，会发现系统迅速变慢，大家可以在终端输入命令：top观察自己打开<a target="_blank" href="http://news.sina.com.cn/">http://news.sina.com.cn</a>后，flash的cpu占用情况，例如我的占用情况如下：<br /> <br /> <img border="0" alt="" onmousewheel="return imgzoom(this);" onclick="if(!this.resized) {return true;} else {window.open(this.src);}" onmouseover="if(this.width&gt;screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onload="if(this.width&gt;screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" src="http://images.blogcn.com/2008/4/20/11/luckiss,20080420110418535.png" /><br /> <br /> <font color="#000000"><br /> </font>cpu占用率平均已经到40%以上。<br /> 有办法进行优化吗？方法还是有的，跟着我来^_^:<br /> 首先我们到firefox的官网下载最新版本的firefox，地址在下面：<br /> <a target="_blank" href="ftp://ftp.mozilla.org/pub/firefox/releases/3.0b5/linux-i686/zh-CN/">ftp://ftp.mozilla.org/pub/firefox/releases/3.0b5/linux-i686/zh-CN/</a><br /> 下载firefox-3.0b5.tar.bz2压缩包下来，放到用户目录下/home/用户名，然后解压后会出现一个firefox文件夹，然后到我提供的以下地址下载一个较低版本的flash9播放器（r31版本）：<br /> http://pickup.mofile.com/5266941889499040，文件提取密码是5266941889499040，下载后把它解压到/tmp，然后把里面的所有文件到复制到~/.mozilla/plugins目录下。<br /> 最后在桌面，点击右键，选择&ldquo;创建启动器&rdquo;，出现如图对话框：<br /> <br /> <img width="453" height="212" border="0" alt="" src="http://images.blogcn.com/2008/4/20/11/luckiss,20080420110753566.png" /><br /> <br /> <br /> 在&ldquo;名称&rdquo;中填firefox，命令中填&ldquo;/home/你的用户名/firefox/firefox&rdquo;,然后选择一个自己喜欢的图标，最后按&ldquo;关闭&rdquo;就 OK了，现在点击一下这个新建的程序链接图标看看（注意：这时不要打开系统默认的firefox浏览器），我们会看见我们启动了刚刚下载回来的 firefox，我们再进入&ldquo;工具&mdash;附加组件&rdquo;看看，我们会发现插件那里会出现flash9 r31字样：<br /> <br /> <img width="243" height="70" border="0" alt="" src="http://images.blogcn.com/2008/4/20/11/luckiss,20080420110824435.png" /><br /> <br /> <br /> 现在我们再打开<a target="_blank" href="http://news.sina.com.cn/">http://news.sina.com.cn</a>试试看，OK，flash也正确显示，再在终端输入命令看看现在flash的cpu占用率情况，我的情况如图：<br /> <img border="0" alt="" onmousewheel="return imgzoom(this);" onclick="if(!this.resized) {return true;} else {window.open(this.src);}" onmouseover="if(this.width&gt;screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onload="if(this.width&gt;screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" src="http://images.blogcn.com/2008/4/20/11/luckiss,20080420110824507.png" /><br /> <br /> <br /> flash的cpu平均占用率已经降为13%左右，可见优化效果是很明显的！<br /> （小贴士：<br /> 通过上述我介绍的优化flash方法，我们的系统目前其实已经拥有了两个firefox浏览器，一个是系统默认的firefox，一个是放在用户目录的 firefox，需要谨记的一点是千万不要把下载回来的firefox去覆盖系统默认的firefox，覆盖的后果可能会导致系统默认的firefox不 能启动。<br /> 还有优化方法是下载一款叫swiftfox的浏览器，它是根据不同型号的cpu对firefox进行优化后的版本，可以到以下地址下载：<br /> <a target="_blank" href="http://www.getswiftfox.com/">http://www.getswiftfox.com/</a><br /> 目前的版本是3.0pre1,很明显比firefox的更新速度要慢一点<br /> ）<br /> 另外如果出现flash乱码现象，可以用以下两条命令解决：<br /> sudocp /etc/fonts/conf.d/49-sansserif.conf/etc/fonts/conf.d/49-sansserif.conf.bak<br /> sudorm /etc/fonts/conf.d/49-sansserif.conf<br /> 对于linux下使用ff的朋友，一定要注意字体是否很合适，不合适的字体会严重降低ff的绘制能力，尽量不能使用压缩的字体并且考虑使用ttf字体，推荐文泉译正黑字体<a target="_blank" href="http://wenq.org/?ZenHei">http://wenq.org/?ZenHei</a><br /> firefox另外一个强大的功能就是支持扩展插件，通过插件可以满足你对网络应用的多种需求，关于firefox各种强大好玩的插件有很多文章都有介绍，大家可以自己搜索，我就不在这里叙述了。<br /> <br /> 5。VirtualBox优化<br /> 建议virtualbox的内存选项不用调太高，一般应用把内存跳到192mb~256mb就足够，<br /> 内存调小一点，虚拟系统的速度会快一点，另外记得装了虚拟系统后，一定要安装virtualbox的工具箱,只有装了virtualbox工具箱才能让虚拟系统跑得更快，而且能访问到主机的硬盘资料<br /> <br /> 6。用3D桌面提高工作效率的经验<br /> <br /> 3D桌面除了炫，还能有效提高工作效率，以下是自己的一些经验总结：<br /> 使用窗口组合提高工作效率<br /> 把2～3个相同组的窗口（例如：同样是资源管理窗口，同样是终端窗口）组合在一起，这样通过super+左右键就可以不通过鼠标在各个同组的窗口间快速切换。也可以通过鼠标而不通过键盘进行快速切换。<br /> 使用窗口组合的好处还可以节省下方面板的位置，可以在一个桌面上打开更多的任务而不需切换桌面<br /> <br /> 使用RingSwitch<br /> 使用RingSwitch的好处是能快速把所有文档浏览一遍，并能快速转到相应文档上，如果是文档较多，可以使用窗口平铺效果<br /> 不使用shiftswitch的原因是：1。没有快速浏览效果，因为每个文档之间互相覆盖，有些文档会被遮挡掉，容易切换到错误的文档上，大大降低工作效率，它唯一的好处是比较大气，好看一点。效率与美观之间，我选择了效率。<br /> <br /> 使用Avantwindow Navigator<br /> awn除了可以让面板看起来更炫外，还可以自动隐藏，使用awn的好处是可以节省下方面板的位置，增大了下方的可视工作面积<br /> <br /> 打开上方面板的隐藏按钮<br /> 在上方面板的属性选项中打开&rdquo;显示隐藏按钮&rdquo;，通过这个按钮可以把上方面板手动隐藏，隐藏的好处当然就是为了增大上方的可视工作面积，另外如果不想看到经常闪烁的eva图表，手动隐藏面板就是一个好选择<br /> <br /> 习惯用快捷键使用当前窗口透明化，局部快速放大这几个功能<br /> 例如你看电子书的时候，想写一些笔记，这时用快捷键进行窗口透明化跟局部快速放大，不用鼠标，不用切换窗口，就会让你有飞一般感觉。<br /> 以下是自己的快捷键设置：<br /> 透明度快捷键<br /> compiz-manager-&gt;generalsettings-动作－OpacitySettings:<br /> 增加不透明度：alt＋数字键盘1<br /> 降低不透明度：alt+数字键盘0<br /> 放大缩小快捷键：<br /> compiz-manager-&gt;Enhancedzoom插件-&gt;动作－ZoomMovement：<br /> &nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; 按键<br /> zoomin&nbsp;&nbsp;super+数字键盘1<br /> arealock super+L<br /> level1&nbsp; &nbsp; super+end<br /> level2&nbsp; &nbsp; super+数字键盘2<br /> level3&nbsp; &nbsp; super+数字键盘3<br /> aereto&nbsp; &nbsp;&nbsp;&nbsp;windowsuper+Z<br /> zoomleft&nbsp;&nbsp;super+方向键左<br /> right&nbsp; &nbsp; super+方向键右<br /> up&nbsp; &nbsp;&nbsp; &nbsp;super+方向键上<br /> down&nbsp; &nbsp;&nbsp; &nbsp;super+方向键下<br /> zoomout&nbsp; &nbsp;super+数字键盘0<br /> <br /> 使用旋转立方体提高效率<br /> 通过ctrl+alt＋左右方向键，以及通过鼠标的边缘旋转（我的指针边缘旋转设置：左上角&ldquo;显示桌面&rdquo;，右上角&ldquo;平铺所有窗口&rdquo;，左下角&ldquo;立方体向左旋 转&rdquo;，右下角&ldquo;立方体向右旋转&rdquo;），通过这样的设置，就可以快速在不同桌面间快速切换，举例说，你在桌面2用vbox+xp打开了虚拟机，通过鼠标在边缘 上的快速切换，就可以在Linux跟XP之间快速切换，那种感觉只能用爽快来形容。<br /> <br /> 使用屏幕捕捉<br /> 打开screenshot，可以随时通过super+鼠标左键把屏幕截获成图片<br /> 使用屏幕反色功能<br /> 据说此功能用于看文字的时候，眼睛不会那么疲劳</font></font>]]>
</description>
<guid isPermaLink="false">http://www.bokee.net/blogmodule/weblogcomment_viewEntry/2003935.html</guid>
<subject>linux</subject>
<author>ylnba</author>
<category>linux</category>
<pubDate>Wed, 23 Jul 2008 14:04:36 CST </pubDate>
</item>

<item>
<title>Linux系统管理员成长经验</title>
<link>http://www.bokee.net/blogmodule/weblogcomment_viewEntry/2003749.html</link>
<description>
<![CDATA[&nbsp; 随着Linux应用的扩展许多朋友开始接触Linux，根据学习Windwos的经验往往有一些茫然的感觉：不知从何处开始学起。作为一个Linux系统 管理员，我看了许多有关Linux的文档和书籍，并为学习Linux付出了许多艰苦的努力。当真正获得了一份正式的Linux系统管理工作后，我更加深刻 地理解了Linux的灵魂：服务与多用户。Linux系统知识是非常广博的，但是只要掌握了重点知识，管理它并没有想象中的那么可怕。在下面我会将作为系 统管理员的一些工作心得和总结出来的经验系统地介绍给大家。
<p>&nbsp;&nbsp;&nbsp; <strong>一、 学习的目的</strong></p>
<p>&nbsp;&nbsp;&nbsp; 通过Linux的学习掌握UNIX的目的想必不用多说了，在这个网络<a target="_blank" href="http://www.21itjob.com/job/default.aspx" class="channel_keylink">人才</a>身 价倍增的年代，想靠技术吃饭又不想掌握网络和编程技术是不明智的。当一人第一次听说Linux并跃跃欲试的时候，总会提出几个？，它是什么(What)? 为什么要用它(W hy)? 怎样学习它(How)?做为开放源码运动的主要组成部分，Linux的应用越来越广泛，从我们平时的娱乐、学习，到商业、政府办公，再到大规模计算的应 用。为了满足人们的需求，各种各样的、基于Linux的应用软件层出不穷。只要具备了LinuX的基本功，并具有了自学的能力之后，都可以通过长期的学习 将专项内容予以掌握。</p>
<p>&nbsp;&nbsp;<strong>&nbsp; 二、 从命令开始从基础开始</strong></p>
<p>&nbsp;&nbsp;&nbsp; 常常有些朋友一接触Linux 就是希望构架网站，根本没有想到要先了解一下Linux 的基础。这是相当困难的。虽然Linux桌面应用发展很快，但是命令在Linux中依然有很强的生命力。Linux是一个命令行组成的操作系统,精髓在命 令行，无论图形界面发展到什么水平这个原理是不会变的，Linux命令有许多强大的功能：从简单的磁盘操作、文件存取、到进行复杂的多媒体图象和流媒体文 件的制作。这里笔者把它们中比较重要的和使用频率最多的命令，按照它们在系统中的作用分成几个部分介绍给大家，通过这些基础命令的学习我们可以进一步理解 Linux系统：<br />&nbsp;&nbsp;&nbsp; 安装和登录命令：login、 shutdown、 halt、 reboot 、mount、umount 、chsh<br />&nbsp;&nbsp;&nbsp; 文件处理命令：file、 mkdir、 grep、dd、 find、 mv 、ls 、diff、 cat、 ln<br />&nbsp;&nbsp;&nbsp; 系统管理相关命令： df、 top、 free、 quota 、at、 lp、 adduser、 groupadd kill、 crontab、 tar、 unzip、 gunzip 、last<br />&nbsp;&nbsp;&nbsp; 网络操作命令：ifconfig、 ip 、ping 、 netstat 、telnet、 ftp、 route、 rlogin rcp 、finger 、mail 、nslookup<br />&nbsp;&nbsp;&nbsp; 系统<a target="_blank" href="http://security.chinaitlab.com/" class="channel_keylink">安全</a>相关命令： passwd 、su、 umask 、chgrp、 chmod、chown、chattr、sudo、 pswho</p>
<p><strong>三、 选择一本好的Linux书籍</strong> </p>
<p>&nbsp;&nbsp;&nbsp; 无论在论坛还是读者反馈中，我们看到最多的问题往往是某个新手，在安装或使用<a target="_blank" href="http://linux.chinaitlab.com/" class="channel_keylink">linux</a>的过程中遇到一个具体的问题就开始提问， 很多都是重复性的问题， 甚至有不少人连基本的问题描述都不是很清楚。这说明很多初学<a target="_blank" href="http://linux.chinaitlab.com/" class="channel_keylink">linux</a>的 人还没有掌握基本功。怎样才能快速提高掌握linux的基本功呢? 最有效的方法莫过于学习权威的linux工具书，工具书对于学习者而言是相当重要的。一本错误观念的工具书却会让新手整个误入歧途。目前国内关于 linux的书籍有很多不过精品的不多，笔者强烈建议阅读影印本的&ldquo;o'reilly原版linux图书<a href="http://www.oreilly.com.cn/">http://www.oreilly.com.cn/</a> &rdquo;，而且出版社还提供了一个非常好的路线图：<a href="http://www.oreilly.com.cn/guide/guide_linux.php">http://www.oreilly.com.cn/guide/guide_linux.php</a> 见图－1。<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp; </p>
<p align="center"><img width="450" height="490" twffan="done" src="http://linux.chinaitlab.com/UploadFiles_7565/200807/20080723120316260.jpg" alt="" /></p>
<p><br />&nbsp;&nbsp;&nbsp;&nbsp;<br /><strong>&nbsp;&nbsp;&nbsp; 四 、养成在命令行下工作</strong></p>
<p>&nbsp;&nbsp;&nbsp; 一定要养成在命令行下工作的习惯，要知道X－window只是运行在命令行模式下的一个应用程序。在命令行下学习虽然一开始进度较慢，但是熟悉后，您未来 的学习之路将是以指数增加的方式增长的。从网管员来说，命令行实际上就是规则，它总是有效的，同时也是灵活的。即使是通过一条缓慢的调制解调器线路，它也 能操纵几千公里以外地远程系统。</p>
<p><strong> 五、用Unix思维思考Linux</strong> </p>
<p>&nbsp;&nbsp;&nbsp; 由于Linux是参照Unix的思想来设计的，理解和掌握它就必须以Unix的思维来进行，而不能以<a target="_blank" href="http://windows.chinaitlab.com/" class="channel_keylink">Windows</a>思维。不可否认，windows在市场上的成功很大一部分在于技术思想的独到之处。可是这个创新是在面对个人用户的前提下进行的，而面对着企业级的服务应用，它还是有些力不从心。多年来在计算机操作系统领域一直是二者独大：unix在<a target="_blank" href="http://server.chinaitlab.com/" class="channel_keylink">服务器</a>领域，<a target="_blank" href="http://windows.chinaitlab.com/" class="channel_keylink">Windows</a>在个人用户领域。由此可见，用户需求决定了所采用的操作系统。不管什么原因，如果要学习Linux，那么首先要将思维从Windows的&ldquo;这个小河&rdquo; 中拖出来，放入Unix的海洋。</p>
<p><strong>&nbsp;&nbsp;&nbsp; 六 、学习shell</strong></p>
<p>&nbsp;&nbsp;&nbsp; 对于Shell（中文名称壳），习惯Windows的读者肯定是非常陌生的，因为Windows只有一个&ldquo;Shell&rdquo;(如果可以说是Shell的话)， 那就是Windows自己。用一句话容易理解的解释就是，shell是用户输入命令与系统解释命令之间的中介。最直观的说法，一种Shell有一套自己的 命令。举一个容易理解的例子，Linux的标准Shel是Bash Shel；Solaris的shell是B shell；Linux的Shell是以命令行的方式表现出来的。读者可能会不理解，Windows从命令行&ldquo;进化&rdquo;到了图形界面，那么Linux现在还 使用命令行岂不是一种倒退?</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 当初我刚刚接触Linux时就曾有过这种想法。可是后来发现，如果使用图形界面，那么分配给应用软件的资源就少了，在价格昂贵的<a target="_blank" href="http://server.chinaitlab.com/" class="channel_keylink">服务器</a>上，能够以较低的硬件配置实现同样的功能是非常重要的。</p>
<p>&nbsp;&nbsp;&nbsp; 下面举例说明，一台服务器有1GB内存，假设其中512MB用于处理图形界面，若要安装一个需要784MB内存的数据库软件，惟一的办法就是扩大内存。但 是如果使用命令行，系统可能只需要64MB内存，其它的内存就可以供数据库软件使用了。使用命令行，不仅是内存，而且CPU及硬盘等资源的占用都要节省很 多。所以，作为服务器使用命令行是优点而不是缺点。既然Shell有这么多优点，就必须要学习它。</p>
<p><strong>&nbsp;&nbsp;&nbsp; 七、勤于实践</strong></p>
<p>&nbsp;&nbsp;&nbsp; 要增加自己Linux 的技能，只有通过实践来实现了。所以，赶快找一部计算机，赶快安装一个 Linux 发行版本，然后进入精彩的Linux世界。相信对于你自己的 Linux 能力必然大有斩获。此外，人脑不像计算机的硬盘一样，除非硬盘坏掉了或者是资料被你抹掉了，否则储存的资料将永远而且立刻的记忆在硬盘中。在人类记忆的曲 线中，你必须要不断的重复练习才会将一件事情记得比较熟。</p>
<p>&nbsp;&nbsp;&nbsp; 同样的，学习 Linux 也一样，如果你无法经常学习的话，学了后面的，前面的忘了。你对Linux命令熟悉后你可以开始搭建一个小的Linux网络，这是最好的实践方法。 Linux是网络的代名词，Linux网络服务功能非常强大，不论是邮件服务器、Web服务器、DNS服务器等都非常完善。当然你不需搭建所有服务，可以 慢慢来。需要说明的是这个Linux网络对于初学者有两三台计算机即可。自己多动手，不要非要等着别人帮你解决问题。</p>
<p><strong> 八、学会使用文档</strong> </p>
<p>&nbsp;&nbsp;&nbsp; 和私有操作系统不同，各个Linux的发行版本的技术支持时间都较短，这对于Linux初学者是往往不够的。其实当你安装了一个完整的Linux系统后其 中已经包含了一个强大的帮助，只是可能你还没有发现和使用它们的技巧。主流Linux发行版都自带非常详细的文档（包括手册页和FAQ），从系统安装到系 统<a target="_blank" href="http://security.chinaitlab.com/" class="channel_keylink">安全</a>, 针对不同层次的人的详尽文档，仔细阅读文档后40%问题都可在此解决。查阅经典工具书和Howto，特别是Howto是全球数以万计的Linux、 Unix的经验总结非常有参考价值通常40％的问题同样可以解决。安装一个新的软件时先看README,再看INSTALL然后看FAQ,最后才动手安 装,这样遇到问题就知道为什么。如果说明文档不看,结果出了问题再去论坛来找答案反而浪费时间。</p>
<p>&nbsp;&nbsp;&nbsp; 当查找文档时， 一定要看文档是在何种版本、何种环境及何种状态下出现的何种结果。对于文档的有效性， 一时还无法在操作前就知道结论如何， 那么对某个专题或问题，阅读相关的多篇文章将会节省大量的时间， 还可以保证尽量&ldquo;干净&rdquo;的环境，有效避免因为不同操作所造成的更多问题。操作时要仔细核对各个步骤及输出的结果，尽量保持与文档一致。</p>
<p>&nbsp;&nbsp;&nbsp; <strong>九、在Linux论坛获取帮助</strong></p>
<p>&nbsp;&nbsp;&nbsp; 如果上面的措施没有解决问题，此时你就需要Linux社区的帮助了。需要说明的是你要有周全的思考，准备好你的问题，不要草率的发问，否则只会得到到草率 的回答或者根本得 不到任何答案。越表现出在寻求帮助前为解决问题付出的努力，你越能得到实质性的帮助。最好先搜寻一下论坛是否有您需要的文章。这样可以获得事半功倍的效 果。</p>
<p>&nbsp;&nbsp;&nbsp; 你需要提供精确有效的信息。这并不是要求你简单的把成吨的出错代码或者数据完全转储摘录到你的提问中。如果你有庞大而复杂的测试条件，尽量把它剪裁得越小 越好。可能你会遇到这种情况，对于一个问题会出现不同内容回答，这时你需要通过实践来验证。另外把这个问题放在其他Linux社区请求帮助也是一种选择。 如果得不到答案，请不要以为我们觉得无法帮助你。有时只是看到你问题的人不知道答案罢了。这时换一个社区是不错的选择。</p>
<p><strong> 十、学习专业英文</strong> </p>
<p>&nbsp;&nbsp;&nbsp; 如果你想深入学习Linux,看不懂因为文档实在是太难了。写的最好的,最全面的文档都是英语写的,最先发布的技术信息也都是用英语写的。即便是非英语国家的人发布技术文档,也都首先翻译成英语在国际学术杂志和网络上发表。</p>
<p>&nbsp;&nbsp;&nbsp; 通过man、info等命令，可以从在线帮助中快速地获得所需要的命令和操作方法。不要害怕海量的系统帮助，仔细阅读几个man或info文档就会发现， 这些帮助几乎都按照固定格式写成一命令名称、参数、参数说明、使用例子、参考等。当英语成为一种习惯， 就会自觉地查找或订阅<a target="_blank" href="http://internet.chinaitlab.com/" class="channel_keylink">互联网</a>上感兴趣的英文材料。这样，在不知不觉中就已经和世界同步。</p>
<p>&nbsp;&nbsp;&nbsp;<strong> 十一、在社区共享你的经验</strong></p>
<p>&nbsp;&nbsp;&nbsp; 随着Linux应用的扩展，出现了不少Linux社区。其中有一些非常优秀的社区：水木清华、其中有一些非常优秀的社区：<a href="http://www.linuxforum.net/">www.linuxforum.net</a>（国内最高水平GNU站点）、<a href="http://www.chinaunix.net/">http://www.chinaunix.net/</a> （中国最大的Unix技术社区），随着知识的不断积累，就可以把自己动手解决一些前人没有遇到的问题写出文档在网络上共享给其他读者。这个时候， 也就成为了一名&ldquo;高手&rdquo;。Linux的使用者一般都是专业人士，他们有着很好的电脑背景且愿意协助他人，Linux高手更具有鼓励新手的文化精神。</p>
<p>&nbsp;&nbsp;&nbsp; 最后是一个笔者的Linux学习的路线图（roadmap）：</p>
<p>&nbsp;&nbsp;&nbsp; 了解Linux 的基础知识，这些包含了用户管理、群组的概念、权限的观念等；<br />&nbsp;&nbsp;&nbsp; 掌握至少50个以上的常用命令；<br />&nbsp;&nbsp;&nbsp; 掌握.tgz、.rpm等软件包的常用安装方法<br />&nbsp;&nbsp;&nbsp; 学习添加外设，安装设备驱动程序（比如网卡）<br />&nbsp;&nbsp;&nbsp; 熟悉Linux文件系统 和目录结构。<br />&nbsp;&nbsp;&nbsp; 掌握vi,gcc,gdb等常用编辑器，编译器，调试器 。<br />&nbsp;&nbsp;&nbsp; 理解shell别名、管道、I/O重定向、输入和输出以及shell脚本编程。<br />&nbsp;&nbsp;&nbsp; 网络的基础包括： 掌握<a target="_blank" href="http://cisco.chinaitlab.com/List_6.html" class="channel_keylink">路由</a>概念、OSI七层网络模型、TCP/IP模型及相关服务对应的层次对于Linux学习非常重要的。然后学习Linux环境下的组网。</p>
<p>&nbsp;&nbsp;&nbsp; 以上是笔者学习Linux一些经验，希望对你有些帮助。</p>]]>
</description>
<guid isPermaLink="false">http://www.bokee.net/blogmodule/weblogcomment_viewEntry/2003749.html</guid>
<subject>linux</subject>
<author>ylnba</author>
<category>linux</category>
<pubDate>Wed, 23 Jul 2008 13:17:37 CST </pubDate>
</item>

<item>
<title>关于VPN链路中的MTU传输问题</title>
<link>http://www.bokee.net/blogmodule/weblogcomment_viewEntry/2000405.html</link>
<description>
<![CDATA[一、问题概述： <br />在我们的实际组网中经常遇到此类问题： <br />1）	某些网站浏览没有问题，而某些网站浏览非常慢甚至无法浏览。QQ等正常没有任何问题。 <br />2）	无法下载大的文件。 <br />3）	EMAIL无法发大附件。 <br />二、问题分析： <br />一般所来是由于路径MTU不匹配的缘故，特别是在经过了VPN链路的时候，譬如ADSL&nbsp;PPPOE拨号，L2TP,PPTP,IPSEC,GRE隧道等情况。下面就以GRE隧道为例来说明MTU的问题，其他隧道协议类似只是头部字节不同而已。 <br />拓扑结构： <br />&nbsp; <br /> <br />VPN网关1和2之间建立了一条GRE隧道，VPN1&nbsp;VPN2的外网口均为以太网口，MTU为1500。PC与SERVER通过该GRE隧道互访。 <br />分析过程： <br />	PC在ping&nbsp;&ndash;f&nbsp;&ndash;l&nbsp;1448&nbsp;SERVER&nbsp;的时候可以ping&nbsp;通，而ping&nbsp;&ndash;f&nbsp;&ndash;l&nbsp;1449&nbsp;SERVER的时候却收到报文不可分片错误。 <br /> PC出来的IP报文长度为1448＋8（ICMP）＋20（IP），到达VPN网关1，VPN网关1发到GRE隧道口，封装GRE头（4），再加上外层 IP头，到达VPN网关外层以太口，这时IP报文的长度已经变为：1448＋8＋20＋4＋20＝1500字节，刚好等于以太口的MTU，于是被顺利传 送。而ping&nbsp;1449时，到达外层以太口为1501字节，超出了1500的MTU，又因为报文DF位被设置，于是就只能丢弃改报文，并返回DF错误。 <br />上述实验中出现此结果是因为DF被置位，导致无法分片。但是如果DF没有置位则可以正常的通过但是会出现分片的现象。不过现在很多服务器譬如 WEB为了提高效率以及安全问题等所发出的包是不允许分片的。并且大多防火墙、IPS等设备，这些设备通常也是不允许分片通过的。因此就出现了有些网站无 法浏览，大文件无法传输的情况。 <br /> <br />解决方法：&nbsp; <br />假设PC建立了到SERVER的HTTP连接，PC希望从SERVER下载一个大的网页。SERVER接收到PC的请求后开始发送大网页文件，其 IP的DF位置1，不允许分片，IP报文长度为1500字节。到达VPN网关2的外网口（以太）后，VPN网关2发现其长度超过了1500个字节，于是将 其丢弃，并给SERVER发回一个目的地址不可达的ICMP信息，同时指出&ldquo;MTU&nbsp;of&nbsp;next&nbsp;hop:&nbsp;1500&rdquo;。PC接收到该消息后，又按照 1500字节对外发送，又被丢弃，于是就形成了循环，无法通讯。 <br />根据上述的分析，很容易得到如下解决方式，在VPN网关2的出接口设置MTU为1500－4－20＝1476，这样VPN网关2返回ICMP不 可达消息时将给出&rdquo;MTU&nbsp;of&nbsp;next&nbsp;hop:&nbsp;1476&rdquo;。SERVER将以1476作为自己的最大MTU对外发送，到达VPN网关1，封装 GRE和外层IP头后就不会超过1500而顺利发到对端。这个是下载问题的解决，如果要解决上传的问题，在相应方向的接口修改MTU即可。当然也可以修改 TCPMSS，不过这个是影响到TCP的windows从而减小了包的长度。另外修改操作系统的最大MTU值也是可行的，不过比较麻烦。<br />
<table cellspacing="4" cellpadding="1" border="3" align="center" class="attachtable">
    <tbody>
        <tr>
            <td align="center" colspan="2"><br /><img border="0" src="http://bbs.chinaunix.net/attachments/month_0807/20080709_6bb98d383ddedb5c83daNc7XdU6dMkmS.jpg" alt="" /></td>
        </tr>
    </tbody>
</table>]]>
</description>
<guid isPermaLink="false">http://www.bokee.net/blogmodule/weblogcomment_viewEntry/2000405.html</guid>
<subject>vpn</subject>
<author>ylnba</author>
<category>vpn</category>
<pubDate>Tue, 22 Jul 2008 08:18:51 CST </pubDate>
</item>

<item>
<title>人事主管最常用的面试题和最喜欢的答案</title>
<link>http://www.bokee.net/blogmodule/weblogcomment_viewEntry/1997475.html</link>
<description>
<![CDATA[<table cellspacing="3" cellpadding="0" width="93%" align="center" border="0" class="zhi14">
    <tbody>
        <tr>
            <td>
            <p>人事主管最常用的面试题和最喜欢的答案</p>
            <p>&nbsp;&nbsp;&nbsp; 问题1:如果我录用你，你认为你在这份工作上会待多久呢？</p>
            <p>&nbsp;&nbsp;&nbsp; A.这问题可能要等我工作一段时间后，才能比较具体地回答。<br />&nbsp;&nbsp;&nbsp; B.一份工作至少要做3年、5年，才能学习到精华的部分。<br />&nbsp;&nbsp;&nbsp; C.这个问题蛮难回答的，可能要看当时的情形。<br />&nbsp;&nbsp;&nbsp; D.至少2年，2年后我计划再出国深造。</p>
            <p>&nbsp;&nbsp;&nbsp; ■解答：选择B最多，A次之。B的回答能充分显示出你的稳定性，不过，这必须配合你的履历表上，之前的工作是否也有一致性。A的回答则是非常实际，有些人事主管因为欣赏应征者的坦诚，能够接受这样的回答。</p>
            <p>&nbsp;&nbsp;&nbsp; 问题2:除了我们公司之外，你还应征了其它哪些公司呢？</p>
            <p>&nbsp;&nbsp;&nbsp; A.除了向贵公司这样的计算机外设产品公司外，我还应征了&times;&times;饮料公司、&times;&times;软件设计公司及&times;&times;化工公司。<br />&nbsp;&nbsp;&nbsp; B.因为是通过<a class="channel_keylink" href="http://www.21itjob.com/job/default.aspx" target="_blank">人才</a>网站，所以有很多公司与我联络，不胜枚举。<br />&nbsp;&nbsp;&nbsp; C.由于我只对计算机公司较感兴趣，因此除贵公司外，我还应征了&times;&times;及&times;&times;公司。<br />&nbsp;&nbsp;&nbsp; D.我不是很积极地想换工作，这半年多来陆陆续续寄了一些履历，公司名字不太记得。</p>
            <p>&nbsp;&nbsp;&nbsp; ■解答：最理想的回答是C。C的回答可以显示出应征者的目标明确，对于自己的下一个工作应该在哪里，思考得很清楚。</p>
            <p>&nbsp;&nbsp;&nbsp; 问题3:你希望5年后达到什么成就？</p>
            <p>&nbsp;&nbsp;&nbsp; A.做一天和尚敲一天钟，尽人事听天命、顺其自然。<br />&nbsp;&nbsp;&nbsp; B.依我的机灵及才干，晋升到部门经理是我的中期目标。<br />&nbsp;&nbsp;&nbsp; C.自己独当一面开公司。<br />&nbsp;&nbsp;&nbsp; D.&ldquo;全力以赴&rdquo;是我的座右铭，希望能随着经验的增加，被赋予更多的职责及挑战。</p>
            <p>&nbsp;&nbsp;&nbsp; ■解答：最理想的回答是D。</p>
            <p>&nbsp;&nbsp;&nbsp; 问题4:如果你离开现职，你认为你的老板会有什么反应？</p>
            <p>&nbsp;&nbsp;&nbsp; A.很震惊，因为老板对我算是很信赖，我就如同他的左右手一样。<br />&nbsp;&nbsp;&nbsp; B.还好吧，他大概心里也有数，反正公司现在也不忙。<br />&nbsp;&nbsp;&nbsp; C.他大概习惯了，反正他手下的人来来去去已是司空见惯。<br />&nbsp;&nbsp;&nbsp; D.我想他一定会生气地破口大骂，他是一个相当情绪化的人。</p>
            <p>&nbsp;&nbsp;&nbsp; ■解答：最理想的回答是A。面谈者想借此了解你和前(现)任主管的相处情形，以及你在主管心目中的地位如何？</p>
            <p>&nbsp;&nbsp;&nbsp; 问题5:你为什么想来我们公司工作？</p>
            <p>&nbsp;&nbsp;&nbsp; A.主要是这份工作的内容很吸引我。<br />&nbsp;&nbsp;&nbsp; B.贵公司在业界颇出名的，听说管理也很人性化。<br />&nbsp;&nbsp;&nbsp; C.我的大学同学在贵公司会计部工作，是他建议我来应征的。<br />&nbsp;&nbsp;&nbsp; D.贵公司所处的产业，以及在业界的声誉、工作性质，都很吸引我。</p>
            <p>&nbsp;&nbsp;&nbsp; ■解答：最理想的回答是D。</p>
            </td>
        </tr>
    </tbody>
</table>]]>
</description>
<guid isPermaLink="false">http://www.bokee.net/blogmodule/weblogcomment_viewEntry/1997475.html</guid>
<subject>心灵港湾</subject>
<author>ylnba</author>
<category>心灵港湾</category>
<pubDate>Mon, 21 Jul 2008 00:54:44 CST </pubDate>
</item>

<item>
<title>VPN介绍及其安全性问题探讨</title>
<link>http://www.bokee.net/blogmodule/weblogcomment_viewEntry/1991812.html</link>
<description>
<![CDATA[&nbsp; <strong>1、VPN简介</strong>
<p>　<strong>　1.1　VPN的概念</strong></p>
<p>　　VPN(Virtual Private Network)，即虚拟专用网或虚拟私用网，是指利用开放的公共网络资源建立私有传输通路，将远程的分支机构，商业伙伴，移动办公人员等连接起来，并且提供<a target="_blank" href="http://security.chinaitlab.com/" class="channel_keylink">安全</a>的 端到端的数据通信的一种技术。它有两层含义：第一，它是&ldquo;虚拟的&rdquo;，即用户实际上并不存在一个独立专用的网络，既不需要建设或租用专线，也不需要装备专用 的设备，而是将其建立在分布广泛的公共网络上，就能组成一个属于自己专用的网络;第二，它是&ldquo;专用的&rdquo;，相对于&ldquo;公用的&rdquo;来说，它强调私有性和<a target="_blank" href="http://security.chinaitlab.com/" class="channel_keylink">安全</a>可靠性。而对于这个问题，也是很值得探讨的，在文献中指出有两方面值得注意，就是安全性和可用性。在这里我们姑且不必着眼于个别字眼，而就按我们通常的理解来进行讨论。</p>
<p>　<strong>　1.2　VPN的历史</strong></p>
<p>　　VPN当然不是一开始就有的，我们简单回顾一下它的发展阶段。刚开始企业是自己建设专门线路或者更向前发展一下是租用专门线路进行远程通信，无 疑这样所花费用巨大，而且资源利用率很低，属于独占性质的，只有实力雄厚的公司才能负担的起;随着Internet时代的到来，通过IP<a target="_blank" href="http://cisco.chinaitlab.com/List_11.html" class="channel_keylink">协议</a>传输客户应用，一系列<a target="_blank" href="http://cisco.chinaitlab.com/List_11.html" class="channel_keylink">协议</a>不 断推出，其中包括IPSec，人们发现基于IPSec的虚拟专用网络，即IPSec-VPN比租用专线要便宜很多;随着Internet的进一步发展又引 出一个问题：安全性和Web应用。在浏览器中内嵌SSL处理程序解决了这个问题，于是SSL-VPN诞生了;这时有人说：&ldquo;浏览器不能处理所有的问题，许 多复杂的事务处理需要一个资源丰富的客户端。&rdquo;这就使IPSec占了优势，他们继续使用IPSec-VPN;确实，浏览器并不能处理很多复杂的事务，一个 完善的应用解决方案需要认证机制，而且一些不支持Web的应用也不能采用SSL-VPN;移动设备，CACHE，身份窃取等促使SSL必须具备新的特点以 使其能改进成为一个足够安全的解决办法。所有的这些促进了VPN技术的发展，使其更加安全可靠，简便易用，而不仅仅追求于数据的获取和传输。</p>
<p><strong>　　1.3　VPN技术简介</strong></p>
<p>　　我们通常认为VPN具备以下几个特点：安全保障，QoS，可扩充性和灵活性，可管理性。在为保证数据的安全性方面，目前主要采用四项技术：隧道 (Tunneling)技术，加解密(Encryption &amp; Decryption)技术，密钥管理(Key Management)技术，使用者与设备认证(Authentication)技术。VPN有三种解决方案，分别是Access VPN(接入VPN)，Intranet VPN(内部VPN)，Extranet VPN(外部VPN)。企业的内部人员移动或有远程办公需要，或者商家要提供B2C的安全访问服务，就可以考虑使用Access VPN。要进行企业内部各分支机构的互联，使用Intranet VPN是很好的方案。如果是提供B2B之间的安全访问服务，则可以考虑。Extranet VPN。而VPN的设计一般包含以下原则：安全性、网络优化、VPN管理等。</p>
<p><strong>2、三种VPN技术</strong> </p>
<p><strong>　　2.1　IPSec VPN</strong></p>
<p>　　IPSec<a target="_blank" href="http://cisco.chinaitlab.com/List_11.html" class="channel_keylink">协议</a>是 网络层协议，是为保障IP通信而提供的一系列协议族，主要针对数据在通过公共网络时的数据完整性，安全性和合法性等问题设计的一整套隧道，加密和认证方 案。远程用户需安装特定的客户端软件，相对来说比较复杂，对于非专业人员或不是很熟悉这个协议的人来说，有一定的难度。而且新增用户比较困难，但是由于 IPSec协议是在网络层上的，与上层协议无关，所以可以随时添加和修改应用程序，对于应用层协议没有特殊要求，所以它的应用领域非常之广。它提供的是网 络边缘到客户端的安全保护，仅对从客户到VPN网关之间的通道加密。</p>
<p>　<strong>　2.2　SSL VPN</strong></p>
<p>　　SSL协议是套接层协议，是为保障基于Web的通信的安全而提供的加密认证协议，提供的是应用程序的安全服务而不是网络的安全服务。与 IPSec相比，SSL VPN不需要特殊的客户端软件，仅一个Web浏览器即可，而且现在很多浏览器本身内嵌SSL处理功能，这就更加减少了复杂性。而且由于它是运行于应用层 的，与底层协议无关，所以增加用户很简单，但是应用程序扩展比较麻烦。其次，因为并不是所有的应用都是基于Web的，这也是它的一个限制。它保证端到端的 安全，从客户端到<a target="_blank" href="http://server.chinaitlab.com/" class="channel_keylink">服务器</a>进行全程加密。</p>
<p>　<strong>　2.3　MPLS VPN</strong></p>
<p>　　MPLS是一种在开放的通信网上利用标签进行数据高速，高效传输的技术，它将第三层的包<a target="_blank" href="http://cisco.chinaitlab.com/List_7.html" class="channel_keylink">交换</a>转换成第二层的包<a target="_blank" href="http://cisco.chinaitlab.com/List_7.html" class="channel_keylink">交换</a>，以标记替代传统的IP<a target="_blank" href="http://cisco.chinaitlab.com/List_6.html" class="channel_keylink">路由</a>， 兼有第二层的分组转发和第三层的路由技术的优点，是一种&ldquo;边缘路由，核心交换&rdquo;的技术。MPLS-VPN可扩展性好，速度快，配置简单，但是一旦出现故 障，解决起来比较困难。基于MPLS的VPN是无连接的，无须定义隧道，这种特点使得MPLS尤其适用于动态隧道技术[3]。</p>
<p><strong>3、VPN的安全性需要加强</strong> </p>
<p>　　近几年来VPN的安全性得到了很大的加强，但依然存在一些安全隐患，下面我们就来简单介绍一下。如果加密密钥设的长一些，比如将加密算法 DES_SSL转换成3DES_DES将明显改善VPN的安全性，采用128 bit或者更多位密码也会更好，然而，一些浏览器和设备提供者不提倡运用如此烦杂的密码，这是处于整个系统考虑，不但要追求安全性而且要考虑效率问题。</p>
<p>　　IPSec-VPN在客户端需要一台台式机或其他设备以便接入网络。而提供给客户更多的权限来检查或监视VPN的安全性也是可行和需要的，因为 有的缺陷是在客户运行使用中发现的。ISAKMP(Internet Security Association Key Management Protocol，Internet安全连接和密钥管理协议)是用来在Internet环境下建立SA(Security Association，安全连接)和密钥。由于它支持包层面的加密，所以在IPSec VPN中广泛应用。一旦你操作了ISAKMP包使得内容无效或不正常，就能够冲击另一端的客户，从而导致一个否定服务事件发生。这时你可以不采用这种易引 起攻击的模式，转而用一种包过滤技术，因为在这种攻击模式中，在安全隧道建立起来之前的那个阶段很少有包交换，而允许信息交换(NISCC Reference：273756/NISCC/ISAKMP)。</p>
<p>　　除此之外，另一个威胁就是利用被认为可信任的高速缓存通过窗口是可以绕过认证过程的，这种方法不是通过这个认证过程而是将数据散列开形成子序列 利用标记进行传输。当然，这样可以提高系统的响应时间，但同时却也给攻击者创造了机会，攻击者们同样可以得到这种标记利用散列子序列进入VPN网络而不需 要经过认证。阻止这种被认为可信任的高速缓存能够解决这个问题。密码储存又引起另一个VPN管理问题。密码也是易被攻击者利用来入侵网络了一种途径。一旦 入侵者取得了可信任的密码就能来攻击连接或者是自由进出系统做出破坏活动，从而可能引起很严重的后果。基于这个考虑，密码的<a target="_blank" href="http://www.storworld.com/" class="channel_keylink">存储</a>管 理似乎应被禁止。用于Microsoft VPN中的PPTP(Point-to-Point Tunneling Protocol，点到点隧道协议)被发现在安全方面有许多脆弱性，PPTP中的MS-CHAP和MPPE，它们的缺陷使得攻击者有很多可以利用的地方。 例如发起字典攻击来对抗局域网管理者的认证信息是可能的，这样做的结果就是窃取到密码。而且PPTP<a target="_blank" href="http://server.chinaitlab.com/" class="channel_keylink">服务器</a>本身也是能够被骗过的，会话密钥能够再次被使用。鉴于此，Microsoft公司也已经推出了很多补丁包来修复这个问题。</p>
<p>　　对于VPN接入的安全性和功能性进行良好平衡的一个比较好的方法就是设置一种自适应的协议子集。当一个用户拨入VPN时，协议子集管理系统就检 查用户的原IP地址是否是可信任的。如果是在家里或者是用一个3G卡拨入比在外面拨入所授予的权力要多一些。关于自适应协议子集的有趣的一点就是它们可能 没有被执行。了解如何接入和调整总是好事，但是有趣的是我们会发现人们运行如此重要的一些基础结构时却对其潜在安全隐患考虑得不是那么充分。</p>
<p>　<strong>　4、VPN进一步研究</strong></p>
<p>　　VPN已经在各行各业得到广泛应用，随着VPN的发展，人们不仅仅满足于其现有的功能。而是对它的安全性以及QoS提出了更高的要求，于是开始 探索更新的策略方法和各种算法等来完善其性能。对于MPLS VPN我们考虑更多的是如何安排LSP的带宽分配，这将大大影响VPN的QoS，这就要求在满足用户需要的基础上最大限度提高网络资源的利用率。而现实问 题是往往一些链路过分利用而另一部分链路的利用却不充分，这就牵扯到VPN的TE(Traffic Engineer，流量工程)问题。软管模型应这些要求诞生了，已有很多文章介绍软管模型，能够帮助我们了解这一技术。而且还提出一些非常有效的算法加以 解决这个问题。如文献[5]中就详细介绍了一种方案。而在文献[6]中讲述了在下一代IPv6中VPN的动态和安全管理。无论如何，随着人们的探索，将出 现越来越多而且更加有效的方法来充实VPN。</p>
<p>　　<strong>5、结束语</strong></p>
<p>　　VPN为LSP和用户都带来了好处，简单点说，节省了大量的资金，组网快捷，而且安全性也比较好。所有的这一切从近年来VPN的飞速发展中就可 以看出来，人们为什么如此热衷于此，必有其过人的一面，但是同时我们看到现在VPN还不是十全十美的，在它的安全性方面还存在隐患。但也要相信VPN的明 天会更好。</p>
<p>&nbsp;</p>]]>
</description>
<guid isPermaLink="false">http://www.bokee.net/blogmodule/weblogcomment_viewEntry/1991812.html</guid>
<subject>vpn</subject>
<author>ylnba</author>
<category>vpn</category>
<pubDate>Fri, 18 Jul 2008 10:30:51 CST </pubDate>
</item>

<item>
<title>网络管理员要为自己的疏忽买单</title>
<link>http://www.bokee.net/blogmodule/weblogcomment_viewEntry/1991628.html</link>
<description>
<![CDATA[做网管时间久了，技术上过分自信自我感觉良好，觉得一切都在自己的掌握之中。因此，在解决问题时形成心理定势，想当然地进行操作。笔者曾经做过网管，经历 过也目睹过网管们因疏忽造成的恶果。总结这些，深深觉得作为网管是疏忽不得，如果你疏忽了，你一定会为自己的疏忽买单。下面笔者追述两例网管为自己的疏忽 买单的案例。
<p>　　<strong>一、为疏忽而丢掉工作</strong></p>
<p>　　笔者曾经兼任本地一重点中学的网络管理员。该校在本地享有极高的声誉，每年的暑期招生工作非常紧张，为此该校在2007年的招生前夕部署了招生系统，采用网上招生和现场招生两种形式。</p>
<p>　　首先介绍一下该校网络拓扑，由于行政楼涉及的敏感部门比较多，所以，根据需要划分了多个VLAN，并设置了相应的访问策略，以提高数据访问<a target="_blank" href="http://security.chinaitlab.com/" class="channel_keylink">安全</a>。不同VLAN的计算机均使用不同的IP地址段、子网掩码和默认网关。招生系统属于学生处这个子网。</p>
<p align="center"><img border="1" twffan="done" src="http://cisco.chinaitlab.com/UploadFiles_6776/200807/20080714115858133.jpg" alt="图1" style="border-color: rgb(0, 0, 0);" /></p>
<p align="center">图1</p>
<p>　　招生的前一天，学生处又新购置了4台计算机，要求接入校园网络，扩充招生系统， 和学校的数据库<a target="_blank" href="http://server.chinaitlab.com/" class="channel_keylink">服务器</a>进行一些数据的交流。当天对这四台计算机部署了招生系统的客户端，由于时间已晚，就没有连接入子网进行测试。认为小事一桩，在第二天早晨8：30招生开始之前10分钟搞定。</p>
<p>　　第二天，我将分配给新计算机的IP地址信息写在纸上，交给新分来的小张按照图示把这4台计算机分别连接至一号<a target="_blank" href="http://cisco.chinaitlab.com/List_7.html" class="channel_keylink">交换</a>机的21~24端口。大概过了20分钟，小张从学生处打电话过来，两台机器已经顺利接入校园网和nternet,另外两台则无法正常通讯。这时，距离招生开始还有10分钟，学生及其家长都已经准备好了。学生处已经打电话催了，我赶紧跑过去。</p>
<p>　　来到学生处，首先在&ldquo;设备管理器&rdquo;中查看了一下网卡驱动程序的安装情况一切正常，没有黄色的 &quot;!&quot;提示。在网络属性中查看了一下TCP/IP<a target="_blank" href="http://cisco.chinaitlab.com/List_11.html" class="channel_keylink">协议</a>和IP地址信息的设置也是正常，TCP/IP<a target="_blank" href="http://cisco.chinaitlab.com/List_11.html" class="channel_keylink">协议</a>已经安装，且IP地址、子网掩码和默认网关设置正确。ping了一下本地计算机的IP地址也是正常，说明网卡工作正常。Ping了一下另外一台也不通的计算机的IP地址，连接正常，说明物理链路没有问题，<a target="_blank" href="http://cisco.chinaitlab.com/List_7.html" class="channel_keylink">交换</a>机工作正常。</p>
<p>　　一切正常，那问题出在哪呢?我开始有些紧张，头涔涔了。时间已经过了8:30，有些不耐烦的学生和家长开始叫嚷了。校领导，急得进进出出，脸色非常难看。当时真后悔昨天没有进行测试，但后悔有什么用。</p>
<p>　　我又Ping另外两台计算机，不通;Ping了一下该VLAN的默认网关，也不通。再Ping网络内的<a target="_blank" href="http://server.chinaitlab.com/" class="channel_keylink">服务器</a>和<a target="_blank" href="http://cisco.chinaitlab.com/List_6.html" class="channel_keylink">路由</a>器 的默认网关，也是不通!看来，问题出在默认网关上，也就是说，其实就是出在交换机上。既然两台计算机之间都可以Ping到，但为什么无法Ping到默认网 关，也无法Ping到同一VLAN内的其他计算机了呢?是不是这两台计算机的跳线插错了，接到其他VLAN端口当中去了?</p>
<p>　　到行政楼配线间一看，果不其然，Switche-Catalyst 2900是上下两排共48个端口，这位老弟按照我的纸条把4条跳线全插在上一排了(我的图示把端口画成了一排)，结果使用的不是21-24，而是21、 23、25、27如图2所示。事实上，25和27端口属于另外一个VIAN。将相应的跳线改到21-24,再回到学生处测试，所有计算机全部连通!</p>
<p align="center"><img border="1" twffan="done" src="http://cisco.chinaitlab.com/UploadFiles_6776/200807/20080714115859714.jpg" alt="图2" style="border-color: rgb(0, 0, 0);" /></p>
<p align="center">图2</p>
<p>　　这时候，时间已经9.00了，几百个学生和家长足足等了半个小时。当然我必须为自己的疏忽买单，从此不再兼任这所学校的网络管理员了。事后我进行了反思：网络管理员小小的疏忽，往往给企业、单位造成无形的损失。走在事前，不要过分迷信自己的技术。</p>
<p><strong>二、年终奖为疏忽买单</strong> </p>
<p>　　这个案例来自我的一位网管朋友。朋友是一家烟草企业在本地分公司的CIO，前段时间从总公司申请到一定的