﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><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>BlogJava-心有多大舞台便有多大-随笔分类-linux</title><link>http://www.blogjava.net/jjwwhmm/category/30246.html</link><description>Embrace changes, pursue excellence, share niceness. 
</description><language>zh-cn</language><lastBuildDate>Thu, 15 Apr 2010 23:27:43 GMT</lastBuildDate><pubDate>Thu, 15 Apr 2010 23:27:43 GMT</pubDate><ttl>60</ttl><item><title>终于把postfix跟imap搞好了，庆贺下！</title><link>http://www.blogjava.net/jjwwhmm/archive/2010/04/14/318282.html</link><dc:creator>pony</dc:creator><author>pony</author><pubDate>Wed, 14 Apr 2010 09:41:00 GMT</pubDate><guid>http://www.blogjava.net/jjwwhmm/archive/2010/04/14/318282.html</guid><wfw:comment>http://www.blogjava.net/jjwwhmm/comments/318282.html</wfw:comment><comments>http://www.blogjava.net/jjwwhmm/archive/2010/04/14/318282.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjwwhmm/comments/commentRss/318282.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjwwhmm/services/trackbacks/318282.html</trackback:ping><description><![CDATA[这段时间看postfix的架构文档，总算对邮件系统有了个皮毛的认识。<br />
在想不知能否在软件开发中借鉴下postfix的架构经验。<br />
现在已经能通过postfix发送邮件，并能通过courier-imap的pop3接收邮件了，<br />
总结经验就是要多去看日志，跟邮件相关的日志可以去看/var/log/maillog，另外配置文件一点点的改，不要一次更改过多的内容。<br />
接下来把认证相关的改成mysql，把webmail配置上。<br />
<img src ="http://www.blogjava.net/jjwwhmm/aggbug/318282.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjwwhmm/" target="_blank">pony</a> 2010-04-14 17:41 <a href="http://www.blogjava.net/jjwwhmm/archive/2010/04/14/318282.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Postfix架构</title><link>http://www.blogjava.net/jjwwhmm/archive/2010/04/08/317692.html</link><dc:creator>pony</dc:creator><author>pony</author><pubDate>Thu, 08 Apr 2010 01:45:00 GMT</pubDate><guid>http://www.blogjava.net/jjwwhmm/archive/2010/04/08/317692.html</guid><wfw:comment>http://www.blogjava.net/jjwwhmm/comments/317692.html</wfw:comment><comments>http://www.blogjava.net/jjwwhmm/archive/2010/04/08/317692.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjwwhmm/comments/commentRss/317692.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjwwhmm/services/trackbacks/317692.html</trackback:ping><description><![CDATA[Postfix接收邮件的架构示意图：<br />
<table>
    <tbody>
        <tr>
            <td align="center" bgcolor="#f0f0ff"> <a href="http://www.postfix.org/trivial-rewrite.8.html">trivial-<br />
            rewrite(8)</a><a href="http://www.postfix.org/trivial-rewrite.8.html"></a> </td>
        </tr>
        <tr>
            <td> Network </td>
            <td> <tt> -&gt; </tt> </td>
            <td align="center" bgcolor="#f0f0ff" valign="middle"> <a href="http://www.postfix.org/smtpd.8.html">smtpd(8)</a>
            </td>
            <td> <br />
            </td>
            <td rowspan="2" align="center">
            <table>
                <tbody>
                    <tr>
                        <td align="center">
                        ^<br />
                        <tt> | </tt> </td>
                        <td align="center"> <tt> |<br />
                        v </tt>
                        </td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
        <tr>
            <td colspan="3"> <br />
            </td>
            <td> <tt> \ </tt> </td>
        </tr>
        <tr>
            <td> Network </td>
            <td> <tt> -&gt; </tt> </td>
            <td align="center" bgcolor="#f0f0ff" valign="middle"> <a href="http://www.postfix.org/qmqpd.8.html">qmqpd(8)</a>
            </td>
            <td> <tt> -&gt; </tt> </td>
            <td align="center" bgcolor="#f0f0ff" valign="middle"> <a href="http://www.postfix.org/cleanup.8.html">cleanup(8)</a>
            </td>
            <td> <tt> -&gt; </tt> </td>
            <td align="center" bgcolor="#f0f0ff" valign="middle"> <a href="http://www.postfix.org/QSHAPE_README.html#incoming_queue"> incoming </a> </td>
        </tr>
        <tr>
            <td colspan="3"> <br />
            </td>
            <td> <tt> / </tt> </td>
        </tr>
        <tr>
            <td colspan="2"> <br />
            </td>
            <td align="center" bgcolor="#f0f0ff" valign="middle"> <a href="http://www.postfix.org/pickup.8.html">pickup(8)</a>
            </td>
            <td> <tt> &lt;- </tt> </td>
            <td align="center" bgcolor="#f0f0ff" valign="middle"> <a href="http://www.postfix.org/QSHAPE_README.html#maildrop_queue"> maildrop </a> </td>
        </tr>
        <tr>
            <td colspan="4" align="center"> <br />
            </td>
            <td align="center"> ^<br />
            <tt> | </tt> </td>
        </tr>
        <tr>
            <td> Local </td>
            <td> <tt> -&gt; </tt> </td>
            <td align="center" bgcolor="#f0f0ff" valign="middle"> <a href="http://www.postfix.org/sendmail.1.html">sendmail(1)</a>
            </td>
            <td> <tt> -&gt; </tt> </td>
            <td align="center" bgcolor="#f0f0ff" valign="middle"> <a href="http://www.postfix.org/postdrop.1.html">postdrop(1)</a></td>
        </tr>
    </tbody>
</table>
Postfix发送邮件的架构示意图：<br />
<table>
    <tbody>
        <tr>
            <td rowspan="2" align="center" bgcolor="#f0f0ff"> <a href="http://www.postfix.org/trivial-rewrite.8.html">trivial-<br />
            rewrite(8)</a>
            </td>
            <td> <br />
            </td>
            <td align="center" bgcolor="#f0f0ff"> <a href="http://www.postfix.org/smtp.8.html">smtp(8)</a> </td>
            <td> <tt> -&gt; </tt> </td>
            <td> Network </td>
        </tr>
        <tr>
            <td align="right"> <tt> / </tt> </td>
        </tr>
        <tr>
            <td rowspan="2" colspan="4"> <br />
            </td>
            <td rowspan="2" align="center">
            <table>
                <tbody>
                    <tr>
                        <td align="center">
                        ^<br />
                        <tt> | </tt> </td>
                        <td align="center"> <tt> |<br />
                        v </tt>
                        </td>
                    </tr>
                </tbody>
            </table>
            </td>
            <td align="right"> <tt> - </tt> </td>
            <td align="center" bgcolor="#f0f0ff"> <a href="http://www.postfix.org/lmtp.8.html">lmtp(8)</a> </td>
            <td> <tt> -&gt; </tt> </td>
            <td> Network </td>
        </tr>
        <tr>
            <td align="left"> <tt> / </tt> </td>
        </tr>
        <tr>
            <td align="center" bgcolor="#f0f0ff"> <a href="http://www.postfix.org/QSHAPE_README.html#incoming_queue"> incoming </a> </td>
            <td> <tt> -&gt; </tt> </td>
            <td align="center" bgcolor="#f0f0ff"> <a href="http://www.postfix.org/QSHAPE_README.html#active_queue"> active </a> </td>
            <td> <tt> -&gt; </tt> </td>
            <td align="center" bgcolor="#f0f0ff"> <a href="http://www.postfix.org/qmgr.8.html">qmgr(8)</a> </td>
            <td align="right"> <tt> --- </tt> </td>
            <td align="center" bgcolor="#f0f0ff"> <a href="http://www.postfix.org/local.8.html">local(8)</a> </td>
            <td> <tt> -&gt; </tt> </td>
            <td> File, command </td>
        </tr>
        <tr>
            <td rowspan="2" colspan="2"> <br />
            </td>
            <td rowspan="2" align="center">
            <table>
                <tbody>
                    <tr>
                        <td align="center">
                        ^<br />
                        <tt> | </tt> </td>
                        <td align="center"> <tt> |<br />
                        v </tt>
                        </td>
                    </tr>
                </tbody>
            </table>
            </td>
            <td rowspan="2" colspan="2"> <br />
            </td>
            <td align="left"> <tt> \ </tt> </td>
        </tr>
        <tr>
            <td align="right"> <tt> - </tt> </td>
            <td align="center" bgcolor="#f0f0ff"> <a href="http://www.postfix.org/virtual.8.html">virtual(8)</a> </td>
            <td> <tt> -&gt; </tt> </td>
            <td> File </td>
        </tr>
        <tr>
            <td colspan="2"> <br />
            </td>
            <td align="center" bgcolor="#f0f0ff"> <a href="http://www.postfix.org/QSHAPE_README.html#deferred_queue"> deferred </a> </td>
            <td colspan="2"> <br />
            </td>
            <td align="right"> <tt> \ </tt> </td>
        </tr>
        <tr>
            <td colspan="6">
            <br />
            </td>
            <td align="center" bgcolor="#f0f0ff"> <a href="http://www.postfix.org/pipe.8.html">pipe(8)</a> </td>
            <td> <tt> -&gt; </tt> </td>
            <td> Command</td>
        </tr>
    </tbody>
</table>
<br />
<br />
<img src ="http://www.blogjava.net/jjwwhmm/aggbug/317692.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjwwhmm/" target="_blank">pony</a> 2010-04-08 09:45 <a href="http://www.blogjava.net/jjwwhmm/archive/2010/04/08/317692.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[zz]L7-filter Kernel Version HOWTO</title><link>http://www.blogjava.net/jjwwhmm/archive/2010/03/16/315578.html</link><dc:creator>pony</dc:creator><author>pony</author><pubDate>Tue, 16 Mar 2010 05:09:00 GMT</pubDate><guid>http://www.blogjava.net/jjwwhmm/archive/2010/03/16/315578.html</guid><wfw:comment>http://www.blogjava.net/jjwwhmm/comments/315578.html</wfw:comment><comments>http://www.blogjava.net/jjwwhmm/archive/2010/03/16/315578.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjwwhmm/comments/commentRss/315578.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjwwhmm/services/trackbacks/315578.html</trackback:ping><description><![CDATA[<p>【转载自<a href="http://l7-filter.sourceforge.net/HOWTO">http://l7-filter.sourceforge.net/HOWTO</a>】<small><br />
Last update 23 Aug 2008</small></p>
<div class="section intro">
<p>If you have not already, please read the <a href="http://l7-filter.sourceforge.net/README">README</a>.</p>
</div>
<h2>Table of Contents</h2>
<ul>
    <li><a href="http://l7-filter.sourceforge.net/HOWTO#Get">What You Need To Get</a>
    <li><a href="http://l7-filter.sourceforge.net/HOWTO#Kernel">Kernel Patch</a>
    <li><a href="http://l7-filter.sourceforge.net/HOWTO#iptables">Iptables Patch</a>
    <li><a href="http://l7-filter.sourceforge.net/HOWTO#Patterns">Protocol Definitions</a>
    <li><a href="http://l7-filter.sourceforge.net/HOWTO#Doing">Actually Doing Stuff</a>
    <li><a href="http://l7-filter.sourceforge.net/HOWTO#More">More Information</a> </li>
</ul>
<p>Important links on this page:</p>
<ul>
    <li><a href="http://sourceforge.net/project/showfiles.php?group_id=80085">Download page</a>
    <li><a href="http://l7-filter.sourceforge.net/PacketFlow.png">Packet flow diagram</a>
    <li><a href="http://l7-filter.sourceforge.net/Pattern-HOWTO">Pattern Writing HOWTO</a>
    <li><a href="http://l7-filter.sourceforge.net/L7-Netfilter-example">Shaping script for bridges</a>
    <li><a href="http://l7-filter.sourceforge.net/L7-Netfilter-example-nonbridge">Shaping script for non-bridges</a>
    <li><a href="http://protocolinfo.org/">Protocolinfo.org</a> </li>
</ul>
<div class="section">
<h2><a name="Get"></a>What You Need To Get</h2>
<ul>
    <li>The 2.4 or 2.6 Linux kernel source (2.6 strongly preferred) from <a href="http://kernel.org/">kernel.org</a>
    <li>The iptables source from <a href="http://netfilter.org/">netfilter.org</a>
    <li>Our "<a href="http://sourceforge.net/project/showfiles.php?group_id=80085">l7-filter kernel version</a>" package (netfilter-layer7-vX.Y.tar.gz)
    <li>Our "<a href="http://sourceforge.net/project/showfiles.php?group_id=80085">Protocol definitions</a>" package (l7-protocols-YYYY-MM-DD.tar.gz) </li>
