<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>我的技术生活-王炜 &#187; UNIX</title>
	<atom:link href="http://www.aaronw.cn/cache/unix/feed" rel="self" type="application/rss+xml" />
	<link>http://www.aaronw.cn</link>
	<description>只为成功找方法，不为失败找借口</description>
	<lastBuildDate>Wed, 01 Sep 2010 13:51:26 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>python 手动生成.pyo文件</title>
		<link>http://www.aaronw.cn/static/662.html</link>
		<comments>http://www.aaronw.cn/static/662.html#comments</comments>
		<pubDate>Fri, 30 Jul 2010 04:10:34 +0000</pubDate>
		<dc:creator>Aaron.wang</dc:creator>
				<category><![CDATA[UNIX]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[编译]]></category>

		<guid isPermaLink="false">http://www.aaronw.cn/?p=662</guid>
		<description><![CDATA[每次编写，每次编译都会忘记，每次都要谷歌！没有记性的大脑！
python -O -m py_compile tdsw.py
]]></description>
			<content:encoded><![CDATA[<p>每次编写，每次编译都会忘记，每次都要谷歌！没有记性的大脑！<br />
python -O -m py_compile tdsw.py</p>
]]></content:encoded>
			<wfw:commentRss>http://www.aaronw.cn/static/662.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>mysql字符集</title>
		<link>http://www.aaronw.cn/static/656.html</link>
		<comments>http://www.aaronw.cn/static/656.html#comments</comments>
		<pubDate>Mon, 10 May 2010 12:41:59 +0000</pubDate>
		<dc:creator>Aaron.wang</dc:creator>
				<category><![CDATA[UNIX]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[字符集]]></category>

		<guid isPermaLink="false">http://www.aaronw.cn/?p=656</guid>
		<description><![CDATA[今天我的同事问我mysql字符集的事，我又被问住了！
关于mysql字符集的问题我自己也遇到了很多次，每次google查了，问题解决了，就认为自己记住是如何解决了！过了几天本问起或遇到的时候才发现我还是忘记了！奶奶说：好记性，不如烂笔头！现在发现长背说的总是没有错的！正好现在有时间就写写吧！后来发现这篇文章连原理都讲了，觉得很不错！由于转的时候没有发现作者，所以这里就不贴原地址了！
基本概念
• 字符(Character)是指人类语言中最小的表义符号。例如’A&#8217;、’B&#8217;等；
•  给定一系列字符，对每个字符赋予一个数值，用数值来代表对应的字符，这一数值就是字符的编码(Encoding)。例如，我们给字符’A&#8217;赋予数值0，给 字符’B&#8217;赋予数值1，则0就是字符’A&#8217;的编码；
•  给定一系列字符并赋予对应的编码后，所有这些字符和编码对组成的集合就是字符集(Character  Set)。例如，给定字符列表为{’A&#8217;,’B&#8217;}时，{’A&#8217;=&#62;0, ‘B’=&#62;1}就是一个字符集；
•  字符序(Collation)是指在同一字符集内字符之间的比较规则；
•  确定字符序后，才能在一个字符集上定义什么是等价的字符，以及字符之间的大小关系；
•  每个字符序唯一对应一种字符集，但一个字符集可以对应多种字符序，其中有一个是默认字符序(Default Collation)；
•  MySQL中的字符序名称遵从命名惯例：以字符序对应的字符集名称开头；以_ci(表示大小写不敏感)、_cs(表示大小写敏感)或_bin(表示按编码 值比较)结尾。例如：在字符序“utf8_general_ci”下，字符“a”和“A”是等价的；

MySQL字符集设置•  系统变量：
– character_set_server：默认的内部操作字符集
– character_set_client： 客户端来源数据使用的字符集
– character_set_connection：连接层字符集
–  character_set_results：查询结果字符集
– character_set_database： 当前选中数据库的默认字符集
– character_set_system：系统元数据(字段名等)字符集
–  还有以collation_开头的同上面对应的变量，用来描述字符序。
•  用introducer指定文本字符串的字符集：
– 格式为：[_charset] ’string’ [COLLATE collation]
–  例如：
• SELECT _latin1 ’string’;
• SELECT _utf8 ‘你好’ COLLATE  utf8_general_ci;
– 由introducer修饰的文本字符串在请求过程中不经过多余的转码，直接转换为内部字符集处理。
MySQL 中的字符集转换过程1. MySQL  Server收到请求时将请求数据从character_set_client转换为character_set_connection；
2. [...]]]></description>
			<content:encoded><![CDATA[<p>今天我的同事问我mysql字符集的事，我又被问住了！</p>
<p>关于mysql字符集的问题我自己也遇到了很多次，每次google查了，问题解决了，就认为自己记住是如何解决了！过了几天本问起或遇到的时候才发现我还是忘记了！奶奶说：好记性，不如烂笔头！现在发现长背说的总是没有错的！正好现在有时间就写写吧！后来发现这篇文章连原理都讲了，觉得很不错！由于转的时候没有发现作者，所以这里就不贴原地址了！</p>
<p><strong>基本概念<br />
</strong>• 字符(Character)是指人类语言中最小的表义符号。例如’A&#8217;、’B&#8217;等；<br />
•  给定一系列字符，对每个字符赋予一个数值，用数值来代表对应的字符，这一数值就是字符的编码(Encoding)。例如，我们给字符’A&#8217;赋予数值0，给 字符’B&#8217;赋予数值1，则0就是字符’A&#8217;的编码；<br />
•  给定一系列字符并赋予对应的编码后，所有这些字符和编码对组成的集合就是字符集(Character  Set)。例如，给定字符列表为{’A&#8217;,’B&#8217;}时，{’A&#8217;=&gt;0, ‘B’=&gt;1}就是一个字符集；<br />
•  字符序(Collation)是指在同一字符集内字符之间的比较规则；<br />
•  确定字符序后，才能在一个字符集上定义什么是等价的字符，以及字符之间的大小关系；<br />
•  每个字符序唯一对应一种字符集，但一个字符集可以对应多种字符序，其中有一个是默认字符序(Default Collation)；<br />
•  MySQL中的字符序名称遵从命名惯例：以字符序对应的字符集名称开头；以_ci(表示大小写不敏感)、_cs(表示大小写敏感)或_bin(表示按编码 值比较)结尾。例如：在字符序“utf8_general_ci”下，字符“a”和“A”是等价的；<br />
<span id="more-656"></span><br />
<strong>MySQL字符集设置</strong>•  系统变量：<br />
– <strong>character_set_server</strong>：默认的内部操作字符集<br />
– <strong>character_set_client</strong>： 客户端来源数据使用的字符集<br />
– <strong>character_set_connection</strong>：连接层字符集<br />
–  <strong>character_set_results</strong>：查询结果字符集<br />
– <strong>character_set_database</strong>： 当前选中数据库的默认字符集<br />
– <strong>character_set_system</strong>：系统元数据(字段名等)字符集<br />
–  还有以<strong>collation_</strong>开头的同上面对应的变量，用来描述字符序。<br />
•  用introducer指定文本字符串的字符集：<br />
– 格式为：[_charset] ’string’ [COLLATE collation]<br />
–  例如：<br />
• SELECT _latin1 ’string’;<br />
• SELECT _utf8 ‘你好’ COLLATE  utf8_general_ci;<br />
– 由introducer修饰的文本字符串在请求过程中不经过多余的转码，直接转换为内部字符集处理。<br />
<strong>MySQL 中的字符集转换过程</strong>1. MySQL  Server收到请求时将请求数据从character_set_client转换为character_set_connection；<br />
2.  进行内部操作前将请求数据从character_set_connection转换为内部操作字符集，其确定方法如下：<br />
•  使用每个数据字段的CHARACTER SET设定值；<br />
• 若上述值不存在，则使用对应数据表的DEFAULT CHARACTER  SET设定值(MySQL扩展，非SQL标准)；<br />
• 若上述值不存在，则使用对应数据库的DEFAULT CHARACTER SET设定值；<br />
•  若上述值不存在，则使用character_set_server设定值。<br />
3.  将操作结果从内部操作字符集转换为character_set_results。</p>
<p><strong>常见问题解析</strong>•  向默认字符集为utf8的数据表插入utf8编码的数据前没有设置连接字符集，查询时设置连接字符集为utf8<br />
–  插入时根据MySQL服务器的默认设置，character_set_client、character_set_connection和 character_set_results均为latin1；</p>
<p>–  插入操作的数据将经过latin1=&gt;latin1=&gt;utf8的字符集转换过程，这一过程中每个插入的汉字都会从原始的3个字节变成6个字 节保存；<br />
– 查询时的结果将经过utf8=&gt;utf8的字符集转换过程，将保存的6个字节原封不动返回，产生乱码……</p>
<p>• 向默认字符集为latin1的数据表插入utf8编码的数据前设置了连接字符集为utf8<br />
–  插入时根据连接字符集设置，character_set_client、character_set_connection和 character_set_results均为utf8；<br />
–  插入数据将经过utf8=&gt;utf8=&gt;latin1的字符集转换，若原始数据中含有\u0000~\u00ff范围以外的Unicode字  符，会因为无法在latin1字符集中表示而被转换为“?”(0×3F)符号，以后查询时不管连接字符集设置如何都无法恢复其内容了。</p>
<p><strong>检测字符集问题的一些手段</strong>• SHOW CHARACTER SET;<br />
• SHOW COLLATION;<br />
•  SHOW VARIABLES LIKE ‘character%’;<br />
• SHOW VARIABLES LIKE  ‘collation%’;<br />
• SQL函数HEX、LENGTH、CHAR_LENGTH<br />
•  SQL函数CHARSET、COLLATION<br />
使用MySQL字符集时的建议•  建立数据库/表和进行数据库操作时尽量显式指出使用的字符集，而不是依赖于MySQL的默认设置，否则MySQL升级时可能带来很大困扰；<br />
•  数据库和连接字符集都使用latin1时虽然大部分情况下都可以解决乱码问题，但缺点是无法以字符为单位来进行SQL操作，一般情况下将数据库和连接字符 集都置为utf8是较好的选择；<br />
• 使用mysql C  API时，初始化数据库句柄后马上用mysql_options设定MYSQL_SET_CHARSET_NAME属性为utf8，这样就不用显式地用  SET NAMES语句指定连接字符集，且用mysql_ping重连断开的长连接时也会把连接字符集重置为utf8；<br />
• 对于mysql  PHP API，一般页面级的PHP程序总运行时间较短，在连接到数据库以后显式用SET  NAMES语句设置一次连接字符集即可；但当使用长连接时，请注意保持连接通畅并在断开重连后用SET NAMES语句显式重置连接字符集。<br />
其他 注意事项•  my.cnf中的default_character_set设置只影响mysql命令连接服务器时的连接字符集，不会对使用 libmysqlclient库的应用程序产生任何作用！<br />
•  对字段进行的SQL函数操作通常都是以内部操作字符集进行的，不受连接字符集设置的影响。<br />
•  SQL语句中的裸字符串会受到连接字符集或introducer设置的影响，对于比较之类的操作可能产生完全不同的结果，需要小心！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.aaronw.cn/static/656.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[原创]python的web环境搭建</title>
		<link>http://www.aaronw.cn/static/640.html</link>
		<comments>http://www.aaronw.cn/static/640.html#comments</comments>
		<pubDate>Wed, 05 May 2010 17:13:10 +0000</pubDate>
		<dc:creator>Aaron.wang</dc:creator>
				<category><![CDATA[UNIX]]></category>
		<category><![CDATA[cx_Oracle]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[flup]]></category>
		<category><![CDATA[memcache]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[python2.6.5]]></category>

		<guid isPermaLink="false">http://www.aaronw.cn/?p=640</guid>
		<description><![CDATA[最近公司上了个新的项目，该项目的主要语言使用的是python。我学python时间也不长，正好大家一起努力吧！最终我还是把环境搭建好了！使用的软件有：python2.6.5+memcache+flup+django+cx_Oracle+nginx。具体步骤如下：
Python-2.6.5的安装
wget http://www.python.org/ftp/python/2.6.5/Python-2.6.5.tar.bz2
tar xzf Python-2.6.5.tar.bz2
cd Python-2.6.5
./configure &#8211;prefix=/usr/local/python265  &#8211;enable-shared &#8211;with-threads
make &#38;&#38;  make install
cd /usr/local
ln -s  python265 python
nginx-0.8.36的安装
wget http://nginx.org/download/nginx-0.8.36.tar.gz
tar xzf nginx-0.8.36.tar.gz
cd nginx-0.8.36
./configure &#8211;prefix=/usr/local/nginx &#8211;with-poll_module &#8211;with-http_realip_module &#8211;with-http_sub_module &#8211;with-http_gzip_static_module &#8211;with-http_stub_status_module &#8211;with-pcre
make  &#38;&#38; make install

flup-1.0.2的安装
wget http://www.saddi.com/software/flup/dist/flup-1.0.2.tar.gz
tar xzf flup-1.0.2.tar.gz
cd flup-1.0.2
python setup.py install
Django-1.1.1的安装
wget http://www.djangoproject.com/download/1.1.1/tarball
tar xzf Django-1.1.1.tar.gz
cd Django-1.1.1
python setup.py install
python-memcached-1.45的安装
wget ftp://ftp.tummy.com/pub/python-memcached/old-releases/python-memcached-1.45.tar.gz
tar xzf python-memcached-1.45.tar.gz
cd python-memcached-1.45
python setup.py install
cx_Oracle的安装
wget http://downloads.sourceforge.net/project/cx-oracle/5.0.3/cx_Oracle-5.0.3.tar.gz?use_mirror=cdnetworks-kr-2
tar xzf cx_Oracle-5.0.3.tar.gz
cd cx_Oracle-5.0.3
python [...]]]></description>
			<content:encoded><![CDATA[<p>最近公司上了个新的项目，该项目的主要语言使用的是python。我学python时间也不长，正好大家一起努力吧！最终我还是把环境搭建好了！使用的软件有：python2.6.5+memcache+flup+django+cx_Oracle+nginx。具体步骤如下：<br />
Python-2.6.5的安装</p>
<div style="border: 1px dashed #000000; margin: 5px 5px 0px; padding: 3px; background-color: #ffffff;">wget http://www.python.org/ftp/python/2.6.5/Python-2.6.5.tar.bz2<br />
tar xzf Python-2.6.5.tar.bz2<br />
cd Python-2.6.5<br />
./configure &#8211;prefix=/usr/local/python265  &#8211;enable-shared &#8211;with-threads<br />
make &amp;&amp;  make install<br />
cd /usr/local<br />
ln -s  python265 python</div>
<p>nginx-0.8.36的安装</p>
<div style="border: 1px dashed #000000; margin: 5px 5px 0px; padding: 3px; background-color: #ffffff;">wget http://nginx.org/download/nginx-0.8.36.tar.gz<br />
tar xzf nginx-0.8.36.tar.gz<br />
cd nginx-0.8.36<br />
./configure &#8211;prefix=/usr/local/nginx &#8211;with-poll_module &#8211;with-http_realip_module &#8211;with-http_sub_module &#8211;with-http_gzip_static_module &#8211;with-http_stub_status_module &#8211;with-pcre<br />
make  &amp;&amp; make install</div>
<p><span id="more-640"></span><br />
flup-1.0.2的安装</p>
<div style="border: 1px dashed #000000; margin: 5px 5px 0px; padding: 3px; background-color: #ffffff;">wget http://www.saddi.com/software/flup/dist/flup-1.0.2.tar.gz<br />
tar xzf flup-1.0.2.tar.gz<br />
cd flup-1.0.2<br />
python setup.py install</div>
<p>Django-1.1.1的安装</p>
<div style="border: 1px dashed #000000; margin: 5px 5px 0px; padding: 3px; background-color: #ffffff;">wget http://www.djangoproject.com/download/1.1.1/tarball<br />
tar xzf Django-1.1.1.tar.gz<br />
cd Django-1.1.1<br />
python setup.py install</div>
<p>python-memcached-1.45的安装</p>
<div style="border: 1px dashed #000000; margin: 5px 5px 0px; padding: 3px; background-color: #ffffff;">wget ftp://ftp.tummy.com/pub/python-memcached/old-releases/python-memcached-1.45.tar.gz<br />
tar xzf python-memcached-1.45.tar.gz<br />
cd python-memcached-1.45<br />
python setup.py install</div>
<p>cx_Oracle的安装</p>
<div style="border: 1px dashed #000000; margin: 5px 5px 0px; padding: 3px; background-color: #ffffff;">wget http://downloads.sourceforge.net/project/cx-oracle/5.0.3/cx_Oracle-5.0.3.tar.gz?use_mirror=cdnetworks-kr-2<br />
tar xzf cx_Oracle-5.0.3.tar.gz<br />
cd cx_Oracle-5.0.3<br />
python setup.py build<br />
python setup.py install</div>
<p>在安装cx_Oracle出了很多问题，只要一执行python setup.py build就回出现一堆错误！后来我把错误重定向后发现缺少很多文件！cx_Oracle安装是需要预先安装oracle客户端，主要是需要libclntsh.so这个文件，客户端安装很大，所以下个基本库就可以，下载连接点<span style="color: #ff0000;"><a href="http://www.oracle.com/technology/software/tech/oci/instantclient/index.html" target="_blank">这里</a></span>，选择你要访问的数据库相对应的版本下载就可了！我下载的是这个oracle-instantclient-basic-10.2.0.4-1.i386.zip解压后放到/opt/instantclient_10_2里面，然后编辑.bashrc文件</p>
<div style="border: 1px dashed #000000; margin: 5px 5px 0px; padding: 3px; background-color: #ffffff;">vi ~/.bashrc<br />
PATH=/usr/local/python/bin:$PATH<br />
export ORACLE_HOME=/opt/instantclient_10_2<br />
export LD_LIBRARY_PATH=$ORACLE_HOME<br />
source ~/.bashrc</div>
<p>还要注意的是你需要把oracle数据库里面的rdbms copy到/opt/instantclient_10_2目录下，不然提示缺少很多.h文件，这样的话你编译就不会报错了，但是会有一些警告，但这是正常的！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.aaronw.cn/static/640.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>&#8216;key&#8217; redefined near &#8216;key&#8217;</title>
		<link>http://www.aaronw.cn/static/626.html</link>
		<comments>http://www.aaronw.cn/static/626.html#comments</comments>
		<pubDate>Tue, 23 Feb 2010 02:51:30 +0000</pubDate>
		<dc:creator>Aaron.wang</dc:creator>
				<category><![CDATA[UNIX]]></category>
		<category><![CDATA[dns，rndc]]></category>
		<category><![CDATA[key]]></category>

		<guid isPermaLink="false">http://www.aaronw.cn/?p=626</guid>
		<description><![CDATA[在我配置dns是时候，用rndc reload出现这样的错误：

rndc: error: /usr/local/named/etc/rndc.key:5: 'key' redefined near 'key'
rndc: could not load rndc configuration
rndc: error: /usr/local/named/etc/rndc.key:5: unknown option 'options'
rndc: could not load rndc configuration

google一下，发现有很多人遇到这样问题，有发贴求助的，也有回帖的！我看了很多帖子，要么是没有结果，要么是发帖人说我搞定了，但就没有说明是怎么搞定的！在这里严重鄙视一下这样的人！后来我自己也解决了这个问题！现在把解决的方法说一下！
一般这个错误的都是用 rndc-confgen生成的rndc.key在rndc reload时候产生的。这里需要说明的 rndc-confgen生成的内容是放到named.conf里使用的，而不能把生产的内容放到rndc.key里面！rndc.key里面永远只放通过rndc重新加载配置文件的key的内容，而这个内容一般都是这样的：
key &#34;rndckey&#34; {
        algorithm hmac-md5;
        secret &#34;aaaaaaaaaaaaaaaaaaaaaa&#34;;
};
只有这样才不会产生上述错误！
]]></description>
			<content:encoded><![CDATA[<p>在我配置dns是时候，用rndc reload出现这样的错误：</p>
<pre class="brush: bash;">
rndc: error: /usr/local/named/etc/rndc.key:5: 'key' redefined near 'key'
rndc: could not load rndc configuration
rndc: error: /usr/local/named/etc/rndc.key:5: unknown option 'options'
rndc: could not load rndc configuration
</pre>
<p>google一下，发现有很多人遇到这样问题，有发贴求助的，也有回帖的！我看了很多帖子，要么是没有结果，要么是发帖人说我搞定了，但就没有说明是怎么搞定的！在这里严重鄙视一下这样的人！后来我自己也解决了这个问题！现在把解决的方法说一下！</p>
<p>一般这个错误的都是用 rndc-confgen生成的rndc.key在rndc reload时候产生的。这里需要说明的 rndc-confgen生成的内容是放到named.conf里使用的，而不能把生产的内容放到rndc.key里面！rndc.key里面永远只放通过rndc重新加载配置文件的key的内容，而这个内容一般都是这样的：</p>
<pre class="brush: bash;">key &quot;rndckey&quot; {
        algorithm hmac-md5;
        secret &quot;aaaaaaaaaaaaaaaaaaaaaa&quot;;
};</pre>
<p>只有这样才不会产生上述错误！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.aaronw.cn/static/626.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[原创]bind view master/slave 通过TSIG同步方法</title>
		<link>http://www.aaronw.cn/static/615.html</link>
		<comments>http://www.aaronw.cn/static/615.html#comments</comments>
		<pubDate>Tue, 23 Feb 2010 02:29:07 +0000</pubDate>
		<dc:creator>Aaron.wang</dc:creator>
				<category><![CDATA[UNIX]]></category>
		<category><![CDATA[DNS]]></category>
		<category><![CDATA[master]]></category>
		<category><![CDATA[slave]]></category>
		<category><![CDATA[tsig]]></category>
		<category><![CDATA[view]]></category>

		<guid isPermaLink="false">http://www.aaronw.cn/?p=615</guid>
		<description><![CDATA[我以前写了一篇《bind view master/slave不能同步的解决方法》，当时是给上海一家公司做的dns服务器，用的是在网口上绑定多个子接口比分配不同的IP来实现view同步的！昨天又开始做一个dns服务器，这次使用的是TSIG同步方法，这样就可以不用多个IP了！
TSIG同步方法是这样的：在服务器上定义多个key，每个view使用一个key，ip为同一个ip，备机上就是用key来区分和同步view！直接贴出我的named.conf完整配置吧！
环境如下：
A机：master     172.16.1.1        5个view     4个zone
B机：slave          172.16.1.2

A机配置：

include &#34;/usr/local/named/etc/area_shanghai.cfg&#34;;//这个是华东的acl
include &#34;/usr/local/named/etc/area_chengdu.cfg&#34;;//这个是华南的acl
include &#34;/usr/local/named/etc/area_south.cfg&#34;;//这个是电信的acl
include &#34;/usr/local/named/etc/area_edu.cfg&#34;;//这个是教育网的acl
include &#34;/usr/local/named/etc/area_local.cfg&#34;;//这个是本地的acl
include &#34;/usr/local/named/etc/area_dns.cfg&#34;;//这个是dns是真实IP
include &#34;/usr/local/named/etc/area_key.cfg&#34;;//这个是定义的key
///////////////////////////////////////////////////////////////////////
options {
        directory &#34;/var/named&#34;;
        dump-file            &#34;data/cache_dump.db&#34;;
        statistics-file    [...]]]></description>
			<content:encoded><![CDATA[<p>我以前写了一篇《<a title="Permanent Link to [原创]bind view master/slave不能同步的解决方法" rel="bookmark" href="../static/362.html">bind view master/slave不能同步的解决方法</a>》，当时是给上海一家公司做的dns服务器，用的是在网口上绑定多个子接口比分配不同的IP来实现view同步的！昨天又开始做一个dns服务器，这次使用的是TSIG同步方法，这样就可以不用多个IP了！</p>
<p>TSIG同步方法是这样的：在服务器上定义多个key，每个view使用一个key，ip为同一个ip，备机上就是用key来区分和同步view！直接贴出我的named.conf完整配置吧！</p>
<p>环境如下：<br />
A机：master     172.16.1.1        5个view     4个zone<br />
B机：slave          172.16.1.2<br />
<span id="more-615"></span><br />
A机配置：</p>
<pre class="brush: bash;">
include &quot;/usr/local/named/etc/area_shanghai.cfg&quot;;//这个是华东的acl
include &quot;/usr/local/named/etc/area_chengdu.cfg&quot;;//这个是华南的acl
include &quot;/usr/local/named/etc/area_south.cfg&quot;;//这个是电信的acl
include &quot;/usr/local/named/etc/area_edu.cfg&quot;;//这个是教育网的acl
include &quot;/usr/local/named/etc/area_local.cfg&quot;;//这个是本地的acl
include &quot;/usr/local/named/etc/area_dns.cfg&quot;;//这个是dns是真实IP
include &quot;/usr/local/named/etc/area_key.cfg&quot;;//这个是定义的key
///////////////////////////////////////////////////////////////////////
options {
        directory &quot;/var/named&quot;;
        dump-file            &quot;data/cache_dump.db&quot;;
        statistics-file      &quot;data/named_stats.txt&quot;;
        memstatistics-file   &quot;data/named_mem_stats.txt&quot;;
        also-notify { 172.16.1.2; };
        allow-transfer { area_dns; };
        notify explicit;
        allow-query { any; };
        allow-update { none; };
};

logging {
        channel warning  {
                file &quot;/var/log/dns/named.log&quot; versions 3 size 2048k;
                severity info;
                print-category yes;
                print-time yes;
        };

        channel queries_info {
                file &quot;/var/log/dns/queries.log&quot; versions 3 size 200m;
                severity info;
                print-category yes;
                print-severity yes;
                print-time yes;
        };

        category queries {
                queries_info;
                default_debug;
       };

       category default { warning; };

};
///////////////////////////////////////////////////////////////////////
view &quot;eduward&quot; {
        match-clients { !key shanghai;!key chengdu;!key local;!key southward;!key otherward; area_dns;area_edu; };
        server 172.16.1.2 { keys { eduward; }; };
        recursion no;//不接受非递归查询
zone &quot;.&quot; IN {
        type hint;
        file &quot;named.ca&quot;;
};

zone &quot;localhost&quot; IN {
        type master;
        file &quot;localhost.zone&quot;;
};

zone &quot;0.0.127.in-addr.arpa&quot;{
        type master;
        file &quot;named.local&quot;;
};

zone &quot;168.192.in-addr.arpa&quot;{
        type master;
        file &quot;eduward/192168&quot;;
};

zone &quot;a.com&quot; IN {
        type master;
        file &quot;eduward/a.com.zone&quot;;
};

zone &quot;b.com&quot; IN {
        type master;
        file &quot;eduward/b.com.zone&quot;;
};

zone &quot;c.com&quot; IN {
        type master;
        file &quot;eduward/c.com.zone&quot;;
};

};
///////////////////////////////////////////////////////////////////////
view &quot;chengdu&quot; {
        match-clients { !key shanghai;!key local;!key eduward;!key southward;!key otherward; area_dns;area_chengdu; };
        server 172.16.1.2 { keys { chengdu; }; };
        recursion no;
zone &quot;.&quot; IN {
        type hint;
        file &quot;named.ca&quot;;
};

zone &quot;localhost&quot; IN {
        type master;
        file &quot;localhost.zone&quot;;
};

zone &quot;0.0.127.in-addr.arpa&quot;{
        type master;
        file &quot;named.local&quot;;
};

zone &quot;168.192.in-addr.arpa&quot;{
        type master;
        file &quot;chengdu/192168&quot;;
};

zone &quot;a.com&quot; IN {
        type master;
        file &quot;chengdu/a.com.zone&quot;;
};

zone &quot;b.com&quot; IN {
        type master;
        file &quot;chengdu/b.com.zone&quot;;
};

zone &quot;c.com&quot; IN {
        type master;
        file &quot;chengdu/c.com.zone&quot;;
};

};
///////////////////////////////////////////////////////////////////////
view &quot;shanghai&quot; {
        match-clients { !key local;!key chengdu;!key eduward;!key southward;!key otherward; area_dns;area_shanghai; };
        server 172.16.1.2 { keys { shanghai; }; };
        recursion no;
zone &quot;.&quot; IN {
        type hint;
        file &quot;named.ca&quot;;
};

zone &quot;localhost&quot; IN {
        type master;
        file &quot;localhost.zone&quot;;
};

zone &quot;0.0.127.in-addr.arpa&quot;{
        type master;
        file &quot;named.local&quot;;
};

zone &quot;168.192.in-addr.arpa&quot;{
        type master;
        file &quot;shanghai/192168&quot;;
};

zone &quot;a.com&quot; IN {
        type master;
        file &quot;shanghai/a.com.zone&quot;;
};

zone &quot;b.com&quot; IN {
        type master;
        file &quot;shanghai/b.com.zone&quot;;
};

zone &quot;c.com&quot; IN {
        type master;
        file &quot;shanghai/c.com.zone&quot;;
};

};
///////////////////////////////////////////////////////////////////////
view &quot;southward&quot; {
        match-clients { !key shanghai;!key chengdu;!key eduward;!key local;!key otherward;area_dns; area_south; };
        server 172.16.1.2 { keys { southward; }; };
        recursion no;
zone &quot;.&quot; IN {
        type hint;
        file &quot;named.ca&quot;;
};

zone &quot;localhost&quot; IN {
        type master;
        file &quot;localhost.zone&quot;;
};

zone &quot;0.0.127.in-addr.arpa&quot;{
        type master;
        file &quot;named.local&quot;;
};

zone &quot;168.192.in-addr.arpa&quot;{
        type master;
        file &quot;southward/192168&quot;;
};

zone &quot;a.com&quot; IN {
        type master;
        file &quot;southward/a.com.zone&quot;;
};

zone &quot;b.com&quot; IN {
        type master;
        file &quot;southward/b.com.zone&quot;;
};

zone &quot;c.com&quot; IN {
        type master;
        file &quot;southward/c.com.zone&quot;;
};

};
///////////////////////////////////////////////////////////////////////
view  &quot;local&quot; {
        match-clients {!key shanghai;!key chengdu;!key eduward;!key southward;!key otherward;area_dns; area_local;};
        server 172.16.1.2 { keys { local; }; };
        recursion yes;//对于本地用户可以进行递归查询
        allow-recursion {area_local;};//允许递归查询范围
zone &quot;.&quot; IN {
        type hint;
        file &quot;named.ca&quot;;
};

zone &quot;localhost&quot; IN {
        type master;
        file &quot;localhost.zone&quot;;
};

zone &quot;0.0.127.in-addr.arpa&quot;{
        type master;
        file &quot;named.local&quot;;
};

zone &quot;168.192.in-addr.arpa&quot;{
        type master;
        file &quot;local/192168&quot;;
};

zone &quot;a.com&quot; IN {
        type master;
        file &quot;local/a.com.zone&quot;;
};

zone &quot;b.com&quot; IN {
        type master;
        file &quot;local/b.com.zone&quot;;
};

zone &quot;c.com&quot; IN {
        type master;
        file &quot;local/c.com.zone&quot;;
};

};
///////////////////////////////////////////////////////////////////////
view &quot;otherward&quot; {
        match-clients { !key shanghai;!key chengdu;!key eduward;!key southward;!key local;area_dns;any; };
        server 172.16.1.214 { keys { otherward; }; };
        recursion no;
zone &quot;.&quot; IN {
        type hint;
        file &quot;named.ca&quot;;
};

zone &quot;localhost&quot; IN {
        type master;
        file &quot;localhost.zone&quot;;
};

zone &quot;0.0.127.in-addr.arpa&quot;{
        type master;
        file &quot;named.local&quot;;
};

zone &quot;168.192.in-addr.arpa&quot;{
        type master;
        file &quot;192168&quot;;
};

zone &quot;a.com&quot; IN {
        type master;
        file &quot;a.com.zone&quot;;
};

zone &quot;b.com&quot; IN {
        type master;
        file &quot;b.com.zone&quot;;
};

zone &quot;c.com&quot; IN {
        type master;
        file &quot;c.com.zone&quot;;
};
};</pre>
<p>B机配置：</p>
<pre class="brush: bash;">
include &quot;/usr/local/named/etc/area_shanghai.cfg&quot;;
include &quot;/usr/local/named/etc/area_chengdu.cfg&quot;;
include &quot;/usr/local/named/etc/area_south.cfg&quot;;
include &quot;/usr/local/named/etc/area_edu.cfg&quot;;
include &quot;/usr/local/named/etc/area_local.cfg&quot;;
include &quot;/usr/local/named/etc/area_dns.cfg&quot;;
include &quot;/usr/local/named/etc/area_key.cfg&quot;;
options {
        directory &quot;/var/named&quot;;
        dump-file            &quot;data/cache_dump.db&quot;;
        statistics-file      &quot;data/named_stats.txt&quot;;
        memstatistics-file   &quot;data/named_mem_stats.txt&quot;;
        allow-query { any; };
};

logging {
        channel warning  {
                file &quot;/var/log/dns/named.log&quot; versions 3 size 2048k;
                severity info;
                print-category yes;
                print-severity yes;
                print-time yes;
        };
        channel queries_info {
                file &quot;/var/log/dns/queries.log&quot; versions 3 size 200m;
                severity info;
                print-category yes;
                print-severity yes;
                print-time yes;
        };

        category queries {
                queries_info;
                default_debug;
        };
        category default { warning; };
};
///////////////////////////////////////////////////////////////////////
view &quot;eduward&quot; {
        match-clients { !key shanghai;!key chengdu;!key local;!key southward;!key otherward;area_dns;area_edu; };
        server 172.16.1.1 { keys { eduward; }; };
        recursion no;
zone &quot;.&quot; IN {
        type hint;
        file &quot;named.ca&quot;;
};

zone &quot;localhost&quot; IN {
        type master;
        file &quot;localhost.zone&quot;;
};

zone &quot;0.0.127.in-addr.arpa&quot;{
        type master;
        file &quot;named.local&quot;;
};

zone &quot;168.192.in-addr.arpa&quot;{
        type slave;
        file &quot;eduward/192168&quot;;
        masters { 172.16.1.1; };
};

zone &quot;a.com&quot; IN {
        type slave;
        file &quot;eduward/a.com.zone&quot;;
        masters { 172.16.1.1; };
};

zone &quot;b.com&quot; IN {
        type slave;
        file &quot;eduward/b.com.zone&quot;;
        masters { 172.16.1.1; };
};

zone &quot;c.com&quot; IN {
        type slave;
        file &quot;eduward/c.com.zone&quot;;
        masters { 172.16.1.1; };
};

};
///////////////////////////////////////////////////////////////////////
view &quot;chengdu&quot; {
        match-clients { !key shanghai;!key local;!key eduward;!key southward;!key otherward; area_dns; area_chengdu;  };
        server 172.16.1.1 { keys { chengdu; }; };
        recursion no;
zone &quot;.&quot; IN {
        type hint;
        file &quot;named.ca&quot;;
};

zone &quot;localhost&quot; IN {
        type master;
        file &quot;localhost.zone&quot;;
};

zone &quot;0.0.127.in-addr.arpa&quot;{
        type master;
        file &quot;named.local&quot;;
};

zone &quot;168.192.in-addr.arpa&quot;{
        type slave;
        file &quot;chengdu/192168&quot;;
        masters { 172.16.1.1; };
};

zone &quot;a.com&quot; IN {
        type slave;
        file &quot;chengdu/a.com.zone&quot;;
        masters { 172.16.1.1; };
};

zone &quot;b.com&quot; IN {
        type slave;
        file &quot;chengdu/b.com.zone&quot;;
        masters { 172.16.1.1; };
};

zone &quot;c.com&quot; IN {
        type slave;
        file &quot;chengdu/c.com.zone&quot;;
        masters { 172.16.1.1; };
};
};
///////////////////////////////////////////////////////////////////////
view &quot;shanghai&quot; {
        match-clients { !key local;!key chengdu;!key eduward;!key southward;!key otherward; area_dns; area_shanghai; };
        server 172.16.1.1 { keys { shanghai; }; };
        recursion no;
zone &quot;.&quot; IN {
        type hint;
        file &quot;named.ca&quot;;
};

zone &quot;localhost&quot; IN {
        type master;
        file &quot;localhost.zone&quot;;
};

zone &quot;0.0.127.in-addr.arpa&quot;{
        type master;
        file &quot;named.local&quot;;
};

zone &quot;168.192.in-addr.arpa&quot;{
        type slave;
        file &quot;shanghai/192168&quot;;
        masters { 172.16.1.1; };
};

zone &quot;a.com&quot; IN {
        type slave;
        file &quot;shanghai/a.com.zone&quot;;
        masters { 172.16.1.1; };
};

zone &quot;b.com&quot; IN {
        type slave;
        file &quot;shanghai/b.com.zone&quot;;
        masters { 172.16.1.1; };
};

zone &quot;c.com&quot; IN {
        type slave;
        file &quot;shanghai/c.com.zone&quot;;
        masters { 172.16.1.1; };
};
};
///////////////////////////////////////////////////////////////////////
view &quot;southward&quot; {
        match-clients { !key shanghai;!key chengdu;!key eduward;!key local;!key otherward;area_dns; area_south;  };
        server 172.16.1.1 { keys { southward; }; };
        recursion no;
zone &quot;.&quot; IN {
        type hint;
        file &quot;named.ca&quot;;
};

zone &quot;localhost&quot; IN {
        type master;
        file &quot;localhost.zone&quot;;
};

zone &quot;0.0.127.in-addr.arpa&quot;{
        type master;
        file &quot;named.local&quot;;
};

zone &quot;168.192.in-addr.arpa&quot;{
        type slave;
        file &quot;southward/192168&quot;;
        masters { 172.16.1.1; };
};

zone &quot;a.com&quot; IN {
        type slave;
        file &quot;southward/a.com.zone&quot;;
        masters { 172.16.1.1; };
};

zone &quot;b.com&quot; IN {
        type slave;
        file &quot;southward/b.com.zone&quot;;
        masters { 172.16.1.1; };
};

zone &quot;c.com&quot; IN {
        type slave;
        file &quot;southward/c.com.zone&quot;;
        masters { 172.16.1.1; };
};

};
///////////////////////////////////////////////////////////////////////
view &quot;local&quot; {
        match-clients { !key shanghai;!key chengdu;!key eduward;!key southward;!key otherward;area_dns;area_local; };
        server 172.16.1.1 { keys { local; }; };
        allow-recursion {area_local;};
zone &quot;.&quot; IN {
        type hint;
        file &quot;named.ca&quot;;
};

zone &quot;localhost&quot; IN {
        type master;
        file &quot;localhost.zone&quot;;
};

zone &quot;0.0.127.in-addr.arpa&quot;{
        type master;
        file &quot;named.local&quot;;
};

zone &quot;168.192.in-addr.arpa&quot;{
        type slave;
        file &quot;local/192168&quot;;
        masters { 172.16.1.1; };
};

zone &quot;a.com&quot; IN {
        type slave;
        file &quot;local/a.com.zone&quot;;
        masters { 172.16.1.1; };
};

zone &quot;b.com&quot; IN {
        type slave;
        file &quot;local/b.com.zone&quot;;
        masters { 172.16.1.1; };
};

zone &quot;c.com&quot; IN {
        type slave;
        file &quot;local/c.com.zone&quot;;
        masters { 172.16.1.1; };
};

};
///////////////////////////////////////////////////////////////////////
view &quot;otherward&quot; {
        match-clients { !key shanghai;!key chengdu;!key eduward;!key southward;!key local;any; };
        server 172.16.1.1 { keys { otherward; }; };
        recursion no;
zone &quot;.&quot; IN {
        type hint;
        file &quot;named.ca&quot;;
};

zone &quot;localhost&quot; IN {
        type master;
        file &quot;localhost.zone&quot;;
};

zone &quot;0.0.127.in-addr.arpa&quot;{
        type master;
        file &quot;named.local&quot;;
};

zone &quot;168.192.in-addr.arpa&quot;{
        type slave;
        file &quot;192168&quot;;
        masters { 172.16.1.1; };
};

zone &quot;a.com&quot; IN {
        type slave;
        file &quot;a.com.zone&quot;;
        masters { 172.16.1.1; };
};

zone &quot;b.com&quot; IN {
        type slave;
        file &quot;b.com.zone&quot;;
        masters { 172.16.1.1; };
};

zone &quot;c.com&quot; IN {
        type slave;
        file &quot;c.com.zone&quot;;
        masters { 172.16.1.1; };
};
};</pre>
<p>其他的cfg的内容都是网段，这里把area_key.cfg贴出来！key可以用rndc-confgen来生成。</p>
<pre class="brush: bash;">
rndc-confgen -k shanghai &gt;area_key.cfg</pre>
<p>area_key.cfg：</p>
<pre class="brush: bash;">
key &quot;shanghai&quot; {
        algorithm hmac-md5;
        secret &quot;aaaaaaaaaaaaaaaaaaaaaaa&quot;;
};
key &quot;chengdu&quot; {
        algorithm hmac-md5;
        secret &quot;bbbbbbbbbbbbbbbbbbbbbbb&quot;;
};
key &quot;eduward&quot; {
        algorithm hmac-md5;
        secret &quot;ccccccccccccccccccccccc&quot;;
};
key &quot;southward&quot; {
        algorithm hmac-md5;
        secret &quot;ddddddddddddddddddddddd&quot;;
};
key &quot;local&quot; {
        algorithm hmac-md5;
        secret &quot;eeeeeeeeeeeeeeeeeeeeeeee&quot;;
};
key &quot;otherward&quot; {
        algorithm hmac-md5;
        secret &quot;ffffffffffffffffffffffffffffffffffffff&quot;;
};
key &quot;rndckey&quot; {
        algorithm hmac-md5;
        secret &quot;gggggggggggggggggggggggg&quot;;
};
controls {
        inet 127.0.0.1 port 953
        allow { 127.0.0.1; } keys { &quot;rndckey&quot;; };
};</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.aaronw.cn/static/615.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>linux下能ping ip不能ping域名</title>
		<link>http://www.aaronw.cn/static/610.html</link>
		<comments>http://www.aaronw.cn/static/610.html#comments</comments>
		<pubDate>Sat, 20 Feb 2010 08:30:18 +0000</pubDate>
		<dc:creator>Aaron.wang</dc:creator>
				<category><![CDATA[UNIX]]></category>
		<category><![CDATA[DNS]]></category>
		<category><![CDATA[ping]]></category>

		<guid isPermaLink="false">http://www.aaronw.cn/?p=610</guid>
		<description><![CDATA[今天在开发的同事来说，内网不能通过域名访问自己的服务器！然后做了下面的测试发现这样的问题：
[root@Aaronwang ~]# ping www.aaronw.cn
ping: unknown host www.aaronw.cn
[root@Aaronwang ~]#ping 192.168.1.1
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.537 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=0.430 ms
&#8212; 192.168.1.1 ping statistics &#8212;
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.430/0.483/0.537/0.057 ms
[root@Aaronwang ~]#cat /etc/host.conf
order bind,hosts

经过一翻查找后解决了，原因和方法如下：
[root@Aaronwang ~]# grep host /etc/nsswitch.conf
#hosts:   [...]]]></description>
			<content:encoded><![CDATA[<p>今天在开发的同事来说，内网不能通过域名访问自己的服务器！然后做了下面的测试发现这样的问题：</p>
<div style="border: 1px dashed #000000; margin: 5px 5px 0px; padding: 3px; background-color: #ffffff;">[root@Aaronwang ~]# ping www.aaronw.cn<br />
ping: unknown host www.aaronw.cn<br />
[root@Aaronwang ~]#ping 192.168.1.1<br />
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.<br />
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.537 ms<br />
64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=0.430 ms</p>
<p>&#8212; 192.168.1.1 ping statistics &#8212;<br />
2 packets transmitted, 2 received, 0% packet loss, time 999ms<br />
rtt min/avg/max/mdev = 0.430/0.483/0.537/0.057 ms<br />
[root@Aaronwang ~]#cat /etc/host.conf<br />
order bind,hosts</p>
</div>
<p>经过一翻查找后解决了，原因和方法如下：</p>
<div style="border: 1px dashed #000000; margin: 5px 5px 0px; padding: 3px; background-color: #ffffff;">[root@Aaronwang ~]# grep host /etc/nsswitch.conf<br />
#hosts:     db files nisplus nis dns<br />
hosts:                 files</div>
<p>主机只找文件不走dns，将其该成hosts:          files   dns   即可！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.aaronw.cn/static/610.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ipfw: getsockopt(IP_FW_GET): Protocol not available</title>
		<link>http://www.aaronw.cn/static/602.html</link>
		<comments>http://www.aaronw.cn/static/602.html#comments</comments>
		<pubDate>Fri, 12 Feb 2010 16:40:36 +0000</pubDate>
		<dc:creator>Aaron.wang</dc:creator>
				<category><![CDATA[UNIX]]></category>
		<category><![CDATA[freebsd]]></category>
		<category><![CDATA[IPFW]]></category>
		<category><![CDATA[SYN]]></category>

		<guid isPermaLink="false">http://www.aaronw.cn/?p=602</guid>
		<description><![CDATA[今天晚上在我的server上搭建python的服务器，但是我连接服务上操作很慢，有一次竟然连接中断了，看了一下日志发现大量的SYN攻击：
Feb 13 00:09:53 Aaronwang kernel: TCP: [114.27.211.201]:1521 to [192.168.1.88]:9266 tcpflags 0&#215;2; tcp_input: Connection attempt to closed port
Feb 13 00:09:56 Aaronwang kernel: TCP: [114.27.211.201]:1521 to [192.168.1.88]:9266 tcpflags 0&#215;2; tcp_input: Connection attempt to closed port
Feb 13 00:10:25 Aaronwang kernel: TCP: [114.27.211.201]:1533 to [192.168.1.88]:9266 tcpflags 0&#215;2; tcp_input: Connection attempt to closed port
Feb 13 00:10:25 Aaronwang kernel: TCP: [114.27.211.201]:1534 [...]]]></description>
			<content:encoded><![CDATA[<p>今天晚上在我的server上搭建python的服务器，但是我连接服务上操作很慢，有一次竟然连接中断了，看了一下日志发现大量的SYN攻击：</p>
<div style="border: 1px dashed #000000; margin: 5px 5px 0px; padding: 3px; background-color: #ffffff;">Feb 13 00:09:53 Aaronwang kernel: TCP: [114.27.211.201]:1521 to [192.168.1.88]:9266 tcpflags 0&#215;2; tcp_input: Connection attempt to closed port<br />
Feb 13 00:09:56 Aaronwang kernel: TCP: [114.27.211.201]:1521 to [192.168.1.88]:9266 tcpflags 0&#215;2; tcp_input: Connection attempt to closed port<br />
Feb 13 00:10:25 Aaronwang kernel: TCP: [114.27.211.201]:1533 to [192.168.1.88]:9266 tcpflags 0&#215;2; tcp_input: Connection attempt to closed port<br />
Feb 13 00:10:25 Aaronwang kernel: TCP: [114.27.211.201]:1534 to [192.168.1.88]:9266 tcpflags 0&#215;2; tcp_input: Connection attempt to closed port<br />
Feb 13 00:10:28 Aaronwang kernel: TCP: [114.27.211.201]:1533 to [192.168.1.88]:9266 tcpflags 0&#215;2; tcp_input: Connection attempt to closed port</div>
<p>本想通过防火墙限制一下，谁知输入出现下面的错误：</p>
<div style="border: 1px dashed #000000; margin: 5px 5px 0px; padding: 3px; background-color: #ffffff;">[root@Aaronwang ~]# ipfw show<br />
ipfw: getsockopt(IP_FW_GET): Protocol not available</div>
<p>看来是我在编译内核的时候没有把IPFW编译进来，看来又要再编译一次内核了！上次内核编译是00:59:01，这次又是在半夜，看来我还真是个夜猫子！呵呵！</p>
<div style="border: 1px dashed #000000; margin: 5px 5px 0px; padding: 3px; background-color: #ffffff;">[root@Aaronwang ~]# uname -a<br />
FreeBSD Aaronwang 7.2-RELEASE-p6 FreeBSD 7.2-RELEASE-p6 #5: Thu Jan 14 00:59:01 CST 2010     root@Aaron wang:/usr/obj/usr/src/sys/Aaron.wang  i386</div>
<p><span id="more-602"></span><br />
编译ipfw要在/root/Aaron.wang里面加入下列内容：</p>
<div style="border: 1px dashed #000000; margin: 5px 5px 0px; padding: 3px; background-color: #ffffff;">options    IPFIREWALL<br />
这个选项将 IPFW 作为内核的一部分来启用。<br />
options    IPFIREWALL_VERBOSE<br />
这个选项将启用记录通过 IPFW 的匹配了包含 &#8216;log&#8217; 关键字规则的每一个包的功能。<br />
options    IPFIREWALL_VERBOSE_LIMIT=5<br />
以每项的方式， 限制通过 syslogd记录的包的个数。 如果在比较恶劣的环境下记录防火墙的活动可能会需要这个选项。它能够避免潜在的针对 syslog 的洪水式拒绝服务攻击。<br />
options    IPFIREWALL_DEFAULT_TO_ACCEPT<br />
这个选项默认地允许所有的包通过防火墙， 如果您是第一次配置防火墙，使用这个选项将是一个不错的主意。<br />
options    IPDIVERT<br />
这一选项启用 NAT 功能。</div>
<p>在/etc/rc.conf里面启用firewall。</p>
<div style="border: 1px dashed #000000; margin: 5px 5px 0px; padding: 3px; background-color: #ffffff;">firewall_enable=&#8221;YES&#8221; # 激活firewall防火墙<br />
firewall_script=&#8221;/etc/rc.firewall&#8221; # firewall防火墙的默认脚本<br />
firewall_type=&#8221;/etc/ipfw.conf&#8221; # firewall自定义脚本<br />
firewall_quiet=&#8221;NO&#8221; # 起用脚本时，是否显示规则信息。现在为“NO”假如你的防火墙脚本已经定型，那么就可以把这里设置成“YES”了。<br />
firewall_logging_enable=&#8221;YES&#8221; # 启用firewall的log记录。 </div>
<p>您还可以指定firewall_type为下列配置规则之一：<br />
open ── 允许所有流量通过。<br />
client ── 只保护本机。<br />
simple ── 保护整个网络。<br />
closed ── 完全禁止除回环设备之外的全部 IP 流量。<br />
UNKNOWN ── 禁止加载防火墙规则。<br />
filename ── 到防火墙规则文件的绝对路径。<br />
在/etc/syslog.conf里面记录日志。</p>
<div style="border: 1px dashed #000000; margin: 5px 5px 0px; padding: 3px; background-color: #ffffff;">!ipfw<br />
*.*                                             /var/log/ipfw.log</div>
<p>ipfw的配置命令：ipfw [-N] 命令 [编号] 动作 [log(日志)] 协议 地址 [其它选项]<br />
一些常用的规则：</p>
<div style="border: 1px dashed #000000; margin: 5px 5px 0px; padding: 3px; background-color: #ffffff;">ipfw add 00005 deny tcp from any to any in tcpflags syn,fin # 这是过滤扫描包<br />
ipfw add 10001 allow tcp from any to 192.168.1.1 80 in # 开放http服务。<br />
ipfw add 10002 allow tcp from any to 192.168.1.1 21 in # 开放ftp服务。<br />
ipfw add 10000 allow tcp from 1.2.3.4 to 192.168.1.1 22 in# 向固定IP开放SSH服务。<br />
ipfw add 30000 allow icmp from any to any icmptypes 3<br />
ipfw add 30001 allow icmp from any to any icmptypes 4<br />
ipfw add 30002 allow icmp from any to any icmptypes 8 out<br />
ipfw add 30003 allow icmp from any to any icmptypes 0 in<br />
ipfw add 30004 allow icmp from any to any icmptypes 11 in<br />
#允许ping和 traceroute</div>
]]></content:encoded>
			<wfw:commentRss>http://www.aaronw.cn/static/602.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>freebsd 恢复引导</title>
		<link>http://www.aaronw.cn/static/597.html</link>
		<comments>http://www.aaronw.cn/static/597.html#comments</comments>
		<pubDate>Tue, 09 Feb 2010 02:50:46 +0000</pubDate>
		<dc:creator>Aaron.wang</dc:creator>
				<category><![CDATA[UNIX]]></category>
		<category><![CDATA[boot0]]></category>
		<category><![CDATA[boot0cfg]]></category>
		<category><![CDATA[freebsd]]></category>

		<guid isPermaLink="false">http://www.aaronw.cn/?p=597</guid>
		<description><![CDATA[做双系统或者是故障导致系统不能正常引导，这样的就需要修复MBR!
通过FreeBSD引导光盘启动FreeBSD的Fixit控制台，而引导光盘则 被自动挂载到了/mnt2上，可以使用boot0cfg系统工 具。而正常的引导文件在/boot/boot0，大小正好是512B,使用下面的命令恢复：
boot0cfg -B -v -o noupdate -t 185 ad0
【boot0cfg说明】
-B选项：指明要在硬盘上安装引导程序
-v选项：给出详细信息
-o noupdate选项：避免某些情况不允许修改MBR
-t 185选项：启动时暂停10秒(近似值)，以允许用户选择要启动的系统
注意：恢复的系统版本和在恢复系统时用到的光盘一定要相同版本。
]]></description>
			<content:encoded><![CDATA[<p>做双系统或者是故障导致系统不能正常引导，这样的就需要修复MBR!</p>
<p>通过FreeBSD引导光盘启动FreeBSD的Fixit控制台，而引导光盘则 被自动挂载到了/mnt2上，可以使用boot0cfg系统工 具。而正常的引导文件在/boot/boot0，大小正好是512B,使用下面的命令恢复：</p>
<p>boot0cfg -B -v -o noupdate -t 185 ad0</p>
<p>【boot0cfg说明】</p>
<p>-B选项：指明要在硬盘上安装引导程序</p>
<p>-v选项：给出详细信息</p>
<p>-o noupdate选项：避免某些情况不允许修改MBR</p>
<p>-t 185选项：启动时暂停10秒(近似值)，以允许用户选择要启动的系统</p>
<p>注意：恢复的系统版本和在恢复系统时用到的光盘一定要相同版本。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.aaronw.cn/static/597.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Can&#8217;t get module path!</title>
		<link>http://www.aaronw.cn/static/592.html</link>
		<comments>http://www.aaronw.cn/static/592.html#comments</comments>
		<pubDate>Tue, 09 Feb 2010 02:22:31 +0000</pubDate>
		<dc:creator>Aaron.wang</dc:creator>
				<category><![CDATA[UNIX]]></category>
		<category><![CDATA[fetion]]></category>
		<category><![CDATA[freebsd]]></category>

		<guid isPermaLink="false">http://www.aaronw.cn/?p=592</guid>
		<description><![CDATA[最近做了很多系统方面的事，有很多没有记录下来，但今天我在FreeBSD下想使用fetion来报警遇到的这个问题我想还是记录下来吧！主要是安装linux_base-fc6和挂载Linux® 的进程文件系统！
[root@Aaronwang ~]# ./fetion
Can&#8217;t get module path!
[root@Aaronwang ~]#cd /usr/ports/emulators/linux_base-fc6
[root@Aaronwang ~]#make install
===&#62;  linux_base-fc6-6_6 compat.linux.osrelease: 2.4.2 is not supported.
*** Error code 1
1 error
[root@Aaronwang ~]# sysctl -a &#124; grep compat
kern.features.compat_freebsd6: 1
kern.features.compat_freebsd5: 1
kern.features.compat_freebsd4: 1
compat.linux.oss_version: 198144
compat.linux.osrelease: 2.4.2
compat.linux.osname: Linux
dev.vgapci.0.%desc: VGA-compatible display
dev.vgapci.1.%desc: VGA-compatible display
[root@Aaronwang ~]#sysctl compat.linux.osrelease=2.6.16
compat.linux.osrelease: 2.4.2 -&#62; 2.6.16
[root@Aaronwang ~]#mount -t linprocfs linproc /usr/compat/linux/proc
[root@Aaronwang ~]#cat /etc/fstab
# Device		Mountpoint	FStype	Options		Dump	Pass#
/dev/ad0s2b		none		swap	sw		0	0
/dev/ad0s2a		/		ufs	rw		1	1
/dev/ad0s2e		/tmp		ufs	rw		2	2
/dev/ad0s2f		/usr		ufs	rw		2	2
/dev/ad0s2d		/var		ufs	rw		2	2
/dev/acd0		/cdrom		cd9660	ro,noauto	0	0
linproc     [...]]]></description>
			<content:encoded><![CDATA[<p>最近做了很多系统方面的事，有很多没有记录下来，但今天我在FreeBSD下想使用fetion来报警遇到的这个问题我想还是记录下来吧！主要是安装linux_base-fc6和挂载Linux® 的进程文件系统！</p>
<div style="border: 1px dashed #000000; margin: 5px 5px 0px; padding: 3px; background-color: #ffffff;">[root@Aaronwang ~]# ./fetion<br />
Can&#8217;t get module path!<br />
[root@Aaronwang ~]#cd /usr/ports/emulators/linux_base-fc6<br />
[root@Aaronwang ~]#make install<br />
===&gt;  linux_base-fc6-6_6 compat.linux.osrelease: 2.4.2 is not supported.<br />
*** Error code 1<br />
1 error<br />
[root@Aaronwang ~]# sysctl -a | grep compat<br />
kern.features.compat_freebsd6: 1<br />
kern.features.compat_freebsd5: 1<br />
kern.features.compat_freebsd4: 1<br />
compat.linux.oss_version: 198144<br />
compat.linux.osrelease: 2.4.2<br />
compat.linux.osname: Linux<br />
dev.vgapci.0.%desc: VGA-compatible display<br />
dev.vgapci.1.%desc: VGA-compatible display<br />
[root@Aaronwang ~]#sysctl compat.linux.osrelease=2.6.16<br />
compat.linux.osrelease: 2.4.2 -&gt; 2.6.16<br />
[root@Aaronwang ~]#mount -t linprocfs linproc /usr/compat/linux/proc<br />
[root@Aaronwang ~]#cat /etc/fstab<br />
# Device		Mountpoint	FStype	Options		Dump	Pass#<br />
/dev/ad0s2b		none		swap	sw		0	0<br />
/dev/ad0s2a		/		ufs	rw		1	1<br />
/dev/ad0s2e		/tmp		ufs	rw		2	2<br />
/dev/ad0s2f		/usr		ufs	rw		2	2<br />
/dev/ad0s2d		/var		ufs	rw		2	2<br />
/dev/acd0		/cdrom		cd9660	ro,noauto	0	0<br />
linproc                 /usr/compat/linux/proc  linprocfs   rw  0       0</div>
]]></content:encoded>
			<wfw:commentRss>http://www.aaronw.cn/static/592.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>tar按时间打包的一个脚本</title>
		<link>http://www.aaronw.cn/static/588.html</link>
		<comments>http://www.aaronw.cn/static/588.html#comments</comments>
		<pubDate>Thu, 04 Feb 2010 06:08:25 +0000</pubDate>
		<dc:creator>Aaron.wang</dc:creator>
				<category><![CDATA[UNIX]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[tar]]></category>
		<category><![CDATA[time]]></category>

		<guid isPermaLink="false">http://www.aaronw.cn/?p=588</guid>
		<description><![CDATA[今天一个同事让我帮他写一个shell脚本,需求是这样的:调用他的程序,并给该程序传递两个数字参数,他的程序按参数生成文件,并对刚生成的文件打包。代码如下:
#!/bin/bash
#filename:getar
#desp:get a tar file from a dir!
out=`pwd`/admin_output
pike=/usr/bin/pike
if [ -n "$1" -a "$1" != "${1//[^0-9]/}&#8221; ];then
echo &#8220;The first parameter is not a number!&#8221;
exit
elif [[ $1 == "" ]];then
echo &#8220;The first parameter is null!&#8221;
exit
fiif [ -n "$2" -a "$2" != "${2//[^0-9]/}&#8221; ];then
echo &#8220;The second parameter is not a number!&#8221;
exit
elif [[ $2 == "" ]];then
echo &#8220;The second parameter [...]]]></description>
			<content:encoded><![CDATA[<p>今天一个同事让我帮他写一个shell脚本,需求是这样的:调用他的程序,并给该程序传递两个数字参数,他的程序按参数生成文件,并对刚生成的文件打包。代码如下:</p>
<div style="border: 1px dashed #000000; margin: 5px 5px 0px; padding: 3px; background-color: #ffffff;">#!/bin/bash<br />
#filename:getar<br />
#desp:get a tar file from a dir!<br />
out=`pwd`/admin_output<br />
pike=/usr/bin/pike<br />
if [ -n "$1" -a "$1" != "${1//[^0-9]/}&#8221; ];then<br />
echo &#8220;The first parameter is not a number!&#8221;<br />
exit<br />
elif [[ $1 == "" ]];then<br />
echo &#8220;The first parameter is null!&#8221;<br />
exit<br />
fiif [ -n "$2" -a "$2" != "${2//[^0-9]/}&#8221; ];then<br />
echo &#8220;The second parameter is not a number!&#8221;<br />
exit<br />
elif [[ $2 == "" ]];then<br />
echo &#8220;The second parameter is null!&#8221;<br />
exit<br />
else</p>
<p>touch /tmp/pike.tmp<br />
sleep 10<br />
$pike process_kaiqi_cid.pike $1 $2<br />
while true;do<br />
if [[ -e output/cid$2/standard/operamini-hifi_kaiqi-zh.jad &amp;&amp; -e output/cid$2/standard/operamini-hifi_kaiqi-zh.jar ]];then<br />
find `pwd`/output -type f -newer /tmp/pike.tmp | xargs tar czf $out/$1-$2.tgz &gt;/dev/null 2&gt;&amp;1<br />
rm -rf /tmp/pike.tmp<br />
echo -e &#8220;\033[0;32;1mit&#8217;s ok\033[0m&#8221;<br />
break<br />
fi<br />
done<br />
fi</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.aaronw.cn/static/588.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>linux ssh连接主机慢的解决方法</title>
		<link>http://www.aaronw.cn/static/583.html</link>
		<comments>http://www.aaronw.cn/static/583.html#comments</comments>
		<pubDate>Thu, 04 Feb 2010 02:27:01 +0000</pubDate>
		<dc:creator>Aaron.wang</dc:creator>
				<category><![CDATA[UNIX]]></category>
		<category><![CDATA[DNS]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[连接]]></category>

		<guid isPermaLink="false">http://www.aaronw.cn/?p=583</guid>
		<description><![CDATA[今天在各个主机上同步一个snmpd.conf文件时候,发现所有主机都是通过ssh连接到同一台主机上,有的很快连接上了,有的一直处于等待之中.这样就导致集中操作时候出现部分主机操作失败.后来通过分析发现主要是卡在了DNS解析时候.
[root@watchserver ~]# cat /etc/resolv.conf
nameserver 127.0.0.1
[root@watchserver ~]# nslookup
&#62; 192.16.1.2
;; connection timed out; no servers could be reached
&#62;server 202.106.0.20
Default server: 202.106.0.20
Address: 202.106.0.20#53
&#62; 192.16.1.2
Server:        202.106.0.20
Address:    202.106.0.20#53
217.1.168.192.in-addr.arpa    name = localhost.
&#62;
一般情况就是无法解析的时候要一值等到time out才能出现,所以解决方法就是有/etc/resolv.conf中加入正确的dns地址,或者是在/etc/hosts中做好映射.当然还有其他情况也会造成这个问题出现,大致需要注意的地方如下:
1、修改/etc/ssh/sshd_config文件中UseDNS=no
2、修改/etc/nsswitch.conf文件中hosts：files
3、修改/etc/ssh/sshd_config文件中GSSAPIAuthentication no
]]></description>
			<content:encoded><![CDATA[<p>今天在各个主机上同步一个snmpd.conf文件时候,发现所有主机都是通过ssh连接到同一台主机上,有的很快连接上了,有的一直处于等待之中.这样就导致集中操作时候出现部分主机操作失败.后来通过分析发现主要是卡在了DNS解析时候.</p>
<div style="border: 1px dashed #000000; margin: 5px 5px 0px; padding: 3px; background-color: #ffffff;">[root@watchserver ~]# cat /etc/resolv.conf<br />
nameserver 127.0.0.1<br />
[root@watchserver ~]# nslookup<br />
&gt; 192.16.1.2<br />
;; connection timed out; no servers could be reached<br />
&gt;server 202.106.0.20<br />
Default server: 202.106.0.20<br />
Address: 202.106.0.20#53<br />
&gt; 192.16.1.2<br />
Server:        202.106.0.20<br />
Address:    202.106.0.20#53<br />
217.1.168.192.in-addr.arpa    name = localhost.<br />
&gt;</div>
<p>一般情况就是无法解析的时候要一值等到time out才能出现,所以解决方法就是有/etc/resolv.conf中加入正确的dns地址,或者是在/etc/hosts中做好映射.当然还有其他情况也会造成这个问题出现,大致需要注意的地方如下:</p>
<p>1、修改/etc/ssh/sshd_config文件中UseDNS=no</p>
<p>2、修改/etc/nsswitch.conf文件中hosts：files</p>
<p>3、修改/etc/ssh/sshd_config文件中GSSAPIAuthentication no</p>
]]></content:encoded>
			<wfw:commentRss>http://www.aaronw.cn/static/583.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FreeBSD用Ports安装软件使用的命令</title>
		<link>http://www.aaronw.cn/static/579.html</link>
		<comments>http://www.aaronw.cn/static/579.html#comments</comments>
		<pubDate>Sat, 16 Jan 2010 11:19:46 +0000</pubDate>
		<dc:creator>Aaron.wang</dc:creator>
				<category><![CDATA[UNIX]]></category>
		<category><![CDATA[freebsd]]></category>
		<category><![CDATA[ports]]></category>

		<guid isPermaLink="false">http://www.aaronw.cn/?p=579</guid>
		<description><![CDATA[1、ports的目录在/usr/ports
2、POSTS安装软件有时可能这个包已经安装过了，会有提示，无法继续安装。可以用提示中的参数:
#make install clean FORCE_PKG_REGISTER=yes
这样就可以继续安装了,yes不区分大小写。
3、PORTS安装软件时有时可以下载回来的包的md5值不匹配，可以加参数强制安装。
#make install clean NO_CHECKSUM=yes
4、PORTS安装软件如何提速？首先设置一个速度比较快的国内镜像。
#vim /etc/make.conf加入或替换：MASTER_SITE_OVERRIDE=\        http://ports.hshh.org/${DIST_SUBDIR}/\
注意最后一个\号，如果还有别的镜像站点，需要加上最后一个\号，如果只用hshh.org 这一个站点。不用加后面的\号。其次，使用多线程软件加速。
#make install clean wget
#vim /etc/make.conf
加入：
FETCH_CMD=wget -c -t 1
DISABLE_SIZE=yes

5、如何查找安装一个ports软件
如果知道详细文件名，可以直接用whereis
#whereis php5php5: /usr/ports/lang/php5
如果不知道详细文件名，可以用：
#cd /usr/ports#make search name=php
如果只知道描述性关键字，可以用：
#cd /usr/ports/#make search key=php
注意,使用make search时，需要先cd进/usr/ports目录。
6、如何查找已完装软件包的信息
#pkg_info
用管道命令过滤定位
#pkg_info &#124; grep php
7、如何删除一个软件包
#pkg_delete 软件包详细名         详细名称可以用pkg_info &#124; grep 管道命令查出。
加上-f 参数，可以删除一人别的软件对其有依赖关系的软件包
#pkg_delete -f 软件包详细名
8、PORTS安装软件后，如何修改配置
有些POST包安装时会有蓝色配置选择页，一般选过一次后就不会再显示了
#make rmconfig 删除配置，需要有root权限
#make reconfig [...]]]></description>
			<content:encoded><![CDATA[<p>1、ports的目录在/usr/ports<br />
2、POSTS安装软件有时可能这个包已经安装过了，会有提示，无法继续安装。可以用提示中的参数:<br />
#make install clean FORCE_PKG_REGISTER=yes<br />
这样就可以继续安装了,yes不区分大小写。<br />
3、PORTS安装软件时有时可以下载回来的包的md5值不匹配，可以加参数强制安装。<br />
#make install clean NO_CHECKSUM=yes<br />
4、PORTS安装软件如何提速？首先设置一个速度比较快的国内镜像。<br />
#vim /etc/make.conf加入或替换：MASTER_SITE_OVERRIDE=\        http://ports.hshh.org/${DIST_SUBDIR}/\<br />
注意最后一个\号，如果还有别的镜像站点，需要加上最后一个\号，如果只用hshh.org 这一个站点。不用加后面的\号。其次，使用多线程软件加速。<br />
#make install clean wget<br />
#vim /etc/make.conf<br />
加入：<br />
FETCH_CMD=wget -c -t 1<br />
DISABLE_SIZE=yes<br />
<span id="more-579"></span><br />
5、如何查找安装一个ports软件<br />
如果知道详细文件名，可以直接用whereis<br />
#whereis php5php5: /usr/ports/lang/php5<br />
如果不知道详细文件名，可以用：<br />
#cd /usr/ports#make search name=php<br />
如果只知道描述性关键字，可以用：<br />
#cd /usr/ports/#make search key=php<br />
注意,使用make search时，需要先cd进/usr/ports目录。<br />
6、如何查找已完装软件包的信息<br />
#pkg_info<br />
用管道命令过滤定位<br />
#pkg_info | grep php<br />
7、如何删除一个软件包<br />
#pkg_delete 软件包详细名         详细名称可以用pkg_info | grep 管道命令查出。<br />
加上-f 参数，可以删除一人别的软件对其有依赖关系的软件包<br />
#pkg_delete -f 软件包详细名<br />
8、PORTS安装软件后，如何修改配置<br />
有些POST包安装时会有蓝色配置选择页，一般选过一次后就不会再显示了<br />
#make rmconfig 删除配置，需要有root权限<br />
#make reconfig 重新配置，需要有root权限<br />
9、重新安装已安装ports软件包<br />
#make reinstall<br />
10、删险已安装ports软件包<br />
#make deinstall<br />
#make clean<br />
转自无忧网客</p>
]]></content:encoded>
			<wfw:commentRss>http://www.aaronw.cn/static/579.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>freebsd 安装php5 提示 cannot find -lltdl</title>
		<link>http://www.aaronw.cn/static/576.html</link>
		<comments>http://www.aaronw.cn/static/576.html#comments</comments>
		<pubDate>Sat, 16 Jan 2010 06:45:03 +0000</pubDate>
		<dc:creator>Aaron.wang</dc:creator>
				<category><![CDATA[UNIX]]></category>
		<category><![CDATA[freebsd]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.aaronw.cn/?p=576</guid>
		<description><![CDATA[freebsd 安装php5 提示 cannot find -lltdl
解决办法：安装 libltdl库文件
# tar -zxvf libmcrypt-2.5.8.tar.gz
# cd libmcrypt-2.5.8/libltdl
# ./configure -enable-ltdl-install
# make &#038;&#038; make  install
]]></description>
			<content:encoded><![CDATA[<div>freebsd 安装php5 提示 cannot find -lltdl</div>
<div>解决办法：安装 libltdl库文件</div>
<div style="border: 1px dashed #00a0c6; margin: 5px 5px 0px; padding: 3px; background-color: #ffffff;"># tar -zxvf libmcrypt-2.5.8.tar.gz<br />
# cd libmcrypt-2.5.8/libltdl<br />
# ./configure -enable-ltdl-install<br />
# make &#038;&#038; make  install</div>
]]></content:encoded>
			<wfw:commentRss>http://www.aaronw.cn/static/576.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RouterOS 各Level等级功能对照表</title>
		<link>http://www.aaronw.cn/static/444.html</link>
		<comments>http://www.aaronw.cn/static/444.html#comments</comments>
		<pubDate>Fri, 18 Sep 2009 08:01:10 +0000</pubDate>
		<dc:creator>Aaron.wang</dc:creator>
				<category><![CDATA[UNIX]]></category>
		<category><![CDATA[level]]></category>
		<category><![CDATA[RouterOS]]></category>

		<guid isPermaLink="false">http://www.aaronw.cn/?p=444</guid>
		<description><![CDATA[


等级

L4


L5


L6



升级年限

1 年


3 年


3 年



初始化设置支持

15 天


30 天


30 天



无线AP

支持


支持


支持



无线客户和桥接

支持


支持


支持



RIP, OSPF, BGP 路由协议

支持(2.10=不支持)


支持


支持



EoIP隧道协议

无限制


无限制


无限制



PPPoE隧道协议

200


500


无限制



PPTP隧道协议

200


无限制


无限制



L2TP隧道协议

200


无限制


无限制



VLAN 协议

无限制


无限制


无限制



P2P 防火墙策略

无限制


无限制


无限制



NAT 策略

无限制


无限制


无限制



HotSpot 在线用户数量

200


500


无限制



RADIUS 客户

支持


支持


支持



带宽管理

无限制


无限制


无限制



Web proxy

支持


支持


支持



Synchronous interfaces

支持


支持


支持



同时在线管理员数量

10


10


无限制




]]></description>
			<content:encoded><![CDATA[<table style="width: 522px; height: 504px;" border="1">
<tbody>
<tr>
<td>等级</td>
<td>
<p align="center">L4</p>
</td>
<td>
<p align="center">L5</p>
</td>
<td>
<p align="center">L6</p>
</td>
</tr>
<tr>
<td>升级年限</td>
<td>
<p align="center">1 年</p>
</td>
<td>
<p align="center">3 年</p>
</td>
<td>
<p align="center">3 年</p>
</td>
</tr>
<tr>
<td>初始化设置支持</td>
<td>
<p align="center">15 天</p>
</td>
<td>
<p align="center">30 天</p>
</td>
<td>
<p align="center">30 天</p>
</td>
</tr>
<tr>
<td>无线AP</td>
<td>
<p align="center">支持</p>
</td>
<td>
<p align="center">支持</p>
</td>
<td>
<p align="center">支持</p>
</td>
</tr>
<tr>
<td>无线客户和桥接</td>
<td>
<p align="center">支持</p>
</td>
<td>
<p align="center">支持</p>
</td>
<td>
<p align="center">支持</p>
</td>
</tr>
<tr>
<td>RIP, OSPF, BGP 路由协议</td>
<td>
<p align="center">支持(2.10=不支持)</p>
</td>
<td>
<p align="center">支持</p>
</td>
<td>
<p align="center">支持</p>
</td>
</tr>
<tr>
<td>EoIP隧道协议</td>
<td>
<p align="center">无限制</p>
</td>
<td>
<p align="center">无限制</p>
</td>
<td>
<p align="center">无限制</p>
</td>
</tr>
<tr>
<td>PPPoE隧道协议</td>
<td>
<p align="center">200</p>
</td>
<td>
<p align="center">500</p>
</td>
<td>
<p align="center">无限制</p>
</td>
</tr>
<tr>
<td>PPTP隧道协议</td>
<td>
<p align="center">200</p>
</td>
<td>
<p align="center">无限制</p>
</td>
<td>
<p align="center">无限制</p>
</td>
</tr>
<tr>
<td>L2TP隧道协议</td>
<td>
<p align="center">200</p>
</td>
<td>
<p align="center">无限制</p>
</td>
<td>
<p align="center">无限制</p>
</td>
</tr>
<tr>
<td>VLAN 协议</td>
<td>
<p align="center">无限制</p>
</td>
<td>
<p align="center">无限制</p>
</td>
<td>
<p align="center">无限制</p>
</td>
</tr>
<tr>
<td>P2P 防火墙策略</td>
<td>
<p align="center">无限制</p>
</td>
<td>
<p align="center">无限制</p>
</td>
<td>
<p align="center">无限制</p>
</td>
</tr>
<tr>
<td>NAT 策略</td>
<td>
<p align="center">无限制</p>
</td>
<td>
<p align="center">无限制</p>
</td>
<td>
<p align="center">无限制</p>
</td>
</tr>
<tr>
<td>HotSpot 在线用户数量</td>
<td>
<p align="center">200</p>
</td>
<td>
<p align="center">500</p>
</td>
<td>
<p align="center">无限制</p>
</td>
</tr>
<tr>
<td>RADIUS 客户</td>
<td>
<p align="center">支持</p>
</td>
<td>
<p align="center">支持</p>
</td>
<td>
<p align="center">支持</p>
</td>
</tr>
<tr>
<td>带宽管理</td>
<td>
<p align="center">无限制</p>
</td>
<td>
<p align="center">无限制</p>
</td>
<td>
<p align="center">无限制</p>
</td>
</tr>
<tr>
<td>Web proxy</td>
<td>
<p align="center">支持</p>
</td>
<td>
<p align="center">支持</p>
</td>
<td>
<p align="center">支持</p>
</td>
</tr>
<tr>
<td>Synchronous interfaces</td>
<td>
<p align="center">支持</p>
</td>
<td>
<p align="center">支持</p>
</td>
<td>
<p align="center">支持</p>
</td>
</tr>
<tr>
<td>同时在线管理员数量</td>
<td>
<p align="center">10</p>
</td>
<td>
<p align="center">10</p>
</td>
<td>
<p align="center">无限制</p>
</td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.aaronw.cn/static/444.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP APC的问题,apache出现Segmentation fault(11)</title>
		<link>http://www.aaronw.cn/static/434.html</link>
		<comments>http://www.aaronw.cn/static/434.html#comments</comments>
		<pubDate>Thu, 13 Aug 2009 06:47:56 +0000</pubDate>
		<dc:creator>Aaron.wang</dc:creator>
				<category><![CDATA[UNIX]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[apc]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.aaronw.cn/?p=434</guid>
		<description><![CDATA[     同事修改了php.ini并重启了apache后页面只能访问一次,再次访问出现无法访问!他说给php增加了APC就这样了!我先检查了apache的log发现有很多错误如下:
[Thu Aug 13 14:08:59 2009] [notice] child pid 1188 exit signal Segmentation fault (11)
[Thu Aug 13 14:09:00 2009] [notice] child pid 1187 exit signal Segmentation fault (11)
[Thu Aug 13 14:09:00 2009] [notice] child pid 1193 exit signal Segmentation fault (11)
[Thu Aug 13 14:09:01 2009] [notice] child pid 1195 exit signal [...]]]></description>
			<content:encoded><![CDATA[<p>     同事修改了php.ini并重启了apache后页面只能访问一次,再次访问出现无法访问!他说给php增加了APC就这样了!我先检查了apache的log发现有很多错误如下:<br />
[Thu Aug 13 14:08:59 2009] [notice] child pid 1188 exit signal Segmentation fault (11)<br />
[Thu Aug 13 14:09:00 2009] [notice] child pid 1187 exit signal Segmentation fault (11)<br />
[Thu Aug 13 14:09:00 2009] [notice] child pid 1193 exit signal Segmentation fault (11)<br />
[Thu Aug 13 14:09:01 2009] [notice] child pid 1195 exit signal Segmentation fault (11)<br />
[Thu Aug 13 14:09:02 2009] [notice] child pid 1196 exit signal Segmentation fault (11)<br />
系统环境如下:<br />
Redhat as 5<br />
Apache/2.2.8<br />
PHP 5.2.6<br />
APC-3.0.19<br />
APC的安装过程</p>
<pre class="brush: bash;">cd APC-3.0.19
/usr/local/php/bin/phpize
./configure --enable-apc --enable-apc-mmap --with-php-config=/usr/local/php/bin/php-config
make &amp;&amp; make install</pre>
<p>php.ini修改内容如下:</p>
<pre class="brush: php;">extension=apc.so
apc.enabled = 1
apc.cache_by_default = on
apc.shm_segments = 1
apc.shm_size = 64
apc.ttl = 7200
apc.user_ttl = 7200
apc.num_files_hint = 0
apc.write_lock = On</pre>
<p>apache的工作模式为prefork<br />
出现这种问题的原因是由于APC与zend optimizer模块的之间发生了冲突,把zend注销就行了!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.aaronw.cn/static/434.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>本本上安装升级Freebsb7.0</title>
		<link>http://www.aaronw.cn/static/420.html</link>
		<comments>http://www.aaronw.cn/static/420.html#comments</comments>
		<pubDate>Fri, 17 Jul 2009 11:22:00 +0000</pubDate>
		<dc:creator>Aaron.wang</dc:creator>
				<category><![CDATA[UNIX]]></category>
		<category><![CDATA[freebsd]]></category>
		<category><![CDATA[update]]></category>
		<category><![CDATA[本本]]></category>

		<guid isPermaLink="false">http://www.aaronw.cn/?p=420</guid>
		<description><![CDATA[好久没有用Freebsd了,突然想起他都有些陌生了!今天没有什么事就在我的本本上安装了一次!下面是安装升级过程!
1、环境
本本:Acer TravelMate 290
cpu :迅驰1.3
mem: 512M
HD:20G
系统:Freebsd 7.0
2、安装
用的FreeBSD7.0 release,将光盘放进光驱,按F12选择从光驱启动.选择安装Custom,再装上Linux Based,Ports,Kernel,再选择media是cd,OK安装完重新启动.这个就不详细介绍了,但是要注意的是安装完什么也不要配置。
3、配置
先看看网卡是不是被识别
ifconfig -a
我的网卡是RT8139的,7.0已经可以识别了,但是我的intel 2100的无线网卡无法识别。

配置网络
vi /etc/rc.conf
hostname=&#34;aaronw&#34; #配置主机名
defaultrouter=&#34;192.168.1.1&#34;  #配置网关
ifconfig_rl0=&#34;inet 192.168.1.10  netmask 255.255.255.0&#34; #配置IP地址
sshd_enable=&#34;YES&#34; #启动ssh服务
这些信息可以保证每次启动都会生效,下面的命令可以马上激活使用
#ifconfig rl0 inet 192.168.1.10 netmask 255.255.255.0
#route add default 192.168.1.1
网络配置完了。
更新ports
详细见http://www.aaronw.cn/static/114.html
加速更新ports见http://www.aaronw.cn/static/117.html
我用惯了bash,所以我就安装了bash,方法
#cd /usr/ports/shells/bash
make install clean
ln -s /usr/local/bin/bash /bin/bash
chsh -s /bin/bash root
再登陆就是bash了
3、升级
[root@aaronw /etc]#cp /usr/share/examples/cvsup/standard-supfile /etc/standard-supfile
vi /etc/standard-supfile
*default host=cvsup.cn.FreeBSD.org
*default release=cvs tag=RELENG_7_2
[root@aaronw /etc]# csup -g -L 2 /etc/standard-supfile
[root@aaronw /etc]#cd /usr/src/sys/i386/conf
[root@aaronw /etc]#cp GENERIC /root/Aaron.wang
[root@aaronw /etc]#ln [...]]]></description>
			<content:encoded><![CDATA[<p>好久没有用Freebsd了,突然想起他都有些陌生了!今天没有什么事就在我的本本上安装了一次!下面是安装升级过程!</p>
<p>1、环境</p>
<p>本本:Acer TravelMate 290</p>
<p>cpu :迅驰1.3</p>
<p>mem: 512M</p>
<p>HD:20G</p>
<p>系统:Freebsd 7.0</p>
<p>2、安装</p>
<p>用的FreeBSD7.0 release,将光盘放进光驱,按F12选择从光驱启动.选择安装Custom,再装上Linux Based,Ports,Kernel,再选择media是cd,OK安装完重新启动.这个就不详细介绍了,但是要注意的是安装完什么也不要配置。</p>
<p>3、配置</p>
<p>先看看网卡是不是被识别<br />
ifconfig -a<br />
我的网卡是RT8139的,7.0已经可以识别了,但是我的intel 2100的无线网卡无法识别。<br />
<span id="more-420"></span><br />
配置网络</p>
<pre class="brush: plain;">vi /etc/rc.conf
hostname=&quot;aaronw&quot; #配置主机名
defaultrouter=&quot;192.168.1.1&quot;  #配置网关
ifconfig_rl0=&quot;inet 192.168.1.10  netmask 255.255.255.0&quot; #配置IP地址
sshd_enable=&quot;YES&quot; #启动ssh服务</pre>
<p>这些信息可以保证每次启动都会生效,下面的命令可以马上激活使用</p>
<pre class="brush: bash;">#ifconfig rl0 inet 192.168.1.10 netmask 255.255.255.0
#route add default 192.168.1.1</pre>
<p>网络配置完了。<br />
更新ports</p>
<p>详细见http://www.aaronw.cn/static/114.html<br />
加速更新ports见http://www.aaronw.cn/static/117.html</p>
<p>我用惯了bash,所以我就安装了bash,方法</p>
<pre class="brush: bash;">#cd /usr/ports/shells/bash
make install clean
ln -s /usr/local/bin/bash /bin/bash
chsh -s /bin/bash root</pre>
<p>再登陆就是bash了</p>
<p>3、升级</p>
<pre class="brush: bash;">[root@aaronw /etc]#cp /usr/share/examples/cvsup/standard-supfile /etc/standard-supfile
vi /etc/standard-supfile
*default host=cvsup.cn.FreeBSD.org
*default release=cvs tag=RELENG_7_2
[root@aaronw /etc]# csup -g -L 2 /etc/standard-supfile
[root@aaronw /etc]#cd /usr/src/sys/i386/conf
[root@aaronw /etc]#cp GENERIC /root/Aaron.wang
[root@aaronw /etc]#ln -s /root/Aaron.wang .
[root@aaronw /etc]# cd /usr/src
[root@aaronw /usr/src]# make buildkernel KERNCONF=Aaron.wang
[root@aaronw /usr/src]# make installkernel KERNCONF=Aaron.wang
[root@aaronw /usr/src]# reboot</pre>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 872px; width: 1px; height: 1px;">
<pre>[root@aaronw /etc]#</pre>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.aaronw.cn/static/420.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>error: &#8220;apr&#8221; specifies multiple packages</title>
		<link>http://www.aaronw.cn/static/386.html</link>
		<comments>http://www.aaronw.cn/static/386.html#comments</comments>
		<pubDate>Tue, 09 Jun 2009 14:25:35 +0000</pubDate>
		<dc:creator>Aaron.wang</dc:creator>
				<category><![CDATA[UNIX]]></category>
		<category><![CDATA[error]]></category>
		<category><![CDATA[rpm]]></category>
		<category><![CDATA[x86_64]]></category>
		<category><![CDATA[添加新标签]]></category>

		<guid isPermaLink="false">http://www.aaronw.cn/?p=386</guid>
		<description><![CDATA[前几天装一台Server,要卸载自带的apr时候发现这样的情况
[root@aaronw soft]# rpm -qa &#124; grep apr
apr-1.2.7-11
apr-1.2.7-11
apr-util-1.2.7-6
apr-util-1.2.7-6
xorg-x11-drv-dynapro-1.1.0-2
[root@aaronw soft]#
[root@aaronw soft]# rpm -e apr
error: &#8220;apr&#8221; specifies multiple packages
[root@aaronw soft]# uname -a
Linux aaronw 2.6.18-8.el5 #1 SMP Fri Jan 26 14:15:14 EST 2007 x86_64 x86_64 x86_64 GNU/Linux
后来发现在x86_64的系统里面同一个软件有x86_64和i386两个rpm包,rpm -e的时候只出现软件名和软件的版本号,不显示是32位还是64位的,所以在卸载的时候加上&#8211;allmatches这个参数就可以卸载了.man里面是这样解释的
&#8211;allmatches
              Remove all versions of the package which match [...]]]></description>
			<content:encoded><![CDATA[<p>前几天装一台Server,要卸载自带的apr时候发现这样的情况</p>
<div style="border: 1px dashed #00a0c6; margin: 5px 5px 0px; padding: 3px; background-color: #ffffff;">[root@aaronw soft]# rpm -qa | grep apr<br />
apr-1.2.7-11<br />
apr-1.2.7-11<br />
apr-util-1.2.7-6<br />
apr-util-1.2.7-6<br />
xorg-x11-drv-dynapro-1.1.0-2<br />
[root@aaronw soft]#<br />
[root@aaronw soft]# rpm -e apr<br />
error: &#8220;apr&#8221; specifies multiple packages<br />
[root@aaronw soft]# uname -a<br />
Linux aaronw 2.6.18-8.el5 #1 SMP Fri Jan 26 14:15:14 EST 2007 x86_64 x86_64 x86_64 GNU/Linux</div>
<p>后来发现在x86_64的系统里面同一个软件有x86_64和i386两个rpm包,rpm -e的时候只出现软件名和软件的版本号,不显示是32位还是64位的,所以在卸载的时候加上&#8211;allmatches这个参数就可以卸载了.man里面是这样解释的<br />
&#8211;allmatches<br />
              Remove all versions of the package which match PACKAGE_NAME. Normally an error is issued if  PACK-<br />
              AGE_NAME matches multiple packages.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.aaronw.cn/static/386.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[原创]bind view master/slave不能同步的解决方法</title>
		<link>http://www.aaronw.cn/static/362.html</link>
		<comments>http://www.aaronw.cn/static/362.html#comments</comments>
		<pubDate>Wed, 20 May 2009 06:34:53 +0000</pubDate>
		<dc:creator>Aaron.wang</dc:creator>
				<category><![CDATA[UNIX]]></category>
		<category><![CDATA[bind]]></category>
		<category><![CDATA[DNS]]></category>
		<category><![CDATA[view]]></category>
		<category><![CDATA[同步]]></category>

		<guid isPermaLink="false">http://www.aaronw.cn/?p=362</guid>
		<description><![CDATA[以前的一个客户发来msn信息,说他们的dns只能同步电信不能同步网通的VIEW.好久没有弄DNS server了都有些生疏了,后来看了看bind的帮助把问题解决了,记录下来以便日后翻阅.
环境介绍
客户提供两台server,要求按访客的IP来解析到不同的server上.利用BIND的ACL和VIEW选项来匹配不同访客的源地址,不同访客解析为请求则解析为不同的IP可以实现.
域名实例:www.abc.com
IP: A(master) 111.111.111.111
192.168.1.1
B (slave)  222.222.222.222
192.168.1.2
不能同步的原因
开始所有的VIEW都走内同同步.如果辅助域名服务器对主服务器来说,只看到一个特定的源地址,那么主域名服务器只会返回这个源地址所匹配的单一域的VIEW,192.168.1.2是包含在any里面的,所以只能同步CT的VIEW.BIND9中Transfer-source选项可以让指定辅助域名服务器用来做区域传送的源IP地址,这样可以在辅DNS上利用公网IP地址来解决该问题,或者copy eth1 eth1.1给内网只两个IP也行.还有就是要注意两台server的时间是否一致.

正确的配置如下:
A的配置

options
{
directory &#34;/var/named&#34;;
dump-file 	        &#34;data/cache_dump.db&#34;;
statistics-file 	&#34;data/named_stats.txt&#34;;
memstatistics-file 	&#34;data/named_mem_stats.txt&#34;;
notify yes;
};

key &#34;rndc-key&#34; {
algorithm hmac-md5;
secret &#34;xxxxxxxxxxxxxxxxxxxxxxx&#34;;
};

controls {
inet 127.0.0.1 port 953
allow { 127.0.0.1; } keys { &#34;rndc-key&#34;; };
};

acl &#34;CNC&#34; {
58.144.0.0/16;
..................
222.163.64.0/18;
};
view &#34;CNC Net&#34; {
match-clients {!222.222.222.222;CNC;};//CNC区域客户匹配地址中排除辅DNS的公网IP地址
recursion yes;
allow-transfer {192.168.1.2;};//允许辅DNS用于传送的CNC区域的IP地址
also-notify {192.168.1.2;};
zone &#34;.&#34; IN {
type hint;
file &#34;etc/named.root&#34;;
};
zone &#34;abc.com&#34; IN {
type master;
file [...]]]></description>
			<content:encoded><![CDATA[<p>以前的一个客户发来msn信息,说他们的dns只能同步电信不能同步网通的VIEW.好久没有弄DNS server了都有些生疏了,后来看了看bind的帮助把问题解决了,记录下来以便日后翻阅.</p>
<p>环境介绍<br />
客户提供两台server,要求按访客的IP来解析到不同的server上.利用BIND的ACL和VIEW选项来匹配不同访客的源地址,不同访客解析为请求则解析为不同的IP可以实现.</p>
<p>域名实例:www.abc.com<br />
IP: A(master) 111.111.111.111<br />
192.168.1.1<br />
B (slave)  222.222.222.222<br />
192.168.1.2</p>
<p>不能同步的原因<br />
开始所有的VIEW都走内同同步.如果辅助域名服务器对主服务器来说,只看到一个特定的源地址,那么主域名服务器只会返回这个源地址所匹配的单一域的VIEW,192.168.1.2是包含在any里面的,所以只能同步CT的VIEW.BIND9中Transfer-source选项可以让指定辅助域名服务器用来做区域传送的源IP地址,这样可以在辅DNS上利用公网IP地址来解决该问题,或者copy eth1 eth1.1给内网只两个IP也行.还有就是要注意两台server的时间是否一致.<br />
<span id="more-362"></span></p>
<p>正确的配置如下:<br />
A的配置</p>
<pre class="brush: bash;">
options
{
directory &quot;/var/named&quot;;
dump-file 	        &quot;data/cache_dump.db&quot;;
statistics-file 	&quot;data/named_stats.txt&quot;;
memstatistics-file 	&quot;data/named_mem_stats.txt&quot;;
notify yes;
};

key &quot;rndc-key&quot; {
algorithm hmac-md5;
secret &quot;xxxxxxxxxxxxxxxxxxxxxxx&quot;;
};

controls {
inet 127.0.0.1 port 953
allow { 127.0.0.1; } keys { &quot;rndc-key&quot;; };
};

acl &quot;CNC&quot; {
58.144.0.0/16;
..................
222.163.64.0/18;
};
view &quot;CNC Net&quot; {
match-clients {!222.222.222.222;CNC;};//CNC区域客户匹配地址中排除辅DNS的公网IP地址
recursion yes;
allow-transfer {192.168.1.2;};//允许辅DNS用于传送的CNC区域的IP地址
also-notify {192.168.1.2;};
zone &quot;.&quot; IN {
type hint;
file &quot;etc/named.root&quot;;
};
zone &quot;abc.com&quot; IN {
type master;
file &quot;conf/cnc.abc.com.zone.db&quot;;
};
};
view &quot;CT Net&quot; {
match-clients { !192.168.1.2;any; };//CT区域客户匹配地址中排除辅DNS的内网IP地址
recursion yes;
allow-transfer {222.222.222.222;};//允许辅DNS用于传送的CT区域的IP地址
also-notify {222.222.222.222;};
zone &quot;.&quot; IN {
type hint;
file &quot;etc/named.root&quot;;
};
zone &quot;abc.com&quot; IN {
type master;
file &quot;conf/ct.abc.com.zone.db&quot;;
};
};</pre>
<p>B的配置</p>
<pre class="brush: bash;">
options
{
directory &quot;/var/named&quot;;
dump-file 		&quot;data/cache_dump.db&quot;;
statistics-file 	&quot;data/named_stats.txt&quot;;
memstatistics-file 	&quot;data/named_mem_stats.txt&quot;;
};

key &quot;rndc-key&quot; {
algorithm hmac-md5;
secret &quot;xxxxxxxxxxxxxxxxxxxxxxx&quot;;
};

controls {
inet 127.0.0.1 port 953
allow { 127.0.0.1; } keys { &quot;rndc-key&quot;; };
};

acl &quot;CNC&quot; {
58.144.0.0/16;
..................
222.163.64.0/18;
};
view &quot;CNC Net&quot; {
match-clients		{ CNC; };
recursion yes;
transfer-source 192.168.1.2;//指定同步CNC的IP地址
zone &quot;.&quot; IN {
type hint;
file &quot;etc/named.root&quot;;
};
zone &quot;abc.com&quot; IN {
type slave;
masters { 192.168.1.1; };
file &quot;conf/cnc.abc.com.zone.db&quot;;
};
};
view &quot;CT Net&quot; {
match-clients		{ any; };
recursion yes;
transfer-source 222.222.222.222;//指定同步CT的IP地址
zone &quot;.&quot; IN {
type hint;
file &quot;etc/named.root&quot;;
};
zone &quot;abc.com&quot; IN {
type slave;
masters	{ 111.111.111.111; };
file &quot;conf/ct.abc.com.zone.db&quot;;
};
};</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.aaronw.cn/static/362.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>[原创]Zabbix1.6.4安装与配置</title>
		<link>http://www.aaronw.cn/static/352.html</link>
		<comments>http://www.aaronw.cn/static/352.html#comments</comments>
		<pubDate>Tue, 05 May 2009 07:19:44 +0000</pubDate>
		<dc:creator>Aaron.wang</dc:creator>
				<category><![CDATA[UNIX]]></category>
		<category><![CDATA[zabbix]]></category>
		<category><![CDATA[分布式监控]]></category>
		<category><![CDATA[监控]]></category>

		<guid isPermaLink="false">http://www.aaronw.cn/?p=352</guid>
		<description><![CDATA[客户要求我帮他建立一套监控系统,要求能够监控该服务器上域名的服务状态。我以前都是使用cacti监控服务器的网络流量和服务器的负载,但是监控具体的服务还是有些不得力。所以决定使用zabbix系统来监控,Zabbix是一套较为成熟的服务器监控软件。
cacti的安装请见http://www.aaronw.cn/static/90.html
Zabbix介绍
zabbix能监视各种网络参数，保证服务器系统的安全运营；并提供柔软的通知机制以让系统管理员快速定位/解决存在的各种问题。
zabbix由2部分构成，zabbix server与可选组件zabbix agent。

zabbix server可以通过SNMP，zabbix agent，ping，端口监视等方法提供对远程服务器/网络状态的监视，数据收集等功能，它可以运行在Linux, Solaris, HP-UX, AIX, Free BSD, Open BSD, OS X等平台之上。
zabbix agent需要安装在被监视的目标服务器上，它主要完成对硬件信息或与操作系统有关的内存，CPU等信息的收集。zabbix agent可以运行在Linux ,Solaris, HP-UX, AIX, Free BSD, Open BSD, OS X, Tru64/OSF1, Windows NT4.0, Windows 2000/2003/XP/Vista)等系统之上
zabbix server可以单独监视远程服务器的服务状态；同时也可以与zabbix agent配合，可以轮询zabbix agent主动接收监视数据（trapping方式），同时还可被动接收zabbix agent发送的数据（trapping方式）。另外zabbix server还支持SNMP (v1,v2)，可以与SNMP软件(例如：net-snmp)等配合使用。
zabbix的主要特点：
- 安装与配置简单，学习成本低 &#8211; 支持多语言（包括中文）
- 免费开源 &#8211; 自动发现服务器与网络设备
- 分布式监视以及WEB集中管理功能
- 可以无agent监视
- 用户安全认证和柔软的授权方式
- 通过WEB界面设置或查看监视结果
- email等通知功能 等等
Zabbix主要功能：
- CPU负荷
内存使用
- 磁盘使用
- 网络状况
- 端口监视
- 日志监视
下面是zabbix的安装过程
下载zabbix http://nchc.dl.sourceforge.net/sourceforge/zabbix/zabbix-1.6.4.tar.gz

useradd zabbix
tar [...]]]></description>
			<content:encoded><![CDATA[<p>客户要求我帮他建立一套监控系统,要求能够监控该服务器上域名的服务状态。我以前都是使用cacti监控服务器的网络流量和服务器的负载,但是监控具体的服务还是有些不得力。所以决定使用zabbix系统来监控,Zabbix是一套较为成熟的服务器监控软件。<br />
cacti的安装请见http://www.aaronw.cn/static/90.html</p>
<p>Zabbix介绍</p>
<p>zabbix能监视各种网络参数，保证服务器系统的安全运营；并提供柔软的通知机制以让系统管理员快速定位/解决存在的各种问题。</p>
<p>zabbix由2部分构成，zabbix server与可选组件zabbix agent。<br />
<span id="more-352"></span><br />
zabbix server可以通过SNMP，zabbix agent，ping，端口监视等方法提供对远程服务器/网络状态的监视，数据收集等功能，它可以运行在Linux, Solaris, HP-UX, AIX, Free BSD, Open BSD, OS X等平台之上。</p>
<p>zabbix agent需要安装在被监视的目标服务器上，它主要完成对硬件信息或与操作系统有关的内存，CPU等信息的收集。zabbix agent可以运行在Linux ,Solaris, HP-UX, AIX, Free BSD, Open BSD, OS X, Tru64/OSF1, Windows NT4.0, Windows 2000/2003/XP/Vista)等系统之上</p>
<p>zabbix server可以单独监视远程服务器的服务状态；同时也可以与zabbix agent配合，可以轮询zabbix agent主动接收监视数据（trapping方式），同时还可被动接收zabbix agent发送的数据（trapping方式）。另外zabbix server还支持SNMP (v1,v2)，可以与SNMP软件(例如：net-snmp)等配合使用。</p>
<p>zabbix的主要特点：</p>
<p>- 安装与配置简单，学习成本低 &#8211; 支持多语言（包括中文）</p>
<p>- 免费开源 &#8211; 自动发现服务器与网络设备</p>
<p>- 分布式监视以及WEB集中管理功能</p>
<p>- 可以无agent监视</p>
<p>- 用户安全认证和柔软的授权方式</p>
<p>- 通过WEB界面设置或查看监视结果</p>
<p>- email等通知功能 等等</p>
<p>Zabbix主要功能：</p>
<p>- CPU负荷</p>
<p>内存使用</p>
<p>- 磁盘使用</p>
<p>- 网络状况</p>
<p>- 端口监视</p>
<p>- 日志监视</p>
<p>下面是zabbix的安装过程</p>
<p>下载zabbix http://nchc.dl.sourceforge.net/sourceforge/zabbix/zabbix-1.6.4.tar.gz</p>
<pre class="brush: plain;">
useradd zabbix
tar -xzvf  zabbix-1.6.4.tar.gz
cd zabbix-1.6.4
./configure --with-mysql --with-net-snmp --enable-server --enable-agent --prefix=/usr/local/zabbix   #编译服务器端
./configure --prefix=/usr/local/zabbix --enable-agent  #编译客户端
make
make install
cd /usr/local/zabbix/sbin
for i in * ; do ln -s /usr/local/zabbix/sbin/$i /usr/bin/$i ; done
</pre>
<p>#数据库安装</p>
<pre class="brush: plain;">
mysql -uroot -p
&gt;create database zabbix;
&gt;grant all on zabbix.* to zabbix@localhost identified by 'passwd';
&gt;flush privileges;
&gt;quit;
cd create/mysql/schema
mysql -uroot -p zabbix &lt;mysql.sql
cd create/mysql/data
mysql -uroot -p zabbix &lt;data.sql
mysql -uroot -p zabbix &lt;images_mysql.sql
</pre>
<p>修改配置和启动服务</p>
<pre class="brush: plain;">
vi frontends/php/include/db.inc.php
</pre>
<p>更改数据库相关内容:</p>
<pre class="brush: plain;">
$DB_TYPE =&quot;MYSQL&quot;;
$DB_SERVER =&quot;localhost&quot;;
$DB_DATABASE =&quot;zabbix&quot;;
$DB_USER =&quot;root&quot;;
$DB_PWD =&quot;&quot;;
cp -rf frontends/php /home/vhost/html/zabbix -R
chown zabbix /home/vhost/html/zabbix/ -R
</pre>
<p>生成配置文件:</p>
<pre class="brush: plain;">
mkdir /etc/zabbix
cp misc/conf/* /etc/zabbix/
</pre>
<p>配置相关内容(主要是服务器的IP/MYSQL的账号):</p>
<p>zabbix_agent.conf</p>
<pre class="brush: plain;">
grep -v '^#' zabbix_agent.conf |grep -v '^$'
Server=192.168.1.1
Timeout=3
UserParameter=mysql.ping,/usr/local/mysql/bin/mysqladmin -uroot -p ping|grep alive|wc -l
UserParameter=mysql.uptime,/usr/local/mysql/bin/mysqladmin -uroot -p status|cut -f2 -d&quot;:&quot;|cut -f1 -d&quot;T&quot;
UserParameter=mysql.threads,/usr/local/mysql/bin/mysqladmin -uroot -p status|cut -f3 -d&quot;:&quot;|cut -f1 -d&quot;Q&quot;
UserParameter=mysql.questions,/usr/local/mysql/bin/mysqladmin -uroot -p status|cut -f4 -d&quot;:&quot;|cut -f1 -d&quot;S&quot;
UserParameter=mysql.slowqueries,/usr/local/mysql/bin/mysqladmin -uroot -p status|cut -f5 -d&quot;:&quot;|cut -f1 -d&quot;O&quot;
UserParameter=mysql.qps,/usr/local/mysql/bin/mysqladmin -uroot -p status|cut -f9 -d&quot;:&quot;
UserParameter=mysql.version,/usr/local/mysql/bin/mysql -V
</pre>
<p>zabbix_agentd.conf</p>
<pre class="brush: plain;">
grep -v '^#' zabbix_agentd.conf |grep -v '^$'
Server=192.168.1.1
Hostname=localhost
ListenPort=10050
ListenIP=192.168.1.2
StartAgents=5
RefreshActiveChecks=120
DisableActive=1
DebugLevel=3
PidFile=/tmp/zabbix_agentd.pid
LogFile=/tmp/zabbix_agentd.log
Timeout=3
UserParameter=mysql.ping,/usr/local/mysql/bin/mysqladmin -uroot -p ping|grep alive|wc -l
UserParameter=mysql.uptime,/usr/local/mysql/bin/mysqladmin -uroot -p status|cut -f2 -d&quot;:&quot;|cut -f1 -d&quot;T&quot;
UserParameter=mysql.threads,/usr/local/mysql/bin/mysqladmin -uroot -p status|cut -f3 -d&quot;:&quot;|cut -f1 -d&quot;Q&quot;
UserParameter=mysql.questions,/usr/local/mysql/bin/mysqladmin -uroot -p status|cut -f4 -d&quot;:&quot;|cut -f1 -d&quot;S&quot;
UserParameter=mysql.slowqueries,/usr/local/mysql/bin/mysqladmin -uroot -p status|cut -f5 -d&quot;:&quot;|cut -f1 -d&quot;O&quot;
UserParameter=mysql.qps,/usr/local/mysql/bin/mysqladmin -uroot -p status|cut -f9 -d&quot;:&quot;
UserParameter=mysql.version,/usr/local/mysql/bin/mysql -V
</pre>
<p>zabbix_server.conf</p>
<pre class="brush: plain;">
grep -v '^#' zabbix_server.conf |grep -v '^$'
Server=1
StartPollers=6
StartTrappers=5
ListenPort=10051
HousekeepingFrequency=1
SenderFrequency=30
DebugLevel=3
Timeout=5
UnreachablePeriod=45
UnavailableDelay=15
UnavailableDelay=60
PidFile=/tmp/zabbix_server.pid
LogFile=/tmp/zabbix_server.log
AlertScriptsPath=/home/zabbix/bin/
PingerFrequency=30
DBHost=localhost
DBName=zabbix
DBUser=root
DBPassword=
DBSocket=/tmp/mysql.sock
</pre>
<p>zabbix_trapper.conf</p>
<pre class="brush: plain;">
grep -v '^#' zabbix_trapper.conf |grep -v '^$'
DebugLevel=2
Timeout=3
LogFile=/tmp/zabbix_trapper.log
DBHost=localhost
DBName=zabbix
DBUser=root
DBPassword=
DBSocket=/tmp/mysql.sock
</pre>
<p>生成启动脚本</p>
<pre class="brush: plain;">
cp misc/init.d/redhat/zabbix_* /bin
编辑zabbix_agentd_ctl 和 zabbix_suckerd_ctl
BASEDIR=/usr/local/zabbix 为指定的zabbix安装目录.
zabbix_suckerd_ctl文件中的
ZABBIX_SUCKERD=$BASEDIR/bin/zabbix_suckerd可能因为版本关系应该改为
ZABBIX_SUCKERD=$BASEDIR/bin/zabbix_server
</pre>
<p>启动服务:</p>
<p>服务器端<br />
zabbix_suckerd_ctl start</p>
<p>客户端<br />
zabbix_agentd_ctl start</p>
<p>打开http://192.168.1.1<br />
开始页面安装</p>
]]></content:encoded>
			<wfw:commentRss>http://www.aaronw.cn/static/352.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Iperf 2.0.0使用</title>
		<link>http://www.aaronw.cn/static/287.html</link>
		<comments>http://www.aaronw.cn/static/287.html#comments</comments>
		<pubDate>Fri, 24 Apr 2009 04:31:49 +0000</pubDate>
		<dc:creator>Aaron.wang</dc:creator>
				<category><![CDATA[UNIX]]></category>
		<category><![CDATA[Iperf]]></category>
		<category><![CDATA[jperf]]></category>
		<category><![CDATA[网络测试]]></category>

		<guid isPermaLink="false">http://www.aaronw.cn/?p=287</guid>
		<description><![CDATA[这几天网络很不稳定,再加上要给别的公司做网络性能分析报告,所以就开始寻找合适的工具.无意间发现这工具Iperf ,现将此工具的用法的转帖至此!
Iperf  是一个网络性能测试工具。Iperf可以测试TCP和UDP带宽质量。Iperf可以测量最大TCP带宽，具有多种参数和UDP特性。Iperf可以报告带宽，延迟抖动和数据包丢失。
功能介绍
TCP
测量网络带宽
报告MSS/MTU值的大小和观测值
支持TCP窗口值通过套接字缓冲
当P线程或Win32线程可用时，支持多线程。客户端与服务端支持同时多重连接
UDP
客户端可以创建指定带宽的UDP流
测量丢包
测量延迟
支持多播
当P线程可用时，支持多线程。客户端与服务端支持同时多重连接（不支持Windows）
在适当的地方，选项中可以使用K（kilo-）和M（mega-）。例如131072字节可以用128K代替。
可以指定运行的总时间，甚至可以设置传输的数据总量。
在报告中，为数据选用最合适的单位。
服务器支持多重连接，而不是等待一个单线程测试。
在指定时间间隔重复显示网络带宽，波动和丢包情况。
服务器端可作为后台程序运行。
服务器端可作为Windows 服务运行。
使用典型数据流来测试链接层压缩对于可用带宽的影响。

-f, –format [bkmaBKMA]
$IPERF_FORMAT
格式化带宽数输出。支持的格式有：
‘b’ = bits/sec            ’B’ = Bytes/sec
‘k’ = Kbits/sec           ’K’ = KBytes/sec
‘m’ = Mbits/sec           ’M’ = MBytes/sec
‘g’ = Gbits/sec           ’G’ = GBytes/sec
‘a’ = adaptive bits/sec   ’A’ = adaptive Bytes/sec
自适应格式是kilo-和mega-二者之一。除了带宽之外的字段都输出为字节，除非指定输出的格式，默认的参数是a。
注意：在计算字节byte时，Kilo = 1024， Mega = 1024^2，Giga = 1024^3。通常，在网络中，Kilo = 1000， Mega = 1000^2， and Giga = 1000^3，所以，Iperf也按此来计算比特（位）。如果这些困扰了你，那么请使用-f b参数，然后亲自计算一下。
-i, –interval #
$IPERF_INTERVAL
设置每次报告之间的时间间隔，单位为秒。如果设置为非零值，就会按照此时间间隔输出测试报告。默认值为零。
-l, –len #[KM]
$IPERF_LEN
设置读写缓冲区的长度。TCP方式默认为8KB，UDP方式默认为1470字节。
-m, –print_mss
$IPERF_PRINT_MSS
输出TCP [...]]]></description>
			<content:encoded><![CDATA[<p>这几天网络很不稳定,再加上要给别的公司做网络性能分析报告,所以就开始寻找合适的工具.无意间发现这工具Iperf ,现将此工具的用法的转帖至此!</p>
<p>Iperf  是一个网络性能测试工具。Iperf可以测试TCP和UDP带宽质量。Iperf可以测量最大TCP带宽，具有多种参数和UDP特性。Iperf可以报告带宽，延迟抖动和数据包丢失。</p>
<p>功能介绍<br />
TCP<br />
测量网络带宽<br />
报告MSS/MTU值的大小和观测值<br />
支持TCP窗口值通过套接字缓冲<br />
当P线程或Win32线程可用时，支持多线程。客户端与服务端支持同时多重连接<br />
UDP<br />
客户端可以创建指定带宽的UDP流<br />
测量丢包<br />
测量延迟<br />
支持多播<br />
当P线程可用时，支持多线程。客户端与服务端支持同时多重连接（不支持Windows）<br />
在适当的地方，选项中可以使用K（kilo-）和M（mega-）。例如131072字节可以用128K代替。<br />
可以指定运行的总时间，甚至可以设置传输的数据总量。<br />
在报告中，为数据选用最合适的单位。<br />
服务器支持多重连接，而不是等待一个单线程测试。<br />
在指定时间间隔重复显示网络带宽，波动和丢包情况。<br />
服务器端可作为后台程序运行。<br />
服务器端可作为Windows 服务运行。<br />
使用典型数据流来测试链接层压缩对于可用带宽的影响。<br />
<span id="more-287"></span><br />
-f, –format [bkmaBKMA]<br />
$IPERF_FORMAT<br />
格式化带宽数输出。支持的格式有：<br />
‘b’ = bits/sec            ’B’ = Bytes/sec<br />
‘k’ = Kbits/sec           ’K’ = KBytes/sec<br />
‘m’ = Mbits/sec           ’M’ = MBytes/sec<br />
‘g’ = Gbits/sec           ’G’ = GBytes/sec<br />
‘a’ = adaptive bits/sec   ’A’ = adaptive Bytes/sec<br />
自适应格式是kilo-和mega-二者之一。除了带宽之外的字段都输出为字节，除非指定输出的格式，默认的参数是a。<br />
注意：在计算字节byte时，Kilo = 1024， Mega = 1024^2，Giga = 1024^3。通常，在网络中，Kilo = 1000， Mega = 1000^2， and Giga = 1000^3，所以，Iperf也按此来计算比特（位）。如果这些困扰了你，那么请使用-f b参数，然后亲自计算一下。<br />
-i, –interval #<br />
$IPERF_INTERVAL<br />
设置每次报告之间的时间间隔，单位为秒。如果设置为非零值，就会按照此时间间隔输出测试报告。默认值为零。<br />
-l, –len #[KM]<br />
$IPERF_LEN<br />
设置读写缓冲区的长度。TCP方式默认为8KB，UDP方式默认为1470字节。</p>
<p>-m, –print_mss<br />
$IPERF_PRINT_MSS<br />
输出TCP MSS值（通过TCP_MAXSEG支持）。MSS值一般比MTU值小40字节。通常情况</p>
<p>-p, –port #<br />
$IPERF_PORT<br />
设置端口，与服务器端的监听端口一致。默认是5001端口，与ttcp的一样。<br />
-u, –udp<br />
$IPERF_UDP<br />
使用UDP方式而不是TCP方式。参看-b选项。<br />
-w, –window #[KM]<br />
$TCP_WINDOW_SIZE<br />
设置套接字缓冲区为指定大小。对于TCP方式，此设置为TCP窗口大小。对于UDP方式，此设置为接受UDP数据包的缓冲区大小，限制可以接受数据包的最大值。<br />
-B, –bind host<br />
$IPERF_BIND<br />
绑定到主机的多个地址中的一个。对于客户端来说，这个参数设置了出栈接口。对于服务器端来说，这个参数设置入栈接口。这个参数只用于具有多网络接口的主 机。在Iperf的UDP模式下，此参数用于绑定和加入一个多播组。使用范围在224.0.0.0至239.255.255.255的多播地址。参考-T 参数。<br />
-C, –compatibility<br />
$IPERF_COMPAT<br />
与低版本的Iperf使用时，可以使用兼容模式。不需要两端同时使用兼容模式，但是强烈推荐两端同时使用兼容模式。某些情况下，使用某些数据流可以引起1.7版本的服务器端崩溃或引起非预期的连接尝试。<br />
-M, –mss #[KM}<br />
$IPERF_MSS<br />
通过TCP_MAXSEG选项尝试设置TCP最大信息段的值。MSS值的大小通常是TCP/IP头减去40字节。在以太网中，MSS值 为1460字节（MTU1500字节）。许多操作系统不支持此选项。<br />
-N, --nodelay<br />
$IPERF_NODELAY<br />
设置TCP无延迟选项，禁用Nagle's运算法则。通常情况此选项对于交互程序，例如telnet，是禁用的。<br />
-V (from v1.6 or higher)</p>
<p>绑定一个IPv6地址。<br />
服务端：$ iperf -s –V<br />
客户端：$ iperf -c  -V<br />
注意：在1.6.3或更高版本中，指定IPv6地址不需要使用-B参数绑定，在1.6之前的版本则需要。在大多数操作系统中，将响应IPv4客户端映射的IPv4地址。<br />
服务器端专用选项<br />
-s, --server<br />
$IPERF_SERVER<br />
Iperf服务器模式<br />
-D (v1.2或更高版本)</p>
<p>Unix平台下Iperf作为后台守护进程运行。在Win32平台下，Iperf将作为服务运行。<br />
-R(v1.2或更高版本，仅用于Windows)</p>
<p>卸载Iperf服务（如果它在运行）。<br />
-o(v1.2或更高版本，仅用于Windows)</p>
<p>重定向输出到指定文件<br />
-c, --client host<br />
$IPERF_CLIENT<br />
如果Iperf运行在服务器模式，并且用-c参数指定一个主机，那么Iperf将只接受指定主机的连接。此参数不能工作于UDP模式。<br />
-P, --parallel #<br />
$IPERF_PARALLEL<br />
服务器关闭之前保持的连接数。默认是0，这意味着永远接受连接。<br />
客户端专用选项<br />
-b, --bandwidth #[KM]<br />
$IPERF_BANDWIDTH<br />
UDP模式使用的带宽，单位bits/sec。此选项与-u选项相关。默认值是1 Mbit/sec。<br />
-c, –client host<br />
$IPERF_CLIENT<br />
运行Iperf的客户端模式，连接到指定的Iperf服务器端。<br />
-d, –dualtest<br />
$IPERF_DUALTEST<br />
运行双测试模式。这将使服务器端反向连接到客户端，使用-L 参数中指定的端口（或默认使用客户端连接到服务器端的端口）。这些在操作的同时就立即完成了。如果你想要一个交互的测试，请尝试-r参数。<br />
-n, –num #[KM]<br />
$IPERF_NUM<br />
传送的缓冲器数量。通常情况，Iperf按照10秒钟发送数据。-n参数跨越此限制，按照指定次数发送指定长度的数据，而不论该操作耗费多少时间。参考-l与-t选项。<br />
-r, –tradeoff<br />
$IPERF_TRADEOFF<br />
往复测试模式。当客户端到服务器端的测试结束时，服务器端通过-l选项指定的端口（或默认为客户端连接到服务器端的端口），反向连接至客户端。当客户端连接终止时，反向连接随即开始。如果需要同时进行双向测试，请尝试-d参数。<br />
-t, –time #<br />
$IPERF_TIME<br />
设置传输的总时间。Iperf在指定的时间内，重复的发送指定长度的数据包。默认是10秒钟。参考-l与-n选项。<br />
-L, –listenport #<br />
$IPERF_LISTENPORT<br />
指定服务端反向连接到客户端时使用的端口。默认使用客户端连接至服务端的端口。<br />
-P, –parallel #<br />
$IPERF_PARALLEL<br />
线程数。指定客户端与服务端之间使用的线程数。默认是1线程。需要客户端与服务器端同时使用此参数。<br />
-S, –tos #<br />
$IPERF_TOS<br />
出栈数据包的服务类型。许多路由器忽略TOS字段。你可以指定这个值，使用以“0x”开始的16进制数，或以“0”开始的8进制数或10进制数。<br />
例如，16进制’0×10′ = 8进制’020′ = 十进制’16′。TOS值1349就是：<br />
IPTOS_LOWDELAY     minimize delay        0×10    IPTOS_THROUGHPUT   maximize throughput   0×08    IPTOS_RELIABILITY  maximize reliability  0×04    IPTOS_LOWCOST      minimize cost         0×02<br />
-T, –ttl #<br />
$IPERF_TTL<br />
出栈多播数据包的TTL值。这本质上就是数据通过路由器的跳数。默认是1，链接本地。<br />
-F (from v1.2 or higher)</p>
<p>使用特定的数据流测量带宽，例如指定的文件。<br />
$ iperf -c  -F<br />
-I (from v1.2 or higher)</p>
<p>与-F一样，由标准输入输出文件输入数据。<br />
杂项<br />
-h, –help</p>
<p>显示命令行参考并退出 。<br />
-v, –version</p>
<p>显示版本信息和编译信息并退出。<br />
举例：<br />
1）TCP测试<br />
服务器执行：./iperf -s -i 1 -w 1M<br />
客户端执行：./iperf -c host -i 1 -w 1M<br />
其中-w表示TCP window size，host需替换成服务器地址。<br />
2）UDP测试<br />
服务器执行：./iperf -u -s<br />
客户端执行：./iperf -u -c 10.255.255.251 -b 900M  -i 1  -w 1M  -t 60<br />
其中-b表示使用多少带宽，1G的线路你可以使用900M进行测试。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.aaronw.cn/static/287.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apache2 mod组件中文注解</title>
		<link>http://www.aaronw.cn/static/278.html</link>
		<comments>http://www.aaronw.cn/static/278.html#comments</comments>
		<pubDate>Thu, 23 Apr 2009 03:06:33 +0000</pubDate>
		<dc:creator>Aaron.wang</dc:creator>
				<category><![CDATA[UNIX]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[mod]]></category>
		<category><![CDATA[WEB]]></category>

		<guid isPermaLink="false">http://www.aaronw.cn/?p=278</guid>
		<description><![CDATA[##如果需要提供基于文本文件的认证,加载此模块，否则注释掉
#LoadModule authn_file_module modules/mod_authn_file.so
##如果需要提供基于DBM文件的认证,加载此模块,否则注释掉
#LoadModule authn_dbm_module modules/mod_authn_dbm.so
##如果需要提供匿名用户认证,加载此模块,否则注释掉
#LoadModule authn_anon_module modules/mod_authn_anon.so
##如果需要提供基于SQL数据库的认证,加载此模块,否则注释掉
#LoadModule authn_dbd_module modules/mod_authn_dbd.so
##如果需要在未正确配置认证模块的情况下简单拒绝一切认证信息,加载此模块,否则注释掉
#LoadModule authn_default_module modules/mod_authn_default.so

##此模块提供基于主机名、IP地址、请求特征的访问控制,Allow、Deny指令需要,推荐加载。
#LoadModule authz_host_module modules/mod_authz_host.so
##如果需要使用纯文本文件为组提供授权支持,加载此模块,否则注释掉
#LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
##如果需要提供基于每个用户的授权支持,加载此模块,否则注释掉
#LoadModule authz_user_module modules/mod_authz_user.so
##如果需要使用DBM文件为组提供授权支持,加载此模块,否则注释掉
#LoadModule authz_dbm_module modules/mod_authz_dbm.so
##如果需要基于文件的所有者进行授权,加载此模块,否则注释掉
#LoadModule authz_owner_module modules/mod_authz_owner.so
##如果需要在未正确配置授权支持模块的情况下简单拒绝一切授权请求,加载此模块,否则注释掉
#LoadModule authz_default_module modules/mod_authz_default.so
##如果需要提供基本的HTTP认证,加载此模块,否则注释掉,此模块至少需要同时加载一个认证支持模块和一个授权支持模块
#LoadModule auth_basic_module modules/mod_auth_basic.so
##如果需要提供HTTP MD5摘要认证,加载此模块,否则注释掉,此模块至少需要同时加载一个认证支持模块和一个授权支持模块
#LoadModule auth_digest_module modules/mod_auth_digest.so
##此模块提供文件描述符缓存支持,从而提高Apache性能,推荐加载,但请小心使用
#LoadModule file_cache_module modules/mod_file_cache.so
##此模块提供基于URI键的内容动态缓存(内存或磁盘),从而提高Apache性能,必须与mod_disk_cache/mod_mem_cache同时使用,推荐加载
#LoadModule cache_module modules/mod_cache.so
##此模块为mod_cache提供基于磁盘的缓存管理,推荐加载
#LoadModule disk_cache_module modules/mod_disk_cache.so
##此模块为mod_cache提供基于内存的缓存管理,推荐加载
#LoadModule mem_cache_module modules/mod_mem_cache.so
##如果需要管理SQL数据库连接，为需要数据库功能的模块提供支持,加载此模块,否则注释掉(推荐)
#LoadModule dbd_module modules/mod_dbd.so
##此模块将所有I/O操作转储到错误日志中,会导致在日志中写入及其海量的数据,只建议在发现问题并进行调试的时候使用
#LoadModule dumpio_module modules/mod_dumpio.so
##如果需要使用外部程序作为过滤器,加载此模块(不推荐),否则注释掉
#LoadModule ext_filter_module modules/mod_ext_filter.so
##如果需要实现服务端包含文档(SSI)处理,加载此模块(不推荐),否则注释掉
#LoadModule include_module modules/mod_include.so
##如果需要根据上下文实际情况对输出过滤器进行动态配置,加载此模块,否则注释掉
#LoadModule filter_module modules/mod_filter.so
##如果需要服务器在将输出内容发送到客户端以前进行压缩以节约带宽,加载此模块(推荐),否则注释掉
#LoadModule deflate_module modules/mod_deflate.so
##如果需要记录日志和定制日志文件格式,加载此模块(推荐),否则注释掉
#LoadModule log_config_module modules/mod_log_config.so
##如果需要对每个请求的输入/输出字节数以及HTTP头进行日志记录,加载此模块,否则注释掉
#LoadModule logio_module modules/mod_logio.so
##如果允许Apache修改或清除传送到CGI脚本和SSI页面的环境变量,加载此模块,否则注释掉
#LoadModule env_module modules/mod_env.so
##如果允许通过配置文件控制HTTP的&#8221;Expires:&#8221;和&#8221;Cache-Control:&#8221;头内容,加载此模块(推荐),否则注释掉
#LoadModule expires_module [...]]]></description>
			<content:encoded><![CDATA[<p>##如果需要提供基于文本文件的认证,加载此模块，否则注释掉<br />
#LoadModule authn_file_module modules/mod_authn_file.so</p>
<p>##如果需要提供基于DBM文件的认证,加载此模块,否则注释掉<br />
#LoadModule authn_dbm_module modules/mod_authn_dbm.so</p>
<p>##如果需要提供匿名用户认证,加载此模块,否则注释掉<br />
#LoadModule authn_anon_module modules/mod_authn_anon.so</p>
<p>##如果需要提供基于SQL数据库的认证,加载此模块,否则注释掉<br />
#LoadModule authn_dbd_module modules/mod_authn_dbd.so</p>
<p>##如果需要在未正确配置认证模块的情况下简单拒绝一切认证信息,加载此模块,否则注释掉<br />
#LoadModule authn_default_module modules/mod_authn_default.so</p>
<p><span id="more-278"></span></p>
<p>##此模块提供基于主机名、IP地址、请求特征的访问控制,Allow、Deny指令需要,推荐加载。<br />
#LoadModule authz_host_module modules/mod_authz_host.so</p>
<p>##如果需要使用纯文本文件为组提供授权支持,加载此模块,否则注释掉<br />
#LoadModule authz_groupfile_module modules/mod_authz_groupfile.so</p>
<p>##如果需要提供基于每个用户的授权支持,加载此模块,否则注释掉<br />
#LoadModule authz_user_module modules/mod_authz_user.so</p>
<p>##如果需要使用DBM文件为组提供授权支持,加载此模块,否则注释掉<br />
#LoadModule authz_dbm_module modules/mod_authz_dbm.so</p>
<p>##如果需要基于文件的所有者进行授权,加载此模块,否则注释掉<br />
#LoadModule authz_owner_module modules/mod_authz_owner.so</p>
<p>##如果需要在未正确配置授权支持模块的情况下简单拒绝一切授权请求,加载此模块,否则注释掉<br />
#LoadModule authz_default_module modules/mod_authz_default.so</p>
<p>##如果需要提供基本的HTTP认证,加载此模块,否则注释掉,此模块至少需要同时加载一个认证支持模块和一个授权支持模块<br />
#LoadModule auth_basic_module modules/mod_auth_basic.so</p>
<p>##如果需要提供HTTP MD5摘要认证,加载此模块,否则注释掉,此模块至少需要同时加载一个认证支持模块和一个授权支持模块<br />
#LoadModule auth_digest_module modules/mod_auth_digest.so</p>
<p>##此模块提供文件描述符缓存支持,从而提高Apache性能,推荐加载,但请小心使用<br />
#LoadModule file_cache_module modules/mod_file_cache.so</p>
<p>##此模块提供基于URI键的内容动态缓存(内存或磁盘),从而提高Apache性能,必须与mod_disk_cache/mod_mem_cache同时使用,推荐加载<br />
#LoadModule cache_module modules/mod_cache.so</p>
<p>##此模块为mod_cache提供基于磁盘的缓存管理,推荐加载<br />
#LoadModule disk_cache_module modules/mod_disk_cache.so</p>
<p>##此模块为mod_cache提供基于内存的缓存管理,推荐加载<br />
#LoadModule mem_cache_module modules/mod_mem_cache.so</p>
<p>##如果需要管理SQL数据库连接，为需要数据库功能的模块提供支持,加载此模块,否则注释掉(推荐)<br />
#LoadModule dbd_module modules/mod_dbd.so</p>
<p>##此模块将所有I/O操作转储到错误日志中,会导致在日志中写入及其海量的数据,只建议在发现问题并进行调试的时候使用<br />
#LoadModule dumpio_module modules/mod_dumpio.so</p>
<p>##如果需要使用外部程序作为过滤器,加载此模块(不推荐),否则注释掉<br />
#LoadModule ext_filter_module modules/mod_ext_filter.so</p>
<p>##如果需要实现服务端包含文档(SSI)处理,加载此模块(不推荐),否则注释掉<br />
#LoadModule include_module modules/mod_include.so</p>
<p>##如果需要根据上下文实际情况对输出过滤器进行动态配置,加载此模块,否则注释掉<br />
#LoadModule filter_module modules/mod_filter.so</p>
<p>##如果需要服务器在将输出内容发送到客户端以前进行压缩以节约带宽,加载此模块(推荐),否则注释掉<br />
#LoadModule deflate_module modules/mod_deflate.so</p>
<p>##如果需要记录日志和定制日志文件格式,加载此模块(推荐),否则注释掉<br />
#LoadModule log_config_module modules/mod_log_config.so</p>
<p>##如果需要对每个请求的输入/输出字节数以及HTTP头进行日志记录,加载此模块,否则注释掉<br />
#LoadModule logio_module modules/mod_logio.so</p>
<p>##如果允许Apache修改或清除传送到CGI脚本和SSI页面的环境变量,加载此模块,否则注释掉<br />
#LoadModule env_module modules/mod_env.so</p>
<p>##如果允许通过配置文件控制HTTP的&#8221;Expires:&#8221;和&#8221;Cache-Control:&#8221;头内容,加载此模块(推荐),否则注释掉<br />
#LoadModule expires_module modules/mod_expires.so</p>
<p>##如果允许通过配置文件控制任意的HTTP请求和应答头信息,加载此模块,否则注释掉<br />
#LoadModule headers_module modules/mod_headers.so</p>
<p>##如果需要实现RFC1413规定的ident查找,加载此模块(不推荐),否则注释掉<br />
#LoadModule ident_module modules/mod_ident.so</p>
<p>##如果需要根据客户端请求头字段设置环境变量,加载此模块,否则注释掉<br />
#LoadModule setenvif_module modules/mod_setenvif.so</p>
<p>##此模块是mod_proxy的扩展,提供Apache JServ Protocol支持,只在必要时加载<br />
#LoadModule proxy_ajp_module modules/mod_proxy_ajp.so</p>
<p>##此模块是mod_proxy的扩展,提供负载均衡支持,只在必要时加载<br />
#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so</p>
<p>##如果需要根据文件扩展名决定应答的行为(处理器/过滤器)和内容(MIME类型/语言/字符集/编码),加载此模块,否则注释掉<br />
#LoadModule mime_module modules/mod_mime.so</p>
<p>##如果允许Apache提供DAV协议支持,加载此模块,否则注释掉<br />
#LoadModule dav_module modules/mod_dav.so</p>
<p>##此模块生成描述服务器状态的Web页面,只建议在追踪服务器性能和问题时加载<br />
#LoadModule status_module modules/mod_status.so</p>
<p>##如果需要自动对目录中的内容生成列表(类似于&#8221;ls&#8221;或&#8221;dir&#8221;命令),加载此模块(会带来安全问题,不推荐),否则注释掉<br />
#LoadModule autoindex_module modules/mod_autoindex.so</p>
<p>##如果需要服务器发送自己包含HTTP头内容的文件,加载此模块,否则注释掉<br />
#LoadModule asis_module modules/mod_asis.so</p>
<p>##如果需要生成Apache配置情况的Web页面,加载此模块(会带来安全问题,不推荐),否则注释掉<br />
#LoadModule info_module modules/mod_info.so</p>
<p>##如果需要在非线程型MPM(prefork)上提供对CGI脚本执行的支持,加载此模块,否则注释掉<br />
#LoadModule cgi_module modules/mod_cgi.so</p>
<p>##此模块在线程型MPM(worker)上用一个外部CGI守护进程执行CGI脚本,如果正在多线程模式下使用CGI程序,推荐替换mod_cgi加载,否则注释掉<br />
#LoadModule cgid_module modules/mod_cgid.so</p>
<p>##此模块为mod_dav访问服务器上的文件系统提供支持,如果加载mod_dav,则也应加载此模块,否则注释掉<br />
#LoadModule dav_fs_module modules/mod_dav_fs.so</p>
<p>##如果需要提供大批量虚拟主机的动态配置支持,加载此模块,否则注释掉<br />
#LoadModule vhost_alias_module modules/mod_vhost_alias.so</p>
<p>##如果需要提供内容协商支持(从几个有效文档中选择一个最匹配客户端要求的文档),加载此模块(推荐),否则注释掉<br />
#LoadModule negotiation_module modules/mod_negotiation.so</p>
<p>##如果需要指定目录索引文件以及为目录提供&#8221;尾斜杠&#8221;重定向,加载此模块(推荐),否则注释掉<br />
#LoadModule dir_module modules/mod_dir.so</p>
<p>##如果需要处理服务器端图像映射,加载此模块,否则注释掉<br />
#LoadModule imagemap_module modules/mod_imagemap.so</p>
<p>##如果需要针对特定的媒体类型或请求方法执行CGI脚本,加载此模块,否则注释掉<br />
#LoadModule actions_module modules/mod_actions.so</p>
<p>##如果希望服务器自动纠正URL中的拼写错误,加载此模块(推荐),否则注释掉<br />
#LoadModule speling_module modules/mod_speling.so</p>
<p>##如果允许在URL中通过&#8221;/~username&#8221;形式从用户自己的主目录中提供页面,加载此模块,否则注释掉<br />
#LoadModule userdir_module modules/mod_userdir.so</p>
<p>##此模块提供从文件系统的不同部分到文档树的映射和URL重定向,推荐加载<br />
#LoadModule alias_module modules/mod_alias.so</p>
<p>##如果需要基于一定规则实时重写URL请求,加载此模块(推荐),否则注释掉<br />
#LoadModule rewrite_module modules/mod_rewrite.so</p>
]]></content:encoded>
			<wfw:commentRss>http://www.aaronw.cn/static/278.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iptables的状态检测机制</title>
		<link>http://www.aaronw.cn/static/269.html</link>
		<comments>http://www.aaronw.cn/static/269.html#comments</comments>
		<pubDate>Thu, 16 Apr 2009 16:15:15 +0000</pubDate>
		<dc:creator>Aaron.wang</dc:creator>
				<category><![CDATA[UNIX]]></category>
		<category><![CDATA[iptables]]></category>
		<category><![CDATA[安全]]></category>

		<guid isPermaLink="false">http://www.aaronw.cn/?p=269</guid>
		<description><![CDATA[1.什么是状态检测
每个网络连接包括以下信息：源地址、目的地址、源端口和目的端口，叫作套接字对(socket pairs)；协议类型、连接状态(TCP协议)和超时时间等。防火墙把这些信息叫作状态(stateful)，能够检测每个连接状态的防火墙叫作状态包 过滤防火墙。它除了能够完成简单包过滤防火墙的包过滤工作外，还在自己的内存中维护一个跟踪连接状态的表，比简单包过滤防火墙具有更大的安全性。
iptables中的状态检测功能是由state选项来实现的。对这个选项，在iptables的手册页中有以下描述：
state
这个模块能够跟踪分组的连接状态(即状态检测)。
–state state

这里，state是一个用逗号分割的列表，表示要匹配的连接状态。有效的状态选项包括：INVAILD，表示分组对应的连接是未知的；ESTABLISHED，表示分组对应的连接已经进行了双向的分组传输，也就是说连接已经建立；NEW，表示这个分组需要发起一个连接，或者说，分组对应的连接在两个方向上都没有进行过分组传输；RELATED，表示分组要发起一个新的连接，但是这个连接和一个现有的连接有关，例如：FTP的数据传输连接和控制连接之间就是RELATED关系。
对于本地产生分组，在PREROUTING或者OUTPUT链中都可以对连接的状态进行跟踪。在进行状态检测之前，需要重组分组的分片。这就是为什么在iptables中不再使用ipchains的ip_always_defrag开关。
UDP和TCP连接的状态表由/proc/net/ip_conntrack进行维护。稍后我们再介绍它的内容。
状态表能够保存的最大连接数保存在/proc/sys/net/ipv4/ip_conntrack_max中。它取决于硬件的物理内存。
2.iptables的状态检测是如何工作的？
2.1.iptables概述
在讨论iptables状态检测之前，我们先大体看一下整个netfilter框架。如果要在两个网络接口之间转发一个分组，这个分组将以以下的顺序接收规则链的检查：

PREROUTING链如果必要对这个分组进行目的网络地址转换(DNAT)和mangle处理。同时，iptables的状态检测机制将重组分组，并且以以下某种方式跟踪其状态：

分组是否匹配状态表中的一个已经实现(ESTABLISHED)的连接。
它是否是和状态表中某个UDP/TCP连接相关(RELATED)的一个ICMP分组。
这个分组是否要发起一个新(NEW)的连接。
如果分组和任何连接无关，就被认为是无效(INVALID)的。


FORWARD链把分组的状态和过滤表中的规则进行匹配，如果分组与所有的规则都无法匹配，就使用默认的策略进行处理。
POSTROUTING链如果有必要，就对分组进行源网络地址转换(SNAT)，

注意：所有的分组都必须和过滤表的规则进行比较。如果你修改了规则，要拒绝所有的网络流量，那么即使分组的状态匹配状态表中的一个ESTABLISHED条目，也将被拒绝。
下面，我们对UDP、TCP和ICMP三个协议分别进行分析。
2.2.UDP连接
UDP(用户数据包协议)是一种无状态协议，以为这个协议没有序列号。不过，这并不意味着我们不能跟踪UDP连接。虽然没有序列号，但是我们还可以使用其它的一些信息跟踪UDP连接的状态。下面是状态表中关于UDP连接的条目：
 udp 17 19 src=192.168.1.2 dst=192.168.1.50 sport=1032 dport=53 [UNREPLIED] src=192.168.1.50 dst=192.168.1.2 sport=53 dport=1032 use=1
这个状态表项只有在iptables过滤规则允许建立新的连接时，才能建立。以下的规则可以产生这类状态表项，这两条规则只允许向外的UDP连接：
 iptables -A INPUT -p udp -m state –state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -P udp -m state –state NEW,ESTABLISHED -j ACCEPT
上面的状态表项包含如下信息：

连接的协议是UDP(IP协议号17)。
这个状态表项还有19秒中就超时。
发起连接方向上的源、目的地址和源、目的端口。
应答方向上的源、目的地址和源、目的端口。这个连接使用UNREPLIED标记，表示还没有收到应答。

UDP连接的超时时间在/usr/src/linux/net/ipv4/netfilter/ip_conntrack_proto_udp.c文件中设置，如果改变了这个值，需要重新编译Linux内核源代码才能生效。下面是UDP连接超时时间的相关的源代码：
 #define UDP_TIMEOUT (30*HZ)
#define UDP_STREAM_TIMEOUT (180*HZ)
一个UDP请求等待应答的时间是30*HZ(这个值一般是30秒)。在上面的例子中，等待的时间已经消耗了11秒，还剩余19秒，如果在这段时间之 内 没有收到应答分组，这个表项就会被删除。一旦收到了应答，这个值就被重置为30，UNREPLIED标志也被删除。这个表项编程如下形式：
 udp 17 28 src=192.168.1.2 dst=192.168.1.50 sport=1032 dport=53 src=192.168.1.50   [...]]]></description>
			<content:encoded><![CDATA[<p><strong>1.什么是状态检测</strong></p>
<p>每个网络连接包括以下信息：源地址、目的地址、源端口和目的端口，叫作套接字对(socket pairs)；协议类型、连接状态(TCP协议)和超时时间等。防火墙把这些信息叫作状态(stateful)，能够检测每个连接状态的防火墙叫作状态包 过滤防火墙。它除了能够完成简单包过滤防火墙的包过滤工作外，还在自己的内存中维护一个跟踪连接状态的表，比简单包过滤防火墙具有更大的安全性。</p>
<p>iptables中的状态检测功能是由<strong>state</strong>选项来实现的。对这个选项，在iptables的手册页中有以下描述：</p>
<p>state</p>
<p>这个模块能够跟踪分组的连接状态(即状态检测)。</p>
<p>–state state<br />
<span id="more-269"></span><br />
这里，state是一个用逗号分割的列表，表示要匹配的连接状态。有效的状态选项包括：<strong>INVAILD</strong>，表示分组对应的连接是未知的；<strong>ESTABLISHED</strong>，表示分组对应的连接已经进行了双向的分组传输，也就是说连接已经建立；<strong>NEW</strong>，表示这个分组需要发起一个连接，或者说，分组对应的连接在两个方向上都没有进行过分组传输；<strong>RELATED</strong>，表示分组要发起一个新的连接，但是这个连接和一个现有的连接有关，例如：FTP的数据传输连接和控制连接之间就是RELATED关系。</p>
<p>对于本地产生分组，在PREROUTING或者OUTPUT链中都可以对连接的状态进行跟踪。在进行状态检测之前，需要重组分组的分片。这就是为什么在iptables中不再使用ipchains的ip_always_defrag开关。</p>
<p>UDP和TCP连接的状态表由/proc/net/ip_conntrack进行维护。稍后我们再介绍它的内容。</p>
<p>状态表能够保存的最大连接数保存在/proc/sys/net/ipv4/ip_conntrack_max中。它取决于硬件的物理内存。</p>
<p><strong>2.iptables的状态检测是如何工作的？</strong></p>
<p><strong>2.1.iptables概述</strong></p>
<p>在讨论iptables状态检测之前，我们先大体看一下整个netfilter框架。如果要在两个网络接口之间转发一个分组，这个分组将以以下的顺序接收规则链的检查：</p>
<ul>
<li><strong>PREROUTING链</strong>如果必要对这个分组进行目的网络地址转换(DNAT)和mangle处理。同时，iptables的状态检测机制将重组分组，并且以以下某种方式跟踪其状态：
<ul>
<li>分组是否匹配状态表中的一个已经实现(ESTABLISHED)的连接。</li>
<li>它是否是和状态表中某个UDP/TCP连接相关(RELATED)的一个ICMP分组。</li>
<li>这个分组是否要发起一个新(NEW)的连接。</li>
<li>如果分组和任何连接无关，就被认为是无效(INVALID)的。</li>
</ul>
</li>
<li><strong>FORWARD链</strong>把分组的状态和过滤表中的规则进行匹配，如果分组与所有的规则都无法匹配，就使用默认的策略进行处理。</li>
<li><strong>POSTROUTING链</strong>如果有必要，就对分组进行源网络地址转换(SNAT)，</li>
</ul>
<p><strong>注意</strong>：所有的分组都必须和过滤表的规则进行比较。如果你修改了规则，要拒绝所有的网络流量，那么即使分组的状态匹配状态表中的一个ESTABLISHED条目，也将被拒绝。</p>
<p>下面，我们对UDP、TCP和ICMP三个协议分别进行分析。</p>
<p><strong>2.2.UDP连接</strong></p>
<p>UDP(用户数据包协议)是一种无状态协议，以为这个协议没有序列号。不过，这并不意味着我们不能跟踪UDP连接。虽然没有序列号，但是我们还可以使用其它的一些信息跟踪UDP连接的状态。下面是状态表中关于UDP连接的条目：</p>
<ul> udp 17 19 src=192.168.1.2 dst=192.168.1.50 sport=1032 dport=53 [UNREPLIED] src=192.168.1.50 dst=192.168.1.2 sport=53 dport=1032 use=1</ul>
<p>这个状态表项只有在iptables过滤规则允许建立新的连接时，才能建立。以下的规则可以产生这类状态表项，这两条规则只允许向外的UDP连接：</p>
<ul> iptables -A INPUT -p udp -m state –state ESTABLISHED -j ACCEPT<br />
iptables -A OUTPUT -P udp -m state –state NEW,ESTABLISHED -j ACCEPT</ul>
<p>上面的状态表项包含如下信息：</p>
<ul>
<li>连接的协议是UDP(IP协议号17)。</li>
<li>这个状态表项还有19秒中就超时。</li>
<li>发起连接方向上的源、目的地址和源、目的端口。</li>
<li>应答方向上的源、目的地址和源、目的端口。这个连接使用UNREPLIED标记，表示还没有收到应答。</li>
</ul>
<p>UDP连接的超时时间在/usr/src/linux/net/ipv4/netfilter/ip_conntrack_proto_udp.c文件中设置，如果改变了这个值，需要重新编译Linux内核源代码才能生效。下面是UDP连接超时时间的相关的源代码：</p>
<ul> #define UDP_TIMEOUT (30*HZ)<br />
#define UDP_STREAM_TIMEOUT (180*HZ)</ul>
<p>一个UDP请求等待应答的时间是30*HZ(这个值一般是30秒)。在上面的例子中，等待的时间已经消耗了11秒，还剩余19秒，如果在这段时间之 内 没有收到应答分组，这个表项就会被删除。一旦收到了应答，这个值就被重置为30，UNREPLIED标志也被删除。这个表项编程如下形式：</p>
<ul> udp 17 28 src=192.168.1.2 dst=192.168.1.50 sport=1032 dport=53 src=192.168.1.50    dst=192.168.1.2 sport=53 dport=1032 use=1</ul>
<p>如果在这一对源、目的地址和源、目的端口上，发生了多个请求和应答，这个表项就作为一个数据流表项，它的超时时间是180秒。这种情况下，这个表项就变成如下形式：</p>
<ul> udp 17 177 src=192.168.1.2 dst=192.168.1.50 sport=1032 dport=53 src=192.168.1.50 dst=192.168.1.2 sport=53 dport=1032 [ASSURED] use=1</ul>
<p>这时我们看到这个表项使用ASSURED标志。一旦连接表项使用ASSURED标志，那么即使在网络负沉重的情况下，也不会被丢弃。如果状态表已经饱和，当新的连接到达时，使用UNREPLIED标志的表项会受被丢弃。</p>
<p><strong>2.3.TCP连接</strong></p>
<p>一个TCP连接是通过三次握手的方式完成的。首先，客户程序发出一个同步请求(发出一个SYN分组)；接着，服务器端回应一个SYN|ACK分组；最后返回一个ACK分组，连接完成。整个过程如下所示：</p>
<ul> Client ServerSYN —&gt;<br />
&lt;— SYN+ACK<br />
ACK —&gt;<br />
&lt;— ACK<br />
ACK —&gt;<br />
………<br />
………</ul>
<p>SYN和ACK是由TCP分组头的标志决定的。在每个TCP分组头还有32位的序列号和应答号用于跟踪会话。</p>
<p>为了跟踪一个TCP连接的状态，你需要使用下面这样的规则：</p>
<ul> iptables -A INPUT -p tcp -m state –state ESTABLISHED -j ACCEPT<br />
iptables -A OUTPUT -p tcp -m state –state NEW,ESTABLISHED -j ACCEPT</ul>
<p><strong>2.3.1.连接建立过程中状态表的变化</strong></p>
<p>下面，我们详细讨论在连接建立的每个阶段中，状态表发生的变化：</p>
<ul>
<li>一旦一个初始SYN分组进入OUTPUT链，并且输出规则允许这个分组建立一个新的连接，状态表的相关表项将如下所示：
<ul> cp 6 119 SYN_SENT src=140.208.5.62 dst=207.46.230.218 sport=1311 dport=80 [UNREPLIED] src=207.46.230.218 dst=140.208.5.62 sport=80 dport=1311 use=1</ul>
<p>其中，TCP连接状态是SYN_SENT，连接被标记为UNREPLIED。</li>
<li>现在，我们等待SYN+ACK分组的响应。一旦得到响应，这个TCP连接表项就变为：
<ul> tcp 6 57 SYN_RECV src=140.208.5.62 dst=207.46.230.218 sport=1311 dport=80 src=207.46.230.218 dst=140.208.5.62 sport=80 dport=1311 use=1</ul>
<p>连接的状态变为SYN_RECV，UNREPLIED标志被清除。</li>
<li>现在我们需要等待完成握手的ACK分组。ACK分组到达后，我们首先对其序列号进行一些检查，如果正确，就把这个连接的状态变为ESTABLISHED，并且使用ASSURED标记这个连接。这时，这个连接的状态如下所示：
<ul> cp 6 431995 ESTABLISHED src=140.208.5.62 dst=207.46.230.218 sport=1311 dport=80 src=207.46.230.218 dst=140.208.5.62 sport=80 dport=1311 [ASSURED] use=1</ul>
</li>
</ul>
<p><strong>2.3.2.透视状态表</strong></p>
<p>上面，我们涉及了很多CP连接的状态。现在，我们分析一下TCP连接的状态检测。实际上，状态表只知道NEW、ESTABLISHED、RELATED和INVALID。</p>
<p>要注意：状态检测的状态不等于TCP状态。当一个SYN分组的响应SYN+ACK分组到达，Netfilter的状态检测模块就会认为连接已经建立。但是，这时还没有完成三次握手，因此TCP连接还没有建立。</p>
<p>另外，包过滤规则不能删除状态表中的表项，只有连接超时，对应的状态表项才会被删除。ACK分组能够建立一个NEW状态表项。向防火墙之后一台并不 存 在主机发送ACK分组，并不会返回RST分组，可以证明这个结论。因此，你需要使用以下的规则明确新的TCP连接应该是SYN分组建立的：</p>
<ul> iptables -A INPUT -p tcp !–syn -m state –state NEW -j DROP</ul>
<p>这样可以阻止空会话的继续进行。</p>
<p><strong>2.3.3.超时</strong></p>
<p>所谓状态表项的超时值是指每个表项存在的最大时间，这些超时值的大小在/usr/src/linux/net/ipv4/netfilter/ip_conntrack_proto_tcp.c文件中设置。以下是相关的代码：</p>
<ul> static unsigned long tcp_timeouts[]<br />
= { 30 MINS, /* TCP_CONNTRACK_NONE, */<br />
5 DAYS, /* TCP_CONNTRACK_ESTABLISHED, */<br />
2 MINS, /* TCP_CONNTRACK_SYN_SENT, */<br />
60 SECS, /* TCP_CONNTRACK_SYN_RECV, */<br />
2 MINS, /* TCP_CONNTRACK_FIN_WAIT, */<br />
2 MINS, /* TCP_CONNTRACK_TIME_WAIT, */<br />
10 SECS, /* TCP_CONNTRACK_CLOSE, */<br />
60 SECS, /* TCP_CONNTRACK_CLOSE_WAIT, */<br />
30 SECS, /* TCP_CONNTRACK_LAST_ACK, */<br />
2 MINS, /* TCP_CONNTRACK_LISTEN, */<br />
};</ul>
<p><strong>2.3.4.连接的中断</strong></p>
<p>关闭一个TCP连接可以有两种方式。第一种类似于建立TCP连接的三次握手。一旦一个TCP会话完成，要终止会话的一方首先发出一个FIN为1的分组。接收方TCP确认这个FIN分组，并同志自己这边的应用程序不要在接收数据了。这个过程可以如下所示：</p>
<ul> Client Server<br />
………<br />
………<br />
FIN+ACK —&gt;<br />
&lt;—    ACK<br />
&lt;—    FIN+ACK<br />
ACK —&gt;</ul>
<p>在这个过程之中或者之后，状态表的连接状态变为TIME_WAIT。在默认情况下，2分钟之后从状态表删除。</p>
<p>除此之外，还有其它关闭中断的方式。TCP会话的任何一方发出一个RST标志为1的分组，可以快速断开一个TCP连接。而且，RST分组不需要应 答。 在这种情况下，状态表项的状态变为CLOSE，10秒之后被删除。和http连接经常通过这种方式中断，如果一个连接很长时间没有请求了，服务器端就会发 出一个RST分组中断连接。</p>
<p><strong>2.4.ICMP</strong></p>
<p>在iptables看来，只有四种ICMP分组，这些分组类型可以被归为NEW、ESTABLISHED两类：</p>
<ul>
<li>ECHO请求(ping,8)和ECHO应答(pong,0)。</li>
<li>时间戳请求(13)和应答(14)。</li>
<li>信息请求(15)和应答(16)。</li>
<li>地址掩码请求(17)和应答(18)。</li>
</ul>
<p>这些ICMP分组类型中，请求分组属于NEW，应答分组属于ESTABLISHED。而其它类型的ICMP分组不基于请求/应答方式，一律被归入RELATED。</p>
<p>我们先看一个简单的例子：</p>
<ul> iptables -A OUTPUT -p icmp -m state –state NEW,ESTABLISHED, RELATED -j ACCEPT<br />
iptables -A INPUT -p icmp -m state –state ESTABLISHED,RELATED -j ACCEPT</ul>
<p>这链条规则进行如下的过滤：</p>
<ul>
<li>一个ICMP echo请求是一个NEW连接。因此，允许ICMP echo请求通过OUTPUT链。</li>
<li>当对应的应答返回，此时连接的状态是ESTABLISED，因此允许通过INPUT链。而INPUT链没有NEW状态，因此不允许echo请求通过INPUT链。也就是说，这两条规则允许内部主机ping外部主机，而不允许外部主机ping内部主机。</li>
<li>一个重定向ICMP(5)分组不是基于请求/应答方式的，因此属于RELATED。INPUT和OUTPUT链都允许RELATED状态的连接，因此重定向(5)分组可以通过INPUT和OUTPUT链。</li>
</ul>
<p><strong>3.FTP协议的状态检测</strong></p>
<p>上面，我们比较详细地介绍了iptables的态检测机制。现在，我们以FTP状态检测为例介绍如何使用iptables进行连接状态检测。</p>
<p>首先，你需要加载ip_conntrack_ftp模块。使用如下规则就可以允许建立FTP控制连接(这里没有考虑IMCP问题):</p>
<ul> iptables -A INPUT -p tcp –sport 21 -m state –state ESTABLESED -j ACCEPT<br />
iptables -A OUTPUT -p tcp –dport 21 -m state –state NEW,ESTABLISED -j ACCEPT</ul>
<p>除了控制连接之外，FTP协议还需要一个数据通道，不过，数据连接可以通过主动和被动两种模式建立，我们需要分别讨论。</p>
<p><strong>3.1.主动模式</strong></p>
<p>在主动模式下，客户程序在控制通道上，使用PORT命令告诉FTP服务器自己这边的数据传输端口，然后FTP从20端口向这个端口发起一个连接。连 接 建立后，服务器端和客户端就可以使用这个连接传输数据了，例如：传诵的文件、ls等命令的结果等。因此，在主动模式下FTP数据传输通道是反向建立的，它 从FTP服务器端向客户端发起。</p>
<p>在主动模式下，客户端使用的数据传输端口是不固定的，因此我们需要在规则中使用端口范围。由于客户端使用的端口都是大于1024的，这并不会降低系统的安全性。</p>
<p>在iptables中，有一个专门跟踪FTP状态的模块–ip_conntrack_ftp。这个模块能够识别出PORT命令，并从中提取端口号。 这样，FTP数据传输连接就被归入RELATED状态，它和向外的FTP控制连接相关，因此我们不需要在INPUT链中使用NEW状态。下面的规则可以实 现我们的意图：</p>
<ul> iptables -A INPUT -p tcp –sport 20 -m state –state ESTABLISED,RELATED -j ACCEPT<br />
iptables -A OUTPUT -p tcp –dport 20 -m state –state ESTABLISED -j ACCEPT</ul>
<p><strong>3.2.被动模式</strong></p>
<p>和主动模式相反，在被动模式下，指定连接端口的PORT命令是服务器端发出的。FTP服务器通过PORT命令告诉客户端自己使用的FTP数据传 输端口，然后等待客户端建立数据传输连接。在被动模式下，建立数据传输连接的方向和建立控制连接的方向是相同的。因此，被动模式具有比主动模式更好的安全 性。</p>
<p>由于ip_conntrack_ftp模块能够从PORT命令提取端口，因此我们在OUTPUT链中也不必使用NEW状态，下面的规则可以实现对被动模式下的FTP状态检测：</p>
<ul> iptables -A INPUT -p tcp –sport 1024: –dport 1024: -m state –state ESTABLISHED    -j ACCEPT<br />
iptables -A OUTPUT -p tcp –sport 1024: –dport 1024: -m state –state ESTABLISHED,RELATED    -j ACCEPT</ul>
<p>综合以上的分析，我们可以得到FTP连接的状态检测规则，对于主动模式的FTP，需要下面的iptables规则：</p>
<ul> iptables -A INPUT -p tcp –sport 21 -m state –state ESTABLESED -j ACCEPT<br />
iptables -A OUTPUT -p tcp –dport 21 -m state –state NEW,ESTABLISED -j ACCEPT<br />
iptables -A INPUT -p tcp –sport 20 -m state –state ESTABLISED,RELATED -j ACCEPT<br />
iptables -A OUTPUT -p tcp –dport 20 -m state –state ESTABLISED -j ACCEPT</ul>
<p>对于被动模式的FTP连接，需要使用如下iptables规则</p>
<ul> iptables -A INPUT -p tcp –sport 21 -m state –state ESTABLESED -j ACCEPT<br />
iptables -A OUTPUT -p tcp –dport 21 -m state –state NEW,ESTABLISED -j ACCEPT<br />
iptables -A INPUT -p tcp –sport 1024: –dport 1024: -m state –state ESTABLISHED    -j ACCEPT<br />
iptables -A OUTPUT -p tcp –sport 1024: –dport 1024: -m state –state ESTABLISHED,RELATED    -j ACCEPT</ul>
<p>本文中提到的状态检测，在iptables中实际叫作连接跟踪(Connection tracking)。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.aaronw.cn/static/269.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tcpdump 用法</title>
		<link>http://www.aaronw.cn/static/262.html</link>
		<comments>http://www.aaronw.cn/static/262.html#comments</comments>
		<pubDate>Thu, 16 Apr 2009 15:44:28 +0000</pubDate>
		<dc:creator>Aaron.wang</dc:creator>
				<category><![CDATA[UNIX]]></category>
		<category><![CDATA[etheteal]]></category>
		<category><![CDATA[tcpdump]]></category>
		<category><![CDATA[抓包]]></category>

		<guid isPermaLink="false">http://www.aaronw.cn/?p=262</guid>
		<description><![CDATA[第一种是关于类型的关键字，主要包括host，net，port, 例如 host 210.27.48.2，指明 210.27.48.2是一台主机，net 202.0.0.0 指明 202.0.0.0是一个网络地址，port 23 指明端口号是23。如果没有指定类型，缺省的类型是host.
第二种是确定传输方向的关键字，主要包括src , dst ,dst or src, dst and src ,这些关键字指明了传输的方向。举例说明，src 210.27.48.2 ,指明ip包中源地址是210.27.48.2 , dst net 202.0.0.0 指明目的网络地址是202.0.0.0 。如果没有指明方向关键字，则缺省是src or dst关键字。
第三种是协议的关键字，主要包括 fddi,ip,arp,rarp,tcp,udp等类型。Fddi指明是在FDDI(分布式光纤数据接口网络)上的特定 的网络协议，实际上它是&#8221;ether&#8221;的别名，fddi和ether具有类似的源地址和目的地址，所以可以将fddi协议包当作ether的包进行处理和 分析。其他的几个关键字就是指明了监听的包的协议内容。如果没有指定任何协议，则tcpdump将会监听所有协议的信息包。

除了这三种类型的 关键字之外，其他重要的关键字如下：gateway, broadcast,less,greater,还有三种逻辑运算，取非运算是 &#8216;not &#8216; &#8216;! &#8216;, 与运算是&#8217;and&#8217;,'&#38;&#38;&#8217;;或运算 是&#8217;or&#8217; ,&#8217;││&#8217;；这些关键字可以组合起来构成强大的组合条件来满足人们的需要，下面举几个例子来说明。
普通情况下，直接启动tcpdump将监视第一个网络界面上所有流过的数据包。
# tcpdump
tcpdump: listening on fxp0
11:58:47.873028 202.102.245.40.netbios-ns &#62; 202.102.245.127.netbios-ns: udp 50
11:58:47.974331 0:10:7b:8:3a:56 &#62; 1:80:c2:0:0:0 802.1d ui/C [...]]]></description>
			<content:encoded><![CDATA[<p>第一种是关于类型的关键字，主要包括host，net，port, 例如 host 210.27.48.2，指明 210.27.48.2是一台主机，net 202.0.0.0 指明 202.0.0.0是一个网络地址，port 23 指明端口号是23。如果没有指定类型，缺省的类型是host.</p>
<p>第二种是确定传输方向的关键字，主要包括src , dst ,dst or src, dst and src ,这些关键字指明了传输的方向。举例说明，src 210.27.48.2 ,指明ip包中源地址是210.27.48.2 , dst net 202.0.0.0 指明目的网络地址是202.0.0.0 。如果没有指明方向关键字，则缺省是src or dst关键字。</p>
<p>第三种是协议的关键字，主要包括 fddi,ip,arp,rarp,tcp,udp等类型。Fddi指明是在FDDI(分布式光纤数据接口网络)上的特定 的网络协议，实际上它是&#8221;ether&#8221;的别名，fddi和ether具有类似的源地址和目的地址，所以可以将fddi协议包当作ether的包进行处理和 分析。其他的几个关键字就是指明了监听的包的协议内容。如果没有指定任何协议，则tcpdump将会监听所有协议的信息包。</p>
<p><span id="more-262"></span><br />
除了这三种类型的 关键字之外，其他重要的关键字如下：gateway, broadcast,less,greater,还有三种逻辑运算，取非运算是 &#8216;not &#8216; &#8216;! &#8216;, 与运算是&#8217;and&#8217;,'&amp;&amp;&#8217;;或运算 是&#8217;or&#8217; ,&#8217;││&#8217;；这些关键字可以组合起来构成强大的组合条件来满足人们的需要，下面举几个例子来说明。<br />
普通情况下，直接启动tcpdump将监视第一个网络界面上所有流过的数据包。<br />
# tcpdump<br />
tcpdump: listening on fxp0<br />
11:58:47.873028 202.102.245.40.netbios-ns &gt; 202.102.245.127.netbios-ns: udp 50<br />
11:58:47.974331 0:10:7b:8:3a:56 &gt; 1:80:c2:0:0:0 802.1d ui/C len=43<br />
0000 0000 0080 0000 1007 cf08 0900 0000<br />
0e80 0000 902b 4695 0980 8701 0014 0002<br />
000f 0000 902b 4695 0008 00<br />
11:58:48.373134 0:0:e8:5b:6d:85 &gt; Broadcast sap e0 ui/C len=97<br />
ffff 0060 0004 ffff ffff ffff ffff ffff<br />
0452 ffff ffff 0000 e85b 6d85 4008 0002<br />
0640 4d41 5354 4552 5f57 4542 0000 0000<br />
0000 00<br />
使用-i参数指定tcpdump监听的网络界面，这在计算机具有多个网络界面时非常有用，<br />
使用-c参数指定要监听的数据包数量，<br />
使用-w参数指定将监听到的数据包写入文件中保存</p>
<p>A想要截获所有210.27.48.1 的主机收到的和发出的所有的数据包：<br />
#tcpdump host 210.27.48.1</p>
<p>B想要截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信，使用命令：（在命令行中适用　括号时，一定要<br />
#tcpdump host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \)</p>
<p>C如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包，使用命令：<br />
#tcpdump ip host 210.27.48.1 and ! 210.27.48.2</p>
<p>D如果想要获取主机210.27.48.1接收或发出的telnet包，使用如下命令：<br />
#tcpdump tcp port 23 host 210.27.48.1</p>
<p>E 对本机的udp 123 端口进行监视 123 为ntp的服务端口<br />
# tcpdump udp port 123</p>
<p>F 系统将只对名为hostname的主机的通信数据包进行监视。主机名可以是本地主机，也可以是网络上的任何一台计算机。下面的命令可以读取主机hostname发送的所有数据：<br />
#tcpdump -i eth0 src host hostname</p>
<p>G 下面的命令可以监视所有送到主机hostname的数据包：<br />
#tcpdump -i eth0 dst host hostname</p>
<p>H  我们还可以监视通过指定网关的数据包：<br />
#tcpdump -i eth0 gateway Gatewayname</p>
<p>I 如果你还想监视编址到指定端口的TCP或UDP数据包，那么执行以下命令：<br />
#tcpdump -i eth0 host hostname and port 80</p>
<p>J 如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包<br />
，使用命令：<br />
#tcpdump ip host 210.27.48.1 and ! 210.27.48.2</p>
<p>K 想要截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信，使用命令<br />
：（在命令行中适用　括号时，一定要<br />
#tcpdump host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \)</p>
<p>L 如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包，使用命令：<br />
#tcpdump ip host 210.27.48.1 and ! 210.27.48.2</p>
<p>M 如果想要获取主机210.27.48.1接收或发出的telnet包，使用如下命令：<br />
#tcpdump tcp port 23 host 210.27.48.1</p>
<p>第三种是协议的关键字，主要包括fddi,ip ,arp,rarp,tcp,udp等类型<br />
除了这三种类型的关键字之外，其他重要的关键字如下：gateway, broadcast,less,greater,还有三种逻辑运算，取非运算是 &#8216;not &#8216; &#8216;! &#8216;, 与运算是&#8217;and&#8217;,'&amp;&amp;&#8217;;或运算 是&#8217;or&#8217; ,&#8217;||&#8217;；<br />
第二种是确定传输方向的关键字，主要包括src , dst ,dst or src, dst and src ,如果我们只需要列出送到80端口的数据包，用dst port；如果我们只希望看到返回80端口的数据包，用src port。<br />
#tcpdump –i eth0 host hostname and dst port 80  目的端口是80<br />
或者<br />
#tcpdump –i eth0 host hostname and src port 80  源端口是80  一般是提供http的服务的主机<br />
如果条件很多的话  要在条件之前加and 或 or 或 not<br />
#tcpdump -i eth0 host ! 211.161.223.70 and ! 211.161.223.71 and dst port 80<br />
如果在ethernet 使用混杂模式 系统的日志将会记录<br />
May  7 20:03:46 localhost kernel: eth0: Promiscuous mode enabled.<br />
May  7 20:03:46 localhost kernel: device eth0 entered promiscuous mode<br />
May  7 20:03:57 localhost kernel: device eth0 left promiscuous mode<br />
tcpdump 对截获的数据并没有进行彻底解码，数据包内的大部分内容是使用十六进制的形式直接打印输出的。显然这不利于分析网络故障，通常的解决办法是先使用带-w参 数的tcpdump 截获数据并保存到文件中，然后再使用其他程序进行解码分析。当然也应该定义过滤规则，以避免捕获的数据包填满整个硬盘。</p>
<p># tcpdump   -i eth1 src  host 211.167.237.199<br />
00:02:03.096713 IP 211.167.237.199.ssh &gt; 221.216.165.189.1467: P 2010208:2010352(144) ack 33377 win 8576<br />
00:02:03.096951 IP 211.167.237.199.ssh &gt; 221.216.165.189.1467: P 2010352:2010496(144) ack 33377 win 8576<br />
00:02:03.100928 IP 211.167.237.199.ssh &gt; 221.216.165.189.1467: P 2010496:2010640(144) ack 33377 win 8576<br />
00:02:03.101165 IP 211.167.237.199.ssh &gt; 221.216.165.189.1467: P 2010640:2010784(144) ack 33377 win 8576<br />
00:02:03.102554 IP 211.167.237.199.ssh &gt; 221.216.165.189.1467: P 2010784:2010928(144) ack 33425 win 8576</p>
<p>表明在00:02:03点的时候，211.167.237.199通过ssh源端口连接到221.216.165.189的1467端口</p>
<p>#tcpdump -i eth1 src host 211.167.237.199 and dst port 1467<br />
00:09:27.603075 IP 211.167.237.199.ssh &gt; 221.216.165.189.1467: P 180400:180544(144) ack 2833 win 8576<br />
00:09:27.605631 IP 211.167.237.199.ssh &gt; 221.216.165.189.1467: P 180544:180688(144) ack 2881 win 8576</p>
<p>截获所有由eth0进入、源地址(src)为192.168.0.5的主机(host)，并且(and)目标(dst)端口(port)为80的数据包</p>
<p>观看网卡传送、接收数据包的状态<br />
$ netstat  -i<br />
Kernel Interface table<br />
Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg<br />
eth0 1500  0  14639   0      0      0    5705    119    0     0   BMRU</p>
<p>Iface:  网卡<br />
RX-OK RX-ERR RX-DRP RX-OVR : 网卡正确接收数据包的数量以及发生错误、流失、碰撞的总数<br />
TX-OK TX-ERR TX-DRP TX-OVR : 网卡正确发送数据包的数量以及发生错误、流失、碰撞的总数</p>
]]></content:encoded>
			<wfw:commentRss>http://www.aaronw.cn/static/262.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>解决编译Apache时出现的libz.a、libexpat.so错误</title>
		<link>http://www.aaronw.cn/static/258.html</link>
		<comments>http://www.aaronw.cn/static/258.html#comments</comments>
		<pubDate>Mon, 13 Apr 2009 03:50:46 +0000</pubDate>
		<dc:creator>Aaron.wang</dc:creator>
				<category><![CDATA[UNIX]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[libexpat.so]]></category>
		<category><![CDATA[libz.a]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.aaronw.cn/?p=258</guid>
		<description><![CDATA[今天上午开始为Bacelab维护服务器了。
在编译Apache时候出现了libz.a、libexpat.so错误，apache的版本是httpd-2.2.8.tar.gz。下面是这个错误的解决方法。
1、libz.a
错误：
/usr/local/lib/libz.a: could not read symbols: Bad value
collect2: ld returned 1 exit status
解决方法：
重新安装 zlib-1.2.3.tar.gz
tar -zxvf zlib-1.2.3.tar.gz
cd zlib-1.2.3
./configure
vi Makefile
找到 CFLAGS=-O3 -DUSE_MMAP
在后面加入-fPIC，即变成CFLAGS=-O3 -DUSE_MMAP -fPIC
接下面步骤
make
make install
2、libexpat.so
错误：
 /usr/lib/libexpat.so: could not read symbols: File in wrong format
解决方法：
编译时增加编译参数 &#8211;with-expat=builtin 。貌似在64位服务器下编译脚本在定位系统 expat 支持时有些问题。使用自带的expat来编译就不存在这个问题了。
]]></description>
			<content:encoded><![CDATA[<p>今天上午开始为Bacelab维护服务器了。<br />
在编译Apache时候出现了libz.a、libexpat.so错误，apache的版本是httpd-2.2.8.tar.gz。下面是这个错误的解决方法。</p>
<p>1、libz.a</p>
<p>错误：</p>
<p>/usr/local/lib/libz.a: could not read symbols: Bad value<br />
collect2: ld returned 1 exit status</p>
<p>解决方法：</p>
<p>重新安装 zlib-1.2.3.tar.gz</p>
<pre class="brush: plain;">tar -zxvf zlib-1.2.3.tar.gz
cd zlib-1.2.3
./configure</pre>
<p>vi Makefile<br />
找到 CFLAGS=-O3 -DUSE_MMAP<br />
在后面加入-fPIC，即变成CFLAGS=-O3 -DUSE_MMAP -fPIC<br />
接下面步骤</p>
<p>make<br />
make install</p>
<p>2、libexpat.so</p>
<p>错误：</p>
<p> /usr/lib/libexpat.so: could not read symbols: File in wrong format</p>
<p>解决方法：</p>
<p>编译时增加编译参数 <span style="font-family: courier new,courier,monospace;"><strong>&#8211;with-expat=builtin</strong></span> 。貌似在64位服务器下编译脚本在定位系统 expat 支持时有些问题。使用自带的expat来编译就不存在这个问题了。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.aaronw.cn/static/258.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>一次性口令 opie</title>
		<link>http://www.aaronw.cn/static/164.html</link>
		<comments>http://www.aaronw.cn/static/164.html#comments</comments>
		<pubDate>Mon, 01 Sep 2008 08:22:52 +0000</pubDate>
		<dc:creator>Aaron.wang</dc:creator>
				<category><![CDATA[UNIX]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[opie]]></category>

		<guid isPermaLink="false">http://www.aaronw.cn/?p=164</guid>
		<description><![CDATA[OPIE (One-time Passwords In Everything)是FreeBSD下的一个安全口令管理工具，可以通过一个预先设置的秘密口令(passphrase) 计算出当前的一次性登录口令。具体介绍请看下面这个链接
http://cnsnap.cn.freebsd.org/doc/zh_CN.GB2312/books/handbook/one-time-passwords.html
这里介绍一下在Linux环境下的具体安装配置
下载软件包
opie-24-630src
winkey
安装

[root@martian SPECS]# rpm -ivh opie-24-630.src.rpm
[root@martian SPECS]# rpmbuild -bb opie.spec
[root@martian SPECS]# rpm -ivh /usr/src/redhat/RPMS/i386/opie-2.4-630.i386.rpm

初始化
使用Winkey.exe 设置一个passphrase 计算出一次性口令 并在 Response 中输入

[root@martian SPECS]# opiepasswd -n 1000 -s LinuxServer
Updating root:
You need the response from an OTP generator.
New secret pass phrase:
otp-md5 1000 LinuxServer
Response:reid klan nair afar silt char
ID root OTP key is 1000 LinuxServer
REID KLAN NAIR [...]]]></description>
			<content:encoded><![CDATA[<p>OPIE (One-time Passwords In Everything)是FreeBSD下的一个安全口令管理工具，可以通过一个预先设置的秘密口令(passphrase) 计算出当前的一次性登录口令。具体介绍请看下面这个链接</p>
<p><a onclick="pageTracker._trackPageview('/outgoing/cnsnap.cn.freebsd.org/doc/zh_CN.GB2312/books/handbook/one-time-passwords.html?referer=http://www.google.cn/search?hl=zh-CN&amp;newwindow=1&amp;q=ssh+OPIE&amp;btnG=Google+%E6%90%9C%E7%B4%A2&amp;meta=');" href="http://cnsnap.cn.freebsd.org/doc/zh_CN.GB2312/books/handbook/one-time-passwords.html" target="_blank">http://cnsnap.cn.freebsd.org/doc/zh_CN.GB2312/books/handbook/one-time-passwords.html</a></p>
<p>这里介绍一下在Linux环境下的具体安装配置</p>
<p>下载软件包<br />
<a href='http://www.aaronw.cn/wp-content/uploads/2008/09/opie-24-630src.rpm'>opie-24-630src</a><br />
<a href='http://www.aaronw.cn/wp-content/uploads/2008/09/winkey.exe'>winkey</a></p>
<p>安装</p>
<div class="hl-surround">
<div class="hl-main"><span style="color: olive;">[</span><span style="color: blue;">root</span><span style="color: gray;">@</span><span style="color: blue;">martian</span><span style="color: gray;"> </span><span style="color: blue;">SPECS</span><span style="color: olive;">]</span><span style="color: #ffa500;"># rpm -ivh opie-24-630.src.rpm</span><span style="color: gray;"><br />
</span><span style="color: olive;">[</span><span style="color: blue;">root</span><span style="color: gray;">@</span><span style="color: blue;">martian</span><span style="color: gray;"> </span><span style="color: blue;">SPECS</span><span style="color: olive;">]</span><span style="color: #ffa500;"># rpmbuild -bb opie.spec</span><span style="color: gray;"><br />
</span><span style="color: olive;">[</span><span style="color: blue;">root</span><span style="color: gray;">@</span><span style="color: blue;">martian</span><span style="color: gray;"> </span><span style="color: blue;">SPECS</span><span style="color: olive;">]</span><span style="color: #ffa500;"># rpm -ivh /usr/src/redhat/RPMS/i386/opie-2.4-630.i386.rpm</span></div>
</div>
<p>初始化<br />
使用Winkey.exe 设置一个passphrase 计算出一次性口令 并在 Response 中输入</p>
<div class="hl-surround">
<div class="hl-main">[root@martian SPECS]# opiepasswd -n 1000 -s LinuxServer<br />
Updating root:<br />
You need the response from an OTP generator.<br />
New secret pass phrase:<br />
otp-md5 1000 LinuxServer<br />
Response:reid klan nair afar silt char</p>
<p>ID root OTP key is 1000 LinuxServer<br />
REID KLAN NAIR AFAR SILT CHAR</p></div>
</div>
<p>设置ssh使用opie认证<br />
打开以下sshd_config 选项</p>
<div class="hl-surround">
<div class="hl-main">PasswordAuthentication no<br />
ChallengeResponseAuthentication yes<br />
GSSAPIAuthentication yes<br />
GSSAPICleanupCredentials yes<br />
UsePAM yes</div>
</div>
<p>设置/etc/pam.d/sshd</p>
<p>加入</p>
<div class="hl-surround">
<div class="hl-main">auth       required     /lib/security/pam_opie.so</div>
</div>
<p>注释掉</p>
<div class="hl-surround">
<div class="hl-main">#auth       required     pam_stack.so service=system-auth</div>
</div>
<p>重启sshd</p>
<p>opie 是通过pam模块pam_opie 达到口令认证目的，所以任何使用pam认证模块的程序都可以用opie来实现一次性口令，并且如果能够用程序自动设置、管理和定时更新秘密口令并且提供一 个访问接口用于获取当前的一次性口令，那就可以真正做到一次性口令过期和唯一性，我觉得这个东西关键还在于秘密口令的管理上，如果你知道了这个秘密口令， 那就可以获取到任意多个一次性口令,而且这些一次性口令在未使用情况下都是有效的，并不存在过期问题,它只能保证一次性口令在网络传输过程中的安全，因为 即使被截获了，只要当前已经使用过了，那也是一个过期口令。<br />
<script type="text/javascript"><!--
document.body.oncopy=function(){
event.returnValue=false;
var t=document.selection.createRange().text;
var s="本文来源于 梦想成就未来 http://www.aaronw.cn , 原文地址：http://www.aaronw.cn/html/152.html";
clipboardData.setData('Text','\r\n'+t+'\r\n'+s+'\r\n');
}
// --></script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.aaronw.cn/static/164.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux [系统管理命令中文详解]</title>
		<link>http://www.aaronw.cn/static/158.html</link>
		<comments>http://www.aaronw.cn/static/158.html#comments</comments>
		<pubDate>Tue, 03 Jun 2008 03:28:47 +0000</pubDate>
		<dc:creator>Aaron.wang</dc:creator>
				<category><![CDATA[UNIX]]></category>
		<category><![CDATA[command]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.aaronw.cn/?p=158</guid>
		<description><![CDATA[whois
功能说明：查找并显示用户信息。
语　　法：whois [帐号名称]
补充说明：whois指令会去查找并显示指定帐号的用户相关信息，因为它是到Network  Solutions的WHOIS数据库去查找，所以该帐号名称必须在上面注册方能寻获，且名称没有大小写的差别。
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;
whoami
功能说明：先似乎用户名称。
语　　法：whoami [--help][--version]
补充说明：显示自身的用户名称，本指令相当于执行&#8221;id -un&#8221;指令。
参　　数：
&#8211;help 　在线帮助。
&#8211;version 　显示版本信息。
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;

who
功能说明：显示目前登入系统的用户信息。
语　　法：who [-Himqsw][--help][--version][am i][记录文件]
补充说明：执行这项指令可得知目前有那些用户登入系统，单独执行who指令会列出登入帐号，使用的
终端机，登入时间以及从何处登入或正在使用哪个X显示器。
参　　数：
-H或&#8211;heading 　显示各栏位的标题信息列。
-i或-u或&#8211;idle  　显示闲置时间，若该用户在前一分钟之内有进行任何动作，将标示成&#8221;.&#8221;号，如果该用户已超过24小时没有任何动作，则标示出&#8221;old&#8221;字符串。
-m  　此参数的效果和指定&#8221;am i&#8221;字符串相同。
-q或&#8211;count 　只显示登入系统的帐号名称和总人数。
-s  　此参数将忽略不予处理，仅负责解决who指令其他版本的兼容性问题。
-w或-T或&#8211;mesg或&#8211;message或&#8211;writable  　显示用户的信息状态栏。
&#8211;help 　在线帮助。
&#8211;version 　显示版本信息。
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-
w
功能说明：显示目前登入系统的用户信息。
语　　法：w [-fhlsuV][用户名称]
补充说明：执行这项指令可得知目前登入系统的用户有那些人，以及他们正在执行的程序。单独执行w
指令会显示所有的用户，您也可指定用户名称，仅显示某位用户的相关信息。
参　　数：
-f 　开启或关闭显示用户从何处登入系统。
-h 　不显示各栏位的标题信息列。
-l  　使用详细格式列表，此为预设值。
-s 　使用简洁格式列表，不显示用户登入时间，终端机阶段作业和程序所耗费的CPU时间。
-u  　忽略执行程序的名称，以及该程序耗费CPU时间的信息。
-V 　显示版本信息。
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;
vlock(virtual console lock)
功能说明：锁住虚拟终端。
语　　法：vlock [-achv]
补充说明：执行vlock指令可锁住虚拟终端，避免他人使用。
参　　数：
-a或&#8211;all 　锁住所有的终端阶段作业，如果您在全屏幕的终端中使用本参数，则会将用键盘
切换终端机的功能一并关闭。
-c或&#8211;current 　锁住目前的终端阶段作业，此为预设值。
-h或&#8211;help  　在线帮助。
-v或&#8211;version 　显示版本信息。
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;
usermod
功能说明：修改用户帐号。
语　　法：usermod [-LU][-c &#60;备注&#62;][-d &#60;登入目录&#62;][-e &#60;有效期限&#62;][-f  &#60;缓冲天数&#62;][-g &#60;群组&#62;][-G &#60;群组&#62;][-l &#60;帐号名称&#62;][-s ][-u ][用户帐号]
补充说明：usermod可用来修改用户帐号的各项设定。
参　　数：
-c&#60;备注&#62; 　修改用户帐号的备注文字。
-d登入目录&#62; 　修改用户登入时的目录。
-e&#60;有效期限&#62; 　修改帐号的有效期限。
-f&#60;缓冲天数&#62; 　修改在密码过期后多少天即关闭该帐号。
-g&#60;群组&#62; [...]]]></description>
			<content:encoded><![CDATA[<p>whois</p>
<p>功能说明：查找并显示用户信息。</p>
<p>语　　法：whois [帐号名称]</p>
<p>补充说明：whois指令会去查找并显示指定帐号的用户相关信息，因为它是到Network  Solutions的WHOIS数据库去查找，所以该帐号名称必须在上面注册方能寻获，且名称没有大小写的差别。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
whoami</p>
<p>功能说明：先似乎用户名称。</p>
<p>语　　法：whoami [--help][--version]</p>
<p>补充说明：显示自身的用户名称，本指令相当于执行&#8221;id -un&#8221;指令。</p>
<p>参　　数：<br />
&#8211;help 　在线帮助。<br />
&#8211;version 　显示版本信息。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p><span id="more-158"></span><br />
who</p>
<p>功能说明：显示目前登入系统的用户信息。</p>
<p>语　　法：who [-Himqsw][--help][--version][am i][记录文件]</p>
<p>补充说明：执行这项指令可得知目前有那些用户登入系统，单独执行who指令会列出登入帐号，使用的<br />
终端机，登入时间以及从何处登入或正在使用哪个X显示器。</p>
<p>参　　数：<br />
-H或&#8211;heading 　显示各栏位的标题信息列。<br />
-i或-u或&#8211;idle  　显示闲置时间，若该用户在前一分钟之内有进行任何动作，将标示成&#8221;.&#8221;号，如果该用户已超过24小时没有任何动作，则标示出&#8221;old&#8221;字符串。<br />
-m  　此参数的效果和指定&#8221;am i&#8221;字符串相同。<br />
-q或&#8211;count 　只显示登入系统的帐号名称和总人数。<br />
-s  　此参数将忽略不予处理，仅负责解决who指令其他版本的兼容性问题。<br />
-w或-T或&#8211;mesg或&#8211;message或&#8211;writable  　显示用户的信息状态栏。<br />
&#8211;help 　在线帮助。<br />
&#8211;version 　显示版本信息。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
w</p>
<p>功能说明：显示目前登入系统的用户信息。</p>
<p>语　　法：w [-fhlsuV][用户名称]</p>
<p>补充说明：执行这项指令可得知目前登入系统的用户有那些人，以及他们正在执行的程序。单独执行w<br />
指令会显示所有的用户，您也可指定用户名称，仅显示某位用户的相关信息。</p>
<p>参　　数：<br />
-f 　开启或关闭显示用户从何处登入系统。<br />
-h 　不显示各栏位的标题信息列。<br />
-l  　使用详细格式列表，此为预设值。<br />
-s 　使用简洁格式列表，不显示用户登入时间，终端机阶段作业和程序所耗费的CPU时间。<br />
-u  　忽略执行程序的名称，以及该程序耗费CPU时间的信息。<br />
-V 　显示版本信息。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
vlock(virtual console lock)</p>
<p>功能说明：锁住虚拟终端。</p>
<p>语　　法：vlock [-achv]</p>
<p>补充说明：执行vlock指令可锁住虚拟终端，避免他人使用。</p>
<p>参　　数：<br />
-a或&#8211;all 　锁住所有的终端阶段作业，如果您在全屏幕的终端中使用本参数，则会将用键盘<br />
切换终端机的功能一并关闭。<br />
-c或&#8211;current 　锁住目前的终端阶段作业，此为预设值。<br />
-h或&#8211;help  　在线帮助。<br />
-v或&#8211;version 　显示版本信息。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
usermod</p>
<p>功能说明：修改用户帐号。</p>
<p>语　　法：usermod [-LU][-c &lt;备注&gt;][-d &lt;登入目录&gt;][-e &lt;有效期限&gt;][-f  &lt;缓冲天数&gt;][-g &lt;群组&gt;][-G &lt;群组&gt;][-l &lt;帐号名称&gt;][-s ][-u ][用户帐号]</p>
<p>补充说明：usermod可用来修改用户帐号的各项设定。</p>
<p>参　　数：<br />
-c&lt;备注&gt; 　修改用户帐号的备注文字。<br />
-d登入目录&gt; 　修改用户登入时的目录。<br />
-e&lt;有效期限&gt; 　修改帐号的有效期限。<br />
-f&lt;缓冲天数&gt; 　修改在密码过期后多少天即关闭该帐号。<br />
-g&lt;群组&gt; 　修改用户所属的群组。<br />
-G&lt;群组&gt; 　修改用户所属的附加群组。<br />
-l&lt;帐号名称&gt; 　修改用户帐号名称。<br />
-L 　锁定用户密码，使密码无效。<br />
-s  　修改用户登入后所使用的shell。<br />
-u 　修改用户ID。<br />
-U 　解除密码锁定。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
userdel</p>
<p>功能说明：删除用户帐号。</p>
<p>语　　法：userdel [-r][用户帐号]</p>
<p>补充说明：userdel可删除用户帐号与相关的文件。若不加参数，则仅删除用户帐号，而不删除相关文件。</p>
<p>参　　数：<br />
-f 　删除用户登入目录以及目录中所有文件。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
userconf</p>
<p>功能说明：用户帐号设置程序。</p>
<p>语　　法：userconf [--addgroup &lt;群组&gt;][--adduser  &lt;用户ID&gt;&lt;群组&gt;&lt;用户名称&gt;][--delgroup &lt;群组&gt;][--deluser  &lt;用户ID&gt;][--help]</p>
<p>补充说明：userconf实际上为linuxconf的符号连接，提供图形界面的操作方式，供管理员建立与管理各类帐号。若不加任何参数，即进入图形界面。</p>
<p>参　　数：<br />
&#8211;addgroup&lt;群组&gt; 　新增群组。<br />
&#8211;adduser&lt;用户ID&gt;&lt;群组&gt;&lt;用户名称&gt; 　新增用户帐号。<br />
&#8211;delgroup&lt;群组&gt; 　删除群组。<br />
&#8211;deluser&lt;用户ID&gt; 　删除用户帐号。<br />
&#8211;help 　显示帮助。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
useradd</p>
<p>功能说明：建立用户帐号。</p>
<p>语　　法：useradd [-mMnr][-c &lt;备注&gt;][-d &lt;登入目录&gt;][-e &lt;有效期限&gt;][-f  &lt;缓冲天数&gt;][-g &lt;群组&gt;][-G &lt;群组&gt;][-s ][-u ][用户帐号] 或 useradd -D [-b][-e  &lt;有效期限&gt;][-f &lt;缓冲天数&gt;][-g &lt;群组&gt;][-G &lt;群组&gt;][-s ]</p>
<p>补充说明：useradd可用来建立用户帐号。帐号建好之后，再用passwd设定帐号的密码．而可用userdel删除帐号。使用useradd指令所建立的帐号，实际上是保存在/etc/passwd文本文件中。</p>
<p>参　　数：<br />
-c&lt;备注&gt; 　加上备注文字。备注文字会保存在passwd的备注栏位中。<br />
-d&lt;登入目录&gt; 　指定用户登入时的启始目录。<br />
-D 　变更预设值．<br />
-e&lt;有效期限&gt;  　指定帐号的有效期限。<br />
-f&lt;缓冲天数&gt; 　指定在密码过期后多少天即关闭该帐号。<br />
-g&lt;群组&gt;  　指定用户所属的群组。<br />
-G&lt;群组&gt; 　指定用户所属的附加群组。<br />
-m 　自动建立用户的登入目录。<br />
-M  　不要自动建立用户的登入目录。<br />
-n 　取消建立以用户名称为名的群组．<br />
-r 　建立系统帐号。<br />
-s　  　指定用户登入后所使用的shell。<br />
-u 　指定用户ID。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
uname</p>
<p>功能说明：显示系统信息。</p>
<p>语　　法：uname [-amnrsv][--help][--version]</p>
<p>补充说明：uname可显示电脑以及操作系统的相关信息。</p>
<p>参　　数：<br />
-a或&#8211;all 　显示全部的信息。<br />
-m或&#8211;machine 　显示电脑类型。<br />
-n或-nodename 　显示在网络上的主机名称。<br />
-r或&#8211;release 　显示操作系统的发行编号。<br />
-s或&#8211;sysname 　显示操作系统名称。<br />
-v 　显示操作系统的版本。<br />
&#8211;help 　显示帮助。<br />
&#8211;version 　显示版本信息。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
top</p>
<p>功能说明：显示，管理执行中的程序。</p>
<p>语　　法：top [bciqsS][d &lt;间隔秒数&gt;][n &lt;执行次数&gt;]</p>
<p>补充说明：执行top指令可显示目前正在系统中执行的程序，并通过它所提供的互动式界面，用热键加以管理。</p>
<p>参　　数：<br />
b 　使用批处理模式。<br />
c 　列出程序时，显示每个程序的完整指令，包括指令名称，路径和参数等相关信息。<br />
d&lt;间隔秒数&gt; 　设置top监控程序执行状况的间隔时间，单位以秒计算。<br />
i  　执行top指令时，忽略闲置或是已成为Zombie的程序。<br />
n&lt;执行次数&gt; 　设置监控信息的更新次数。<br />
q  　持续监控程序执行的状况。<br />
s 　使用保密模式，消除互动模式下的潜在危机。<br />
S 　使用累计模式，其效果类似ps指令的&#8221;-S&#8221;参数。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
tload</p>
<p>功能说明：显示系统负载状况。</p>
<p>语　　法：tload [-V][-d &lt;间隔秒数&gt;][-s &lt;刻度大小&gt;][终端机编号]</p>
<p>补充说明：tload指令使用ASCII字符简单地以文字模式显示系统负载状态。假设不给予终端机编号，则会在执行tload指令的终端机显示负载情形。</p>
<p>参　　数：<br />
-d&lt;间隔秒数&gt; 　设置tload检测系统负载的间隔时间，单位以秒计算。<br />
-s&lt;刻度大小&gt;  　设置图表的垂直刻度大小，单位以列计算。<br />
-V 　显示版本信息。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
swatch(simple watcher)</p>
<p>功能说明：系统监控程序。</p>
<p>语　　法：swatch [-A &lt;分隔字符&gt;][-c &lt;设置文件&gt;][-f &lt;记录文件&gt;][-I  &lt;分隔字符&gt;][-P &lt;分隔字符&gt;][-r &lt;时间&gt;][-t &lt;记录文件&gt;]</p>
<p>补充说明：swatch可用来监控系统记录文件，并在发现特定的事件时，执行指定的动作。swatch所监控的事件以及对应事件的动作都存放在  swatch的配置文件中。预设的配置文件为拥护根目录下的.swatchrc。然而在Red Hat  Linux的预设用户根目录下并没有.swatchrc配置文件，您可将/usr/doc/swatch-  2.2/config_files/swatchrc.personal文件复制到用户根目录下的.swatchrc，然后修改.swatchrc所要监控的事件及执行的动作。</p>
<p>参　　数：<br />
-A&lt;分隔字符&gt; 　预设配置文件中，动作的分隔字符，预设为逗号。<br />
-c设置文件&gt;  　指定配置文件，而不使用预设的配置文件。<br />
-f记录文件&gt; 　检查指定的记录文件，检查完毕后不会继续监控该记录文件。<br />
-I分隔字符&gt; 　指定输入记录的分隔字符，预设为换行字符。<br />
-P分隔字符&gt; 　指定配置文件中，事件的分隔字符，预设为逗号。<br />
-r时间&gt; 　在指定的时间重新启动。<br />
-t&lt;记录文件&gt; 　检查指定的记录文件，并且会监控加入记录文件中的后继记录。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
suspend</p>
<p>功能说明：暂停执行shell。</p>
<p>语　　法：suspend [-f]</p>
<p>补充说明：suspend为shell内建指令，可暂停目前正在执行的shell。若要恢复，则必须使用SIGCONT信息。</p>
<p>参　　数：<br />
-f  　若目前执行的shell为登入的shell，则suspend预设无法暂停此shell。若要强迫暂停登入的shell，则必须使用-f参数。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
sudo</p>
<p>功能说明：以其他身份来执行指令。</p>
<p>语　　法：sudo [-bhHpV][-s ][-u &lt;用户&gt;][指令] 或 sudo [-klv]</p>
<p>补充说明：sudo可让用户以其他的身份来执行指定的指令，预设的身份为root。在/etc/sudoers中设置了可执行sudo指令的用户。若其未经授权的用户企图使用sudo，则会发出警告的邮件给管理员。用户使用sudo时，必须先输入密码，之后有5分钟的有效期限，超过期限则必须重新输入密码。<br />
参　　数：<br />
-b 　在后台执行指令。<br />
-h 　显示帮助。<br />
-H  　将HOME环境变量设为新身份的HOME环境变量。<br />
-k 　结束密码的有效期限，也就是下次再执行sudo时便需要输入密码。<br />
-l  　列出目前用户可执行与无法执行的指令。<br />
-p 　改变询问密码的提示符号。<br />
-s 　执行指定的shell。<br />
-u&lt;用户&gt; 　以指定的用户作为新的身份。若不加上此参数，则预设以root作为新的身份。<br />
-v 　延长密码有效期限5分钟。<br />
-V 　显示版本信息。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
su(super user)</p>
<p>功能说明：变更用户身份。</p>
<p>语　　法：su [-flmp][--help][--version][-][-c &lt;指令&gt;][-s ][用户帐号]</p>
<p>补充说明：su可让用户暂时变更登入的身份。变更时须输入所要变更的用户帐号与密码。</p>
<p>参　　数：<br />
-c&lt;指令&gt;或&#8211;command=&lt;指令&gt; 　执行完指定的指令后，即恢复原来的身份。<br />
-f或&#8211;fast 　适用于csh与tsch，使shell不用去读取启动文件。<br />
-.-l或&#8211;login  　改变身份时，也同时变更工作目录，以及HOME,SHELL,USER,LOGNAME。此外，也会变更PATH变量。<br />
-m,-p或&#8211;preserve-environment 　变更身份时，不要变更环境变量。<br />
-s或&#8211;shell=  　指定要执行的shell。<br />
&#8211;help 　显示帮助。<br />
&#8211;version 　显示版本信息。<br />
[用户帐号]  　指定要变更的用户。若不指定此参数，则预设变更为root。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
sliplogin</p>
<p>功能说明：将SLIP接口加入标准输入。</p>
<p>语　　法：sliplogin [用户名称]</p>
<p>补充说明：sliplogin可将SLIP接口加入标准输入，把一般终端机的连线变成SLIP连线。通常可用来建立SLIP服务器，让远端电脑以  SLIP连线到服务器。sliplogin活去检查/etc/slip/slip.hosts文件中是否有相同的用户名称。通过检查后，  sliplogin会调用执行shell script来设置IP地址，子网掩码等网络界面环境。此shell  script通常是/etc/slip/slip.login。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
shutdown</p>
<p>功能说明：系统关机指令。</p>
<p>语　　法：shutdown [-efFhknr][-t 秒数][时间][警告信息]</p>
<p>补充说明：shutdown指令可以关闭所有程序，并依用户的需要，进行重新开机或关机的动作。</p>
<p>参　　数：<br />
-c 　当执行&#8221;shutdown -h 11:50&#8243;指令时，只要按+键就可以中断关机的指令。<br />
-f  　重新启动时不执行fsck。<br />
-F 　重新启动时执行fsck。<br />
-h 　将系统关机。<br />
-k  　只是送出信息给所有用户，但不会实际关机。<br />
-n 　不调用init程序进行关机，而由shutdown自己进行。<br />
-r  　shutdown之后重新启动。<br />
-t&lt;秒数&gt; 　送出警告信息和删除信息之间要延迟多少秒。<br />
[时间]  　设置多久时间后执行shutdown指令。<br />
[警告信息] 　要传送给所有登入用户的信息。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
screen</p>
<p>功能说明：多重视窗管理程序。</p>
<p>语　　法：screen [-AmRvx -ls -wipe][-d &lt;作业名称&gt;][-h &lt;行数&gt;][-r  &lt;作业名称&gt;][-s ][-S &lt;作业名称&gt;]</p>
<p>补充说明：screen为多重视窗管理程序。此处所谓的视窗，是指一个全屏幕的文字模式画面。通常只有在使用telnet登入主机或是使用老式的终端机时，才有可能用到screen程序。</p>
<p>参　　数：<br />
-A 　将所有的视窗都调整为目前终端机的大小。<br />
-d&lt;作业名称&gt; 　将指定的screen作业离线。<br />
-h&lt;行数&gt; 　指定视窗的缓冲区行数。<br />
-m 　即使目前已在作业中的screen作业，仍强制建立新的screen作业。<br />
-r&lt;作业名称&gt; 　恢复离线的screen作业。<br />
-R  　先试图恢复离线的作业。若找不到离线的作业，即建立新的screen作业。<br />
-s 　指定建立新视窗时，所要执行的shell。<br />
-S&lt;作业名称&gt; 　指定screen作业的名称。<br />
-v 　显示版本信息。<br />
-x  　恢复之前离线的screen作业。<br />
-ls或&#8211;list 　显示目前所有的screen作业。<br />
-wipe  　检查目前所有的screen作业，并删除已经无法使用的screen作业。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
rwho</p>
<p>功能说明：查看系统用户。</p>
<p>语　　法：rwho [-a]</p>
<p>补充说明：rwho指令的效果类似who指令，但它会显示局域网里所有主机的用户。主机必须提供rwhod常驻服务的功能，方可使用rwho指令。</p>
<p>参　　数：<br />
-a 　列出所有的用户，包括闲置时间超过1个小时以上的用户。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
rsh(remote shell)</p>
<p>功能说明：远端登入的Shell。</p>
<p>语　　法：rsh [-dn][-l &lt;用户名称&gt;][主机名称或IP地址][执行指令]</p>
<p>补充说明：rsh提供用户环境，也就是Shell，以便指令能够在指定的远端主机上执行。</p>
<p>参　　数：<br />
-d 　使用Socket层级的排错功能。<br />
-l&lt;用户名称&gt; 　指定要登入远端主机的用户名称。<br />
-n 　把输入的指令号向代号为/dev/null的特殊外围设备。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
rlogin(remote login)</p>
<p>功能说明：远端登入。<br />
语　　法：rlogin [-8EL][-e &lt;脱离字符&gt;][-l  &lt;用户名称&gt;][主机名称或IP地址]</p>
<p>补充说明：执行rlogin指令开启终端机阶段操作，并登入远端主机。</p>
<p>参　　数：<br />
-8 　允许输入8位字符数据。<br />
-e脱离字符&gt; 　设置脱离字符。<br />
-E 　滤除脱离字符。<br />
-l用户名称&gt; 　指定要登入远端主机的用户名称。<br />
-L 　使用litout模式进行远端登入阶段操作。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
renice</p>
<p>功能说明：调整优先权。</p>
<p>语　　法：renice [优先等级][-g &lt;程序群组名称&gt;...][-p &lt;程序识别码&gt;...][-u  &lt;用户名称&gt;...]</p>
<p>补充说明：renice指令可重新调整程序执行的优先权等级。预设是以程序识别码指定程序调整其优先权，您亦可以指定程序群组或用户名称调整优先权等级，并修改所有隶属于该程序群组或用户的程序的优先权。等级范围从-20&#8211;19，只有系统管理者可以改变其他用户程序的优先权，也仅有系统管理者可以设置负数等级。<br />
参　　数：<br />
-g &lt;程序群组名称&gt; 　使用程序群组名称，修改所有隶属于该程序群组的程序的优先权。<br />
-p  &lt;程序识别码&gt; 　改变该程序的优先权等级，此参数为预设值。<br />
-u &lt;用户名称&gt;  　指定用户名称，修改所有隶属于该用户的程序的优先权。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
reboot</p>
<p>功能说明：重新开机。</p>
<p>语　　法：dreboot [-dfinw]</p>
<p>补充说明：执行reboot指令可让系统停止运作，并重新开机。</p>
<p>参　　数：<br />
-d 　重新开机时不把数据写入记录文件/var/tmp/wtmp。本参数具有&#8221;-n&#8221;参数的效果。<br />
-f  　强制重新开机，不调用shutdown指令的功能。<br />
-i 　在重开机之前，先关闭所有网络界面。<br />
-n  　重开机之前不检查是否有未结束的程序。<br />
-w 　仅做测试，并不真的将系统重新开机，只会把重开机的数据写入/var/log目录下的wtmp记录文件。</p>
<p>pstree(process status tree)</p>
<p>功能说明：以树状图显示程序。</p>
<p>语　　法：pstree [-acGhlnpuUV][-H &lt;程序识别码&gt;][&lt;程序识别码&gt;/&lt;用户名称&gt;]</p>
<p>补充说明：pstree指令用ASCII字符显示树状结构，清楚地表达程序间的相互关系。如果不指定程序识别码或用户名称，则会把系统启动时的第一个程序视为基层，并显示之后的所有程序。若指定用户名称，便会以隶属该用户的第一个程序当作基层，然后显示该用户的所有程序。</p>
<p>参　　数：<br />
-a 　显示每个程序的完整指令，包含路径，参数或是常驻服务的标示。<br />
-c 　不使用精简标示法。<br />
-G  　使用VT100终端机的列绘图字符。<br />
-h 　列出树状图时，特别标明现在执行的程序。<br />
-H&lt;程序识别码&gt;  　此参数的效果和指定&#8221;-h&#8221;参数类似，但特别标明指定的程序。<br />
-l 　采用长列格式显示树状图。<br />
-n  　用程序识别码排序。预设是以程序名称来排序。<br />
-p 　显示程序识别码。<br />
-u 　显示用户名称。<br />
-U  　使用UTF-8列绘图字符。<br />
-V 　显示版本信息。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
ps(process status)</p>
<p>功能说明：报告程序状况。</p>
<p>语　　法：ps [-aAcdefHjlmNVwy][acefghLnrsSTuvxX][-C &lt;指令名称&gt;][-g  &lt;群组名称&gt;][-G &lt;群组识别码&gt;][-p &lt;程序识别码&gt;][p &lt;程序识别码&gt;][-s  &lt;阶段作业&gt;][-t &lt;终端机编号&gt;][t &lt;终端机编号&gt;][-u &lt;用户识别码&gt;][-U  &lt;用户识别码&gt;][U &lt;用户名称&gt;][-&lt;程序识别码&gt;][--cols &lt;每列字符数&gt;][--columns  &lt;每列字符数&gt;][--cumulative][--deselect][--forest][--headers][--help][--  info][--lines &lt;显示列数&gt;][--no-headers][--group &lt;群组名称&gt;][-Group  &lt;群组识别码&gt;][--pid &lt;程序识别码&gt;][--rows &lt;显示列数&gt;][--sid  &lt;阶段作业&gt;][--tty &lt;终端机编号&gt;][--user &lt;用户名称&gt;][--User  &lt;用户识别码&gt;][--version][--width &lt;每列字符数&gt;]</p>
<p>补充说明：ps是用来报告程序执行状况的指令，您可以搭配kill指令随时中断，删除不必要的程序。</p>
<p>参　　数：<br />
-a 　显示所有终端机下执行的程序，除了阶段作业领导者之外。<br />
a  　显示现行终端机下的所有程序，包括其他用户的程序。<br />
-A 　显示所有程序。<br />
-c 　显示CLS和PRI栏位。<br />
c  　列出程序时，显示每个程序真正的指令名称，而不包含路径，参数或常驻服务的标示。<br />
-C&lt;指令名称&gt;  　指定执行指令的名称，并列出该指令的程序的状况。<br />
-d 　显示所有程序，但不包括阶段作业领导者的程序。<br />
-e  　此参数的效果和指定&#8221;A&#8221;参数相同。<br />
e 　列出程序时，显示每个程序所使用的环境变量。<br />
-f  　显示UID,PPIP,C与STIME栏位。<br />
f 　用ASCII字符显示树状结构，表达程序间的相互关系。<br />
-g&lt;群组名称&gt;  　此参数的效果和指定&#8221;-G&#8221;参数相同，当亦能使用阶段作业领导者的名称来指定。<br />
g 　显示现行终端机下的所有程序，包括群组领导者的程序。<br />
-G&lt;群组识别码&gt; 　列出属于该群组的程序的状况，也可使用群组名称来指定。<br />
h 　不显示标题列。<br />
-H  　显示树状结构，表示程序间的相互关系。<br />
-j或j 　采用工作控制的格式显示程序状况。<br />
-l或l 　采用详细的格式来显示程序状况。<br />
L 　列出栏位的相关信息。<br />
-m或m 　显示所有的执行绪。<br />
n 　以数字来表示USER和WCHAN栏位。<br />
-N  　显示所有的程序，除了执行ps指令终端机下的程序之外。<br />
-p&lt;程序识别码&gt; 　指定程序识别码，并列出该程序的状况。<br />
p&lt;程序识别码&gt; 　此参数的效果和指定&#8221;-p&#8221;参数相同，只在列表格式方面稍有差异。<br />
r 　只列出现行终端机正在执行中的程序。<br />
-s&lt;阶段作业&gt; 　指定阶段作业的程序识别码，并列出隶属该阶段作业的程序的状况。<br />
s 　采用程序信号的格式显示程序状况。<br />
S 　列出程序时，包括已中断的子程序资料。<br />
-t&lt;终端机编号&gt; 　指定终端机编号，并列出属于该终端机的程序的状况。<br />
t&lt;终端机编号&gt; 　此参数的效果和指定&#8221;-t&#8221;参数相同，只在列表格式方面稍有差异。<br />
-T 　显示现行终端机下的所有程序。<br />
-u&lt;用户识别码&gt; 　此参数的效果和指定&#8221;-U&#8221;参数相同。<br />
u 　以用户为主的格式来显示程序状况。<br />
-U&lt;用户识别码&gt; 　列出属于该用户的程序的状况，也可使用用户名称来指定。<br />
U&lt;用户名称&gt;  　列出属于该用户的程序的状况。<br />
v 　采用虚拟内存的格式显示程序状况。<br />
-V或V 　显示版本信息。<br />
-w或w  　采用宽阔的格式来显示程序状况。<br />
x 　显示所有程序，不以终端机来区分。<br />
X 　采用旧式的Linux i386登陆格式显示程序状况。<br />
-y 　配合参数&#8221;-l&#8221;使用时，不显示F(flag)栏位，并以RSS栏位取代ADDR栏位　。<br />
-&lt;程序识别码&gt;  　此参数的效果和指定&#8221;p&#8221;参数相同。<br />
&#8211;cols&lt;每列字符数&gt; 　设置每列的最大字符数。<br />
&#8211;columns&lt;每列字符数&gt; 　此参数的效果和指定&#8221;&#8211;cols&#8221;参数相同。<br />
&#8211;cumulative  　此参数的效果和指定&#8221;S&#8221;参数相同。<br />
&#8211;deselect 　此参数的效果和指定&#8221;-N&#8221;参数相同。<br />
&#8211;forest  　此参数的效果和指定&#8221;f&#8221;参数相同。<br />
&#8211;headers 　重复显示标题列。<br />
&#8211;help 　在线帮助。<br />
&#8211;info  　显示排错信息。<br />
&#8211;lines&lt;显示列数&gt; 　设置显示画面的列数。<br />
&#8211;no-headers  　此参数的效果和指定&#8221;h&#8221;参数相同，只在列表格式方面稍有差异。<br />
&#8211;group&lt;群组名称&gt; 　此参数的效果和指定&#8221;-G&#8221;参数相同。<br />
&#8211;Group&lt;群组识别码&gt; 　此参数的效果和指定&#8221;-G&#8221;参数相同。<br />
&#8211;pid&lt;程序识别码&gt;  　此参数的效果和指定&#8221;-p&#8221;参数相同。<br />
&#8211;rows&lt;显示列数&gt; 　此参数的效果和指定&#8221;&#8211;lines&#8221;参数相同。<br />
&#8211;sid&lt;阶段作业&gt; 　此参数的效果和指定&#8221;-s&#8221;参数相同。<br />
&#8211;tty&lt;终端机编号&gt;  　此参数的效果和指定&#8221;-t&#8221;参数相同。<br />
&#8211;user&lt;用户名称&gt; 　此参数的效果和指定&#8221;-U&#8221;参数相同。<br />
&#8211;User&lt;用户识别码&gt; 　此参数的效果和指定&#8221;-U&#8221;参数相同。<br />
&#8211;version  　此参数的效果和指定&#8221;-V&#8221;参数相同。<br />
&#8211;widty&lt;每列字符数&gt; 　此参数的效果和指定&#8221;-cols&#8221;参数相同。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
procinfo(process information)</p>
<p>功能说明：显示系统状态。</p>
<p>语　　法：procinfo [-abdDfhimsSv][-F &lt;输出文件&gt;][-n &lt;间隔秒数&gt;]</p>
<p>补充说明：procinfo指令从/proc目录里读取相关数据，将数据妥善整理过后输出到标准输出设备。</p>
<p>参　　数：<br />
-a 　显示所有信息。<br />
-b 　显示磁盘设备的区块数目，而非存取数目。<br />
-d  　显示系统信息每秒间的变化差额，而非总和的数值。本参数必须配合&#8221;-f&#8221;参数使用<br />
-D  　此参数效果和指定&#8221;-d&#8221;参数类似，但内存和交换文件的信息为总和数值。<br />
-f 　进入全画面的互动式操作界面。<br />
-F&lt;输出文件&gt; 　把信息状态输出到文件保存起来，而非预设的标准输出设备。<br />
-h 　在线帮助。<br />
-i  　显示完整的IRP列表。<br />
-m 　显示系统模块和外围设备等相关信息。<br />
-n间隔秒数&gt;  　设置全画面互动模式的信息更新速度，单位以秒计算。<br />
-s 　显示系统的内存，磁盘空间，IRP和DMA等信息，此为预设值。<br />
-S  　搭配参数&#8221;-d&#8221;或&#8221;-D&#8221;使用时，每秒都会更新信息，不论是否有使用参数&#8221;-n&#8221;。<br />
-v 　显示版本信息。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
nice</p>
<p>功能说明：设置优先权。</p>
<p>语　　法：nice [-n &lt;优先等级&gt;][--help][--version][执行指令]</p>
<p>补充说明：nice指令可以改变程序执行的优先权等级。</p>
<p>参　　数： 　-n&lt;优先等级&gt;或-&lt;优先等级&gt;或&#8211;adjustment=&lt;优先等级&gt;  　设置欲执行的指令的优先权等级。等级的范围从-20－19，其中-20最高，19最低，只有系统管理者可以设置负数的等级。<br />
&#8211;help 　在线帮助。<br />
&#8211;version 　显示版本信息。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
newgrp</p>
<p>功能说明：登入另一个群组。</p>
<p>语　　法：newgrp [群组名称]</p>
<p>补充说明：newgrp指令类似login指令，当它是以相同的帐号，另一个群组名称，再次登入系统。欲使用newgrp指令切换群组，您必须是该群组的用户，否则将无法登入指定的群组。单一用户要同时隶属多个群组，需利用交替用户的设置。若不指定群组名称，则newgrp指令会登入该用户名称的预设群组。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
logrotate</p>
<p>功能说明：管理记录文件。</p>
<p>语　　法：logrotate [-?dfv][-s &lt;状态文件&gt;][--usage][配置文件]</p>
<p>补充说明：使用logrotate指令，可让你轻松管理系统所产生的记录文件。它提供自动替换，压缩，删除和邮寄记录文件，每个记录文件都可被设置成每日，每周或每月处理，也能在文件太大时立即处理。您必须自行编辑，指定配置文件，预设的配置文件存放在/etc目录下，文件名称为  logrotate.conf。</p>
<p>参　　数：<br />
-?或&#8211;help 　在线帮助。<br />
-d或&#8211;debug 　详细显示指令执行过程，便于排错或了解程序执行的情况。<br />
-f或&#8211;force 　强行启动记录文件维护操作，纵使logrotate指令认为没有需要亦然。<br />
-s&lt;状态文件&gt;或&#8211;state=&lt;状态文件&gt; 　使用指定的状态文件。<br />
-v或&#8211;version  　显示指令执行过程。<br />
-usage 　显示指令基本用法。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
logout</p>
<p>功能说明：退出系统。</p>
<p>语　　法：logout</p>
<p>补充说明：logout指令让用户退出系统，其功能和login指令相互对应。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
logname</p>
<p>功能说明：显示用户名称。</p>
<p>语　　法：logname [--help][--version]</p>
<p>补充说明：执行logname指令，它会显示目前用户的名称。</p>
<p>参　　数：<br />
&#8211;help 　在线帮助。<br />
&#8211;vesion 　显示版本信息。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
login</p>
<p>功能说明：登入系统。</p>
<p>语　　法：login</p>
<p>补充说明：login指令让用户登入系统，您亦可通过它的功能随时更换登入身份。在Slackware发行版中，您可在指令后面附加欲登入的用户名称，它会直接询问密码，等待用户输入。当/etc目录里含名称为nologin的文件时，系统只root帐号登入系统，其他用户一律不准登入。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
lastb</p>
<p>功能说明：列出登入系统失败的用户相关信息。</p>
<p>语　　法：lastb [-adRx][-f &lt;记录文件&gt;][-n &lt;显示列数&gt;][帐号名称...][终端机编号...]</p>
<p>补充说明：单独执行lastb指令，它会读取位于/var/log目录下，名称为btmp的文件，并把该文件内容<br />
记录的登入失败的用户名单，全部显示出来。</p>
<p>参　　数：<br />
-a 　把从何处登入系统的主机名称或IP地址显示在最后一行。<br />
-d 　将IP地址转换成主机名称。<br />
-f&lt;记录文件&gt; 　指定记录文件。<br />
-n&lt;显示列数&gt;或-&lt;显示列数&gt; 　设置列出名单的显示列数。<br />
-R 　不显示登入系统的主机名称或IP地址。<br />
-x 　显示系统关机，重新开机，以及执行等级的改变等信息。<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
last</p>
<p>功能说明：列出目前与过去登入系统的用户相关信息。</p>
<p>语　　法：last [-adRx][-f &lt;记录文件&gt;][-n &lt;显示列数&gt;][帐号名称...][终端机编号...]</p>
<p>补充说明：单独执行last指令，它会读取位于/var/log目录下，名称为wtmp的文件，并把该给文件的内容记录的登入系统的用户名单全部显示出来。</p>
<p>参　　数：<br />
-a 　把从何处登入系统的主机名称或IP地址，显示在最后一行。<br />
-d 　将IP地址转换成主机名称。<br />
-f &lt;记录文件&gt; 　指定记录文件。<br />
-n &lt;显示列数&gt;或-&lt;显示列数&gt; 　设置列出名单的显示列数。<br />
-R 　不显示登入系统的主机名称或IP地址。<br />
-x 　显示系统关机，重新开机，以及执行等级的改变等信息。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
kill</p>
<p>功能说明：删除执行中的程序或工作。</p>
<p>语　　法：kill [-s &lt;信息名称或编号&gt;][程序]　或　kill [-l &lt;信息编号&gt;]</p>
<p>补充说明：kill可将指定的信息送至程序。预设的信息为SIGTERM(15)，可将指定程序终止。若仍无法终止该程序，可使用SIGKILL(9)信息尝试强制删除程序。程序或工作的编号可利用ps指令或jobs指令查看。<br />
参　　数：<br />
-l &lt;信息编号&gt; 　若不加&lt;信息编号&gt;选项，则-l参数会列出全部的信息名称。<br />
-s  &lt;信息名称或编号&gt; 　指定要送出的信息。<br />
[程序] 　[程序]可以是程序的PID或是PGID，也可以是工作编号。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
id</p>
<p>功能说明：显示用户的ID，以及所属群组的ID。</p>
<p>语　　法：id [-gGnru][--help][--version][用户名称]</p>
<p>补充说明：id会显示用户以及所属群组的实际与有效ID。若两个ID相同，则仅显示实际ID。若仅指定用户名称，则显示目前用户的ID。</p>
<p>参　　数：<br />
-g或&#8211;group 　显示用户所属群组的ID。<br />
-G或&#8211;groups 　显示用户所属附加群组的ID。<br />
-n或&#8211;name 　显示用户，所属群组或附加群组的名称。<br />
-r或&#8211;real 　显示实际ID。<br />
-u或&#8211;user  　显示用户ID。<br />
-help 　显示帮助。<br />
-version 　显示版本信息。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
halt</p>
<p>功能说明：关闭系统。</p>
<p>语　　法：halt [-dfinpw]</p>
<p>补充说明：halt会先检测系统的runlevel。若runlevel为0或6，则关闭系统，否则即调用shutdown来关闭系统。</p>
<p>参　　数：<br />
-d 　不要在wtmp中记录。<br />
-f 　不论目前的runlevel为何，不调用shutdown即强制关闭系统。<br />
-i 　在halt之前，关闭全部的网络界面。<br />
-n 　halt前，不用先执行sync。<br />
-p  　halt之后，执行poweroff。<br />
-w 　仅在wtmp中记录，而不实际结束系统。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
groupmod(group modify)</p>
<p>功能说明：更改群组识别码或名称。</p>
<p>语　　法：groupmod [-g &lt;群组识别码&gt; &lt;-o&gt;][-n &lt;新群组名称&gt;][群组名称]</p>
<p>补充说明：需要更改群组的识别码或名称时，可用groupmod指令来完成这项工作。</p>
<p>参　　数：<br />
-g &lt;群组识别码&gt; 　设置欲使用的群组识别码。<br />
-o 　重复使用群组识别码。<br />
-n  &lt;新群组名称&gt; 　设置欲使用的群组名称。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
groupdel(group delete)</p>
<p>功能说明：删除群组。</p>
<p>语　　法：groupdel [群组名称]</p>
<p>补充说明：需要从系统上删除群组时，可用groupdel指令来完成这项工作。倘若该群组中仍包括某些用户，则必须先删除这些用户后，方能删除群组。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
gitps(gnu interactive tools process status)</p>
<p>功能说明：报告程序状况。</p>
<p>语　　法：gitps [acefgjlnrsSTuvwxX][p &lt;程序识别码&gt;][t &lt;终端机编号&gt;][U  &lt;帐号名称&gt;]</p>
<p>补充说明：gitps是用来报告并管理程序执行的指令，基本上它就是通过ps指令来报告，管理程序，也能通过gitps指令随时中断，删除不必要的程序。因为gitps指令会去执行ps指令，所以其参数和ps指令相当类似。</p>
<p>参　　数：<br />
a 　显示　现行终端机下的所有程序，包括其他用户的程序。<br />
c  　列出程序时，显示每个程序真正的指令名称，而不包含路径，参数或是常驻服务的标示．<br />
e 　列出程序时，显示每个程序所使用的环境变量。<br />
f  　用ASCII字符显示树状结构，表达程序间的相互关系。<br />
g 　显示现行终端机下的所有程序，包括群组领导者的程序。<br />
j  　采用工作控制的格式来显示程序状况。<br />
l 　采用纤细的格式来显示程序状况。<br />
n 　以数字来表示USER和WCHAN栏位。<br />
p&lt;程序识别码&gt; 　指定程序识别码，并列出该程序的状况。<br />
r 　只列出现行终端机正在执行中的程序。<br />
s  　采用程序信号的格式显示程序状况。<br />
S 　列出程序时，包括已中断的子程序信息。<br />
t&lt;终端机机标号&gt;  　指定终端机编号，并列出属于该终端机的程序的状况。<br />
T 　显示现行终端机下的所有程序。<br />
u 　以用户为主的格式来显示程序状况。<br />
U&lt;帐号名称&gt; 　列出属于该用户的程序的状况。<br />
v 　采用虚拟内存的格式显示程序状况。<br />
w  　采用宽阔的格式来显示程序状况。<br />
x 　显示所有程序，不以终端机来区分。<br />
X 　采用旧试的Linux i386登陆格式显示程序状况。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
fwhois</p>
<p>功能说明：查找并显示用户信息。</p>
<p>语　　法：fwhios [帐号名称]</p>
<p>补充说明：本指令的功能有点类似finger指令，它会去查找并显示指定帐号的用户相关信息。不同之处在于fwhois指令是到Network  Solutions的WHOIS数据库去查找，该帐号名称必须有在上面注册才能寻获，且名称没有大小写的差别。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
free</p>
<p>功能说明：显示内存状态。</p>
<p>语　　法： free [-bkmotV][-s &lt;间隔秒数&gt;]</p>
<p>补充说明：free指令会显示内存的使用情况，包括实体内存，虚拟的交换文件内存，共享内存区段，以及系统核心使用的缓冲区等。</p>
<p>参　　数：<br />
-b 　以Byte为单位显示内存使用情况。<br />
-k 　以KB为单位显示内存使用情况。<br />
-m  　以MB为单位显示内存使用情况。<br />
-o 　不显示缓冲区调节列。<br />
-s&lt;间隔秒数&gt; 　持续观察内存使用状况。<br />
-t  　显示内存总和列。<br />
-V 　显示版本信息。</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
finger</p>
<p>功能说明：查找并显示用户信息。</p>
<p>语　　法：finger [-lmsp][帐号名称...]</p>
<p>补充说明：finger指令会去查找，并显示指定帐号的用户相关信息，包括本地与远端主机的用户皆可，帐号名称没有大小写的差别。单独执行  finger指令，它会显示本地主机现在所有的用户的登陆信息，包括帐号名称，真实姓名，登入终端机，闲置时间，登入时间以及地址和电话。</p>
<p>参　　数：<br />
-l  　列出该用户的帐号名称，真实姓名，用户专属目录，登入所用的Shell，登入时间，转信地址，电子邮件状态，还有计划文件和方案文件内容。<br />
-m  　排除查找用户的真实姓名。<br />
-s 　列出该用户的帐号名称，真实姓名，登入终端机，闲置时间，登入时间以及地址和电话。<br />
-p  　列出该用户的帐号名称，真实姓名，用户专属目录，登入所用的Shell，登入时间，转信地址，电子邮件状态，但不显示该用户的计划文件和方案文件内容。</p>
<p>本文来源于 linuxsir</p>
<p>&lt;script type=&#8221;text/javascript&#8221;&gt;&lt;!&#8211;<br />
document.body.oncopy=function(){<br />
event.returnValue=false;<br />
var t=document.selection.createRange().text;<br />
var s=&#8221;本文来源于 梦想成就未来 http://www.aaronw.cn;<br />
clipboardData.setData(&#8216;Text&#8217;,'\r\n&#8217;+t+&#8217;\r\n&#8217;+s+&#8217;\r\n&#8217;);<br />
}<br />
// &#8211;&gt;&lt;/script&gt;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.aaronw.cn/static/158.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>nmap&#8212;网络扫描和嗅探工具包</title>
		<link>http://www.aaronw.cn/static/129.html</link>
		<comments>http://www.aaronw.cn/static/129.html#comments</comments>
		<pubDate>Tue, 08 Apr 2008 03:02:38 +0000</pubDate>
		<dc:creator>Aaron.wang</dc:creator>
				<category><![CDATA[UNIX]]></category>
		<category><![CDATA[nmap]]></category>
		<category><![CDATA[网络]]></category>

		<guid isPermaLink="false">http://www.aaronw.cn/?p=129</guid>
		<description><![CDATA[原文连接：http://www.xxlinux.com/linux/article/network/security/20080107/13558.html
工具名称：nmap-3.50　
应用环境：Linux　　
工具介绍：NMap是Linux下的网络扫描和嗅探工具包。可以帮助网管人员深入探测UDP或者TCP端口，直至主机所使用的操作系统；还可以将所有探测结果记录到各种格式的日志中，为系统安全服务。NMap，也就是Network Mapper，是Linux下的网络扫描和嗅探工具包，其基本功能有三个，一是探测一组主机是否在线；其次是扫描主机端口，嗅探所提供的网络服务；还可以推断主机所用的操作系统 。Nmap可用于扫描仅有两个节点的LAN，直至500个节点以上的网络。Nmap 还允许用户定制扫描技巧。通常，一个简单的使用ICMP协议的ping操 作可以满足一般需求；也可以深入探测UDP或者TCP端口，直至主机所使用的操作系统；还可以将所有探测结果记录到各种格式的日志中， 供进一步分析操作。但了nmap被发现存在DOS攻击，针对这类攻击，可采取如下措施:安装系统卖方的最新补丁；用未受影响的系统做防火墙。　
示例：
适用于内外网的探测，以内网操作为示例(外网参数同)
简单端口扫描： nmap -vv -sT(sS、sF、sU、sA) 192.168.0.1 -D 127.0.0.1（-D伪造的地址)
OS检测： nmap -vv -sS -O 192.168.0.1
RPC 鉴别： nmap -sS -sR 192.168.0.1 Linux上的portmap就是一个简单的RPC服务，监听端口为111（默认）,测试网络扫描和嗅探工具包，其基本功能有三个，一是探测一组主机是否在线；其次是扫描主机端口，嗅探所提供的网络服务；还可以推断主机所用的操作系统。Nmap可用于扫描仅有两个节点的LAN，直至500个节点以上的网络。Nmap 还允许用户定制扫描技巧。通常，一个简单的使用ICMP协议的ping操作可以满足一般需求；也可以深入探测UDP或者TCP端口，直至主机所使用的操作系统；还可以将所有探测结果记录到各种格式的日志中，供进一步分析操作。
官方下载及文档地址：http://insecure.org/nmap/

使用
进行ping扫描，打印出对扫描做出响应的主机,不做进一步测试(如端口扫描或者操作系统探测)：
nmap -sP 192.168.1.0/24
仅列出指定网络上的每台主机，不发送任何报文到目标主机：
nmap -sL 192.168.1.0/24
探测目标主机开放的端口，可以指定一个以逗号分隔的端口列表(如-PS22，23，25，80)：
nmap -PS 192.168.1.234
使用UDP ping探测主机：
nmap -PU 192.168.1.0/24
使用频率最高的扫描选项：SYN扫描,又称为半开放扫描，它不打开一个完全的TCP连接，执行得很快：
nmap -sS 192.168.1.0/24
当SYN扫描不能用时，TCP Connect()扫描就是默认的TCP扫描：
nmap -sT 192.168.1.0/24
UDP扫描用-sU选项,UDP扫描发送空的(没有数据)UDP报头到每个目标端口:
nmap -sU 192.168.1.0/24
确定目标机支持哪些IP协议 (TCP，ICMP，IGMP等):
nmap -sO 192.168.1.19
探测目标主机的操作系统：
nmap -O 192.168.1.19
nmap -A 192.168.1.19
另外，nmap官方文档中的例子：
nmap -v scanme.nmap.org
这个选项扫描主机scanme.nmap.org中 所有的保留TCP端口。选项-v启用细节模式。
nmap -sS -O scanme.nmap.org/24
进行秘密SYN扫描，对象为主机Saznme所在的“C类”网段 的255台主机。同时尝试确定每台工作主机的操作系统类型。因为进行SYN扫描 和操作系统检测，这个扫描需要有根权限。
nmap [...]]]></description>
			<content:encoded><![CDATA[<p>原文连接：<a href="http://www.xxlinux.com/linux/article/network/security/20080107/13558.html">http://www.xxlinux.com/linux/article/network/security/20080107/13558.html</a><br />
工具名称：nmap-3.50　</p>
<p>应用环境：Linux　　</p>
<p>工具介绍：NMap是Linux下的网络扫描和嗅探工具包。可以帮助网管人员深入探测UDP或者TCP端口，直至主机所使用的操作系统；还可以将所有探测结果记录到各种格式的日志中，为系统安全服务。NMap，也就是Network Mapper，是Linux下的网络扫描和嗅探工具包，其基本功能有三个，一是探测一组主机是否在线；其次是扫描主机端口，嗅探所提供的网络服务；还可以推断主机所用的操作系统 。Nmap可用于扫描仅有两个节点的LAN，直至500个节点以上的网络。Nmap 还允许用户定制扫描技巧。通常，一个简单的使用ICMP协议的ping操 作可以满足一般需求；也可以深入探测UDP或者TCP端口，直至主机所使用的操作系统；还可以将所有探测结果记录到各种格式的日志中， 供进一步分析操作。但了nmap被发现存在DOS攻击，针对这类攻击，可采取如下措施:安装系统卖方的最新补丁；用未受影响的系统做防火墙。　</p>
<p>示例：</p>
<p>适用于内外网的探测，以内网操作为示例(外网参数同)</p>
<p>简单端口扫描： nmap -vv -sT(sS、sF、sU、sA) 192.168.0.1 -D 127.0.0.1（-D伪造的地址)</p>
<p>OS检测： nmap -vv -sS -O 192.168.0.1</p>
<p>RPC 鉴别： nmap -sS -sR 192.168.0.1 Linux上的portmap就是一个简单的RPC服务，监听端口为111（默认）,测试网络扫描和嗅探工具包，其基本功能有三个，一是探测一组主机是否在线；其次是扫描主机端口，嗅探所提供的网络服务；还可以推断主机所用的操作系统。Nmap可用于扫描仅有两个节点的LAN，直至500个节点以上的网络。Nmap 还允许用户定制扫描技巧。通常，一个简单的使用ICMP协议的ping操作可以满足一般需求；也可以深入探测UDP或者TCP端口，直至主机所使用的操作系统；还可以将所有探测结果记录到各种格式的日志中，供进一步分析操作。</p>
<p>官方下载及文档地址：http://insecure.org/nmap/<br />
<span id="more-129"></span><br />
使用</p>
<p>进行ping扫描，打印出对扫描做出响应的主机,不做进一步测试(如端口扫描或者操作系统探测)：</p>
<p>nmap -sP 192.168.1.0/24</p>
<p>仅列出指定网络上的每台主机，不发送任何报文到目标主机：</p>
<p>nmap -sL 192.168.1.0/24</p>
<p>探测目标主机开放的端口，可以指定一个以逗号分隔的端口列表(如-PS22，23，25，80)：</p>
<p>nmap -PS 192.168.1.234</p>
<p>使用UDP ping探测主机：</p>
<p>nmap -PU 192.168.1.0/24</p>
<p>使用频率最高的扫描选项：SYN扫描,又称为半开放扫描，它不打开一个完全的TCP连接，执行得很快：</p>
<p>nmap -sS 192.168.1.0/24</p>
<p>当SYN扫描不能用时，TCP Connect()扫描就是默认的TCP扫描：</p>
<p>nmap -sT 192.168.1.0/24</p>
<p>UDP扫描用-sU选项,UDP扫描发送空的(没有数据)UDP报头到每个目标端口:</p>
<p>nmap -sU 192.168.1.0/24</p>
<p>确定目标机支持哪些IP协议 (TCP，ICMP，IGMP等):</p>
<p>nmap -sO 192.168.1.19</p>
<p>探测目标主机的操作系统：</p>
<p>nmap -O 192.168.1.19</p>
<p>nmap -A 192.168.1.19</p>
<p>另外，nmap官方文档中的例子：</p>
<p>nmap -v scanme.nmap.org</p>
<p>这个选项扫描主机scanme.nmap.org中 所有的保留TCP端口。选项-v启用细节模式。</p>
<p>nmap -sS -O scanme.nmap.org/24</p>
<p>进行秘密SYN扫描，对象为主机Saznme所在的“C类”网段 的255台主机。同时尝试确定每台工作主机的操作系统类型。因为进行SYN扫描 和操作系统检测，这个扫描需要有根权限。</p>
<p>nmap -sV -p 22，53，110，143，4564 198.116.0-255.1-127</p>
<p>进行主机列举和TCP扫描，对象为B类188.116网段中255个8位子网。这 个测试用于确定系统是否运行了sshd、DNS、imapd或4564端口。如果这些端口 打开，将使用版本检测来确定哪种应用在运行。</p>
<p>nmap -v -iR 100000 -P0 -p 80</p>
<p>随机选择100000台主机扫描是否运行Web服务器(80端口)。由起始阶段 发送探测报文来确定主机是否工作非常浪费时间，而且只需探测主机的一个端口，因 此使用-P0禁止对主机列表。</p>
<p>nmap -P0 -p80 -oX logs/pb-port80scan.xml -oG logs/pb-port80scan.gnmap 216.163.128.20/20</p>
<p>扫描4096个IP地址，查找Web服务器(不ping)，将结果以Grep和XML格式保存。</p>
<p>host -l company.com | cut -d -f 4 | nmap -v -iL -</p>
<p>进行DNS区域传输，以发现company.com中的主机，然后将IP地址提供给 Nmap。上述命令用于GNU/Linux &#8212; 其它系统进行区域传输时有不同的命令。</p>
<p>其他选项：</p>
<p>-p (只扫描指定的端口)</p>
<p>单个端口和用连字符表示的端口范 围(如 1-1023)都可以。当既扫描TCP端口又扫描UDP端口时，可以通过在端口号前加上T: 或者U:指定协议。 协议限定符一直有效直到指定另一个。 例如，参数 -p U:53，111，137，T:21-25，80，139，8080 将扫描UDP 端口53，111，和137，同时扫描列出的TCP端口。</p>
<p>-F (快速 (有限的端口) 扫描)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.aaronw.cn/static/129.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>varnish vcl简单翻译</title>
		<link>http://www.aaronw.cn/static/128.html</link>
		<comments>http://www.aaronw.cn/static/128.html#comments</comments>
		<pubDate>Thu, 03 Apr 2008 05:23:24 +0000</pubDate>
		<dc:creator>Aaron.wang</dc:creator>
				<category><![CDATA[UNIX]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[varnishd]]></category>
		<category><![CDATA[www]]></category>

		<guid isPermaLink="false">http://www.aaronw.cn/?p=128</guid>
		<description><![CDATA[vcl 配置说明
vcl_recv
开始处理请求，通过判断请求数据来决定如何处理请求
switch mode:
pass;pipe;lookup
vcl_pipe
将请求直接传递至后端主机后,在请求和返回内容没有改变的情况下，将不变的内容返回给客户端直到这个链接关闭
switch mode:
pipe
vcl_pass
将请求直接传递至后端主机，将后端主机的内容返回给客户端，但不进行任何缓存在当前连接下每次都是返回最新的内容
switch mode:
pass
vcl_hash

追中关键字 不知道能做什么用
switch mode:
hash
vcl_hit
lookup查找缓存成功后自动调用该方法,通过规则来判断是将命中内容直接返回给客户端，还是将请求转发给后端主机
switch mode:
pass;deliver
vcl_miss
在使用lookup查找缓存失败后会自动调用该方法，通过判断请求来绝对是直接将请求发送给后端主机，还是从后端主机取得新的内容
switch mode:
pass;fetch
vcl_fetch
在vcl_miss决定从后端主机更新缓存并且取得内容后调用该方法，通过判断取得的内容来决定是否将内容放入缓存还是直接返回给客户端
switch mode:
pass;insert
vcl_deliver
在vcl_hit决定将命中内容返回给客户端后执行该方法
dswitch mode:
deliver
vcl_timeout
在缓存内容即将到期前使用该方法
switch mode:
fetch;discard
vcl_discard
在缓存内容到期后或缓存空间不总时调用该方法
switch mode:
discard;keep
vcl 公用变量
backend.host 后端主机地址
backend.port 后端主机端口
client.ip 客户端ip
server.ip 服务器ip
req.request 请求类型 GET HEAD
req.url 请求的地址
req.proto 客户端发起请求的HTTP协议
req.backend 请求用某后端主机返回
req.http.header 对应请求中的http头部信息
vcl 可用于 miss pipe pass 中的变量
bereq.request 请求类型 GET HEAD
bereq.url 请求的地址
bereq.proto 客户端发起请求的HTTP协议
bereq.http.header 对应请求中的http头部信息
vcl 在lookup找到缓存数据或从后端主机取得数据后可以使用的变量
obj.proto 返回内容的HTTP协议
obj.status 返回内容的请求状态代码(200,203,300等)
obj.response 返回内容的请求状态信息
obj.valid 如果请求结果返回的是有效的 为真
obj.cacheable 如果返回的缓存数据是有效的 为真
obj.ttl 返回还有多久生存时间 单位：秒
obj.lastuse 返回上一次请求到现在间隔时间 单位：秒
vcl 在准备将内容返回至客户端时使用
resp.proto
resp.status
resp.response
resp.http.header
]]></description>
			<content:encoded><![CDATA[<p>vcl 配置说明</p>
<p>vcl_recv</p>
<p>开始处理请求，通过判断请求数据来决定如何处理请求</p>
<p>switch mode:</p>
<p>pass;pipe;lookup</p>
<p>vcl_pipe</p>
<p>将请求直接传递至后端主机后,在请求和返回内容没有改变的情况下，将不变的内容返回给客户端直到这个链接关闭</p>
<p>switch mode:</p>
<p>pipe</p>
<p>vcl_pass</p>
<p>将请求直接传递至后端主机，将后端主机的内容返回给客户端，但不进行任何缓存在当前连接下每次都是返回最新的内容</p>
<p>switch mode:<br />
pass</p>
<p>vcl_hash<br />
<span id="more-128"></span><br />
追中关键字 不知道能做什么用</p>
<p>switch mode:</p>
<p>hash</p>
<p>vcl_hit</p>
<p>lookup查找缓存成功后自动调用该方法,通过规则来判断是将命中内容直接返回给客户端，还是将请求转发给后端主机</p>
<p>switch mode:</p>
<p>pass;deliver</p>
<p>vcl_miss</p>
<p>在使用lookup查找缓存失败后会自动调用该方法，通过判断请求来绝对是直接将请求发送给后端主机，还是从后端主机取得新的内容</p>
<p>switch mode:</p>
<p>pass;fetch</p>
<p>vcl_fetch</p>
<p>在vcl_miss决定从后端主机更新缓存并且取得内容后调用该方法，通过判断取得的内容来决定是否将内容放入缓存还是直接返回给客户端</p>
<p>switch mode:</p>
<p>pass;insert</p>
<p>vcl_deliver</p>
<p>在vcl_hit决定将命中内容返回给客户端后执行该方法</p>
<p>dswitch mode:<br />
deliver</p>
<p>vcl_timeout</p>
<p>在缓存内容即将到期前使用该方法</p>
<p>switch mode:<br />
fetch;discard</p>
<p>vcl_discard</p>
<p>在缓存内容到期后或缓存空间不总时调用该方法</p>
<p>switch mode:<br />
discard;keep</p>
<p>vcl 公用变量</p>
<p>backend.host 后端主机地址<br />
backend.port 后端主机端口<br />
client.ip 客户端ip<br />
server.ip 服务器ip<br />
req.request 请求类型 GET HEAD<br />
req.url 请求的地址<br />
req.proto 客户端发起请求的HTTP协议<br />
req.backend 请求用某后端主机返回<br />
req.http.header 对应请求中的http头部信息</p>
<p>vcl 可用于 miss pipe pass 中的变量</p>
<p>bereq.request 请求类型 GET HEAD<br />
bereq.url 请求的地址<br />
bereq.proto 客户端发起请求的HTTP协议<br />
bereq.http.header 对应请求中的http头部信息</p>
<p>vcl 在lookup找到缓存数据或从后端主机取得数据后可以使用的变量</p>
<p>obj.proto 返回内容的HTTP协议<br />
obj.status 返回内容的请求状态代码(200,203,300等)<br />
obj.response 返回内容的请求状态信息<br />
obj.valid 如果请求结果返回的是有效的 为真<br />
obj.cacheable 如果返回的缓存数据是有效的 为真<br />
obj.ttl 返回还有多久生存时间 单位：秒<br />
obj.lastuse 返回上一次请求到现在间隔时间 单位：秒</p>
<p>vcl 在准备将内容返回至客户端时使用</p>
<p>resp.proto<br />
resp.status<br />
resp.response<br />
resp.http.header</p>
]]></content:encoded>
			<wfw:commentRss>http://www.aaronw.cn/static/128.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IP Filter Based Firewalls HOWTO（3）</title>
		<link>http://www.aaronw.cn/static/124.html</link>
		<comments>http://www.aaronw.cn/static/124.html#comments</comments>
		<pubDate>Wed, 02 Apr 2008 05:06:17 +0000</pubDate>
		<dc:creator>Aaron.wang</dc:creator>
				<category><![CDATA[UNIX]]></category>
		<category><![CDATA[freebsd]]></category>
		<category><![CDATA[ipf]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://www.aaronw.cn/html/124.html</guid>
		<description><![CDATA[4.5 透明代理
当你在建立一个防火墙的时候，你会认为应该谨慎的使用代理，你可以&#8221;绷紧&#8221;你的防火墙规则来保护你的内部网。或者你认为你的NAT没有正常的工作，你可以使用重定向：
rdr xl0 0.0.0.0/0 port 21 -> 127.0.0.1 port 21
这条规则是说任何连接ftp的数据包都被重定向到了127.0.0.1
针对ftp的代理有些复杂，因为web浏览器或者其它自动登录类型的客户端不知道如何跟代理通信。有个补丁是针对TIS防火墙的sftp-gw，NAT配合这个补丁能够解决这个问题。很多代理软件是透明代理(如squid)。
当你想强迫你的用户先向代理请求验证时，关键字rdr经常是很有用的。(例如你想让你的工程师能够上网冲浪，但是不希望呼叫中心的员工上网)
4.6 应用代理
ftp 有两种工作方式，如果想让防火墙后面的ftp正常工作，应该使用应用代理。我们可以让我们的防火墙注意通过它的每一个包，当它发现它正在处理的是主动 ftp连接，它能够产生几条临时规则，就像keep state，使得ftp的数据传输能够正常工作。我们需要些这样的规则：
map tun0 192.168.1.0/24 -> 20.20.20.1/32 proxy port ftp ftp/tcp
记得把这条规则写在其它映射规则的前面，否则其它映射规则在这条规则就起作用了，记住ipnat跟ipfilter不同，ipnat是先匹配规则(只要一匹配其它规则就跳过去)。另外rcmd和raudio代理也必须写在其它规则的前面。
5. 操作过滤规则，ipf
ipf用来加载ipfilter规则。规则文件可以放在系统的任何地方，但是一般都放在/etc/ipf.rules,/usr/local/etc/ipf.rules,/etc/opt/ipf/ipf.rules
IPfilter可以有两套规则，活动规则和不活动规则。默认情况下所有的操作都是基于活动规则。你可以用ipf -I来使用不活动规则。这两套规则可以用参数-s进行转换。这是非常有用的，你在测试新规则的时候就不用清除老规则。
ipf加参数-r可以删除列表中的规则，但是比较安全的方法是用参数-F清除规则，然后再加载修改后的规则。
加载规则最简单的方法是ipf -Fa -f /etc/ipf.rules.想获得其它操作规则的方法请参考ipf的man page.
6．加载NAT规则，ipnat

ipnat 用来加载NAT规则。规则文件可以放在系统的任何地方，但是一般都放在 /etc/ipnat.rules/usr/local/etc/ipnat.rules，/etc/opt/ipf/ipnat.rules用 ipnat加载，也可以用参数-r删除规则。但一般也是清空(参数-C)然后加载，对于活动的映射-C无效，可以用-F来清除。
NAT规则和活动的映射可以用ipnat -l查看。最简单的家在NAT规则的方法是ipnat -CF -f /etc/ipnat.rules.
7. 监视和调试
你也许很想知道防火墙到底在干什么，而且如果ipfilter没有状态监视工具的话，它就不是一个完整的防火墙。
7.1 ipfstat工具
ipfstat最简的用法是显示一个关于防火墙执行情况的数据表，比如有多少个包通过或则抛弃，它们是否被记录，以及由多少状态条等等。你将看到的是这样一些数据：
# ipfstat
input packets: blocked 99286 passed 1255609 nomatch 14686 counted 0
output packets: blocked 4200 passed 1284345 nomatch 14687 counted [...]]]></description>
			<content:encoded><![CDATA[<p>4.5 透明代理</p>
<p>当你在建立一个防火墙的时候，你会认为应该谨慎的使用代理，你可以&#8221;绷紧&#8221;你的防火墙规则来保护你的内部网。或者你认为你的NAT没有正常的工作，你可以使用重定向：<br />
rdr xl0 0.0.0.0/0 port 21 -> 127.0.0.1 port 21<br />
这条规则是说任何连接ftp的数据包都被重定向到了127.0.0.1<br />
针对ftp的代理有些复杂，因为web浏览器或者其它自动登录类型的客户端不知道如何跟代理通信。有个补丁是针对TIS防火墙的sftp-gw，NAT配合这个补丁能够解决这个问题。很多代理软件是透明代理(如squid)。<br />
当你想强迫你的用户先向代理请求验证时，关键字rdr经常是很有用的。(例如你想让你的工程师能够上网冲浪，但是不希望呼叫中心的员工上网)</p>
<p>4.6 应用代理</p>
<p>ftp 有两种工作方式，如果想让防火墙后面的ftp正常工作，应该使用应用代理。我们可以让我们的防火墙注意通过它的每一个包，当它发现它正在处理的是主动 ftp连接，它能够产生几条临时规则，就像keep state，使得ftp的数据传输能够正常工作。我们需要些这样的规则：<br />
map tun0 192.168.1.0/24 -> 20.20.20.1/32 proxy port ftp ftp/tcp<br />
记得把这条规则写在其它映射规则的前面，否则其它映射规则在这条规则就起作用了，记住ipnat跟ipfilter不同，ipnat是先匹配规则(只要一匹配其它规则就跳过去)。另外rcmd和raudio代理也必须写在其它规则的前面。</p>
<p>5. 操作过滤规则，ipf</p>
<p>ipf用来加载ipfilter规则。规则文件可以放在系统的任何地方，但是一般都放在/etc/ipf.rules,/usr/local/etc/ipf.rules,/etc/opt/ipf/ipf.rules<br />
IPfilter可以有两套规则，活动规则和不活动规则。默认情况下所有的操作都是基于活动规则。你可以用ipf -I来使用不活动规则。这两套规则可以用参数-s进行转换。这是非常有用的，你在测试新规则的时候就不用清除老规则。<br />
ipf加参数-r可以删除列表中的规则，但是比较安全的方法是用参数-F清除规则，然后再加载修改后的规则。<br />
加载规则最简单的方法是ipf -Fa -f /etc/ipf.rules.想获得其它操作规则的方法请参考ipf的man page.</p>
<p>6．加载NAT规则，ipnat<br />
<span id="more-124"></span><br />
ipnat 用来加载NAT规则。规则文件可以放在系统的任何地方，但是一般都放在 /etc/ipnat.rules/usr/local/etc/ipnat.rules，/etc/opt/ipf/ipnat.rules用 ipnat加载，也可以用参数-r删除规则。但一般也是清空(参数-C)然后加载，对于活动的映射-C无效，可以用-F来清除。<br />
NAT规则和活动的映射可以用ipnat -l查看。最简单的家在NAT规则的方法是ipnat -CF -f /etc/ipnat.rules.</p>
<p>7. 监视和调试</p>
<p>你也许很想知道防火墙到底在干什么，而且如果ipfilter没有状态监视工具的话，它就不是一个完整的防火墙。</p>
<p>7.1 ipfstat工具</p>
<p>ipfstat最简的用法是显示一个关于防火墙执行情况的数据表，比如有多少个包通过或则抛弃，它们是否被记录，以及由多少状态条等等。你将看到的是这样一些数据：<br />
# ipfstat<br />
input packets: blocked 99286 passed 1255609 nomatch 14686 counted 0<br />
output packets: blocked 4200 passed 1284345 nomatch 14687 counted 0</p>
<p>input packets logged: blocked 99286 passed 0<br />
output packets logged: blocked 0 passed 0<br />
packets logged: input 0 output 0<br />
log failures: input 3898 output 0<br />
fragment state(in): kept 0 lost 0<br />
fragment state(out): kept 0 lost 0<br />
packet state(in): kept 169364 lost 0<br />
packet state(out): kept 431395 lost 0<br />
ICMP replies: 0 TCP RSTs sent: 0<br />
Result cache hits(in): 1215208 (out): 1098963<br />
IN Pullups succeeded: 2 failed: 0<br />
OUT Pullups succeeded: 0 failed: 0<br />
Fastroute successes: 0 failures: 0<br />
TCP cksum fails(in): 0 (out): 0<br />
Packet log flags set: (0)<br />
none</p>
<p>ipfstat当然也能够显示你目前的规则列表。参数-i或者-o显示有哪些in规则或者out规则，加上参数-h能够显示更详细的信息，包括每条规则有多少个数据包命中。例如：<br />
# ipfstat -ho<br />
2451423 pass out on xl0 from any to any<br />
354727 block out on ppp0 from any to any<br />
430918 pass out quick on ppp0 proto tcp/udp from 20.20.20.0/24 to any keep state keep frags</p>
<p>从这里我们可以看出哪些地方可能不正常，ipfstat不能告诉你哪些规则正确或者错误，它只是告诉你由于你的规则而发生了什么事情。为了进一步调试规则，可以使用参数-n，这个参数显示规则的顺序<br />
# ipfstat -on<br />
@1 pass out on xl0 from any to any<br />
@2 block out on ppp0 from any to any<br />
@3 pass out quick on ppp0 proto tcp/udp from 20.20.20.0/24 to any keep state keep frags</p>
<p>ipfstat的最后一个用处是显示一些关于状态记录的数据。这个参数是-s<br />
# ipfstat -s<br />
281458 TCP<br />
319349 UDP<br />
0 ICMP<br />
19780145 hits<br />
5723648 misses<br />
0 maximum<br />
0 no memory<br />
1 active<br />
319349 expired<br />
281419 closed<br />
100.100.100.1 -> 20.20.20.1 ttl 864000 pass 20490 pr 6 state 4/4<br />
pkts 196 bytes 17394 987 -> 22 585538471:2213225493 16592:16500<br />
pass in log quick keep state<br />
pkt_flags &#038; b = 2, pkt_options &#038; ffffffff = 0<br />
pkt_security &#038; ffff = 0, pkt_auth &#038; ffff = 0</p>
<p>从这我们可以看到有一条tcp连接状态。不同的版本输出的内容会略有不同，但是基本的信息是一样的。这条连接的状态是4/4，而其它的状态是不完整的，我们将在后面详细介绍。4/4状态的超时时间是240小时，相当长的一段时间，但它默认是已建立的tcp连接的超时时间。当这条状态空闲时TTL的值每秒减 1，最终超时并被删除。当一个连接状态重新启用时，它的TTL值又恢复到864000，必须确保一个活动的连接不会超时。我们还可以看到有196个17K 的数据包通过。还有两端的端口号，这个例子是987和22。这意味着这条状态表示一个从100.100.100.1端口987到20.20.20.1端口 22的连接。第二行最大的数字是TCP顺序号，保证没有人能够轻易的在这个连接中注入伪装的数据包。TCP的窗口也显示出来。</p>
<p>7.2 ipmon</p>
<p>ipfstat 对收集在系统上发生的事情很有用，但是它还不能够方便且及时的查看日志。ipmon是一个工具，它有能力查看包过滤的日志(关键字log产生的日志)，状态日志，或者是nat日志以及由它们三者共同产生的日志。这个工具可以在前台运行也可以在后台运行(将日志传给syslogd或者一个文件)。如果我们想看状态表的当前情况，可以运行ipmon -o S<br />
# ipmon -o S<br />
01/08/1999 15:58:57.836053 STATE:NEW 100.100.100.1,53 -> 20.20.20.15,53 PR udp<br />
01/08/1999 15:58:58.030815 STATE:NEW 20.20.20.15,123 -> 128.167.1.69,123 PR udp<br />
01/08/1999 15:59:18.032174 STATE:NEW 20.20.20.15,123 -> 128.173.14.71,123 PR udp<br />
01/08/1999 15:59:24.570107 STATE:EXPIRE 100.100.100.1,53 -> 20.20.20.15,53 PR udp Pkts 4 Bytes 356<br />
01/08/1999 16:03:51.754867 STATE:NEW 20.20.20.13,1019 -> 100.100.100.10,22 PR tcp<br />
01/08/1999 16:04:03.070127 STATE:EXPIRE 20.20.20.13,1019 -> 100.100.100.10,22 PR tcp Pkts 63 Bytes 4604</p>
<p>我们可以看到有一条外部机器向我们的dnssever发送dns请求的状态条，两条xntp ping到时间服务器，一条短暂的向外的ssh连接。<br />
ipmon也可以显示哪些数据包被日志记录了。例如<br />
# ipmon -o I<br />
15:57:33.803147 ppp0 @0:2 b 100.100.100.103,443 -> 20.20.20.10,4923 PR tcp len 20 1488 -A</p>
<p>它们的含义分别是时间戳 接口 规则 阻止 源地址，端口 -> 目的地址，端口 协议 tcp 包长度 20 1488 ACK<br />
最后我们看一下NAT表<br />
# ipmon -o N<br />
01/08/1999 05:30:02.466114 @2 NAT:RDR 20.20.20.253,113 <- -> 20.20.20.253,113 [100.100.100.13,45816]<br />
01/08/1999 05:30:31.990037 @2 NAT:EXPIRE 20.20.20.253,113 <- -> 20.20.20.253,113 [100.100.100.13,45816] Pkts 10 Bytes 455</p>
<p>这是一条重定向的规则，用于在我们的防火墙后面提供规则的场合。</p>
<p>8．ipfilter的特殊用法</p>
<p>8.1 基于服务器和标志的deep state</p>
<p>保存状态很有用，但是很容易犯错。通常，你在第一条与数据包进行交互的规则中加入keep state，一个普遍的错误是混合了状态跟踪和基于标志的过滤：<br />
block in all<br />
pass in quick proto tcp from any to 20.20.20.20/32 port = 23 flags S<br />
pass out all keep state</p>
<p>这几条规则的本意是允许客户机与服务器20.20.20.20进行telnet连接，如果你在试验这规则你会发现它能够马上起作用，由于我们是对SYN进行匹配的，状态条是不能够做到4/4的(不完整状态)，这个状态默认的超时是60秒。<br />
我们可以重写规则来解决这个问题：<br />
1)</p>
<p>block in all<br />
pass in quick proto tcp from any to 20.20.20.20/32 port = 23 keep state<br />
block out all</p>
<p>或者<br />
2)</p>
<p>block in all<br />
pass in quick proto tcp from any to 20.20.20.20/32 port = 23 flags S keep state<br />
pass out all keep state</p>
<p>这两组规则的任何一组都可以为每个连接建立完整的状态条。</p>
<p>8.2 解决ftp</p>
<p>ftp有两种不同的传输模式，防火墙管理员不得不解决ftp的这些问题。更糟的是ftp客户机和服务器的问题是不一样的。<br />
ftp协议里面有两种数据传输模式，主动和被动。主动传输是服务器向客户机的一个开放端口进行连接然后传数据。相反地，被动传输是客户机向服务器发起连接并接受数据。</p>
<p>8.2.1 运行ftp服务</p>
<p>在运行ftp服务中，处理主动ftp的连接是比较简单的。而处理被动ftp则是一个大问题。首先我们先讨论怎样处理主动ftp，然后是被动ftp。通常主动ftp就像一个进入的http或者smtp连接：我们只要打开ftp端口并keep state就可以了：<br />
pass in quick proto tcp from any to 20.20.20.20/32 port = 21 flags S keep state<br />
pass out proto tcp all keep state</p>
<p>这两条规则允许主动ftp连接，这是最常见的类型。<br />
下面是处理被动ftp连接。web浏览器默认是这种情况，它变得越来越流行，因此我们必须支持它。被动ftp的问题是针对每个被动连接，ftp服务器必须重开一个新端口(通常是1023以上)。这就像是在服务器上提供一个新的服务。如果我们的防火墙默认策略是禁止的，那么这个新的服务将被阻止，ftp会话就中断了。但是我们还有别的办法可以解决这个问题。<br />
也许有人会打开所有1023以上的端口来解决这个问题。事实上，这个方法确实能够解决问题，尽管它令人不太满意：<br />
pass in quick proto tcp from any to 20.20.20.20/32 port > 1023 flags S keep state<br />
pass out proto tcp all keep state</p>
<p>打开所有1023以上的端口，我们将面临一些潜在的危险。端口1-1023是提供给服务进程使用的，众多的程序决定使用1023以上的端口，比如nfsd和X<br />
幸运的是ftp服务进程可以自己决定哪个端口分配给被动连接。这意味着你可以仅仅打开15001-19999端口作为ftp的端口，而不是打开所有1023 以上的端口。在wu-ftpd里面，可以在ftpaccess中指定被动端口。请参考ftpaccess的手册。ipfilter所需要做的仅仅是建立相应的规则：<br />
pass in quick proto tcp from any to 20.20.20.20/32 port 15000 >< 20000 flags S keep state<br />
pass out proto tcp all keep state</p>
<p>如果这样还不能使你满意的话，你只好修改ipf来支持ftp或者修改ftp来支持ipf。</p>
<p>8.2.2 运行ftp客户程序</p>
<p>尽管ipf对ftp服务的支持不甚完美，但是从3.3.3以后的版本对ftp客户软件的支持已经比较完善。就像ftp服务一样，ftp客户应用也有两个传输模式：主动和被动。<br />
从防火墙的观点来看，ftp最简单的传输模式是被动模式。假设你对所有外出的tcp连接keep state，被动传输就可以正常工作了。如果你还没有这样做的话可以使用下面的规则：<br />
pass out proto tcp all keep state<br />
主动模式有一点麻烦，主动模式使服务器打开第二个连接与客户机进行数据交换。当它们之间有防火墙时就会出现问题。为了解决这个问题，ipfilter包含了一个ipnat代理，这个代理临时在防火墙上打开一个洞，使得ftp服务器可以顺利的连接客户机。甚至是你没有使用ipnat来做地址转换，这个代理也是有效的。下面这条规则加入ipnat的配置文件当中(ep0是外网接口):<br />
map ep0 0/0 -> 0/32 proxy port 21 ftp/tcp<br />
关于ipfilter内部代理的细节，请看3.6</p>
<p>8.3 内核参数</p>
<p>有一些内核参数是建立ipf所必需的，还有一些让我们可以方便的了解建立防火墙的信息。其中主要的一项是打开ip转发，否则ipf几乎什么也做不了，因为ip栈不会真的路由数据包。<br />
ip转发：<br />
openbsd:<br />
net.inet.ip.forwarding=1</p>
<p>freebsd:<br />
net.inet.ip.forwarding=1</p>
<p>netbsd:<br />
net.inet.ip.forwarding=1</p>
<p>solaris:<br />
ndd -set /dev/ip ip_forwarding 1</p>
<p>端口调整：<br />
openbsd:<br />
net.inet.ip.portfirst = 25000</p>
<p>freebsd:<br />
net.inet.ip.portrange.first = 25000 net.inet.ip.portrange.last = 49151</p>
<p>netbsd:<br />
net.inet.ip.anonportmin = 25000 net.inet.ip.anonportmax = 49151</p>
<p>solaris:<br />
ndd -set /dev/tcp tcp_smallest_anon_port 25000<br />
ndd -set /dev/tcp tcp_largest_anon_port 65535</p>
<p>其它有用的参数：<br />
openbsd:<br />
net.inet.ip.sourceroute = 0<br />
net.inet.ip.directed-broadcast = 0</p>
<p>openbsd:<br />
net.inet.ip.sourceroute = 0<br />
net.inet.ip.directed-broadcast = 0</p>
<p>freebsd:<br />
net.inet.ip.sourceroute=0<br />
net.ip.accept_sourceroute=0</p>
<p>netbsd:<br />
net.inet.ip.allowsrcrt=0<br />
net.inet.ip.forwsrcrt=0<br />
net.inet.ip.directed-broadcast=0<br />
net.inet.ip.redirect=0</p>
<p>solaris:<br />
ndd -set /dev/ip ip_forward_directed_broadcasts 0<br />
ndd -set /dev/ip ip_forward_src_routed 0<br />
ndd -set /dev/ip ip_respond_to_echo_broadcast 0</p>
<p>另外，freebsd有一些sysctl变量：<br />
net.inet.ipf.fr_flags: 0<br />
net.inet.ipf.fr_pass: 514<br />
net.inet.ipf.fr_active: 0<br />
net.inet.ipf.fr_tcpidletimeout: 864000<br />
net.inet.ipf.fr_tcpclosewait: 60<br />
net.inet.ipf.fr_tcplastack: 20<br />
net.inet.ipf.fr_tcptimeout: 120<br />
net.inet.ipf.fr_tcpclosed: 1<br />
net.inet.ipf.fr_udptimeout: 120<br />
net.inet.ipf.fr_icmptimeout: 120<br />
net.inet.ipf.fr_defnatage: 1200<br />
net.inet.ipf.fr_ipfrttl: 120<br />
net.inet.ipf.ipl_unreach: 13<br />
net.inet.ipf.ipl_inited: 1<br />
net.inet.ipf.fr_authsize: 32<br />
net.inet.ipf.fr_authused: 0<br />
net.inet.ipf.fr_defaultauthage: 600</p>
<p>9. 有趣的ipf</p>
<p>这一部分不是教你ipf的一些新东西，但是可能提到一些你没有考虑到的，或者引发你发明一些我们没有考虑过的东西。</p>
<p>9.1 内网过滤</p>
<p>很久以前，有个叫Wietse Venema创建了一个tcp-wrapper包，它被用来保护网络服务，这很好，但是tcp-wrappers也有缺点。首先，就像它名字所说的，它只能保护tcp服务。另外，你必须用inetd来运行服务，而且你还要与libwrap一起编译，并且服务进程跟tcp-wrapper联系起来才能保护你的服务进程。这样系统就留下了一些巨大的安全漏洞，我们可以在本机上使用ipf堵上这些漏洞。例如我的电脑需要经常接入不太可靠的网络，我可以使用以下规则集：<br />
pass in quick on lo0 all<br />
pass out quick on lo0 all</p>
<p>block in log all<br />
block out all</p>
<p>pass in quick proto tcp from any to any port = 113 flags S keep state<br />
pass in quick proto tcp from any to any port = 22 flags S keep state<br />
pass in quick proto tcp from any port = 20 to any port 39999 >< 45000 flags S keep state</p>
<p>pass out quick proto icmp from any to any keep state<br />
pass out quick proto tcp/udp from any to any keep state keep frags</p>
<p>这个规则集对你的本地网来说已经很安全了，如果你想让你的防火墙更安全，你可以使用ftp的应用代理，而且你可以加入防止欺骗的规则集。如果你的机器有很多个用户而且你不想让他们启动一个不属于他们的服务的话，这个规则集是比较合适的。这个规则集不能阻止一个拥有root权限的cracker修改你的ipf 规则或者启动一个服务进程，它可以使你在一个复杂的局域网内更安全，我觉得这一点是很重要的。在一个规则集中加入本地过滤的规则通常可以解决很多性能问题。</p>
<p>9.2 什么是防火墙？透明过滤器</p>
<p>建立一个防火墙必须保证防火墙本身的完整性。有人可以突破你的防火墙并改变防火墙规则吗？这是管理员们必须面对的一个问题。<br />
很多网络管理员对普通的以太网桥很熟悉，它是用来将两个独立的以太网连接成一个以太网的设备。通常是用来连接两栋建筑物，转换网络速度或者扩展网络有效的连接距离。集线器和交换器是普通的网桥，有时它们只有两个接口，我们称之为中继器。现在的Linux，OpenBSD，NetBSD，FreeBSD都可以将一台pc机当成网桥使用。网桥有一个共同的特点是连接两台机器，而这两台机器并不知道网桥的存在。<br />
以太网桥作用于ISO协议栈的第二层，ip栈作用于第三层。IP Filter主要是作用于第三层，还涉及到第二层的网络接口。OpenBSD的网桥设备配合IP filter可以建立一个不可见的防火墙。这个系统不需要IP地址，它甚至不用暴露它的以太网地址(MAC)仅仅是使数据包的延迟稍微提高。<br />
建立这样的规则惊人的简单。在OpenBSD里面，第一个网桥设备名是bridbe0.假设我们的机器上有两块网卡，xl0和xl1.为了使这台机器成为一个网桥，我们所要做的仅仅是输入下面三条命令：<br />
brconfig bridge0 add xl0 add xl1 up<br />
ifconfig xl0 up<br />
ifconfig xl1 up</p>
<p>所有到达xl0的数据包都被送到xl1，所有到达xl1的数据包都被送到xl0。你会注意到两个网卡都没有分配IP地址，也没有必要。最好是不分配地址。<br />
尽管有一个bridge0接口，我们并不是基于这个接口进行过滤的，从一个简单的例子开始，假设我们的网络是这样的：<br />
20.20.20.1 <---------------------------------> 20.20.20.0/24 network hub<br />
在20.20.20.1上有一个路由器，所有20.20.20.0/24外出的数据包都是通过20.20.20.1。现在我们加入一个ipf网桥：<br />
20.20.20.1 <-------/xl0 IpfBridge xl1/-------> 20.20.20.0/24 network hub<br />
我们在ipf桥上设置了这样几条规则：<br />
pass in quick all<br />
pass out quick all</p>
<p>这个网络的功能没有改变，现在我们改变一下规则：<br />
block in quick on xl0 proto icmp<br />
pass in quick all<br />
pass out quick all</p>
<p>20.20.20.1 和20.20.20.0/24还是认为网络没有改变，只是如果20.20.20.1 ping 20.20.20.2时，它将接受不到回复。事实上20.20.20.2根本就接受不到ping。ipfilter在中间阻止了这个数据包(ping)到达另一端。我们可以在任何地方设置一个ipf网桥。这种方法可以将一个网络缩小到一台主机，只要有足够多的网卡。<br />
阻止来自外网的icmp看起来有点愚蠢，特别的如果你是一个系统管理员，你想ping外网，traceroute，或者改变MTU的大小。让我们建立一个更好的规则集，利用ipf的主要特点：状态检查。<br />
pass in quick on xl1 proto tcp keep state<br />
pass in quick on xl1 proto udp keep state<br />
pass in quick on xl1 proto icmp keep state<br />
block in quick on xl0</p>
<p>这种情况下，20.20.20.0/24(也许称为xl1网络会比较好)能够到达外部网，而外网无法进入20.20.20.0/24，甚至是路由器不安全的时候，防火墙还是能够起作用。<br />
现在我们仅仅是基于接口和协议进行过滤。我们还可以基于ip地址进行过滤。通常我们会提供一些服务，因此我们的规则集看起来会是这样：<br />
pass in quick on xl1 proto tcp keep state<br />
pass in quick on xl1 proto udp keep state<br />
pass in quick on xl1 proto icmp keep state<br />
block in quick on xl1 # nuh-uh, we&#8217;re only passing tcp/udp/icmp sir.<br />
pass in quick on xl0 proto udp from any to 20.20.20.2/32 port=53 keep state<br />
pass in quick on xl0 proto tcp from any to 20.20.20.2/32 port=53 flags S keep state<br />
pass in quick on xl0 proto tcp from any to 20.20.20.3/32 port=25 flags S keep state<br />
pass in quick on xl0 proto tcp from any to 20.20.20.7/32 port=80 flags S keep state<br />
block in quick on xl0</p>
<p>现在我们有这么一个网络，20.20.20.2是一个域名服务器，20.20.20.3是一个邮件服务器，20.20.20.7是一个web服务器。<br />
我们必须承认，ipfilter网桥还很不完善。<br />
首先，所有的规则都只有in方向而没有out方向。这是因为OpenBSD网桥的out还没有实现。当初这样设计的本意是不因为使用多个接口而使性能大幅降低。现在性能问题已经得到改善，但是out仍然没有实现。如果你有需要，你可以手动修改代码或者是寻求其他OpenBSD使用者的帮忙。<br />
其次，在ipf网桥中使用NAT是很不明智的。因为这将暴露ipf网桥的存在，而且也没有ip地址可以用来映射。当然你可以给接口设置ip地址使得NAT可以正常工作，但是网桥的优点就会降低。</p>
<p>9.2.1 利用透明过滤修复网络设计失误</p>
<p>很多机构认为建立一个子网一个防火墙是一个好主意。他们拥有c类地址甚至更大地址空间的网络，这个网络包含了所有服务，包括他们的服务器，工作站，路由器。这是很糟糕的！重新调整合适的子网，信任级别，过滤器等等将要付出大量的人力和财力。昂贵的付出通常使大部分机构不想去解决这个问题，这还不包括停工期。这个问题看起来是这样的：<br />
20.20.20.1 router 20.20.20.6 unix server<br />
20.20.20.2 unix server 20.20.20.7 nt workstation<br />
20.20.20.3 unix server 20.20.20.8 nt server<br />
20.20.20.4 win98 workstation 20.20.20.9 unix workstation<br />
20.20.20.5 intelligent switch 20.20.20.10 win95 workstation</p>
<p>实际情况可能复杂得多。比较合适的做法是将所有可信任的服务器归为一个子网，其他工作站归为另外一个子网，剩下的就是交换机在同一个子网。现在路由器可以过滤所有子网，限制工作站访问服务器。现在这个C类网络看起来就比较一致了。<br />
首先我们将路由器，工作站，服务器分开。为了达到这个目的，我们需要两个集线器(或者交换机),一台三个网卡的ipf机器.我们将所有的服务器接在一个集线器上,所有的工作站接另一个集线器,通常我们将两个集线器连起来,然后再接到路由器。这里我们将路由器接到ipf的xl0接口，服务器组接到xl1，工作站接到xl2，我们的网络图看起来是这样的：</p>
<p>| 20.20.20.2 unix server<br />
router (20.20.20.1) _____| 20.20.20.3 unix server<br />
| / | 20.20.20.6 unix server<br />
| /xl1 | 20.20.20.7 nt server<br />
&#8212;&#8211;/xl0 IPF Bridge <<br />
\xl2 | 20.20.20.4 win98 workstation<br />
\______| 20.20.20.8 nt workstation<br />
| 20.20.20.9 unix workstation<br />
| 20.20.20.10 win95 workstation</p>
<p>为了充分的利用filter网桥的优点，我们添加了一些规则：</p>
<p>pass in quick on xl0 proto udp from any to 20.20.20.2/32 port=53 keep state<br />
pass in quick on xl0 proto tcp from any to 20.20.20.2/32 port=53 flags S keep state<br />
pass in quick on xl0 proto tcp from any to 20.20.20.3/32 port=25 flags S keep state<br />
pass in quick on xl0 proto tcp from any to 20.20.20.7/32 port=80 flags S keep state<br />
block in quick on xl0<br />
pass in quick on xl1 proto tcp keep state<br />
pass in quick on xl1 proto udp keep state<br />
pass in quick on xl1 proto icmp keep state<br />
block in quick on xl1 # nuh-uh, we&#8217;re only passing tcp/udp/icmp sir.<br />
pass in quick on xl2 proto tcp keep state<br />
pass in quick on xl2 p