<?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>LinuxByte &#187; 系统网络安全</title>
	<atom:link href="http://www.linuxbyte.org/category/security/feed" rel="self" type="application/rss+xml" />
	<link>http://www.linuxbyte.org</link>
	<description>一个Linux Blog</description>
	<lastBuildDate>Thu, 26 Jan 2012 08:13:08 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>用Cryptsetup LUKS 加密目录</title>
		<link>http://www.linuxbyte.org/cryptsetup-luks-jiami.html</link>
		<comments>http://www.linuxbyte.org/cryptsetup-luks-jiami.html#comments</comments>
		<pubDate>Fri, 06 Mar 2009 13:31:19 +0000</pubDate>
		<dc:creator>xiao H</dc:creator>
				<category><![CDATA[系统网络安全]]></category>
		<category><![CDATA[Cryptsetup]]></category>
		<category><![CDATA[DM-Crypt]]></category>
		<category><![CDATA[LUKS]]></category>
		<category><![CDATA[加密]]></category>

		<guid isPermaLink="false">http://www.linuxbyte.org/?p=386</guid>
		<description><![CDATA[系统：Centos 5.x 这里是用了Cryptsetup cryptoloop实现的变通版目录加密。 以下操作都已root 用户操作 dd if=/dev/urandom of=myfile bs=1M count=10 losetup /dev/loop0 myfile 这是创建一个存储空间，并将其关联到 /dev/l... ]]></description>
			<content:encoded><![CDATA[<p>系统：Centos 5.x</p>
<p>这里是用了Cryptsetup cryptoloop实现的变通版目录加密。</p>
<p>以下操作都已root 用户操作</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"> <span style="color: #c20cb9; font-weight: bold;">dd</span> <span style="color: #007800;">if</span>=<span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>urandom <span style="color: #007800;">of</span>=myfile <span style="color: #007800;">bs</span>=1M <span style="color: #007800;">count</span>=<span style="color: #000000;">10</span>
 losetup <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>loop0 myfile</pre></div></div>

<p>这是创建一个存储空间，并将其关联到 /dev/loop0</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"> cryptsetup luksFormat <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>loop0
<span style="color: #666666; font-style: italic;">#这里会要你YES，然后是密码，注意YES 是全大写的，小写是不行的。</span>
 cryptsetup luksOpen <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>loop0 myfs
<span style="color: #666666; font-style: italic;">#这里要输入上面的那个密码，为/dev/loop0 创建一个Device-Mapper 文件:/dev/mapper/myfs</span>
mkfs.ext2 <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>mapper<span style="color: #000000; font-weight: bold;">/</span>myfs
<span style="color: #666666; font-style: italic;">#格式化文件系统</span>
<span style="color: #c20cb9; font-weight: bold;">mkdir</span> <span style="color: #000000; font-weight: bold;">/</span>mnt<span style="color: #000000; font-weight: bold;">/</span>crypt
<span style="color: #c20cb9; font-weight: bold;">mount</span> <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>mapper<span style="color: #000000; font-weight: bold;">/</span>myfs <span style="color: #000000; font-weight: bold;">/</span>mnt<span style="color: #000000; font-weight: bold;">/</span>crypt<span style="color: #000000; font-weight: bold;">/</span></pre></div></div>

<p><span id="more-386"></span><br />
完成上面后，/mnt/crypt/ 就是你的加密目录，而目录的位置和用户权限是可以自己控制的，这个可以自己看看mount 的manpage。</p>
<p>文件写入完成后要卸载就做下面步骤：</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">umount</span> <span style="color: #000000; font-weight: bold;">/</span>mnt<span style="color: #000000; font-weight: bold;">/</span>crypt<span style="color: #000000; font-weight: bold;">/</span>
cryptsetup luksClose <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>mapper<span style="color: #000000; font-weight: bold;">/</span>myfs
losetup <span style="color: #660033;">-d</span> <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>loop0</pre></div></div>

<p>如果要再写入可以就做下面步骤：</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">losetup <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>loop0 myfile
cryptsetup luksOpen <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>loop0 myfs
<span style="color: #c20cb9; font-weight: bold;">mount</span> <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>mapper<span style="color: #000000; font-weight: bold;">/</span>myfs <span style="color: #000000; font-weight: bold;">/</span>mnt<span style="color: #000000; font-weight: bold;">/</span>crypt<span style="color: #000000; font-weight: bold;">/</span></pre></div></div>

<h2  class="related_post_title">与本文关系暧昧的文字</h2><ul class="related_post"><li><a href="http://www.linuxbyte.org/firegpg-fei-chang-hao-yong-de-gpg-gong-ju.html" title="FireGPG-非常好用的GPG工具">FireGPG-非常好用的GPG工具</a></li><li><a href="http://www.linuxbyte.org/linux-xia-de-wen-jian-jia-mi.html" title="Linux 下的文件加密">Linux 下的文件加密</a></li><li><a href="http://www.linuxbyte.org/wo-de-gnupg-shi-yong-bi-ji.html" title="我的GnuPG 使用笔记">我的GnuPG 使用笔记</a></li><li><a href="http://www.linuxbyte.org/yong-cryptkeeperhe-encfs-wan-cheng-mu-lu-jia-mi.html" title="用Cryptkeeper和EncFS 完成目录加密">用Cryptkeeper和EncFS 完成目录加密</a></li><li><a href="http://www.linuxbyte.org/yong-shc-jiami-shell.html" title="用shc 加密shell">用shc 加密shell</a></li></ul><hr />
<p><small>© xiao H for <a href="http://www.linuxbyte.org">LinuxByte</a>, 2009<br />
Source: <a href="http://www.linuxbyte.org/cryptsetup-luks-jiami.html">用Cryptsetup LUKS 加密目录</a><br />
Post tags: <a href="http://www.linuxbyte.org/tag/cryptsetup" rel="tag">Cryptsetup</a>, <a href="http://www.linuxbyte.org/tag/dm-crypt" rel="tag">DM-Crypt</a>, <a href="http://www.linuxbyte.org/tag/luks" rel="tag">LUKS</a>, <a href="http://www.linuxbyte.org/tag/%e5%8a%a0%e5%af%86" rel="tag">加密</a><br/>
</small></p>
	<p style="margin:3px 0 0 0;">标签：<a href="http://www.linuxbyte.org/tag/cryptsetup" title="Cryptsetup" rel="tag">Cryptsetup</a>, <a href="http://www.linuxbyte.org/tag/dm-crypt" title="DM-Crypt" rel="tag">DM-Crypt</a>, <a href="http://www.linuxbyte.org/tag/luks" title="LUKS" rel="tag">LUKS</a>, <a href="http://www.linuxbyte.org/tag/%e5%8a%a0%e5%af%86" title="加密" rel="tag">加密</a></p>

<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxbyte.org/cryptsetup-luks-jiami.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>使用chkrootkit工具保护服务器</title>
		<link>http://www.linuxbyte.org/chkrootkit-minihowto.html</link>
		<comments>http://www.linuxbyte.org/chkrootkit-minihowto.html#comments</comments>
		<pubDate>Thu, 17 Jul 2008 17:35:16 +0000</pubDate>
		<dc:creator>xiao H</dc:creator>
				<category><![CDATA[服务器应用]]></category>
		<category><![CDATA[系统网络安全]]></category>
		<category><![CDATA[chkrootkit]]></category>

		<guid isPermaLink="false">http://www.linuxbyte.org/?p=179</guid>
		<description><![CDATA[      在保护linux 服务器时除了Tripwire 这样强大工具外，还有一个简单又好用的工具&#8211;chkrootkit。chkrootkit 顾名思义是监测系统是否被安装了rootkit 的一个安全工具。 安装chkrootkit，你可以自... ]]></description>
			<content:encoded><![CDATA[<p>      在保护linux 服务器时除了Tripwire 这样强大工具外，还有一个简单又好用的工具&#8211;chkrootkit。chkrootkit 顾名思义是监测系统是否被安装了rootkit 的一个安全工具。</p>
<p><strong>安装chkrootkit</strong>，你可以自己去 <a href="http://www.chkrootkit.org/download/">http://www.chkrootkit.org/download/</a> 下载源码包，然后自己编译，也可以和我一样偷懒用别人做好的二进制包.<span id="more-179"></span></p>
<p>centos 下用非官方源安装chkrootkit:<br />
首先添加dag 源for centos（我的系统是centos5.2）</p>
<blockquote>
<p style="padding-left: 30px;"># vi /etc/yum.repos.d/dag.repo<br />
[dag]<br />
name=Dag RPM Repository for Red Hat Enterprise Linux<br />
baseurl=http://apt.sw.be/redhat/el$releasever/en/$basearch/dag<br />
gpgcheck=1<br />
enabled=1
</p>
<p style="padding-left: 30px;"># rpm &#8211;import <a href="http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt">http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt</a></p>
<p style="padding-left: 30px;">yum 安装chkrootkit<br />
# yum update<br />
# yum install chkrootkit</p>
</blockquote>
<p><strong>chkrootkit的应用</strong><br />
chkrootkit 的使用非常简单直接运行 chkrootkit 命令，然后会有如下输出</p>
<p style="padding-left: 30px;">ROOTDIR is `/&#8217;<br />
Checking `amd&#8217;&#8230; not found<br />
Checking `basename&#8217;&#8230; not infected<br />
Checking `biff&#8217;&#8230; not found<br />
Checking `chfn&#8217;&#8230; not infected<br />
Checking `chsh&#8217;&#8230; not infected<br />
Checking `cron&#8217;&#8230; not infected<br />
Checking `crontab&#8217;&#8230; not infected<br />
Checking `date&#8217;&#8230; not infected<br />
Checking `du&#8217;&#8230; not infected<br />
Checking `dirname&#8217;&#8230; not infected<br />
Checking `echo&#8217;&#8230; not infected<br />
Checking `egrep&#8217;&#8230; not infected<br />
Checking `env&#8217;&#8230; not infected<br />
.<br />
.<br />
.</p>
<p>如果有rootkit会报<span style="color: #ff0000;">“INFECTED”</span> 所以可以直接用chkrootkit -n|grep &#8216;INFECTED&#8217;更直接一些。</p>
<p>定时检测并在出问题时给管理员发邮件。<br />
创建如下脚本chkrootkit.sh并放入crontab 定时运行。
</p>
<p style="padding-left: 30px;"># cat chkrootkit.sh<br />
#!/bin/bash<br />
PATH=/usr/bin:/bin
</p>
<p style="padding-left: 30px;">TMPLOG=`mktemp`</p>
<p style="padding-left: 30px;"># Run the chkrootkit<br />
/usr/bin/chkrootkit &gt; $TMPLOG</p>
<p style="padding-left: 30px;"># Output the log<br />
cat $TMPLOG | logger -t chkrootkit</p>
<p style="padding-left: 30px;"># bindshe of SMTPSllHow to do some wrongs<br />
if [ ! -z "$(grep 465 $TMPLOG)" ] &amp;&amp; \<br />
   [ -z $(/usr/sbin/lsof -i:465|grep bindshell) ]; then<br />
   sed -i &#8216;/465/d&#8217; $TMPLOG<br />
   fi</p>
<p style="padding-left: 30px;"># If the rootkit have been found,mail root<br />
[ ! -z "$(grep INFECTED $TMPLOG)" ] &amp;&amp; \<br />
grep INFECTED $TMPLOG | mail -s “chkrootkit report in `hostname`” root</p>
<p># chmod 700 chkroot.sh<br />
# <span class="command">mv chkrootkit /etc/cron.daily</span></p>
<p><span class="command">这样系统会每天运行chkrootkit 检测系统，并在检测到rootkit 时给root 发一封邮件。</span></p>
<p><span class="command"><strong>把给root 用户的系统邮件转发的管理员的gmail 邮箱</strong></span></p>
<p><span class="command">虽然可以登陆到系统去看系统邮件，但显然能用gmail 查看是更方便的选择。<br />
1.安装sendmail 邮件转发要用到sendmail，<br />
# yum sendmail<br />
# /etc/intit.d/sendmail start (sendmail服务)</span><span class="command"><br />
2.设置转发，编辑/etc/aliases，在文件最后加入<br />
root: <a href="mailto:youname@gmail.com">youname@gmail.com</a> 然后运行newaliases 命令更新aliases<br />
 这样系统就会把给root 的邮件转发的你gmail 邮箱里去了。</span></p>
<p><span class="command">本文中严重参考<a title="入侵监测系统的构建（ chkrootkit ）" href="http://www.centospub.com/make/chkrootkit.html" target="_blank"><strong>入侵监测系统的构建（ chkrootkit ）</strong></a> 一文，感谢该文作者的工作。</span></p>
<h2  class="related_post_title">其他大家爱看的文字</h2><ul class="related_post"><li><a href="http://www.linuxbyte.org/openoffice-optimization-tips.html" title="使 OpenOffice.org 运行更快的技巧">使 OpenOffice.org 运行更快的技巧</a></li><li><a href="http://www.linuxbyte.org/wps-for-linux-zui-xin-xiao-xi.html" title="WPS for Linux 最新消息">WPS for Linux 最新消息</a></li><li><a href="http://www.linuxbyte.org/opensuse-11-4-rc2-fa-bu.html" title="openSUSE 11.4 RC2 发布">openSUSE 11.4 RC2 发布</a></li><li><a href="http://www.linuxbyte.org/boondog-a-fun-and-challenging-puzzle-game.html" title="Boondog 一个有趣的小游戏">Boondog 一个有趣的小游戏</a></li><li><a href="http://www.linuxbyte.org/command-date-tips.html" title="date 命令使用小技巧">date 命令使用小技巧</a></li><li><a href="http://www.linuxbyte.org/lenny-debian-5.html" title="Debian Lenny版本号被定为5.0">Debian Lenny版本号被定为5.0</a></li><li><a href="http://www.linuxbyte.org/what-to-tune-in-mysql-server-after-installation.html" title="What to tune in MySQL Server after installation">What to tune in MySQL Server after installation</a></li><li><a href="http://www.linuxbyte.org/chromepluslan-qi-fa-bu-linuxban.html" title="ChromePlus浏览器发布Linux版">ChromePlus浏览器发布Linux版</a></li><li><a href="http://www.linuxbyte.org/magiclinux-2-5-10-rich-xiu-zheng-fa-bu.html" title="MagicLinux 2.5.10-rich 修正发布">MagicLinux 2.5.10-rich 修正发布</a></li><li><a href="http://www.linuxbyte.org/ubuntu-linux-xia-ying-pan-huai-dao-de-jian-ce-yu-xiu-fu.html" title="ubuntu linux 下硬盘坏道的检测与修复">ubuntu linux 下硬盘坏道的检测与修复</a></li></ul><hr />
<p><small>© xiao H for <a href="http://www.linuxbyte.org">LinuxByte</a>, 2008<br />
Source: <a href="http://www.linuxbyte.org/chkrootkit-minihowto.html">使用chkrootkit工具保护服务器</a><br />
Post tags: <a href="http://www.linuxbyte.org/tag/chkrootkit" rel="tag">chkrootkit</a><br/>
</small></p>
	<p style="margin:3px 0 0 0;">标签：<a href="http://www.linuxbyte.org/tag/chkrootkit" title="chkrootkit" rel="tag">chkrootkit</a></p>

<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxbyte.org/chkrootkit-minihowto.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>iptables 基本命令使用举例</title>
		<link>http://www.linuxbyte.org/iptables-command-example.html</link>
		<comments>http://www.linuxbyte.org/iptables-command-example.html#comments</comments>
		<pubDate>Mon, 03 Mar 2008 11:13:40 +0000</pubDate>
		<dc:creator>xiao H</dc:creator>
				<category><![CDATA[精品文档]]></category>
		<category><![CDATA[系统网络安全]]></category>
		<category><![CDATA[iptables]]></category>

		<guid isPermaLink="false">http://www.linuxbyte.org/iptables-command-example</guid>
		<description><![CDATA[原文地址：http://www.linuxsky.org/doc/admin/200803/262.html 一、链的基本操作 1、清除所有的规则。 1）清除预设表filter中所有规则链中的规则。 # iptables -F 2）清除预设表filter中使用者自定链中的规则。 ... ]]></description>
			<content:encoded><![CDATA[<pre id="postmessage_13696" class="t_msgfont">原文地址：<a href="http://www.linuxsky.org/doc/admin/200803/262.html">http://www.linuxsky.org/doc/admin/200803/262.html</a></pre>
<p class="t_msgfont">一、链的基本操作</p>
<p>1、清除所有的规则。</p>
<p>1）清除预设表filter中所有规则链中的规则。</p>
<p># iptables -F<br />
<span id="more-59"></span><br />
2）清除预设表filter中<span href="tag.php?name=%CA%B9%D3%C3" onclick="tagshow(event)" class="t_tag">使用</span>者自定链中的规则。</p>
<p>#iptables -X</p>
<p>#iptables -Z</p>
<p>2、设置链的默认策略。一般有两种方法。</p>
<p>1）首先允许所有的包，然后再禁止有危险的包通过放火墙。</p>
<p>#iptables -P INPUT ACCEPT</p>
<p>#iptables -P OUTPUT ACCEPT</p>
<p>#iptables -P FORWARD ACCEPT</p>
<p>2）首先禁止所有的包，然后根据需要的服务允许特定的包通过防火墙。</p>
<p>#iptables -P INPUT DROP</p>
<p>#iptables -P OUTPUT DROP</p>
<p>#iptables -P FORWARD DROP</p>
<p>3、列出表/链中的所有规则。默认只列出filter表。</p>
<p>#iptables -L</p>
<p>4、向链中添加规则。下面的语句用于开放网络接口：</p>
<p>#iptables -A INPUT -i lo -j ACCEPT</p>
<p>#iptables -A OUTPUT -o lo -j ACCEPT</p>
<p>#iptables -A INPUT -i eth0 -j ACEPT</p>
<p>#iptables -A OUTPUT -o eth1 -j ACCEPT</p>
<p>#iptables -A FORWARD -i eth1 -j ACCEPT</p>
<p>#iptables -A FORWARD -0 eth1 -j ACCEPT</p>
<p>注意:由于本地进程不会经过FORWARD链，因此回环接口lo只在INPUT和OUTPUT两个链上作用。</p>
<p>5、使用者自定义链。</p>
<p>#iptables -N custom</p>
<p>#iptables -A custom -s 0/0 -d 0/0 -p icmp -j DROP</p>
<p>#iptables -A INPUT -s 0/0 -d 0/0 -j DROP</p>
<p>二、设置基本的规则匹配</p>
<p>1、指定协议匹配。</p>
<p>1）匹配指定协议。</p>
<p>#iptables -A INPUT -p tcp</p>
<p>2）匹配指定协议之外的所有协议。</p>
<p>#iptables -A INPUT -p !tcp</p>
<p>2、指定地址匹配。</p>
<p>1）指定匹配的主机。</p>
<p>#iptables -A INPUT -s 192.168.0.18</p>
<p>2）指定匹配的网络。</p>
<p>#iptables -A INPUT -s 192.168.2.0/24</p>
<p>3）匹配指定主机之外的地址。</p>
<p>#iptables -A FORWARD -s !192.168.0.19</p>
<p>4）匹配指定网络之外的网络。</p>
<p>#iptables -A FORWARD -s ! 192.168.3.0/24</p>
<p>3、指定网络接口匹配。</p>
<p>1）指定单一的网络接口匹配。</p>
<p>#iptables -A INPUT -i eth0</p>
<p>#iptables -A FORWARD -o eth0</p>
<p>2）指定同类型的网络接口匹配。</p>
<p>#iptables -A FORWARD -o ppp+</p>
<p>4、指定端口匹配。</p>
<p>1）指定单一端口匹配。</p>
<p>#iptables -A INPUT -p tcp &#8211;sport www</p>
<p>#iptables -A INPUT -p udp –dport 53</p>
<p>2）匹配指定端口之外的端口。</p>
<p>#iptables -A INPUT -p tcp –dport !22</p>
<p>3）匹配端口范围。</p>
<p>#iptables -A INPUT -p tcp –sport 22:80</p>
<p>4）匹配ICMP端口和ICMP类型。</p>
<p>#iptables -A INOUT -p icmp –icimp-type 8</p>
<p>5）指定ip碎片。</p>
<p>每个网络接口都有一个MTU（最大传输单元），这个参数定义了可以通过的数据包的最大尺寸。如果一个数据包大于这个参数值时，系统会将其划分成更小的数据包（称为ip碎片）来传输，而接受方则对这些ip碎片再进行重组以还原整个包。这样会导致一个问题：当系统将大数据包划分成ip碎片传输时，第一个碎片含有完整的包头信息（IP+TCP、UDP和ICMP），但是后续的碎片只有包头的部分信息（如源地址、目的地址）。因此，检查后面的ip碎片的头部（象有TCP、UDP和ICMP一样）是不可能的。假如有这样的一条规则：</p>
<p>#iptables -A FORWARD -p tcp -s 192.168.1.0/24 -d 192.168.2.100 –dport 80 -j ACCEPT</p>
<p>并且这时的FORWARD的policy为DROP时，系统只会让第一个ip碎片通过，而余下的碎片因为包头信息不完整而无法通过。可以通过—fragment/-f 选项来指定第二个及以后的ip碎片解决上述问题。</p>
<p>#iptables -A FORWARD -f -s 192.168.1.0/24 -d 192.168.2.100 -j ACCEPT</p>
<p>注意现在有许多进行ip碎片攻击的实例，如DoS攻击，因此允许ip碎片通过是有<span href="tag.php?name=%B0%B2%C8%AB" onclick="tagshow(event)" class="t_tag">安全</span>隐患的，对于这一点可以采用iptables的匹配扩展来进行限制。</p>
<p>三、设置扩展的规则匹配（举例已忽略目标动作）</p>
<p>1、多端口匹配。</p>
<p>1）匹配多个源端口。</p>
<p>#iptables -A INPUT -p tcp -m multiport –sport 22,53,80,110</p>
<p>2）匹配多个目的端口。</p>
<p>#iptables -A INPUT -p tcp -m multiport –dpoort 22,53,80</p>
<p>3）匹配多端口(无论是源端口还是目的端口）</p>
<p>#iptables -A INPUT -p tcp -m multiport –port 22,53,80,110</p>
<p>2、指定TCP匹配扩展</p>
<p>使用 –tcp-flags 选项可以根据tcp包的标志位进行过滤。</p>
<p>#iptables -A INPUT -p tcp –tcp-flags SYN,FIN,ACK SYN</p>
<p>#iptables -A FROWARD -p tcp –tcp-flags ALL SYN,ACK</p>
<p>上实例中第一个表示SYN、ACK、FIN的标志都检查，但是只有SYN匹配。第二个表示ALL（SYN，ACK，FIN，RST，URG，PSH）的标志都检查，但是只有设置了SYN和ACK的匹配。</p>
<p>#iptables -A FORWARD -p tcp &#8211;syn</p>
<p>选项—syn相当于”&#8211;tcp-flags SYN,RST,ACK SYN”的简写。</p>
<p>3、limit速率匹配扩展。</p>
<p>1）指定单位时间内允许通过的数据包个数，单位时间可以是/second、/minute、/hour、/day或使用第一个子母。</p>
<p>#iptables -A INPUT -m limit &#8211;limit 300/hour</p>
<p>2 )指定触发事件的阀值。</p>
<p>#iptables -A INPUT -m limit –limit-burst 10</p>
<p>用来比对一次同时涌入的封包是否超过10个，超过此上限的包将直接丢弃。</p>
<p>3）同时指定速率限制和触发阀值。</p>
<p>#iptables -A INPUT -p icmp -m limit –-limit 3/m –limit-burst 3</p>
<p>表示每分钟允许的最大包数量为限制速率（本例为3）加上当前的触发阀值burst数。任何情况下，都可保证3个数据包通过，触发阀值burst相当于允许额外的包数量。</p>
<p>4）基于状态的匹配扩展（连接跟踪）</p>
<p>每个网络连接包括以下信息：源地址、目标地址、源端口、目的端口，称为套接字对（socket pairs）；协议类型、连接状态（TCP协议）</p>
<p>和超时时间等。防火墙把这些信息称为状态（stateful）。状态包过滤防火墙能在内存中维护一个跟踪状态的表，比简单包过滤防火墙具有更大的安全性，命令格式如下：</p>
<p>iptables -m state –-state [!]state [,state,state,state]</p>
<p>其中，state表是一个逗号分割的列表，用来指定连接状态，4种：</p>
<p>&gt;NEW: 该包想要开始一个新的连接（重新连接或连接重定向）</p>
<p>&gt;RELATED:该包是属于某个已经建立的连接所建立的新连接。举例：</p>
<p>FTP的数据传输连接和控制连接之间就是RELATED关系。</p>
<p>&gt;ESTABLISHED：该包属于某个已经建立的连接。</p>
<p>&gt;INVALID:该包不匹配于任何连接，通常这些包被DROP。</p>
<p>例如：</p>
<p>（1）在INPUT链添加一条规则，匹配已经建立的连接或由已经建立的连接所建立的新连接。即匹配所有的TCP回应包。</p>
<p>#iptables -A INPUT -m state –state RELATED,ESTABLISHED</p>
<p>（2）在INPUT链链添加一条规则，匹配所有从非eth0接口来的连接请求包。</p>
<p>#iptables -A INPUT -m state -–state NEW -i !eth0</p>
<p>又如，对于ftp连接可以使用下面的连接跟踪：</p>
<p>（1）被动（Passive）ftp连接模式。</p>
<p>#iptables -A INPUT -p tcp &#8211;sport 1024: &#8211;dport 1024: -m state –-state ESTABLISHED -j ACCEPT</p>
<p>#iptables -A OUTPUT -p tcp &#8211;sport 1024: &#8211;dport 1024: -m</p>
<p>state -–state ESTABLISHED,RELATED -j ACCEPT</p>
<p>（2）主动（Active）ftp连接模式</p>
<p>#iptables -A INNPUT -p tcp &#8211;sport 20 -m state –-state ESTABLISHED,RELATED -j ACCEPT</p>
<p>#iptables -A OUTPUT -p tcp –OUTPUT -p tcp –dport 20 -m state &#8211;state ESTABLISHED -j ACCEPT</p>
<p>5）TOS匹配扩展。</p>
<p>四、设置目标扩展</p>
<p>目标扩展由内核模块组成，而且iptables的一个可选扩展提供了新的命令行选项。</p>
<p>有时连入互连网的时候网关是动态的不确定的.如adsl上网</p>
<p>iptables -t nat -A OUTPUT -s 192.168.0.0.1/24 -j MARSUERADE</p>
<h2  class="related_post_title">与本文关系暧昧的文字</h2><ul class="related_post"><li><a href="http://www.linuxbyte.org/wang-ba-linux-wang-guan-she-zhi-ji-lu-bu-chong.html" title="网吧Linux 网关设置记录补充">网吧Linux 网关设置记录补充</a></li><li><a href="http://www.linuxbyte.org/iptables%ef%bc%8dtc-wang-ba-mei-ip-xian-su-jiao-ben.html" title="Iptables＋tc 网吧每IP 限速脚本">Iptables＋tc 网吧每IP 限速脚本</a></li><li><a href="http://www.linuxbyte.org/yong-iptables-er-fei-tc-xian-zhi-liu-liang.html" title="用Iptables 而非tc 限制流量">用Iptables 而非tc 限制流量</a></li><li><a href="http://www.linuxbyte.org/linux-iptables-nat-squid-pdnsd.html" title="网吧Linux 网关设置记录">网吧Linux 网关设置记录</a></li><li><a href="http://www.linuxbyte.org/linux-syn-attack-defense.html" title="LINUX下的SYN攻击防御">LINUX下的SYN攻击防御</a></li></ul><hr />
<p><small>© xiao H for <a href="http://www.linuxbyte.org">LinuxByte</a>, 2008<br />
Source: <a href="http://www.linuxbyte.org/iptables-command-example.html">iptables 基本命令使用举例</a><br />
Post tags: <a href="http://www.linuxbyte.org/tag/iptables" rel="tag">iptables</a><br/>
</small></p>
	<p style="margin:3px 0 0 0;">标签：<a href="http://www.linuxbyte.org/tag/iptables" title="iptables" rel="tag">iptables</a></p>

<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxbyte.org/iptables-command-example.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>apache,php安全小技巧</title>
		<link>http://www.linuxbyte.org/tips-for-apache-php-security.html</link>
		<comments>http://www.linuxbyte.org/tips-for-apache-php-security.html#comments</comments>
		<pubDate>Thu, 28 Feb 2008 07:11:23 +0000</pubDate>
		<dc:creator>xiao H</dc:creator>
				<category><![CDATA[服务器应用]]></category>
		<category><![CDATA[系统网络安全]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.linuxbyte.org/tips-for-apache-php-security</guid>
		<description><![CDATA[最简单的安全技巧，隐藏apache，php 的版本信息 Apache: 打开 httpd.conf，加入以下两行: ServerTokens ProductOnly ServerSignature Off PHP: 打开 php.ini，加入: expose_php = Off 完成以上两个设定后，重新启动 Apache ... ]]></description>
			<content:encoded><![CDATA[<p>最简单的安全技巧，隐藏apache，php 的版本信息</p>
<p><strong>Apache:</strong><br />
打开 httpd.conf，加入以下两行:</p>
<p>ServerTokens ProductOnly<br />
ServerSignature Off</p>
<p><strong>PHP:</strong><br />
打开 php.ini，加入:<span id="more-47"></span></p>
<p>expose_php = Off</p>
<p>完成以上两个设定后，重新启动 Apache 即可。</p>
<p>这个是最水货的安全措施了，另外apache 还可以改改源码把版本信息改为IIS<br />
编辑apache 源码目录下 /include/ap_release.h 文件<br />
参照下面代码修改</p>
<p>#define AP_SERVER_BASEVENDOR “这里填写开发组织名，例如：Microsoft Corp.”<br />
#define AP_SERVER_BASEPRODUCT “这里填写服务器软件名，例如:Microsoft-IIS”<br />
#define AP_SERVER_MAJORVERSION “主版本，例如：5&#8243;<br />
#define AP_SERVER_MINORVERSION “次版本，例如：0&#8243;<br />
#define AP_SERVER_PATCHLEVEL “修正版本，例如：1&#8243;</p>
<p>打开/include/os.h 文件,修改下面例句中的代码</p>
<p>#define PLATFORM “这里填写操作系统的名称，例如：Winnt”</p>
<p>打开文件 /os/PLATFORM/os.h ，修改</p>
<p>#define PLATFORM “这里填写操作系统的名称，例如：Winnt”</p>
<p>打开文件 /modules/generators/mod_info.c  修改</p>
<p>Search “Apache Server Information” replace with “这里填写在查看server-info现实的页面标题，例如:Microsoft-IIS Information”</p>
<p>打开文件 /modules/generators/mod_status.c 修改</p>
<p>Search “Apache Server Status” replace with “这里填写在查看server-status现实的页面标题，例如:Microsoft-IIS Status”</p>
<p>然后重新编译安装apache。</p>
<p>其实上面都是忽悠菜鸟用的，apache 中有一个modsecurity 对提升apache 的安全很有用，经过多年的发展功能已经非常强大，我个人最喜欢它对SQL注入的防护。另外 SE_linux 也是非常不错安全工具，不过这个东西配置起来比较麻烦，中文的文档也不多。</p>
<p><strong>最基本的php的安全设置</strong></p>
<p>disable_functions = phpinfo, get_cfg_var<br />
display_errors = Off<br />
allow_url_fopen = Off<br />
safe_mode = On</p>
<p>open_basedir = /usr/local/httpd/htdocs/dir1:/usr/local/httpd/htdocs/dir2<br />
#目录权限控制，dir1中的php程序就无法访问dir2中的内容。反过来也不行</p>
<h2  class="related_post_title">与本文关系暧昧的文字</h2><ul class="related_post"><li><a href="http://www.linuxbyte.org/centos5-apache2-php5-tomcat6-jdk.html" title="Centos5+Apache2.2.6+PHP5+tomcat6.0.14+jdk1.6整合安装 ">Centos5+Apache2.2.6+PHP5+tomcat6.0.14+jdk1.6整合安装 </a></li><li><a href="http://www.linuxbyte.org/centos-yum-an-zhuang-nginx-php-fpm-eaccelerator-mysql.html" title="Centos yum 安装nginx+PHP-FPM+eAccelerator+mysql">Centos yum 安装nginx+PHP-FPM+eAccelerator+mysql</a></li><li><a href="http://www.linuxbyte.org/php-5-3-4-fa-bu.html" title="PHP 5.3.4 发布 ">PHP 5.3.4 发布 </a></li><li><a href="http://www.linuxbyte.org/tui-jian-ge-php-bian-ji-qi-gphpedit.html" title="推荐个PHP 编辑器 Gphpedit">推荐个PHP 编辑器 Gphpedit</a></li><li><a href="http://www.linuxbyte.org/apache-license-version-2.html" title="Apache License Version 2.0">Apache License Version 2.0</a></li><li><a href="http://www.linuxbyte.org/config-apache-mod_limitipconn.html" title="apache 下限制单个IP 的并发连接数">apache 下限制单个IP 的并发连接数</a></li><li><a href="http://www.linuxbyte.org/apache-url-rewrite.html" title="Apache Url Rewrite(mod_rewrite)">Apache Url Rewrite(mod_rewrite)</a></li></ul><hr />
<p><small>© xiao H for <a href="http://www.linuxbyte.org">LinuxByte</a>, 2008<br />
Source: <a href="http://www.linuxbyte.org/tips-for-apache-php-security.html">apache,php安全小技巧</a><br />
Post tags: <a href="http://www.linuxbyte.org/tag/apache" rel="tag">apache</a>, <a href="http://www.linuxbyte.org/tag/php" rel="tag">php</a>, <a href="http://www.linuxbyte.org/tag/security" rel="tag">系统网络安全</a><br/>
</small></p>
	<p style="margin:3px 0 0 0;">标签：<a href="http://www.linuxbyte.org/tag/apache" title="apache" rel="tag">apache</a>, <a href="http://www.linuxbyte.org/tag/php" title="php" rel="tag">php</a>, <a href="http://www.linuxbyte.org/tag/security" title="系统网络安全" rel="tag">系统网络安全</a></p>

<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxbyte.org/tips-for-apache-php-security.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>LINUX下的SYN攻击防御</title>
		<link>http://www.linuxbyte.org/linux-syn-attack-defense.html</link>
		<comments>http://www.linuxbyte.org/linux-syn-attack-defense.html#comments</comments>
		<pubDate>Tue, 12 Feb 2008 13:08:28 +0000</pubDate>
		<dc:creator>xiao H</dc:creator>
				<category><![CDATA[系统网络安全]]></category>
		<category><![CDATA[Firewall]]></category>
		<category><![CDATA[iptables]]></category>
		<category><![CDATA[SYN]]></category>

		<guid isPermaLink="false">http://www.linuxbyte.org/linux%e4%b8%8b%e7%9a%84syn%e6%94%bb%e5%87%bb%e9%98%b2%e5%be%a1</guid>
		<description><![CDATA[在怀疑有Dos攻击的时候，可以输入 netstat -an &#124; grep -i “服务器ip地址:80&#8243; &#124; awk &#8216;{print }&#8217;&#124; sort &#124; uniq -c &#124; sort -n 这个命令会自动统计Tcp连接各个状态的数量，如果SYN_RECV... ]]></description>
			<content:encoded><![CDATA[<p>在怀疑有Dos攻击的时候，可以输入</p>
<p>netstat -an | grep -i “服务器ip地址:80&#8243; | awk &#8216;{print }&#8217;| sort | uniq -c | sort -n</p>
<p>这个命令会自动统计Tcp连接各个状态的数量，如果SYN_RECV很高的话，就不能排除有基于tcp协议的ddos攻击的可能，这个时候可以打开tcp_syncookies，输入如下命令<span id="more-6"></span><br />
echo 1 &gt; /proc/sys/net/ipv4/tcp_syncookies<br />
如果没有 /proc/sys/net/ipv4/tcp_syncookies说明你的内核不支持，需要重新编译内核<br />
同时 降低syn重试次数</p>
<p>echo 1 &gt; /proc/sys/net/ipv4/tcp_syn_retries<br />
echo 1 &gt; /proc/sys/net/ipv4/tcp_synack_retries<br />
 <br />
加大syn_backlog，以保证用户的访问（消耗内存为代价，设的太高）<br />
echo “2048&#8243; &gt; /proc/sys/net/ipv4/tcp_max_syn_backlog<br />
 <br />
如果还是不行，那么只能交给相应的硬件防火墙了。</p>
<p>#防止SYN攻击 轻量<br />
/sbin/iptables -N syn-flood<br />
/sbin/iptables -A INPUT -p tcp &#8211;syn -j syn-flood<br />
/sbin/iptables -I syn-flood -p tcp -m limit &#8211;limit 3/s &#8211;limit-burst 6 -j RETURN<br />
/sbin/iptables -A syn-flood -j REJECT</p>
<p>#为了防止DOS太多连接进来,那么可以允许最多15个初始连接,超过的丢弃<br />
/sbin/iptables -A INPUT -s $INNET -p tcp -m state &#8211;state ESTABLISHED,RELATED -j ACCEPT<br />
/sbin/iptables -A INPUT -i $EXTIF -p tcp &#8211;syn -m connlimit &#8211;connlimit-above 15 -j DROP<br />
/sbin/iptables -A INPUT -s $INNET -p tcp &#8211;syn -m connlimit &#8211;connlimit-above 15 -j DROP</p>
<p>#设置icmp阔值 ,并对攻击者记录在案<br />
/sbin/iptables -A INPUT -p icmp -m limit &#8211;limit 3/s -j LOG &#8211;log-level INFO &#8211;log-prefix “ICMP packet IN:”<br />
/sbin/iptables -A INPUT -p icmp -m limit &#8211;limit 6/m -j ACCEPT<br />
/sbin/iptables -A INPUT -p icmp -j DROP</p>
<p># 防止端口扫描<br />
iptables -I INPUT -p icmp &#8211;icmp-type echo-request -m state &#8211;state NEW -j DROP<br />
#禁止PING</p>
<p>iptables -A INPUT -i eth0 -p tcp &#8211;tcp-flags ALL FIN,URG,PSH -j DROP<br />
#标志为FIN，URG，PSH拒绝</p>
<p>iptables -A INPUT -i eth0 -p tcp &#8211;tcp-flags SYN,RST SYN,RST -j DROP<br />
iptables -A INPUT -i eth0 -p tcp &#8211;tcp-flags SYN,FIN SYN,FIN -j DROP<br />
iptables -A INPUT -i eth0 -p tcp &#8211;tcp-flags ALL ALL -j DROP<br />
iptables -A INPUT -i eth0 -p tcp &#8211;tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP<br />
iptables -A INPUT -i eth0 -p tcp &#8211;tcp-flags ALL NONE -j DROP</p>
<p>（附：218。94。6。179/188两台服务器安装的WEBMIN限定*。181网关连接，密码为：fangzhi790529）<br />
# 防止SYN FLOOD<br />
iptables -N synfoold<br />
iptables -A synfoold -p tcp &#8211;syn -m limit &#8211;limit 1/s -j RETURN<br />
iptables -A synfoold -p tcp -j REJECT &#8211;reject-with tcp-reset<br />
iptables -A INPUT -p tcp -m state &#8211;state NEW -j synfoold<br />
# 禁止PING</p>
<p>iptables -N ping<br />
iptables -A ping -p icmp &#8211;icmp-type echo-request -m limit &#8211;limit 1/second -j RETURN<br />
iptables -A ping -p icmp -j REJECT<br />
iptables -I INPUT -p icmp &#8211;icmp-type echo-request -m state &#8211;state NEW -j ping<br />
# 端口过滤</p>
<p>#这个script 内容，很适合只允许外面链接特定的 port服务，剩下其余的 port 就拒绝外面主动链接<br />
iptables -A INPUT -i eth0 -p tcp &#8211;dport 21 -j ACCEPT<br />
  iptables -A INPUT -i eth0 -p tcp &#8211;dport 22 -j ACCEPT<br />
  iptables -A INPUT -i eth0 -p tcp &#8211;dport 80 -j ACCEPT<br />
  iptables -A INPUT -i eth0 -p tcp &#8211;dport 389 -j ACCEPT<br />
  iptables -A INPUT -i eth0 -p tcp &#8211;dport 1002 -j ACCEPT<br />
  iptables -A INPUT -i eth0 -p tcp &#8211;dport 1720 -j ACCEPT<br />
  iptables -A INPUT -i eth0 -p udp &#8211;dport 2121 -j ACCEPT<br />
  iptables -A INPUT -i eth0 -p tcp &#8211;dport 3306 -j ACCEPT<br />
  iptables -A INPUT -i eth0 -p tcp &#8211;dport 8009 -j ACCEPT<br />
  iptables -A INPUT -i eth0 -p tcp &#8211;dport 8080 -j ACCEPT<br />
  iptables -A INPUT -i eth0 -p tcp &#8211;dport 8081 -j ACCEPT<br />
  iptables -A INPUT -i eth0 -p tcp &#8211;dport 10000 -j ACCEPT<br />
  iptables -A INPUT -i eth0 -m state &#8211;state RELATED,ESTABLISHED -j ACCEPT<br />
  iptables -A INPUT -i eth0 -m state &#8211;state NEW,INVALID -j DROP</p>
<p>ipdrop<br />
　　如果能创建一个特殊的”ipdrop”脚本，其被设计为能方便地插入一个规则来阻塞指定的IP，那么将上面的工作将非常容易。通过该脚本阻塞某个IP将是非常容易的工作，只需要几秒钟就可以实现。而且通过该脚本还可以防止手工加入规则时容易出现的错误。因此阻塞黑客的攻击将变为确定其攻击源地址。然后通过如下命令：</p>
<p># ipdrop 129.24.8.1 on</p>
<p>IP 129.24.8.1 drop on.<br />
　　<br />
ipdrop脚本将立即阻塞129.24.8.1。通过使用该脚本能显著地提高你的防卫能力。下面就是ipdrop脚本的</p>
<p>实现：<br />
The ipdrop bash script<br />
#!/bin/bash<br />
source /usr/local/share/dynfw.sh<br />
args 2 $# “${0} IPADDR {on/off}” “Drops packets to/from IPADDR Good for obnoxious networks/hosts/DoS”<br />
if [ "$2" == "on" ]<br />
   then</p>
<p>#rules will be appended or inserted as normal</p>
<p>APPEND=”-A”<br />
INSERT=”-I”<br />
rec_check ipdrop $1 “$1 already blocked” on<br />
record ipdrop $1<br />
elif [ "$2" == "off" ]<br />
     then</p>
<p>#rules will be deleted instead</p>
<p>APPEND=”-D”<br />
INSERT=”-D”<br />
rec_check ipdrop $1 “$1 not currently blocked”off<br />
unrecord ipdrop $1<br />
     else<br />
      echo “Error: “off” or “on” expected as second argument”<br />
exit 1<br />
   fi</p>
<p>#block outside IP address thats causing problems<br />
#attackers incoming TCP connections will take a minute or so to time out,<br />
#reducing DoS effectiveness.</p>
<p>iptables $INSERT INPUT -s $1 -j DROP<br />
iptables $INSERT OUTPUT -d $1 -j DROP<br />
iptables $INSERT FORWARD -d $1 -j DROP<br />
iptables $INSERT FORWARD -s $1 -j DROP</p>
<p>echo “IP ${1} drop ${2}”<br />
ipdrop:解释<br />
　　从上面的脚本源代码中最后四行内容可以看到实际的命令是在防火墙表中插入适当的规则。可以看到$INSERT变量的值取决于在命令行参数中是使用”on”还是”off”模式。当iptables行被执行时特定的规则将被适当的插入或删除。</p>
<p>　　现在我们看看这些规则本身的功能，它们能和任何类型的防火墙一起发挥作用，甚至在没有部署防火墙的系统上。需要的条件仅仅是支持iptables的Linux2.4版本的内核。我们阻塞来自恶意IP的攻击数据报(第一条iptables语句)，阻塞发向恶意攻击IP的数据报(第二条iptables语句)，并且对该IP关闭任意方向的数据转发(最后两条iptables工具)。一旦这些规则发挥作用系统将丢弃满足这些条件的任何数据报。<br />
　　<br />
    另外一个需要注意的是：脚本中调用了”rec_check”, “unrecord”, “record”,和”args”。这些都是定义在”dynfw.sh”中的特殊的bash函数。”record”函数实现将被阻塞的IP记录在文件/root下隐藏文件dynfw-tcplimit中，而”unrecord”则是将其从文件/root下隐藏文件dynfw-tcplimit中去除。”rec_check”函数是在发现试图重新阻塞某个已经阻塞的IP地址或取消某个没有被阻塞的IP地址时输出错误信息并停止脚本执行。”args”函数实现确保命令行参数的正确性，并实现打印脚本帮助命令。文件dynfw-1.0.tar.gz包含所有的这些工具。<br />
 <br />
 <br />
tcplimit<br />
　　如果你需要对某个特殊的基于TCP的网络服务的使用进行限制(例如在端系统上产生严重负载时)，则tcplimit脚本则可以帮助你达到这个目的，该脚本使用TCP端口、一个率值和”on”或”off”作为参数：<br />
# tcplimit 873 5 minute on<br />
Port 873 new connection limit (5/minute, burst=5) on.<br />
　　<br />
    tcplimit使用iptables的”state”模块(应确保在内核中打开该选项或加载模块)来实现在某段时间内只允许特定数目的连接请求通过。在本例中防火墙将限制每分钟只允许5个新连接到我的rsync服务器(port 873)。当然你可以根据需要选择时间单位为秒钟/分钟/小时。<br />
　　<br />
    tcplimit提供了一个限制对非关键服务的使用的非常好的方法－这样大量到非关键服务的数据不会破坏服务器。在上面的例子中使用tcplimit来设置使用rsync的限制，以防止tsync数据占用了Internet连接的所有带宽。其中连接服务限制信息记录在文件/root下隐藏文件dynfw-tcplimit中。若想关闭该限制只需要键入如下命令：<br />
# tcplimit 873 5 minute off<br />
Port 873 new connection limit off.<br />
　　<br />
    tcplimit通过在”filter”表中创建一个新的规则链来实现。这个新的规则链将拒绝所有超过指定限制的数据报，同时将一个规则插入到INPUT规则链中，其将所有的到目标端口(在本例中是873端口)的新连接数据报定向到这个新的规则链。新规则链只会影响新的超过限制的连接而不会影响已经建立的连接。<br />
　　<br />
   当tcplimit定义的规则被关闭，INPUT规则和新规则链则会被删除。象ipdrop一样其tcplimit可以和任何类型的防火墙一起工作。<br />
 <br />
host-tcplimit<br />
　　host-tcplimit和tcplimit非常类似，但是它是限制来自一个特定的IP的到服务器上某个特定端口的TCP连接数量。host-tcplimit在防止某个特定的人滥用你的网络资源时非常有用处。例如你维护有一个CVS服务器，有一天突然发现一个特殊的新开发者出现了，他好像建立了一个脚本每十分钟更新它的资源。占用了大量的网络资源。<br />
　　<br />
   对于这种情况，使用host-tcplimit可以非常容易的解决问题：<br />
 <br />
# host-tcplimit 1.1.1.1 2401 1 day on<br />
　　<br />
现在IP地址为1.1.1.1被限制为每天只能进行一次CVS连接从而节省了网络带宽。</p>
<h2  class="related_post_title">与本文关系暧昧的文字</h2><ul class="related_post"><li><a href="http://www.linuxbyte.org/syn-cookie-firewall.html" title="SYN Cookie Firewall ">SYN Cookie Firewall </a></li><li><a href="http://www.linuxbyte.org/wang-ba-linux-wang-guan-she-zhi-ji-lu-bu-chong.html" title="网吧Linux 网关设置记录补充">网吧Linux 网关设置记录补充</a></li><li><a href="http://www.linuxbyte.org/iptables%ef%bc%8dtc-wang-ba-mei-ip-xian-su-jiao-ben.html" title="Iptables＋tc 网吧每IP 限速脚本">Iptables＋tc 网吧每IP 限速脚本</a></li><li><a href="http://www.linuxbyte.org/yong-iptables-er-fei-tc-xian-zhi-liu-liang.html" title="用Iptables 而非tc 限制流量">用Iptables 而非tc 限制流量</a></li><li><a href="http://www.linuxbyte.org/linux-iptables-nat-squid-pdnsd.html" title="网吧Linux 网关设置记录">网吧Linux 网关设置记录</a></li><li><a href="http://www.linuxbyte.org/iptables-command-example.html" title="iptables 基本命令使用举例">iptables 基本命令使用举例</a></li></ul><hr />
<p><small>© xiao H for <a href="http://www.linuxbyte.org">LinuxByte</a>, 2008<br />
Source: <a href="http://www.linuxbyte.org/linux-syn-attack-defense.html">LINUX下的SYN攻击防御</a><br />
Post tags: <a href="http://www.linuxbyte.org/tag/firewall" rel="tag">Firewall</a>, <a href="http://www.linuxbyte.org/tag/iptables" rel="tag">iptables</a>, <a href="http://www.linuxbyte.org/tag/syn" rel="tag">SYN</a><br/>
</small></p>
	<p style="margin:3px 0 0 0;">标签：<a href="http://www.linuxbyte.org/tag/firewall" title="Firewall" rel="tag">Firewall</a>, <a href="http://www.linuxbyte.org/tag/iptables" title="iptables" rel="tag">iptables</a>, <a href="http://www.linuxbyte.org/tag/syn" title="SYN" rel="tag">SYN</a></p>

<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxbyte.org/linux-syn-attack-defense.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SYN Cookie Firewall</title>
		<link>http://www.linuxbyte.org/syn-cookie-firewall.html</link>
		<comments>http://www.linuxbyte.org/syn-cookie-firewall.html#comments</comments>
		<pubDate>Tue, 12 Feb 2008 07:20:49 +0000</pubDate>
		<dc:creator>xiao H</dc:creator>
				<category><![CDATA[精品文档]]></category>
		<category><![CDATA[系统网络安全]]></category>
		<category><![CDATA[Firewall]]></category>
		<category><![CDATA[SYN]]></category>

		<guid isPermaLink="false">http://www.linuxbyte.org/syn-cookie-firewall</guid>
		<description><![CDATA[本文介绍了４个概念
一：介绍SYN
二：什么是SYN洪水攻击
三：什么是SYN cookie
四：什么是SYN cookie防火... ]]></description>
			<content:encoded><![CDATA[<p>原文在：<a target="_blank" href="http://www.bronzesoft.org/projects/scfw/"><font color="#000000">http://www.bronzesoft.org/projects/scfw/</font></a> 翻译：包子</p>
<p>本文介绍了４个概念<br />
一：介绍SYN<br />
二：什么是SYN洪水攻击<br />
三：什么是SYN cookie<br />
<span id="more-5"></span><br />
四：什么是SYN cookie防火墙<br />
C=client(客户器)<br />
S=Server(服务器)<br />
FW=Firewall(防火墙)</p>
<p>一：介绍SYN<br />
SYN cookie是一个防止SYN洪水攻击技术。他由D. J. Bernstein和Eric Schenk发明。现在SYN COOKIE已经是linux内核的一部分了（我插一句，默认的stat是no),但是在linux系统的执行过程中它只保护linux系统。我们这里只是说创建一个linux防火墙，他可以为整个网络和所有的网络操作系统提供SYN COOKIE保护你可以用这个防火墙来阻断半开放式tcp连接，所以这个受保护的系统不会进入半开放状态(TCP_SYN_RECV)。当连接完全建立的时候，客户机到服务器的连接要通过防火墙来中转完成。二：什么是SYN洪水攻击？（来自CERT的警告）<br />
当一个系统（我们叫他客户端）尝试和一个提供了服务的系统（服务器）建立TCP连接，C和服务端会交换一系列报文。这种连接技术广泛的应用在各种TCP连接中，例如telnet,Web,email,等等。<br />
首先是C发送一个SYN报文给服务端，然后这个服务端发送一个SYN-ACK包以回应C，接着，C就返回一个ACK包来实现一次完整的TCP连接。就这样，C到服务端的连接就建立了，这时C和服务端就可以互相交换数据了。下面是上文的图片说明：）<br />
Client Server<br />
&#8212;&#8212; &#8212;&#8212;<br />
SYN&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;&gt;</p>
<p>&lt;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;SYN-ACK</p>
<p>ACK&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;&gt;</p>
<p>Client and server can now<br />
send service-specific data</p>
<p>在S返回一个确认的SYN-ACK包的时候有个潜在的弊端，他可能不会接到C回应的ACK包。这个也就是所谓的半开放连接，S需要耗费一定的数量的系统资源来等待这个未决的连接，虽然这个数量是受限的，但是恶意者可以通过创建很多的半开放式连接来发动SYN洪水攻击。</p>
<p>通过ip欺骗可以很容易的实现半开放连接。攻击者发送SYN包给受害者系统，这个看起来是合法的，但事实上所谓的C根本不会回应这个SYN-ACK报文，这意味着受害者将永远不会接到ACK报文。<br />
而此时，半开放连接将最终耗用受害者所有的系统资源，受害者将不能再接收任何其他的请求。通常等待ACK返回包有超时限制，所以半开放连接将最终超时，而受害者系统也会自动修复。虽然这样，但是在受害者系统修复之前，攻击者可以很容易的一直发送虚假的SYN请求包来持续攻击。<br />
在大多数情况下，受害者几乎不能接受任何其他的请求，但是这种攻击不会影响到已经存在的进站或者是出站连接。虽然这样，受害者系统还是可能耗尽系统资源，以导致其他种种问题。攻击系统的位置几乎是不可确认的，因为SYN包中的源地址多数都是虚假的。当SYN包到达受害者系统的时候，没有办法找到他的真实地址，因为在基于源地址的数据包传输中，源ip过滤是唯一可以验证数据包源的方法。</p>
<p>三：什么是SYN cookie？<br />
SYN cookie就是用一个cookie来响应TCP SYN请求的TCP实现，根据上面的描述，在正常的TCP实现中，当S接收到一个SYN数据包，他返回一个SYN-ACK包来应答，然后进入TCP-SYN-RECV（半开放连接）状态来等待最后返回的ACK包。S用一个数据空间来描述所有未决的连接，然而这个数据空间的大小是有限的，所以攻击者将塞满这个空间。在TCP SYN COOKIE的执行过程中，当S接收到一个SYN包的时候，他返回一个SYN-ACK包，这个数据包的ACK序列号是经过加密的，也就是说，它由源地址，端口源次序，目标地址，目标端口和一个加密种子计算得出。然后S释放所有的状态。如果一个ACK包从C返回，S将重新计算它来判断它是不是上个SYN-ACK的返回包。如果这样，S就可以直接进入TCP连接状态并打开连接。这样，S就可以避免守侯半开放连接了。<br />
以上只是SYN COOKIE的基本思路，它在应用过程中仍然有许多技巧。请在前几年的kernel邮件列表查看archive of discussions的相关详细</p>
<p>内容。<br />
4，什么是SYN COOKIE 防火墙<br />
SYN COOKIE 防火墙是SYN cookie的一个扩展，SYN cookie是建立在TCP堆栈上的，他为linux操作系统提供保护。SYN cookie防火墙是linux的一大特色，你可以使用一个防火墙来保护你的网络以避免遭受SYN洪水攻击。<br />
下面是SYN cookie防火墙的原理<br />
client firewall server<br />
&#8212;&#8212; &#8212;&#8212;&#8212;- &#8212;&#8212;<br />
1. SYN&#8212;&#8212;&#8212;&#8211; &#8211; - &#8211; - &#8211; - &#8211; - &#8211; -&gt;<br />
2. &lt;&#8212;&#8212;&#8212;&#8212;SYN-ACK(cookie)<br />
3. ACK&#8212;&#8212;&#8212;&#8211; &#8211; - &#8211; - &#8211; - &#8211; - &#8211; -&gt;<br />
4. &#8211; - &#8211; - &#8211; - -SYN&#8212;&#8212;&#8212;&#8212;&#8212;&gt;<br />
5. &lt;- &#8211; - &#8211; - &#8211; - &#8211; - &#8212;&#8212;&#8212;&#8212;SYN-ACK<br />
6. &#8211; - &#8211; - &#8211; - -ACK&#8212;&#8212;&#8212;&#8212;&#8212;&gt;</p>
<p>7. &#8212;&#8212;&#8212;&#8211;&gt; relay the &#8212;&#8212;-&gt;<br />
&lt;&#8212;&#8212;&#8212;&#8211; connection &lt;&#8212;&#8212;-<br />
1:一个SYN包从C发送到S<br />
2：防火墙在这里扮演了S的角色来回应一个带SYN cookie的SYN-ACK包给C<br />
3：C发送ACK包，接着防火墙和C的连接就建立了。<br />
4：防火墙这个时候扮演C的角色发送一个SYN给S<br />
5：S返回一个SYN给C<br />
6：防火墙扮演C发送一个ACK确认包给S，这个时候防火墙和S的连接也就建立了<br />
7：防火墙转发C和S间的数据<br />
如果系统遭受SYN Flood，那么第三步就不会有，而且无论在防火墙还是S都不会收到相应在第一步的SYN包，所以我们就击退了这次SYN洪水攻击</p>
<p>五：下载</p>
<p>ip_scfw-0.92.tar.gzhttp://www.bronzesoft.org/projects/scfw/ip_scfw-0.9.2.tar.gz)是最新的版本，他包括一个for linux 2.2.17内核的补丁和管理工具，下载他并按照readme文件安装。</p>
<p>Designhttp://www.bronzesoft.org/projects/scfw/Design）是一个详细的解释了这个代码的文档，它也包含在这个tar-gz包内，你也可以在线阅读它</p>
<p>ChangeLoghttp://www.bronzesoft.org/projects/scfw/ChangeLog）说到了这个计划的进展。</p>
<p>tcpdos.tgzhttp://www.bronzesoft.org/projects/scfw/tcpdos.tgz)是一个发起SYN洪水攻击的工具，你可以使用它来测试你的SYN cookie防火墙</p>
<h2  class="related_post_title">与本文关系暧昧的文字</h2><ul class="related_post"><li><a href="http://www.linuxbyte.org/linux-syn-attack-defense.html" title="LINUX下的SYN攻击防御">LINUX下的SYN攻击防御</a></li></ul><hr />
<p><small>© xiao H for <a href="http://www.linuxbyte.org">LinuxByte</a>, 2008<br />
Source: <a href="http://www.linuxbyte.org/syn-cookie-firewall.html">SYN Cookie Firewall</a><br />
Post tags: <a href="http://www.linuxbyte.org/tag/firewall" rel="tag">Firewall</a>, <a href="http://www.linuxbyte.org/tag/syn" rel="tag">SYN</a><br/>
</small></p>
	<p style="margin:3px 0 0 0;">标签：<a href="http://www.linuxbyte.org/tag/firewall" title="Firewall" rel="tag">Firewall</a>, <a href="http://www.linuxbyte.org/tag/syn" title="SYN" rel="tag">SYN</a></p>

<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxbyte.org/syn-cookie-firewall.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