</ul>
</div>
<div class="section">
<h2><a name="Kernel"></a>Kernel Patch</h2>
<p><strong>Short version for experts: Apply our kernel patch. Enable the new match option in Netfilter.</strong></p>
<p>Check <a href="http://l7-filter.sourceforge.net/kernelcompat">our kernel compatibility list</a> to see if the Linux version you want to use has been tested.</p>
<p>Use the appropriate kernel patch from the "Layer 7 patches" package to patch<sup><a href="http://l7-filter.sourceforge.net/HOWTO#patching">[1]</a></sup> the kernel (read the README in the package to determine which patch to use). Set up your kernel as you would otherwise. Now enable the following options (these are correct for Linux 2.6.21.1, but they tend to move around a lot, so you may have to go hunting if you have a different kernel version):</p>
<ul>
    <li>"Prompt for development and/or incomplete code/drivers" (under "Code maturity level options")
    <li>"Network packet filtering framework" (Networking &#8594; Networking support &#8594; Networking Options)
    <li>"Netfilter Xtables support" (on the same screen)
    <li>"Netfilter connection tracking support" (... &#8594; Network packet filtering framework &#8594; Core Netfilter Configuration), select "Layer 3 Independent Connection tracking"
    <li>"Connection tracking flow accounting" (on the same screen)
    <li>And finally, "Layer 7 match support"
    <li>Optional but highly recommended: Lots of other Netfilter options, notably "<abbr title="File Transfer Protocol">FTP</abbr> support" and other matches. If you don't know what you're doing, go ahead and enable all of them. </li>
</ul>
<p><strong>Warning:</strong> Some users have reported kernel crashes when they using <abbr title="Symmetric Multi Processing">SMP</abbr> with l7-filter. (Some have also reported that their SMP systems run fine.) If you have a multi-CPU machine, test carefully before putting it into production with l7-filter.</p>
<p>Compile and install the kernel as usual. (Our code may generate warnings about "initialization from incompatible pointer type", ignore them.) Reboot.</p>
<div class="notes">
<h3><a name="patching"></a><sup>1</sup>How to patch a source tree</h3>
<p>Suppose you have a patch called <code>happy.patch</code>. To apply it, go into the root directory of the source tree you want to patch and run "<code>patch -p1 &lt; happy.patch</code>"</p>
</div>
</div>
<div class="section">
<h2><a name="iptables"></a>Iptables Setup</h2>
<p>First read the README in the package "Layer 7 patches". Depending on your version of iptables, the instructions are different.</p>
<h3>iptables 1.4.0 and older</h3>
<p>Use the appropriate iptables patch to to patch<sup><a href="http://l7-filter.sourceforge.net/HOWTO#patching">[1]</a></sup> iptables. Compile iptables, pointing it at your patched kernel source:</p>
<ul class="happy">
    <li>Run "<code>chmod +x extensions/.layer7-test</code>" (information about file permissions can't be contained in the patch)
    <li>Then "<code>make KERNEL_DIR=/path/to/patched/kernel_source</code>" (you must have configured your kernel source before this step)
    <li>And install (as root): "<code>make install KERNEL_DIR=/path/to/patched/kernel_source</code>" </li>
</ul>
<h3>iptables 1.4.1</h3>
<p>Don't use this version. There's no reason to and it's difficult to compile.</p>
<h3>iptables 1.4.1.1 and newer</h3>
<p>Copy <code>libxt_layer7.c</code> and <code>libxt_layer7.man</code> (from the subdirectory of the "Layer 7 patches" package that the README points you to) to the <code>extensions/</code> directory of your iptables source. Then:</p>
<ul>
    <li>"<code>./configure --with-ksource=/path/to/patched/kernel_source</code>" (use the <strong>full</strong> path)
    <li>"<code>make</code>"
    <li>(as root) "<code>make install</code>" </li>
</ul>
</div>
<div class="section">
<h2><a name="Patterns"></a>Protocol Definitions (Pattern Files)</h2>
<p>These files tell iptables and the kernel how protocol names correspond to regular expressions, e.g. "ftp" means "<code>^220[\x09-\x0d -~]*ftp</code>".</p>
<p>Uncompress the "Protocol Definitions" package and make the resulting directory <code>/etc/l7-protocols</code>.<sup><a href="http://l7-filter.sourceforge.net/HOWTO#conform">[2]</a></sup>
<p>You should now be ready to actually do stuff.</p>
<div class="notes">
<h3><a name="conform"></a><sup>2</sup>Notes for non-conformists</h3>
<p>You can also install the patterns in a custom location. If you do this, you need to specify <code>--l7dir</code> before <code>--l7proto</code> when you use l7-filter:<br />
<br />
<code>iptables [...] -m layer7 --l7dir /home/bob/patterns --l7proto http [...]</code> </p>
</div>
</div>
<div class="section">
<h2><a name="Doing"></a>Actually doing stuff</h2>
<p>There are three things you may be interested in doing: (1) blocking certain protocols (2) controlling bandwidth use (3) accounting. We cover each of these cases below.</p>
<p>First, a reminder: Just because you're using l7-filter, you don't need to do <strong>all</strong> of your packet classification using it. It's likely that what you want to accomplish can be at least partially done with less demanding classifiers, such as port matching. For instance, you can probably assume that traffic on <abbr title="Transport&#10;Control Protocol">TCP</abbr> port 80 that isn't matched by any <abbr title="Peer to Peer">P2P</abbr> patterns is <abbr title="HyperText&#10;Transfer Protocol">HTTP</abbr>; you don't need to actually use the HTTP pattern.</p>
<p>l7-filter uses the standard iptables extension syntax. (If you are not familiar with this, it's time to read the documentation at <a href="http://netfilter.org/">netfilter.org</a> or at least "man iptables".)</p>
<p><code>iptables</code> [specify table &amp; chain] <code>-m layer7 --l7proto</code> [protocol name] <code>-j</code> [action]</p>
<p>(Or, if you're just interested in accounting, omit "<code>-j</code> [action]".)</p>
<p>For a list of valid protocol names, see <a href="http://l7-filter.sourceforge.net/protocols">the protocols page</a>. You can also <a href="http://l7-filter.sourceforge.net/Pattern-HOWTO">add your own protocols</a>.</p>
<p>The only trick is that, in order to do its classification, l7-filter must be able to see all of the relevant traffic. It <strong>only</strong> sees packets if they go through an l7-filter rule. One way of ensuring this is to use the <code>POSTROUTING</code> chain of the <code>mangle</code> table:</p>
<p><code>iptables -t mangle -A POSTROUTING -m layer7 --l7proto</code> [etc.]</p>
<p>See <a href="http://l7-filter.sourceforge.net/PacketFlow.png">this packet flow diagram</a> for details. In some cases, l7-filter can sucessfully match even if it can only see one side of the connection, but in general, this won't work.</p>
<p>If you are using a version of l7-filter earlier than 2.7, you must manually load the ip_conntrack module kernel for l7-filter to work. Newer versions do this automatically.</p>
<h3><a name="blocking"></a>1. Blocking</h3>
<p>Don't. Here's why:</p>
<ul class="happy">
    <li>l7-filter matching isn't foolproof: there may be both false positives (one protocol can look like another) and false negatives (applications can do obscure things that we didn't count on). Patterns that are known to regularly generate false positives are marked "overmatching" on <a href="http://l7-filter.sourceforge.net/protocols">the protocols page</a>, but others may also do so occasionally.
    <li>Almost every type of Internet traffic has legitimate uses. For instance, P2P protocols, while widely used to violate copyright, are also an efficient way to distribute open source software and legally free music.
    <li>Programs can respond to being blocked by port-hopping, switching between TCP and UDP, opening a new connection for every trivial operation, using encryption, or employing other evasion tactics. Trying to block such protocols has consequences on two levels:
    <ol>
        <li>In the case of port/protocol-hopping, you make it harder for yourself to identify protocols that already act this way.
        <li>You encourage programmers to include these "features" in new programs, making it harder for everyone in the future. For example: In early 2006, Bittorrent started moving towards end-to-end encryption because many networks were either blocking it or severely restricting its bandwidth. </li>
    </ol>
    <li>l7-filter patterns are not generally designed with blocking in mind. We consider a protocol to be well identified if the identification is useful for controlling its bandwidth. This means, for instance, that for P2P applications, we do not focus on catching connections that are not downloads.
    <li>Blocking with l7-filter provides <strong>no</strong> security, since any reasonably determined person can easily circumvent it. </li>
</ul>
<p>Instead of dropping packets you don't like, we recommend using Linux <abbr title="Quality of Service">QoS</abbr> to restrict their bandwidth usage. If you insist on using l7-filter to drop packets, make sure you have investigated other options first, such as the features of your HTTP proxy (useful for worms).</p>
<h3><a name="qos"></a>2. Bandwidth Restriction</h3>
<p>To control the bandwidth that a protocol uses, you can use Netfilter to "mark" the packets and QoS to filter on that mark. To mark:</p>
<p><code>iptables -t mangle -A POSTROUTING -m layer7 --l7proto imap -j MARK --set-mark 3</code></p>
<p>The number "3" is arbitrary. It can be any integer. Then use <code>tc</code> to filter on that mark (<code>tc</code> is "traffic control", the userspace tool for Linux QoS, part of the <a href="http://freshmeat.net/projects/iproute2">iproute2 package</a>):</p>
<p><code>tc filter add dev eth0 protocol ip parent 1:0 prio 1 handle 3 fw flowid 1:3</code></p>
<p>Did you understand that last command? You can try reading <a href="http://lartc.org/">The Linux Advanced Routing and Traffic Control HOWTO</a> for enlightenment. You should do this so that you have some idea what you're doing, but unfortunately, <code>tc</code> is incredibly obtuse and you're likely to wish you just had a canned script. Well, we can help:</p>
<ul>
    <li><a href="http://l7-filter.sourceforge.net/L7-Netfilter-example">Shaping script for bridges</a>
    <li><a href="http://l7-filter.sourceforge.net/L7-Netfilter-example-nonbridge">Shaping script for non-bridges</a> </li>
</ul>
<p>These may need to be modified if your setup is significantly different than mine, but it should provide a much better starting point than most other things you are likely to find.</p>
<p>Be prudent when choosing the amount of bandwidth you allow each protocol. Restricting a protocol to an unusably low bandwidth can have similar consequences to <a href="http://l7-filter.sourceforge.net/HOWTO#blocking">blocking</a> it.</p>
<h3><a name="account"></a>3. Accouting</h3>
<p>If you just want to keep track of what's in use on your network, simply use the above command without any <code>-j</code> option. For example:<br />
<br />
<code>iptables -t mangle -A POSTROUTING -m layer7 --l7proto imap</code><br />
<br />
You can then get statistics by using <code>iptables -L</code>. (See "man iptables" for details.)</p>
</div>
<div class="section">
<h2><a name="More"></a>More Information</h2>
<h3>Dealing with FTP, <abbr title="Internet Relay Chat">IRC</abbr>, etc.</h3>
<p>Some protocols open child connections to transfer data. FTP is the most familiar example. If you have loaded the <code>ip_conntrack_ftp</code> or <code>nf_conntrack_ftp</code> kernel module, l7-filter will classify FTP and all its child connections as FTP. The same goes for IRC/IRC-DCC, etc.</p>
<p>If you wish to classify the children differently, use the standard iptables "helper" match. You can use "<code>-m --helper ftp</code>" to match ftp child connections. Of course, once you've done this, it's silly to involve l7-filter, at least for the children.</p>
<h3>The "unset" and "unknown" matches</h3>
<p>l7-filter marks unmatched connections that it is still trying to match as "unset". The first few packets of all TCP connections as well as those of some UDP connections will match this. Similarly, l7-filter marks connections that it has given up trying to match as "unknown". These are matched just like normal protocols:</p>
<p><code>iptables -A FORWARD -m layer7 --l7proto unset<br />
iptables -A FORWARD -m layer7 --l7proto unknown</code></p>
<p>The "unset" match is only supported by l7-filter 2.9 and up.</p>
<h3>Upgrading the protocol definitions</h3>
<p>The protocol definitions are simple text files with a format described in <a href="http://l7-filter.sourceforge.net/Pattern-HOWTO">the Pattern-HOWTO</a>. They can be updated as a package or individually.</p>
<p>If you update the protocol definitions, you need to clear the relevant iptables rules and re-enter them. This is because the pattern files are only read by iptables, not directly by the kernel.</p>
<h3>Other things to know</h3>
<ul class="happy">
    <li>By default, l7-filter looks at the first 10 packets or 2<abbr title="kibibytes">kB</abbr>, whichever is smaller. These limits are somewhat conservative. It is well known that some HTTP connections (those that involve large cookies), for instance, need more packets to be matched.
    <ul>
        <li>You can alter the number of packets at any time through <code>/proc/net/layer7_numpackets</code>. (i.e. "<code>echo 16 &gt; /proc/net/layer7_numpackets</code>".)
        <li>In l7-filter versions 2.0 and forward, you can alter the number of bytes at module load time: "<code>modprobe xt_layer7 maxdatalen=N</code>" (<code>ipt_layer7</code> in old versions), where <code>N</code> is in bytes. This should be used cautiously, since performance may decrease <strong>drastically</strong> with larger data sizes. To prevent you from accidentally bringing down your network, there is an artificial limit of 65536 imposed. If you're sure you know what you're doing, you can remove this limit by editing ipt_layer7.c or xt_layer7.c in the kernel source. </li>
    </ul>
    <li>It's possible (although rare) for a connection to be matchable by more than one pattern. The patterns are tested in the order you specified with iptables. After a match is made, l7-filter does not continue testing that connection, so changing the order of your rules may change what happens.
    <li>Sometimes important messages go only to the system log, not the terminal you are working at. Such messages include notifications that regular expressions failed to compile and various things that <code>tc</code> generates. A useful command is "<code>tail -f /var/log/messages</code>". </li>
</ul>
<p>Please see <a href="http://l7-filter.sourceforge.net/FAQ">the FAQ</a> for more information.</p>
</div>
 <img src ="http://www.blogjava.net/jjwwhmm/aggbug/315578.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjwwhmm/" target="_blank">pony</a> 2010-03-16 13:09 <a href="http://www.blogjava.net/jjwwhmm/archive/2010/03/16/315578.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>proftpd服务启动的问题 Starting proftpd: execvp: No such file or directory</title><link>http://www.blogjava.net/jjwwhmm/archive/2009/01/22/252302.html</link><dc:creator>pony</dc:creator><author>pony</author><pubDate>Thu, 22 Jan 2009 01:41:00 GMT</pubDate><guid>http://www.blogjava.net/jjwwhmm/archive/2009/01/22/252302.html</guid><wfw:comment>http://www.blogjava.net/jjwwhmm/comments/252302.html</wfw:comment><comments>http://www.blogjava.net/jjwwhmm/archive/2009/01/22/252302.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjwwhmm/comments/commentRss/252302.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjwwhmm/services/trackbacks/252302.html</trackback:ping><description><![CDATA[<p>把profpd源代码目录下的proftpd-1.3.1/contrib/dist/rpm/proftpd.init.d拷贝到/etc/rc.d/init.d/proftpd<br />
在/etc/rc.d/rc3.d中建立proftpd的启动停止链接：<br />
&nbsp;&nbsp;&nbsp; ln -s ../init.d/proftpd S86proftpd<br />
&nbsp;&nbsp;&nbsp; ln -s ../init.d/proftpd K18proftpd<br />
然后，/sbin/service proftpd start<br />
报错误：Starting proftpd: execvp: No such file or directory<br />
经检查，是proftpd.init.d脚本中的路径有问题:<br />
&nbsp; PATH="$PATH:/usr/local/sbin"<br />
而我的proftpd安装在/usr/local/proftpd目录下<br />
修改上面的路径为PATH="$PATH:/usr/local/proftpd/sbin",重新启动，问题解决<br />
<br />
</p>
<img src ="http://www.blogjava.net/jjwwhmm/aggbug/252302.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjwwhmm/" target="_blank">pony</a> 2009-01-22 09:41 <a href="http://www.blogjava.net/jjwwhmm/archive/2009/01/22/252302.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>UNIX编程艺术的一段话</title><link>http://www.blogjava.net/jjwwhmm/archive/2008/06/04/205925.html</link><dc:creator>pony</dc:creator><author>pony</author><pubDate>Wed, 04 Jun 2008 13:32:00 GMT</pubDate><guid>http://www.blogjava.net/jjwwhmm/archive/2008/06/04/205925.html</guid><wfw:comment>http://www.blogjava.net/jjwwhmm/comments/205925.html</wfw:comment><comments>http://www.blogjava.net/jjwwhmm/archive/2008/06/04/205925.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjwwhmm/comments/commentRss/205925.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjwwhmm/services/trackbacks/205925.html</trackback:ping><description><![CDATA[看这本书我最经常回顾的一段话是：<br />
&nbsp;&nbsp;&nbsp;&nbsp; &#8220;软件设计和实现应该是一门充满快乐的艺术，一种高水平的游戏。如果这种态度对你来说听起来有些荒谬，或者令你隐约感到有些困窘，那么情停下来，想一想，问问自己是不是已经把什么给遗忘了。如果只是为了赚钱或是打发时间，你为什么要搞软件设计而不是别的什么呢？你肯定曾经也认为软件设计值得你付出激情......"<br />
<br />
<img src ="http://www.blogjava.net/jjwwhmm/aggbug/205925.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjwwhmm/" target="_blank">pony</a> 2008-06-04 21:32 <a href="http://www.blogjava.net/jjwwhmm/archive/2008/06/04/205925.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux下so文件的创建及调用方法</title><link>http://www.blogjava.net/jjwwhmm/archive/2008/05/21/201850.html</link><dc:creator>pony</dc:creator><author>pony</author><pubDate>Wed, 21 May 2008 02:56:00 GMT</pubDate><guid>http://www.blogjava.net/jjwwhmm/archive/2008/05/21/201850.html</guid><wfw:comment>http://www.blogjava.net/jjwwhmm/comments/201850.html</wfw:comment><comments>http://www.blogjava.net/jjwwhmm/archive/2008/05/21/201850.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/jjwwhmm/comments/commentRss/201850.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjwwhmm/services/trackbacks/201850.html</trackback:ping><description><![CDATA[<br />
<div>1.创建so文件</div>
<div>这一步很简单,只需要在用cc编译的时候,加上-shared选项即可,这样成成的执行程序即为动态链接库,例如:</div>
<div>&#160;&#160; &#160; cc -shared -o hello.so hello.c</div>
<div>2.调用so文件中的函数的步骤</div>
<div>&#160;&#160; a. 包含so中函数的头文件,包含<span  style="font-size: 14px; line-height: 20px; ">dlfcn.h头文件,这个头文件中定义了打开so文件,调用so的函数,关闭so的函数</span></div>
<div>&#160;&#160; b.申明so中函数的类型变量</div>
<div>&#160;&#160; c.用dlopen函数打开so文件,返回句柄</div>
<div>&#160;&#160; d.用dlsym函数以上c步骤中得到的句柄,得到so文件中要调用的函数的动态地址,并把这个地址赋值给在b步骤中申明的函数类型变量</div>
<div>&#160;&#160; e.通过b中申明的函数类型变量调用so中的函数</div>
<div>&#160;&#160; f.用dlclose函数关闭c中得到的句柄所指向的so动态连接库</div>
<div>挺简单吧!</div>
<img src ="http://www.blogjava.net/jjwwhmm/aggbug/201850.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjwwhmm/" target="_blank">pony</a> 2008-05-21 10:56 <a href="http://www.blogjava.net/jjwwhmm/archive/2008/05/21/201850.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>(转载)iptables的man中文文档</title><link>http://www.blogjava.net/jjwwhmm/archive/2008/05/12/199931.html</link><dc:creator>pony</dc:creator><author>pony</author><pubDate>Mon, 12 May 2008 01:08:00 GMT</pubDate><guid>http://www.blogjava.net/jjwwhmm/archive/2008/05/12/199931.html</guid><wfw:comment>http://www.blogjava.net/jjwwhmm/comments/199931.html</wfw:comment><comments>http://www.blogjava.net/jjwwhmm/archive/2008/05/12/199931.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/jjwwhmm/comments/commentRss/199931.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjwwhmm/services/trackbacks/199931.html</trackback:ping><description><![CDATA[<font size="2">总览<br />
用iptables&nbsp;-ADC&nbsp;来指定链的规则，-A添加&nbsp;-D删除&nbsp;-C&nbsp;修改<br />
<br />
iptables&nbsp;-&nbsp;[RI]&nbsp;chain&nbsp;rule&nbsp;num&nbsp;rule-specification[option]<br />
用iptables&nbsp;-&nbsp;RI&nbsp;通过规则的顺序指定<br />
<br />
iptables&nbsp;-D&nbsp;chain&nbsp;rule&nbsp;num[option]<br />
删除指定规则<br />
iptables&nbsp;-[LFZ]&nbsp;[chain][option]<br />
用iptables&nbsp;-LFZ&nbsp;链名&nbsp;[选项]<br />
<br />
iptables&nbsp;-[NX]&nbsp;chain<br />
用&nbsp;-NX&nbsp;指定链<br />
<br />
iptables&nbsp;-P&nbsp;chain&nbsp;target[options]<br />
指定链的默认目标<br />
<br />
iptables&nbsp;-E&nbsp;old-chain-name&nbsp;new-chain-name<br />
-E&nbsp;旧的链名&nbsp;新的链名&nbsp;<br />
用新的链名取代旧的链名<br />
说明<br />
Iptalbes&nbsp;是用来设置、维护和检查Linux内核的IP包过滤规则的。&nbsp;<br />
可以定义不同的表，每个表都包含几个内部的链，也能包含用户定义的链。每个链都是一个规则列表，对对应的包进行匹配：每条规则指定应当如何处理与之相匹配的包。这被称作'target'（目标），也可以跳向同一个表内的用户定义的链。<br />
<br />
TARGETS<br />
防火墙的规则指定所检查包的特征，和目标。如果包不匹配，将送往该链中下一条规则检查；如果匹配,那么下一条规则由目标值确定.该目标值可以是用户定义的链名,或是某个专用值,如ACCEPT[通过],&nbsp;DROP[删除],&nbsp;QUEUE[排队],&nbsp;或者&nbsp;RETURN[返回]。<br />
ACCEPT&nbsp;表示让这个包通过。DROP表示将这个包丢弃。QUEUE表示把这个包传递到用户空间。RETURN表示停止这条链的匹配，到前一个链的规则重新开始。如果到达了一个内建的链(的末端)，或者遇到内建链的规则是RETURN，包的命运将由链准则指定的目标决定。<br />
<br />
TABLES<br />
当前有三个表（哪个表是当前表取决于内核配置选项和当前模块)。<br />
-t&nbsp;table<br />
这个选项指定命令要操作的匹配包的表。如果内核被配置为自动加载模块，这时若模块没有加载，(<a class="UBBWordLink" href="http://www.ahaoz.com/" target="_blank">系统</a></a>)将尝试(为该表)加载适合的模块。这些表如下：filter,这是默认的表，包含了内建的链INPUT（处理进入的包）、FORWORD（处理通过的包）和OUTPUT（处理本地生成的包）。nat,这个表被查询时表示遇到了产生新的连接的包,由三个内建的链构成：PREROUTING&nbsp;(修改到来的包)、OUTPUT（修改路由之前本地的包）、POSTROUTING（修改准备出去的包）。mangle&nbsp;这个表用来对指定的包进行修改。它有两个内建规则：PREROUTING（修改路由之前进入的包）和OUTPUT（修改路由之前本地的包）。<br />
OPTIONS<br />
这些可被iptables识别的选项可以区分不同的种类。<br />
<br />
COMMANDS<br />
这些选项指定执行明确的动作：若指令行下没有其他规定,该行只能指定一个选项.对于长格式的命令和选项名,所用字母长度只要保证iptables能从其他选项中区分出该指令就行了。<br />
-A&nbsp;-append<br />
在所选择的链末添加一条或更多规则。当源（地址）或者/与&nbsp;目的（地址）转换为多个地址时，这条规则会加到所有可能的地址(组合)后面。<br />
<br />
-D&nbsp;-delete<br />
从所选链中删除一条或更多规则。这条命令可以有两种方法：可以把被删除规则指定为链中的序号(第一条序号为1),或者指定为要匹配的规则。<br />
<br />
-R&nbsp;-replace<br />
从选中的链中取代一条规则。如果源（地址）或者/与&nbsp;目的（地址）被转换为多地址，该命令会失败。规则序号从1开始。<br />
<br />
-I&nbsp;-insert<br />
根据给出的规则序号向所选链中插入一条或更多规则。所以，如果规则序号为1，规则会被插入链的头部。这也是不指定规则序号时的默认方式。<br />
<br />
-L&nbsp;-list<br />
显示所选链的所有规则。如果没有选择链，所有链将被显示。也可以和z选项一起使用，这时链会被自动列出和归零。精确输出受其它所给参数影响。<br />
<br />
-F&nbsp;-flush<br />
清空所选链。这等于把所有规则一个个的删除。<br />
<br />
--Z&nbsp;-zero<br />
把所有链的包及字节的计数器清空。它可以和&nbsp;-L配合使用，在清空前察看计数器，请参见前文。<br />
<br />
-N&nbsp;-new-chain<br />
根据给出的名称建立一个新的用户定义链。这必须保证没有同名的链存在。<br />
<br />
-X&nbsp;-delete-chain<br />
删除指定的用户自定义链。这个链必须没有被引用，如果被引用，在删除之前你必须删除或者替换与之有关的规则。如果没有给出参数，这条命令将试着删除每个非内建的链。<br />
<br />
<br />
-P&nbsp;-policy<br />
设置链的目标规则。<br />
<br />
-E&nbsp;-rename-chain<br />
根据用户给出的名字对指定链进行重命名，这仅仅是修饰，对整个表的结构没有影响。TARGETS参数给出一个合法的目标。只有非用户自定义链可以使用规则，而且内建链和用户自定义链都不能是规则的目标。<br />
<br />
-h&nbsp;Help.<br />
帮助。给出当前命令语法非常简短的说明。<br />
<br />
PARAMETERS<br />
参数<br />
以下参数构成规则详述，如用于add、delete、replace、append&nbsp;和&nbsp;check命令。<br />
<br />
-p&nbsp;-protocal&nbsp;[!]protocol<br />
规则或者包检查(待检查包)的协议。指定协议可以是tcp、udp、icmp中的一个或者全部，也可以是数值，代表这些协议中的某一个。当然也可以使用在/etc/protocols中定义的协议名。在协议名前加上"!"表示相反的规则。数字0相当于所有all。Protocol&nbsp;all会匹配所有协议，而且这是缺省时的选项。在和check命令结合时，all可以不被使用。<br />
-s&nbsp;-source&nbsp;[!]&nbsp;address[/mask]<br />
指定源地址，可以是主机名、<a class="UBBWordLink" href="http://www.ahaoz.com/" target="_blank">网络</a></a>名和清楚的IP地址。mask说明可以是<a class="UBBWordLink" href="http://www.ahaoz.com/" target="_blank">网络</a></a>掩码或清楚的数字，在<a class="UBBWordLink" href="http://www.ahaoz.com/" target="_blank">网络</a></a>掩码的左边指定<a class="UBBWordLink" href="http://www.ahaoz.com/" target="_blank">网络</a></a>掩码左边"1"的个数，因此，mask值为24等于255.255.255.0。在指定地址前加上"!"说明指定了相反的地址段。标志&nbsp;--src&nbsp;是这个选项的简写。<br />
<br />
-d&nbsp;--destination&nbsp;[!]&nbsp;address[/mask]<br />
指定目标地址，要获取详细说明请参见&nbsp;-s标志的说明。标志&nbsp;--dst&nbsp;是这个选项的简写。<br />
<br />
-j&nbsp;--jump&nbsp;target<br />
-j&nbsp;目标跳转<br />
指定规则的目标；也就是说，如果包匹配应当做什么。目标可以是用户自定义链（不是这条规则所在的），某个会立即决定包的命运的专用内建目标，或者一个扩展（参见下面的EXTENSIONS）。如果规则的这个选项被忽略，那么匹配的过程不会对包产生影响，不过规则的计数器会增加。<br />
<br />
-i&nbsp;-in-interface&nbsp;[!]&nbsp;[name]<br />
i&nbsp;-进入的（<a class="UBBWordLink" href="http://www.ahaoz.com/" target="_blank">网络</a></a>）接口&nbsp;[!][名称]<br />
这是包经由该接口接收的可选的入口名称，包通过该接口接收（在链INPUT、FORWORD和PREROUTING中进入的包）。当在接口名前使用"!"说明后，指的是相反的名称。如果接口名后面加上"+"，则所有以此接口名开头的接口都会被匹配。如果这个选项被忽略，会假设为"+"，那么将匹配任意接口。<br />
<br />
-o&nbsp;--out-interface&nbsp;[!][name]<br />
-o&nbsp;--输出接口[名称]<br />
这是包经由该接口送出的可选的出口名称，包通过该口输出（在链FORWARD、OUTPUT和POSTROUTING中送出的包）。当在接口名前使用"!"说明后，指的是相反的名称。如果接口名后面加上"+"，则所有以此接口名开头的接口都会被匹配。如果这个选项被忽略，会假设为"+"，那么将匹配所有任意接口。<br />
<br />
[!]&nbsp;-f,&nbsp;--fragment<br />
&nbsp;[!]&nbsp;-f&nbsp;--分片<br />
这意味着在分片的包中，规则只询问第二及以后的片。自那以后由于无法判断这种把包的源端口或目标端口（或者是ICMP类型的），这类包将不能匹配任何指定对他们进行匹配的规则。如果"!"说明用在了"-f"标志之前，表示相反的意思。<br />
<br />
OTHER&nbsp;OPTIONS<br />
其他选项<br />
还可以指定下列附加选项：<br />
<br />
-v&nbsp;--verbose<br />
-v&nbsp;--详细<br />
详细输出。这个选项让list命令显示接口地址、规则选项（如果有）和TOS（Type&nbsp;of&nbsp;Service）掩码。包和字节计数器也将被显示，分别用K、M、G(前缀)表示1000、1,000,000和1,000,000,000倍（不过请参看-x标志改变它），对于添加,插入,删除和替换命令，这会使一个或多个规则的相关详细信息被打印。<br />
<br />
-n&nbsp;--numeric<br />
-n&nbsp;--数字<br />
数字输出。IP地址和端口会以数字的形式打印。默认情况下，<a class="UBBWordLink" href="http://www.ahaoz.com/" target="_blank">程序</a></a>试显示主机名、<a class="UBBWordLink" href="http://www.ahaoz.com/" target="_blank">网络</a></a>名或者服务（只要可用）。<br />
<br />
-x&nbsp;-exact<br />
-x&nbsp;-精确<br />
扩展数字。显示包和字节计数器的精确值，代替用K,M,G表示的约数。这个选项仅能用于&nbsp;-L&nbsp;命令。<br />
<br />
--line-numbers<br />
当列表显示规则时，在每个规则的前面加上行号，与该规则在链中的位置相对应。<br />
<br />
MATCH&nbsp;EXTENSIONS<br />
对应的扩展<br />
iptables能够使用一些与模块匹配的扩展包。以下就是含于基本包内的扩展包，而且他们大多数都可以通过在前面加上!来表示相反的意思。<br />
<br />
tcp<br />
当&nbsp;--protocol&nbsp;tcp&nbsp;被指定,且其他匹配的扩展未被指定时,这些扩展被装载。它提供以下选项：<br />
<br />
--source-port&nbsp;[!]&nbsp;[port[:port]]<br />
源端口或端口范围指定。这可以是服务名或端口号。使用格式端口：端口也可以指定包含的（端口）范围。如果首端口号被忽略，默认是"0"，如果末端口号被忽略，默认是"65535"，如果第二个端口号大于第一个，那么它们会被交换。这个选项可以使用&nbsp;--sport的别名。<br />
<br />
--destionation-port&nbsp;[!]&nbsp;[port:[port]]<br />
目标端口或端口范围指定。这个选项可以使用&nbsp;--dport别名来代替。<br />
<br />
--tcp-flags&nbsp;[!]&nbsp;mask&nbsp;comp<br />
匹配指定的TCP标记。第一个参数是我们要检查的标记，一个用逗号分开的列表，第二个参数是用逗号分开的标记表,是必须被设置的。标记如下：SYN&nbsp;ACK&nbsp;FIN&nbsp;RST&nbsp;URG&nbsp;PSH&nbsp;ALL&nbsp;NONE。因此这条命令：iptables&nbsp;-A&nbsp;FORWARD&nbsp;-p&nbsp;tcp&nbsp;--tcp-flags&nbsp;SYN,&nbsp;ACK,&nbsp;FIN,&nbsp;RST&nbsp;SYN只匹配那些SYN标记被设置而ACK、FIN和RST标记没有设置的包。<br />
<br />
[!]&nbsp;--syn<br />
只匹配那些设置了SYN位而清除了ACK和FIN位的TCP包。这些包用于TCP连接初始化时发出请求；例如，大量的这种包进入一个接口发生堵塞时会阻止进入的TCP连接，而出去的TCP连接不会受到影响。这等于&nbsp;--tcp-flags&nbsp;SYN,&nbsp;RST,&nbsp;ACK&nbsp;SYN。如果"--syn"前面有"!"标记，表示相反的意思。<br />
<br />
--tcp-option&nbsp;[!]&nbsp;number<br />
匹配设置了TCP选项的。<br />
<br />
udp<br />
当protocol&nbsp;udp&nbsp;被指定,且其他匹配的扩展未被指定时,这些扩展被装载,它提供以下选项：<br />
<br />
--source-port&nbsp;[!]&nbsp;[port:[port]]<br />
源端口或端口范围指定。详见&nbsp;TCP扩展的--source-port选项说明。<br />
<br />
--destination-port&nbsp;[!]&nbsp;[port:[port]]<br />
目标端口或端口范围指定。详见&nbsp;TCP扩展的--destination-port选项说明。<br />
<br />
icmp<br />
当protocol&nbsp;icmp被指定,且其他匹配的扩展未被指定时,该扩展被装载。它提供以下选项：<br />
--icmp-type&nbsp;[!]&nbsp;typename<br />
这个选项允许指定ICMP类型，可以是一个数值型的ICMP类型，或者是某个由命令iptables&nbsp;-p&nbsp;icmp&nbsp;-h所显示的ICMP类型名。<br />
<br />
mac<br />
--mac-source&nbsp;[!]&nbsp;address<br />
匹配物理地址。必须是XX:XX:XX:XX:XX这样的格式。注意它只对来自以太设备并进入PREROUTING、FORWORD和INPUT链的包有效。<br />
<br />
limit<br />
这个模块匹配标志用一个标记桶过滤器一一定速度进行匹配,它和LOG目标结合使用来给出有限的登陆数.当达到这个极限值时,使用这个扩展包的规则将进行匹配.(除非使用了"!"标记)<br />
<br />
--limit&nbsp;rate<br />
最大平均匹配速率：可赋的值有'/second',&nbsp;'/minute',&nbsp;'/hour',&nbsp;or&nbsp;'/day'这样的单位，默认是3/hour。<br />
<br />
--limit-burst&nbsp;number<br />
待匹配包初始个数的最大值:若前面指定的极限还没达到这个数值,则概数字加1.默认值为5<br />
<br />
multiport<br />
这个模块匹配一组源端口或目标端口,最多可以指定15个端口。只能和-p&nbsp;tcp&nbsp;或者&nbsp;-p&nbsp;udp&nbsp;连着使用。<br />
<br />
--source-port&nbsp;[port[,&nbsp;port]]<br />
如果源端口是其中一个给定端口则匹配<br />
<br />
--destination-port&nbsp;[port[,&nbsp;port]]<br />
如果目标端口是其中一个给定端口则匹配<br />
<br />
--port&nbsp;[port[,&nbsp;port]]<br />
若源端口和目的端口相等并与某个给定端口相等,则匹配。<br />
mark<br />
这个模块和与netfilter过滤器标记字段匹配（就可以在下面设置为使用MARK标记）。<br />
<br />
--mark&nbsp;value&nbsp;[/mask]<br />
匹配那些无符号标记值的包（如果指定mask，在比较之前会给掩码加上逻辑的标记）。<br />
<br />
owner<br />
此模块试为本地生成包匹配包创建者的不同特征。只能用于OUTPUT链，而且即使这样一些包（如ICMP&nbsp;ping应答）还可能没有所有者，因此永远不会匹配。<br />
<br />
--uid-owner&nbsp;userid<br />
如果给出有效的user&nbsp;id，那么匹配它的进程产生的包。<br />
<br />
--gid-owner&nbsp;groupid<br />
如果给出有效的group&nbsp;id，那么匹配它的进程产生的包。<br />
<br />
--sid-owner&nbsp;seessionid<br />
根据给出的会话组匹配该进程产生的包。<br />
<br />
state<br />
此模块，当与连接跟踪结合使用时，允许访问包的连接跟踪状态。<br />
<br />
--state&nbsp;state<br />
这里state是一个逗号分割的匹配连接状态列表。可能的状态是:INVALID表示包是未知连接，ESTABLISHED表示是双向传送的连接，NEW表示包为新的连接，否则是非双向传送的，而RELATED表示包由新连接开始，但是和一个已存在的连接在一起，如FTP数据传送，或者一个ICMP错误。<br />
<br />
unclean<br />
此模块没有可选项，不过它试着匹配那些奇怪的、不常见的包。处在实验中。<br />
<br />
tos<br />
此模块匹配IP包首部的8位tos（服务类型）字段（也就是说，包含在优先位中）。<br />
<br />
--tos&nbsp;tos<br />
这个参数可以是一个标准名称，（用iptables&nbsp;-m&nbsp;tos&nbsp;-h&nbsp;察看该列表），或者数值。<br />
<br />
TARGET&nbsp;EXTENSIONS<br />
iptables可以使用扩展目标模块：以下都包含在标准版中。<br />
<br />
LOG<br />
为匹配的包开启内核记录。当在规则中设置了这一选项后，linux内核会通过printk()打印一些关于全部匹配包的信息（诸如IP包头字段等）。<br />
--log-level&nbsp;level<br />
记录级别（数字或参看&nbsp;syslog.conf(5)）。<br />
--log-prefix&nbsp;prefix<br />
在纪录信息前加上特定的前缀：最多14个字母长，用来和记录中其他信息区别。<br />
<br />
--log-tcp-sequence<br />
记录TCP序列号。如果记录能被用户读取那么这将存在安全隐患。<br />
<br />
--log-tcp-options<br />
记录来自TCP包头部的选项。<br />
--log-ip-options<br />
记录来自IP包头部的选项。<br />
<br />
MARK<br />
用来设置包的netfilter标记值。只适用于mangle表。<br />
<br />
--set-mark&nbsp;mark<br />
<br />
REJECT<br />
作为对匹配的包的响应，返回一个错误的包：其他情况下和DROP相同。<br />
<br />
此目标只适用于INPUT、FORWARD和OUTPUT链，和调用这些链的用户自定义链。这几个选项控制返回的错误包的特性：<br />
<br />
--reject-with&nbsp;type<br />
Type可以是icmp-net-unreachable、icmp-host-unreachable、icmp-port-nreachable、icmp-proto-unreachable、&nbsp;icmp-net-prohibited&nbsp;或者&nbsp;icmp-host-prohibited，该类型会返回相应的ICMP错误信息（默认是port-unreachable）。选项&nbsp;echo-reply也是允许的；它只能用于指定ICMP&nbsp;ping包的规则中，生成ping的回应。最后，选项tcp-reset可以用于在INPUT链中,或自INPUT链调用的规则，只匹配TCP协议：将回应一个TCP&nbsp;RST包。<br />
TOS<br />
用来设置IP包的首部八位tos。只能用于mangle表。<br />
<br />
--set-tos&nbsp;tos<br />
你可以使用一个数值型的TOS&nbsp;值，或者用iptables&nbsp;-j&nbsp;TOS&nbsp;-h&nbsp;来查看有效TOS名列表。<br />
MIRROR<br />
这是一个试验示范目标，可用于转换IP首部字段中的源地址和目标地址，再传送该包,并只适用于INPUT、FORWARD和OUTPUT链，以及只调用它们的用户自定义链。<br />
<br />
SNAT<br />
这个目标只适用于nat表的POSTROUTING链。它规定修改包的源地址（此连接以后所有的包都会被影响），停止对规则的检查，它包含选项：<br />
<br />
--to-source&nbsp;&lt;ipaddr&gt;[-&lt;ipaddr&gt;][:port-port]<br />
可以指定一个单一的新的IP地址，一个IP地址范围，也可以附加一个端口范围（只能在指定-p&nbsp;tcp&nbsp;或者-p&nbsp;udp的规则里）。如果未指定端口范围，源端口中512以下的（端口）会被安置为其他的512以下的端口；512到1024之间的端口会被安置为1024以下的，其他端口会被安置为1024或以上。如果可能，端口不会被修改。<br />
<br />
--to-destiontion&nbsp;&lt;ipaddr&gt;[-&lt;ipaddr&gt;][:port-port]<br />
可以指定一个单一的新的IP地址，一个IP地址范围，也可以附加一个端口范围（只能在指定-p&nbsp;tcp&nbsp;或者-p&nbsp;udp的规则里）。如果未指定端口范围，目标端口不会被修改。<br />
<br />
MASQUERADE<br />
只用于nat表的POSTROUTING链。只能用于动态获取IP（拨号）连接：如果你拥有静态IP地址，你要用SNAT。伪装相当于给包发出时所经过接口的IP地址设置一个映像，当接口关闭连接会终止。这是因为当下一次拨号时未必是相同的接口地址（以后所有建立的连接都将关闭）。它有一个选项：<br />
<br />
--to-ports&nbsp;&lt;port&gt;[-port&gt;]<br />
指定使用的源端口范围，覆盖默认的SNAT源地址选择（见上面）。这个选项只适用于指定了-p&nbsp;tcp或者-p&nbsp;udp的规则。<br />
<br />
REDIRECT<br />
只适用于nat表的PREROUTING和OUTPUT链，和只调用它们的用户自定义链。它修改包的目标IP地址来发送包到机器自身（本地生成的包被安置为地址127.0.0.1）。它包含一个选项：<br />
<br />
--to-ports&nbsp;&lt;port&gt;[&lt;port&gt;]<br />
指定使用的目的端口或端口范围：不指定的话，目标端口不会被修改。只能用于指定了-p&nbsp;tcp&nbsp;或&nbsp;-p&nbsp;udp的规则。<br />
<br />
DIAGNOSTICS<br />
诊断<br />
不同的错误信息会打印成标准错误：退出<a class="UBBWordLink" href="http://www.ahaoz.com/" target="_blank">代码</a>0表示正确。类似于不对的或者滥用的命令行参数错误会返回错误<a class="UBBWordLink" href="http://www.ahaoz.com/" target="_blank">代码</a>2，其他错误返回<a class="UBBWordLink" href="http://www.ahaoz.com/" target="_blank">代码</a>为1。<br />
<br />
BUGS&nbsp;<br />
臭虫<br />
Check&nbsp;is&nbsp;not&nbsp;implemented&nbsp;(yet).<br />
检查还未完成。<br />
<br />
COMPATIBILITY&nbsp;WITH&nbsp;IPCHAINS<br />
与ipchains的兼容性<br />
iptables和Rusty&nbsp;Russell的ipchains非常相似。主要区别是INPUT&nbsp;链只用于进入本地主机的包,而OUTPUT只用于自本地主机生成的包。因此每个包只经过三个链的一个；以前转发的包会经过所有三个链。其他主要区别是&nbsp;-i&nbsp;引用进入接口；-o引用输出接口，两者都适用于进入FORWARD链的包。当和可选扩展模块一起使用默认过滤器表时，iptables是一个纯粹的包过滤器。这能大大减少以前对IP伪装和包过滤结合使用的混淆，所以以下选项作了不同的处理：<br />
-j&nbsp;MASQ<br />
-M&nbsp;-S<br />
-M&nbsp;-L<br />
在iptables中有几个不同的链。<br />
<br />
SEE&nbsp;ALSO<br />
参见<br />
iptables-HOWTO有详细的iptables用法,对netfilter-hacking-HOWTO也有详细的本质说明。<br />
<br />
AUTHORS<br />
作者<br />
<br />
Rusty&nbsp;Russell&nbsp;wrote&nbsp;iptables,&nbsp;in&nbsp;early&nbsp;consultation&nbsp;with&nbsp;Michael&nbsp;Neuling.<br />
Marc&nbsp;&nbsp;Boucher&nbsp;&nbsp;made&nbsp;Rusty&nbsp;abandon&nbsp;ipnatctl&nbsp;by&nbsp;lobbying&nbsp;for&nbsp;a&nbsp;generic&nbsp;packet&nbsp;selection&nbsp;framework&nbsp;in&nbsp;iptables,&nbsp;then&nbsp;wrote&nbsp;the&nbsp;mangle&nbsp;table,&nbsp;the&nbsp;owner&nbsp;match,&nbsp;&nbsp;the&nbsp;&nbsp;mark&nbsp;&nbsp;stuff,&nbsp;&nbsp;and&nbsp;&nbsp;ranaround&nbsp;doing&nbsp;cool&nbsp;stuff&nbsp;everywhere.<br />
James&nbsp;Morris&nbsp;wrote&nbsp;the&nbsp;TOS&nbsp;target,&nbsp;and&nbsp;tos&nbsp;match.<br />
Jozsef&nbsp;Kadlecsik&nbsp;wrote&nbsp;the&nbsp;REJECT&nbsp;target.<br />
The&nbsp;Netfilter&nbsp;Core&nbsp;Team&nbsp;is:&nbsp;Marc&nbsp;Boucher,&nbsp;Rusty&nbsp;Russell.<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Mar&nbsp;20,&nbsp;2000<br />
<br />
<br />
中文维护：杨鹏&#183;NetSnake</font></span><br />
<img src ="http://www.blogjava.net/jjwwhmm/aggbug/199931.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjwwhmm/" target="_blank">pony</a> 2008-05-12 09:08 <a href="http://www.blogjava.net/jjwwhmm/archive/2008/05/12/199931.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>耶鲁cas单点登录系统的php客户端使用注意事项</title><link>http://www.blogjava.net/jjwwhmm/archive/2008/05/07/198897.html</link><dc:creator>pony</dc:creator><author>pony</author><pubDate>Wed, 07 May 2008 06:00:00 GMT</pubDate><guid>http://www.blogjava.net/jjwwhmm/archive/2008/05/07/198897.html</guid><wfw:comment>http://www.blogjava.net/jjwwhmm/comments/198897.html</wfw:comment><comments>http://www.blogjava.net/jjwwhmm/archive/2008/05/07/198897.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/jjwwhmm/comments/commentRss/198897.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjwwhmm/services/trackbacks/198897.html</trackback:ping><description><![CDATA[以前用CAS一直是用java的客户端,今天想把自己的phpMyAdmin集成到中心认证系统中,这样就不需要到apache的目录中用access文件去控制了.<br />
在集成phpCAS的时候,系统报出一些错误:<br />
<strong>Warning</strong>:  include_once(DB.php) [<a href="https://localhost/phpMyAdmin/cas/function.include-once">function.include-once</a>]: failed to open stream: No such file or directory in <strong>/opt/httproot/phpMyAdmin/cas/PGTStorage/pgt-db.php</strong> on line <strong>11</strong><br />
<br />
<strong>Warning</strong>:  include_once() [<a href="https://localhost/phpMyAdmin/cas/function.include">function.include</a>]: Failed opening 'DB.php' for inclusion (include_path='.:/usr/local/php-5.2.5/lib/php') in <strong>/opt/httproot/phpMyAdmin/cas/PGTStorage/pgt-db.php</strong> on line <strong>11</strong><br />
<br />
<strong>Warning</strong>:  session_start() [<a href="https://localhost/phpMyAdmin/cas/function.session-start">function.session-start</a>]:
Cannot send session cookie - headers already sent by (output started at
/opt/httproot/phpMyAdmin/cas/PGTStorage/pgt-db.php:11) in <strong>/opt/httproot/phpMyAdmin/cas/client.php</strong> on line <strong>489</strong><br />
<br />
<strong>Warning</strong>:  session_start() [<a href="https://localhost/phpMyAdmin/cas/function.session-start">function.session-start</a>]:
Cannot send session cache limiter - headers already sent (output
started at /opt/httproot/phpMyAdmin/cas/PGTStorage/pgt-db.php:11) in <strong>/opt/httproot/phpMyAdmin/cas/client.php</strong> on line <strong>489</strong><br />
<br />
<strong>Warning</strong>: Cannot modify header information - headers already sent
by (output started at
/opt/httproot/phpMyAdmin/cas/PGTStorage/pgt-db.php:11) in <strong>/opt/httproot/phpMyAdmin/cas/client.php</strong> on line <strong>880<br />
查了些资料,重新安装了php后问题解决:<br />
1.在编译php的时候,要加上--with-curl, --with-openssl, --with-dom, --with-zlib这些选项<br />
如果系统中还没有安装curl包:<br />
wget http://curl.haxx.se/download/curl-7.18.1.tar.gz<br />
tar -zxvf curl-7.18.1.tar.gz<br />
./configure --prefix=/usr/local/curl<br />
make<br />
sudo make install<br />
编译安装php：<br />
./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache/bin/apxs&nbsp; --with-mysql=/usr/local/mysql/ --with-libxml-dir=/usr/local/libxml-2.6.30/ --with-gd=/usr/local/gd-2.0.35/ --with-curl=/usr/local/curl/ --with-openssl --with-zlib --with-pear=/usr/local/php_pear<br />
make<br />
make test<br />
sudo make install<br />
注意，有可能pear安装不成功，要看你下载的php包，安装完后到php源代码目录下的pear下看看是有有错，否则，要现下载一个pear的安装包：<br />
wget http://pear.php.net/install-pear.phar<br />
再执行make，make install<br />
<br />
2.安装PEAR:DB<br />
cd /usr/local/php/bin<br />
pear install DB<br />
<br />
3.测试phpCAS<br />
把phpCAS包里的example_simple.php以及source目录里的所有文件拷贝到一个可以从apapche执行php文件的目录中<br />
然后访问http://host/dir/example_simeple.php<br />
结果页面转向到https://sso-cas.univ-rennes1.fr的中心认证地址，说明phpCAS安装成功。<br />
</strong><br />
<img src ="http://www.blogjava.net/jjwwhmm/aggbug/198897.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjwwhmm/" target="_blank">pony</a> 2008-05-07 14:00 <a href="http://www.blogjava.net/jjwwhmm/archive/2008/05/07/198897.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>(转载)apachectl startssl启动apache自动运行输入密码</title><link>http://www.blogjava.net/jjwwhmm/archive/2008/04/28/196686.html</link><dc:creator>pony</dc:creator><author>pony</author><pubDate>Mon, 28 Apr 2008 01:24:00 GMT</pubDate><guid>http://www.blogjava.net/jjwwhmm/archive/2008/04/28/196686.html</guid><wfw:comment>http://www.blogjava.net/jjwwhmm/comments/196686.html</wfw:comment><comments>http://www.blogjava.net/jjwwhmm/archive/2008/04/28/196686.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/jjwwhmm/comments/commentRss/196686.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjwwhmm/services/trackbacks/196686.html</trackback:ping><description><![CDATA[<h1 id="neirongtitle">apachectl startssl启动apache自动运行输入密码</h1>
<div id="neirongurl">作者：不详 来源: http://www.chinaunix.net(无显示即不详) </div>
<div class="endSummary">
<ul>
    <li><strong>核心提示</strong>：安装了一台服务器，只开放了https，没有开放http
    把启动命令/usr/local/bin/apachectl startssl写到/etc/rc.local里，重启服务器。
    发现apache并没有自动运行。 手动运行 [root@localhost]# /usr/local/bin/apachectl
    restart httpd not running, trying to start Apach..... </li>
</ul>
</div>
<div id="subcontent"><!--网站文章正文广告--></div>
<!-- google_ad_section_start -->
安装了一台服务器，只开放了https，没有开放http<br />
把启动命令/usr/local/bin/apachectl startssl写到/etc/rc.local里，重启服务器。<br />
发现apache并没有自动运行。<br />
手动运行<br />
[root@localhost]# /usr/local/bin/apachectl restart<br />
httpd not running, trying to start<br />
Apache/2.2.0 mod_ssl/2.2.0 (<a style="width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif);" name="baidusnap2"></a><strong style="color: black; background-color: #99ff99;">Pass</strong> <a style="width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif); " name="baidusnap3"></a><strong style="color: black; background-color: #ff9999;">Phrase</strong> <a style="width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif); " name="baidusnap4"></a><strong style="color: black; background-color: #ff66ff;">Dialog</strong>)<br />
Some of your private key files are encrypted for security reasons.<br />
In order to read them you have to provide the <strong style="color: black; background-color: #99ff99;">pass</strong> phrases.<br />
<br />
Server <a href="http://www.example.com:443/" target="_blank"><font color="#b83936">www.example.com:443</font></a> (RSA)<br />
Enter <strong style="color: black; background-color: #99ff99;">pass</strong> <strong style="color: black; background-color: #ff9999;">phrase</strong>:<br />
<br />
OK: <strong style="color: black; background-color: #99ff99;">Pass</strong> <strong style="color: black; background-color: #ff9999;">Phrase</strong> <strong style="color: black; background-color: #ff66ff;">Dialog</strong> successful.<br />
发现原来是要输入<strong style="color: black; background-color: #99ff99;">pass</strong> <strong style="color: black; background-color: #ff9999;">phrase</strong>的原因<br />
<br />
解决方案有2种<br />
1：去掉/usr/local/bin/apachectl startssl启动的<strong style="color: black; background-color: #99ff99;">pass</strong> <strong style="color: black; background-color: #ff9999;">phrase</strong>，用空<strong style="color: black; background-color: #99ff99;">pass</strong> <strong style="color: black; background-color: #ff9999;">phrase</strong>启动apache<br />
(while preserving the original file): <br />
$ cp server.key server.key.org <br />
$ openssl rsa -in server.key.org -out server.key <br />
<br />
确认server.key 文件为root可读 <br />
$ chmod 400 server.key<br />
参考<a href="http://www.chinaunix.net/jh/13/599604.html" target="_blank"><font color="#b83936">http://www.chinaunix.net/jh/13/599604.html</font></a><br />
<br />
2：编辑<br />
vi /usr/local/<a style="width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif); " name="baidusnap0"></a><strong style="color: black; background-color: #ffff66;">apache2</strong>/conf/extra/httpd-ssl.conf <br />
注释SSLPassPhraseDialog&#160;&#160;builtin<br />
在后添加<br />
SSLPassPhraseDialog exec:/usr/local/<strong style="color: black; background-color: #ffff66;">apache2</strong>/conf/apache_<strong style="color: black; background-color: #99ff99;">pass</strong>.sh<br />
<br />
vi /usr/local/<strong style="color: black; background-color: #ffff66;">apache2</strong>/conf/apache_<strong style="color: black; background-color: #99ff99;">pass</strong>.sh<br />
#!/bin/sh <br />
echo "密码" <br />
<br />
chmod +x /usr/local/<strong style="color: black; background-color: #ffff66;">apache2</strong>/conf/apache_<strong style="color: black; background-color: #99ff99;">pass</strong>.sh<br />
<br />
然后重启apache<br />
[root@localhost conf]# /home/<strong style="color: black; background-color: #ffff66;">apache2</strong>/bin/apachectl start<br />
[root@localhost conf]# <br />
<br />
然后从起服务器，就可以运行了<br />
<br />
参考<a href="http://httpd.apache.org/docs/2.0/mod/mod_ssl.html#sslpassphrasedialog" target="_blank"><font color="#b83936">http://httpd.apache.org/docs/2.0 ... sslpassphrasedialog</font></a>
<img src ="http://www.blogjava.net/jjwwhmm/aggbug/196686.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjwwhmm/" target="_blank">pony</a> 2008-04-28 09:24 <a href="http://www.blogjava.net/jjwwhmm/archive/2008/04/28/196686.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ubuntu启动时Faild to initialize HAL问题的解决</title><link>http://www.blogjava.net/jjwwhmm/archive/2008/04/26/196212.html</link><dc:creator>pony</dc:creator><author>pony</author><pubDate>Sat, 26 Apr 2008 05:44:00 GMT</pubDate><guid>http://www.blogjava.net/jjwwhmm/archive/2008/04/26/196212.html</guid><wfw:comment>http://www.blogjava.net/jjwwhmm/comments/196212.html</wfw:comment><comments>http://www.blogjava.net/jjwwhmm/archive/2008/04/26/196212.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjwwhmm/comments/commentRss/196212.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjwwhmm/services/trackbacks/196212.html</trackback:ping><description><![CDATA[今天早上启动ubuntu，登录进入xwindow，突然弹出两个错误提示框：<br />
1.dbus服务不能启动<br />
2.failed to initialize HAL<br />
系统提示先启动dbus服务,然后重新启动<br />
于是执行:sudo /etc/init.d/dbus start<br />
重新启动后,结果仍然出现这个错误.<br />
怀疑是在启动dbus服务之前有什么其它的服务发生错误导致dbus不能启动,所以首先想到了更改服务的启动顺序<br />
把/etc/rc2.d/S2Odbus改了启动顺序:<br />
sudo mv /etc/rc2.d/S20dbus /etc/rc2.d/S12dbus<br />
重新启动后发现没有错误了！以为问题就这样解决了!很开心!结果去查看进程,发现我好几个默认的服务都没启动,看来原因还不只是dbus不能启动<br />
仔细想了想昨天在系统中的改动,记得出了给apache重新配置了ssl外,没有新装什么服务啊,突然想到现在我的apache启动的时候是需要输入证书密码的,是不是因为系统自动启动的时候没有输入密码导致apache服务的启动没有执行完结果在后面启动的服务都不能执行呢?<br />
赶紧查了下apache服务的启动顺序:<br />
ls /etc/rc2.d/*apache*<br />
显示S12apache<br />
于是把dbus服务的启动顺序改回来,仍然是20,但把apache的启动删除掉,重新启动!再查看进程,发现出了apache的服务外,其它的都启动好了!看来果然是这个原因！<br />
<br />
<img src ="http://www.blogjava.net/jjwwhmm/aggbug/196212.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjwwhmm/" target="_blank">pony</a> 2008-04-26 13:44 <a href="http://www.blogjava.net/jjwwhmm/archive/2008/04/26/196212.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ssh-scan攻击的防范</title><link>http://www.blogjava.net/jjwwhmm/archive/2008/04/25/195980.html</link><dc:creator>pony</dc:creator><author>pony</author><pubDate>Fri, 25 Apr 2008 07:14:00 GMT</pubDate><guid>http://www.blogjava.net/jjwwhmm/archive/2008/04/25/195980.html</guid><wfw:comment>http://www.blogjava.net/jjwwhmm/comments/195980.html</wfw:comment><comments>http://www.blogjava.net/jjwwhmm/archive/2008/04/25/195980.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjwwhmm/comments/commentRss/195980.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjwwhmm/services/trackbacks/195980.html</trackback:ping><description><![CDATA[今天上午正在配置ssl,突然发现有10几个ssh-scan的进程,心里一惊:家里的机器ip地址怎么也有人来扫描到,还来试探俺的ssh用户,跟踪了一会,看他还在孜孜不倦的试探,于是在iptables里加一条规则,先把他的数据包阻止掉:<br />
&nbsp; sudo iptables -t filter -A INPUT -s xxx.xxx.xxx.xxx(他的ip地址) -s DROP<br />
再跟踪了一会,没有ssh-scan的进程了.<br />
但这也不是长远的办法啊,还是先把ssh的证书登录搞好吧,然后又在网上搜了下,看能不能在iptables里直接防止ssh-scan,搜到这篇文章:<br />
<a href="http://www.ducea.com/2006/06/28/using-iptables-to-block-brute-force-attacks/">http://www.ducea.com/2006/06/28/using-iptables-to-block-brute-force-attacks/</a><br />
明天再搞吧.困了.如果有朋友能告诉我更好的办法的话,先谢谢了! 
<img src ="http://www.blogjava.net/jjwwhmm/aggbug/195980.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjwwhmm/" target="_blank">pony</a> 2008-04-25 15:14 <a href="http://www.blogjava.net/jjwwhmm/archive/2008/04/25/195980.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>apache2.2中配置ssl</title><link>http://www.blogjava.net/jjwwhmm/archive/2008/04/25/195964.html</link><dc:creator>pony</dc:creator><author>pony</author><pubDate>Fri, 25 Apr 2008 06:39:00 GMT</pubDate><guid>http://www.blogjava.net/jjwwhmm/archive/2008/04/25/195964.html</guid><wfw:comment>http://www.blogjava.net/jjwwhmm/comments/195964.html</wfw:comment><comments>http://www.blogjava.net/jjwwhmm/archive/2008/04/25/195964.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/jjwwhmm/comments/commentRss/195964.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjwwhmm/services/trackbacks/195964.html</trackback:ping><description><![CDATA[<p>一.首先要安装好openssl<br />
&nbsp;&nbsp;&nbsp; 下载openssl:<br />
&nbsp;&nbsp;&nbsp;&nbsp; wget http://www.openssl.org/source/openssl-0.9.8a.tar.gz<br />
&nbsp;&nbsp;&nbsp;&nbsp; ./configure --prefix=/usr/local/openssl<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;make<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sudo make install<br />
&nbsp;&nbsp;&nbsp;&nbsp; 也可以直接用apt安装:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sudo apt-get install openssl libssl-dev<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 注意一定要安装openssl的开发库,否则编译apache的时候会报错误,不能编译ssl的.<br />
二.编译安装apache<br />
&nbsp;&nbsp;&nbsp;&nbsp; 这里不多说了,主要是configure的时候加上ssl的选项<br />
<br />
三.创建ssl所需要的证书<br />
(这里所有的文件都是创建在/etc/httpd目录中)<br />
1.创建key文件:<br />
sudo openssl genrsa -des3 -out server.key 1024<br />
执行完后应该在当前目录中有一个server.key文件<br />
<br />
<br />
2.查看创建的key文件:(不是必须)<br />
openssl rsa -noout -text -in server.key<br />
3.创建pem文件:(不是必须)<br />
sudo openssl rsa -in server.key -out server.key.unsecure<br />
4.创建scr文件:<br />
sudo openssl req -new -key server.key -out server.csr<br />
执行完后应该在当前目录中有一个server.csr文件<br />
5.创建crt文件:<br />
sudo openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt<br />
执行完后应该在当前目录中有一个server.crt文件<br />
<br />
四.修改apache的ssl配置文件<br />
1.修改httpd.conf<br />
在文件中找到下面一行,把注释去掉<br />
#Include conf/extra/httpd-ssl.conf<br />
2.修改httpd-ssl.conf<br />
在extra目录中,修改ssl的配置文件<br />
找到SSLCertificateFile和SSLCertificateKeyFile的配置,修改文件路径到上面创建的目录<br />
<br />
五.启动apache<br />
sudo /usr/local/apache/bin/apachectl start<br />
这时应该要求你回答证书密钥,回答后即可启动<br />
打开浏览器测试下吧!这时候应该能以https访问你的站点了.<br />
<br />
但这时,是所有的用户都可以访问你的https站点的,如果你希望只有认证的用户才能访问的话,请继续下面的配置!<br />
<br />
<br />
六.创建认证客户所需要的证书<br />
1.创建用户的key文件:<br />
sudo openssl genrsa -des3 -out client.key 1024<br />
2.创建用户的crt证书文件:<br />
&nbsp;sudo openssl req -new -x509 -days 3650 -key client.key -out client.crt<br />
修改SSLCACertificateFile的文件路径<br />
3.创建访问用户的csr文件:<br />
sudo openssl req -new&nbsp; -out pony.csr<br />
4.创建访问用户的crt证书文件:<br />
sudo openssl x509 -req -in pony.csr -out pony.crt -signkey client.key -CA client.crt -CAkey client.key -CAcreateserial -days 3650<br />
5.导出为pfx证书:(ie中只能导入pfx证书)<br />
sudo openssl pkcs12 -export -in pony.crt -inkey client.key -out pony.pfx<br />
在你的测试机的ie中导入这个pfx证书<br />
6.修改ssl配置文件:<br />
在httpd-ssl.conf文件中找到SSLCACertificateFile的配置,然后修改文件路径为client.crt<br />
把以下两行注释去掉:<br />
SSLVerifyClient require<br />
SSLVerifyDepth&nbsp; 10<br />
<br />
重新启动apache,再次访问apache的时候,ie就会弹出窗口选择证书了.<br />
that's all<br />
<br />
(本文参考了CU的文章:<a href="http://www.chinaunix.net/jh/13/469276.html">http://www.chinaunix.net/jh/13/469276.html</a>,非常感谢作者!)</p>
<p>&nbsp;</p>
<img src ="http://www.blogjava.net/jjwwhmm/aggbug/195964.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjwwhmm/" target="_blank">pony</a> 2008-04-25 14:39 <a href="http://www.blogjava.net/jjwwhmm/archive/2008/04/25/195964.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ubuntu中ssh的登录过期时间设置</title><link>http://www.blogjava.net/jjwwhmm/archive/2008/04/25/195927.html</link><dc:creator>pony</dc:creator><author>pony</author><pubDate>Fri, 25 Apr 2008 03:57:00 GMT</pubDate><guid>http://www.blogjava.net/jjwwhmm/archive/2008/04/25/195927.html</guid><wfw:comment>http://www.blogjava.net/jjwwhmm/comments/195927.html</wfw:comment><comments>http://www.blogjava.net/jjwwhmm/archive/2008/04/25/195927.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjwwhmm/comments/commentRss/195927.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjwwhmm/services/trackbacks/195927.html</trackback:ping><description><![CDATA[sudo vi /etc/profile<br />
#seconds<br />
export TMOUT=3600
<img src ="http://www.blogjava.net/jjwwhmm/aggbug/195927.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjwwhmm/" target="_blank">pony</a> 2008-04-25 11:57 <a href="http://www.blogjava.net/jjwwhmm/archive/2008/04/25/195927.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>vi的替换命令</title><link>http://www.blogjava.net/jjwwhmm/archive/2008/04/22/194858.html</link><dc:creator>pony</dc:creator><author>pony</author><pubDate>Tue, 22 Apr 2008 11:14:00 GMT</pubDate><guid>http://www.blogjava.net/jjwwhmm/archive/2008/04/22/194858.html</guid><wfw:comment>http://www.blogjava.net/jjwwhmm/comments/194858.html</wfw:comment><comments>http://www.blogjava.net/jjwwhmm/archive/2008/04/22/194858.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjwwhmm/comments/commentRss/194858.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjwwhmm/services/trackbacks/194858.html</trackback:ping><description><![CDATA[:范围修饰符s/被替换的字符串/替换后的字符串/可选标志
<div>例如:</div>
<div><span class="Apple-tab-span" style="white-space:pre">	</span>:%s/demo/hello world./g 把全部"demo"替换为"hello world.</div>
<div>范围修饰符包括:</div>
<div>&#160;&#160; 1.%,表示所有行</div>
<div>&#160;&#160;2.., 表示当前行</div>
<div>&#160;&#160;3.$, 表示最后移行</div>
<div>&#160;&#160;4.4,9,表示第4行到第9行</div>
<div>s表示vi命令的替换操作</div>
<div>g表示对每一行中的所有匹配进行操作</div>
<img src ="http://www.blogjava.net/jjwwhmm/aggbug/194858.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjwwhmm/" target="_blank">pony</a> 2008-04-22 19:14 <a href="http://www.blogjava.net/jjwwhmm/archive/2008/04/22/194858.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ubuntu下安装mysql的注意事项--innodb</title><link>http://www.blogjava.net/jjwwhmm/archive/2008/04/22/194786.html</link><dc:creator>pony</dc:creator><author>pony</author><pubDate>Tue, 22 Apr 2008 07:35:00 GMT</pubDate><guid>http://www.blogjava.net/jjwwhmm/archive/2008/04/22/194786.html</guid><wfw:comment>http://www.blogjava.net/jjwwhmm/comments/194786.html</wfw:comment><comments>http://www.blogjava.net/jjwwhmm/archive/2008/04/22/194786.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/jjwwhmm/comments/commentRss/194786.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjwwhmm/services/trackbacks/194786.html</trackback:ping><description><![CDATA[如果从源代码编译安装mysql,缺省安装时,是没有innodb引擎的.所以,在configure的时候,要加入--with-plugins=all(或者max),这样才会支持innodb.在mysql里可以执行show engines命令来查看当前的mysql服务器所支持的存储引擎.
<img src ="http://www.blogjava.net/jjwwhmm/aggbug/194786.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjwwhmm/" target="_blank">pony</a> 2008-04-22 15:35 <a href="http://www.blogjava.net/jjwwhmm/archive/2008/04/22/194786.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>dhcp client问题</title><link>http://www.blogjava.net/jjwwhmm/archive/2008/04/21/194451.html</link><dc:creator>pony</dc:creator><author>pony</author><pubDate>Mon, 21 Apr 2008 02:27:00 GMT</pubDate><guid>http://www.blogjava.net/jjwwhmm/archive/2008/04/21/194451.html</guid><wfw:comment>http://www.blogjava.net/jjwwhmm/comments/194451.html</wfw:comment><comments>http://www.blogjava.net/jjwwhmm/archive/2008/04/21/194451.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjwwhmm/comments/commentRss/194451.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjwwhmm/services/trackbacks/194451.html</trackback:ping><description><![CDATA[最近家里的电脑除了个怪问题.家里用的是东方有线的网络,系统是ubuntu 6 server,系统开机后一段时间,网络就自动断了.ifconfig查看网卡信息,ip地址是对的.但ping不通外面的网络.然后再过一段时间,网络又重新回复,查看syslog,message等日志,只发现这样的日志:
<div>
<div>Apr 20 22:26:10 localhost dhclient: DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 7</div>
<div>Apr 20 22:26:10 localhost dhclient: DHCPOFFER from 10.119.16.1</div>
<div>Apr 20 22:26:10 localhost dhclient: DHCPREQUEST on eth0 to 255.255.255.255 port 67</div>
<div>Apr 20 22:26:10 localhost dhclient: DHCPACK from 10.119.16.1</div>
<div>Apr 20 22:26:10 localhost dhclient: bound to xxx.xxx.xxx.xxxx(我的ip地址) -- renewal in 1595 seconds.</div>
<div>初步分析应该是ubuntu的dhclient有问题,暂时解决不了.</div>
<div>先写个脚本解决下问题吧.(bash不怎么熟悉,只好用perl了)</div>
<div>
<div>fixnetwork.pl:</div>
<div>#/usr/bin/perl</div>
<div>use Net::Ping;</div>
<div>my $ip = "xxx.xxx.xxx.xxx";#随便写个公网上能ping通的ip地址</div>
<div>my $p = Net::Ping->new("tcp", 4);</div>
<div>while (1) {<span class="Apple-tab-span" style="white-space:pre">	</span></div>
<div><span class="Apple-tab-span" style="white-space:pre">	</span>if ($p->ping($ip)) {</div>
<div><span class="Apple-tab-span" style="white-space:pre">		</span>print "$ip answered\n";</div>
<div><span class="Apple-tab-span" style="white-space:pre">	</span>} else {</div>
<div><span class="Apple-tab-span" style="white-space:pre">		</span>print "$ip did not answer\n";</div>
<div><span class="Apple-tab-span" style="white-space:pre">		</span>system("ifdown eth0");</div>
<div><span class="Apple-tab-span" style="white-space:pre">		</span>system("ifup eth0");</div>
<div><span class="Apple-tab-span" style="white-space:pre">	</span>}</div>
<div><span class="Apple-tab-span" style="white-space:pre">	</span>sleep(1);</div>
<div>}</div>
<div>然后执行:sudo fixnetwork.pl > fixnetwork.log &amp;</div>
<div>现在暂时网络是能用了,但不知道这个dhclient的问题什么时候能解决:(</div>
</div>
</div>
<img src ="http://www.blogjava.net/jjwwhmm/aggbug/194451.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjwwhmm/" target="_blank">pony</a> 2008-04-21 10:27 <a href="http://www.blogjava.net/jjwwhmm/archive/2008/04/21/194451.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ubuntu下安装php及phpMyAdmin</title><link>http://www.blogjava.net/jjwwhmm/archive/2008/04/19/194191.html</link><dc:creator>pony</dc:creator><author>pony</author><pubDate>Sat, 19 Apr 2008 07:24:00 GMT</pubDate><guid>http://www.blogjava.net/jjwwhmm/archive/2008/04/19/194191.html</guid><wfw:comment>http://www.blogjava.net/jjwwhmm/comments/194191.html</wfw:comment><comments>http://www.blogjava.net/jjwwhmm/archive/2008/04/19/194191.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/jjwwhmm/comments/commentRss/194191.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjwwhmm/services/trackbacks/194191.html</trackback:ping><description><![CDATA[<p>apache的安装就不说了^_^<br />
1.下载php<br />
wget http://cn2.php.net/get/php-5.2.5.tar.gz/from/cn.php.net/mirror<br />
2.下载libxml<br />
wget ftp://ftp.gnome.org/pub/GNOME/sources/libxml2/2.6/libxml2-2.6.30.tar.gz<br />
3.下载gd<br />
wget http://www.libgd.org/releases/gd-2.0.35.tar.gz<br />
4.下载phpMyAdmin<br />
wget http://prdownloads.sourceforge.net/phpmyadmin/phpMyAdmin-2.11.5.1-all-languages.tar.gz?download<br />
5.安装libxml<br />
&nbsp;&nbsp;&nbsp;&nbsp;tar -zxvf libxml2-2.6.30.tar.gz<br />
&nbsp;&nbsp;&nbsp;&nbsp;cd libxml2-2.6.30/<br />
&nbsp;&nbsp;&nbsp;&nbsp;./configure --prefix=/usr/local/libxml-2.6.30<br />
&nbsp;&nbsp;&nbsp;&nbsp;make<br />
&nbsp;&nbsp;&nbsp;&nbsp;sudo make install<br />
6.安装gd<br />
&nbsp;&nbsp;&nbsp;&nbsp;tar -zxvf gd-2.0.35.tar.gz<br />
&nbsp;&nbsp;&nbsp;&nbsp;cd gd-2.0.35/<br />
&nbsp;&nbsp;&nbsp;&nbsp;./configure --prefix=/usr/local/gd-2.0.35<br />
&nbsp;&nbsp;&nbsp;&nbsp;make<br />
&nbsp;&nbsp;&nbsp;&nbsp;sudo make install<br />
7.安装php<br />
&nbsp;&nbsp;&nbsp;&nbsp;tar -zxvf php-5.2.5.tar.gz<br />
&nbsp;&nbsp;&nbsp;&nbsp;cd php-5.2.5/&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;./configure --prefix=/usr/local/php-5.2.5 --with-apxs2=/usr/local/apache-2.2.8/bin/apxs --with-mysql=/usr/local/mysql --with-libxml-dir=/usr/local/libxml-2.6.30/ --with-gd=/usr/local/gd-2.0.35/<br />
&nbsp;&nbsp;&nbsp;&nbsp;make<br />
&nbsp;&nbsp;&nbsp;&nbsp;make test<br />
&nbsp;&nbsp;&nbsp;&nbsp;sudo make install<br />
8.配置apache及php<br />
&nbsp;&nbsp;&nbsp;&nbsp;cp php.ini-dist /usr/local/lib/php.ini<br />
&nbsp;&nbsp;&nbsp;&nbsp;在httpd.conf中:<br />
&nbsp;&nbsp;&nbsp;&nbsp;#安装完php后一般安装程序会自动修改httpd.conf文件加入以下配置:<br />
&nbsp;&nbsp;&nbsp;&nbsp;LoadModule php5_module modules/libphp5.so<br />
&nbsp;&nbsp;&nbsp;&nbsp;AddType application/x-httpd-php .php .phtml<br />
&nbsp;&nbsp; AddType application/x-httpd-php-source .phps<br />
9.安装phpMyAdmin<br />
&nbsp;&nbsp;&nbsp;&nbsp;tar -zxvf phpMyAdmin-2.11.5.1-all-languages.tar.gz<br />
&nbsp;&nbsp;&nbsp; sudo mv phpMyAdmin-2.11.5.1-all-languages /usr/local/apache-2.2.8/htdocs/phpMyAdmin<br />
访问一下看看可以没:<br />
&nbsp;&nbsp;&nbsp;&nbsp;http://host/phpMyAdmin/index.php<br />
配置页面应该出来了!恭喜,安装成功!</p>
<img src ="http://www.blogjava.net/jjwwhmm/aggbug/194191.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjwwhmm/" target="_blank">pony</a> 2008-04-19 15:24 <a href="http://www.blogjava.net/jjwwhmm/archive/2008/04/19/194191.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ubuntu上安装mysql后mysql.server不能启动问题的解决</title><link>http://www.blogjava.net/jjwwhmm/archive/2008/04/18/194001.html</link><dc:creator>pony</dc:creator><author>pony</author><pubDate>Fri, 18 Apr 2008 03:57:00 GMT</pubDate><guid>http://www.blogjava.net/jjwwhmm/archive/2008/04/18/194001.html</guid><wfw:comment>http://www.blogjava.net/jjwwhmm/comments/194001.html</wfw:comment><comments>http://www.blogjava.net/jjwwhmm/archive/2008/04/18/194001.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjwwhmm/comments/commentRss/194001.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjwwhmm/services/trackbacks/194001.html</trackback:ping><description><![CDATA[<div>mysql安装步骤:</div>
<div>1.下载mysql-6.0.4-alpha.tar.gz</div>
<div>2.tar -zxvf&#160;mysql-6.0.4-alpha.tar.gz</div>
<div>3.cd&#160;mysql-6.0.4-alpha</div>
<div>4../configure --prefix=/usr/local/mysql</div>
<div>5.make</div>
<div>6.sudo make install</div>
<div>7.sudo cp supported-files/my-medium.cnf /etc/my.cnf</div>
<div>8.sudo cp supported-files/mysql.server /etc/init.d</div>
<div>9.sudo chmod a+x /etc/ini.d/mysql.server</div>
<div>10.cd /usr/local/mysql</div>
<div>11.bin/mysql_install_db --user=mysql</div>
<div>到这里,mysql基本安装完毕,然后就要启动mysql了.</div>
<div>先试试mysqld_safe可以不:</div>
<div>1.bin/mysqld_safe &amp;</div>
<div>2.ps -ef | grep mysql</div>
<div>可以查到mysql的进程,ok,kill掉mysql的进程</div>
<div>现在试试以服务的方式启动mysql:</div>
<div>1./etc/init.d/mysql.server</div>
<div>报错了:<span  style="font-family: line-height: 19px; white-space: pre; ">Starting MySQL../etc/init.d/mysql: line 159: kill: (6638) - No such process</span></div>
<div><font  face=" line-height: 19px; white-space: pre;">于是sudo vi /etc/init.d/mysql.server,查找到启动mysql的脚本,在大约307行左右.把变量打印出来.</span></font></div>
<div><font  face=" line-height: 19px; white-space: pre;">然后手工执行启动mysql的命令:bin/mysqld_safe --datadir=/usr/local/mysql/var/ --pid-file=/usr/local/mysql/var/mysql.pid</span></font></div>
<div><font  face=" line-height: 19px; white-space: pre;">发现启动mysql错误,报permission deny.于是怀疑是用户权限问题导致/usr/mysql/var/mysql.pid文件无法创建.</span></font></div>
<div><font  face=" line-height: 19px; white-space: pre;">再重新执行上面的命令:sudo bin/mysqld_safe --datadir=/usr/local/mysql/var/ --pid-file=/usr/local/mysql/var/mysql.pid</span></font></div>
<div><font  face=" line-height: 19px; white-space: pre;">至此真相大白!在手工执行/etc/init.d/mysql.server时,也要记得"sudo".</span></font></div>
<div><font  face=" line-height: 19px; white-space: pre;"><br />
</span></font></div>
<img src ="http://www.blogjava.net/jjwwhmm/aggbug/194001.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjwwhmm/" target="_blank">pony</a> 2008-04-18 11:57 <a href="http://www.blogjava.net/jjwwhmm/archive/2008/04/18/194001.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>apache2.2.8不再有AddModule指令了</title><link>http://www.blogjava.net/jjwwhmm/archive/2008/04/13/192583.html</link><dc:creator>pony</dc:creator><author>pony</author><pubDate>Sun, 13 Apr 2008 09:18:00 GMT</pubDate><guid>http://www.blogjava.net/jjwwhmm/archive/2008/04/13/192583.html</guid><wfw:comment>http://www.blogjava.net/jjwwhmm/comments/192583.html</wfw:comment><comments>http://www.blogjava.net/jjwwhmm/archive/2008/04/13/192583.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjwwhmm/comments/commentRss/192583.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjwwhmm/services/trackbacks/192583.html</trackback:ping><description><![CDATA[今天在试用apache的最新版本2.2.8,配置apache-tomcat connector的时候发现在http.conf中不再支持AddModule指令了，只需要LoadModule即可。<br />
另外，最新的Connector也增加了很多功能。可以到http://tomcat.apache.org/connectors-doc/reference/apache.html查看详细的指令说明。<br />
<br />
<img src ="http://www.blogjava.net/jjwwhmm/aggbug/192583.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjwwhmm/" target="_blank">pony</a> 2008-04-13 17:18 <a href="http://www.blogjava.net/jjwwhmm/archive/2008/04/13/192583.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ubuntu server版本上安装xwindow</title><link>http://www.blogjava.net/jjwwhmm/archive/2008/04/07/191272.html</link><dc:creator>pony</dc:creator><author>pony</author><pubDate>Mon, 07 Apr 2008 07:05:00 GMT</pubDate><guid>http://www.blogjava.net/jjwwhmm/archive/2008/04/07/191272.html</guid><wfw:comment>http://www.blogjava.net/jjwwhmm/comments/191272.html</wfw:comment><comments>http://www.blogjava.net/jjwwhmm/archive/2008/04/07/191272.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjwwhmm/comments/commentRss/191272.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjwwhmm/services/trackbacks/191272.html</trackback:ping><description><![CDATA[<span class="postbody"># apt-get install xserver-xorg <br />
# apt-get install x-window-system-core <br />
# dpkg-reconfigure xserver-xorg <br />
# apt-get install gnome-core <br />
# apt-get install gdm xscreensaver <br />
# apt-get install ttf-arphic* <br />
# startx</span>
<img src ="http://www.blogjava.net/jjwwhmm/aggbug/191272.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjwwhmm/" target="_blank">pony</a> 2008-04-07 15:05 <a href="http://www.blogjava.net/jjwwhmm/archive/2008/04/07/191272.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>今天了解了linux下的mosix群集的基本使用方法</title><link>http://www.blogjava.net/jjwwhmm/archive/2008/02/25/182010.html</link><dc:creator>pony</dc:creator><author>pony</author><pubDate>Mon, 25 Feb 2008 07:18:00 GMT</pubDate><guid>http://www.blogjava.net/jjwwhmm/archive/2008/02/25/182010.html</guid><wfw:comment>http://www.blogjava.net/jjwwhmm/comments/182010.html</wfw:comment><comments>http://www.blogjava.net/jjwwhmm/archive/2008/02/25/182010.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjwwhmm/comments/commentRss/182010.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjwwhmm/services/trackbacks/182010.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: linux下的mosix群集&nbsp;&nbsp;<a href='http://www.blogjava.net/jjwwhmm/archive/2008/02/25/182010.html'>阅读全文</a><img src ="http://www.blogjava.net/jjwwhmm/aggbug/182010.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjwwhmm/" target="_blank">pony</a> 2008-02-25 15:18 <a href="http://www.blogjava.net/jjwwhmm/archive/2008/02/25/182010.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>安装apache的错误问题解决: error,APR with the bundled APR-utilq错误解决</title><link>http://www.blogjava.net/jjwwhmm/archive/2008/02/25/181888.html</link><dc:creator>pony</dc:creator><author>pony</author><pubDate>Mon, 25 Feb 2008 01:42:00 GMT</pubDate><guid>http://www.blogjava.net/jjwwhmm/archive/2008/02/25/181888.html</guid><wfw:comment>http://www.blogjava.net/jjwwhmm/comments/181888.html</wfw:comment><comments>http://www.blogjava.net/jjwwhmm/archive/2008/02/25/181888.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.blogjava.net/jjwwhmm/comments/commentRss/181888.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjwwhmm/services/trackbacks/181888.html</trackback:ping><description><![CDATA[<h4 goog_docs_charindex="275">configure: error,APR with the bundled APR-utilq错误解决</h4>
<div class="tpc_content" goog_docs_charindex="328">一般在第一次安装进一般不会遇到这种问题，在重新编译时会遇到该问题<br goog_docs_charindex="361" />
以下是我根据错误提示进行纠正安装的<br goog_docs_charindex="379" />
<br goog_docs_charindex="380" />
<br goog_docs_charindex="381" />
cd httpd-2.2.2<br goog_docs_charindex="396" />
<br goog_docs_charindex="397" />
安装APR<br goog_docs_charindex="403" />
cd srclib/apr <br goog_docs_charindex="418" />
<br goog_docs_charindex="419" />
#./configure --prefix=/usr/local/apr <br goog_docs_charindex="457" />
#make<br goog_docs_charindex="463" />
#make install<br goog_docs_charindex="477" />
<br goog_docs_charindex="478" />
安装APR-util<br goog_docs_charindex="489" />
cd srclib/apr-util <br goog_docs_charindex="509" />
<br goog_docs_charindex="510" />
#./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr <br goog_docs_charindex="579" />
#make<br goog_docs_charindex="585" />
#make install<br goog_docs_charindex="599" />
<br />
再安装apache<br goog_docs_charindex="600" />
# ./configure --prefix=/usr/local/apache <br goog_docs_charindex="642" />
--enable-so --enable-mods-shared=all <br goog_docs_charindex="680" />
--enable-cgi <br goog_docs_charindex="694" />
--with-apr=/usr/local/apr <br goog_docs_charindex="721" />
--with-apr-util=/usr/local/apr-util/bin<br goog_docs_charindex="761" />
<br goog_docs_charindex="762" />
# make <br goog_docs_charindex="770" />
#make install<br goog_docs_charindex="784" />
<br goog_docs_charindex="785" />
这样安装正常！</div>
  <img src ="http://www.blogjava.net/jjwwhmm/aggbug/181888.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjwwhmm/" target="_blank">pony</a> 2008-02-25 09:42 <a href="http://www.blogjava.net/jjwwhmm/archive/2008/02/25/181888.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>clickstream项目体会</title><link>http://www.blogjava.net/jjwwhmm/archive/2008/02/21/181078.html</link><dc:creator>pony</dc:creator><author>pony</author><pubDate>Thu, 21 Feb 2008 07:36:00 GMT</pubDate><guid>http://www.blogjava.net/jjwwhmm/archive/2008/02/21/181078.html</guid><wfw:comment>http://www.blogjava.net/jjwwhmm/comments/181078.html</wfw:comment><comments>http://www.blogjava.net/jjwwhmm/archive/2008/02/21/181078.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/jjwwhmm/comments/commentRss/181078.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjwwhmm/services/trackbacks/181078.html</trackback:ping><description><![CDATA[clickstream是opensymphony上的一个开源项目,其目的是用于跟踪用户在web服务器上的浏览历史.通过这个模块得到的历史数据,可以分析出用户访问网站的路径,瓶颈,热点连接等,并根据这些数据对系统功能做出适当调整.<br />
<br />
其设计的出发点是利用servlet的filter,在每次对servlet的访问时就日志.日志的实现主要是通过在当前用户的session中设置一个clickstream的跟踪对象.并利用HttpSessionListener来跟踪session的创建,销毁事件,从而达到跟踪一个用户的浏览历史功能.<br />
<br />
鸡蛋里挑点骨头吧!<br />
1.clickstream只有在用户访问servlet时才能实现跟踪的目的.如果网站有很多的静态页面,那么就无法通过它来跟踪了,还是apache的日志好啊!<br />
2.clickstream在每个对servlet的访问都创建了一个session,这对很多不需要session的servlet来说,是不必要的.对于高并发访问的系统,这会增加系统的负荷,尤其是如果站点是采用集群的话,更会带来大量的session复制的性能问题.我建议才系统刚上线的时候或者有功能的重要更新的时候可以利用它来跟踪用户,以分析用户行为,改进系统.
 <img src ="http://www.blogjava.net/jjwwhmm/aggbug/181078.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjwwhmm/" target="_blank">pony</a> 2008-02-21 15:36 <a href="http://www.blogjava.net/jjwwhmm/archive/2008/02/21/181078.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>