<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://jackxiang.com/post//</link>
<title><![CDATA[使用Fail2ban保护Linux系统]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[Unix/LinuxC技术]]></category>
<pubDate>Tue, 06 Jan 2015 08:10:40 +0000</pubDate> 
<guid>http://jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	<br/>最近一直在找一个合适的sshd保护软件，因为总是有很多hacker在试服务器的口令，即使我已经关闭了口令验证，不胜其烦。网上有很多类似的软件。我本来想用sshguard的，但是新版本还在测试中，旧版本根本就和ipv6不兼容，抓不到尝试。后来又找了几个，DenyHost也是个比较成熟的软件，不过它是利用tcpd的机理，而我想找一个用iptables的，最后发现了Fail2ban。虽然Fail2ban没有本地代码的速度优势，它也是个脚本集，用python语言，不过它的屏蔽机理即可以用系统自带的防火墙，如Linux的iptables或FreeBSD的ipfw，又可以换用tcpd，此外还可以扩展到其它网络服务。0.8代码树采用客户机/服务器的模型编写，在服务运行的时候，可以用客户端直接修改核心参数。 <br/>　　简而言之fail2ban的作用就是当日志的匹配项出现预设的频率时采取一定动作的软件，最普通的就是从防火墙上拦截掉。<br/><br/>　　fail2ban看起来实在不错，但是0.8代码树需要python2.4以上，而centos4系统自带的是2.3的，贸然升级到2.4，就怕系统内一些自带工具会出错。于是首先要先配置好python，然后才能部署fail2ban。<br/><br/><br/>安装_python2.5.1<br/>#安装至自定义目录，防止系统混乱&nbsp;&nbsp;./configure --prefix=/usr/local/allblue/apps/Python-2.5.1&nbsp;&nbsp;make&nbsp;&nbsp;make install&nbsp;&nbsp;cd /usr/local/allblue/apps/&nbsp;&nbsp;ln -s Python-2.5.1 pythonParsed in 0.009 seconds<br/><br/><br/>安装_fail2ban0.8<br/>/usr/local/allblue/apps/python/bin/python setup.py install&nbsp;&nbsp;#移动生成的可执行文件到/usr/bin&nbsp;&nbsp;mv /usr/local/allblue/apps/python/bin/fail2ban-* /usr/binParsed in 0.009 seconds<br/><br/>经过上面的步骤，三个可执行文件可能会被安装到和python/bin目录下，如果这样，移动到/usr/bin，以便使用。如果被安装到/usr/bin，那么需要改动三个可执行脚本的首行，把解释器从默认的系统python改到自己刚安装的新的python。<br/><br/><br/>mllm ? 2004-2010, allblue<br/>#!/usr/bin/pythonParsed in 0.008 seconds<br/><br/>改为<br/><br/>mllm ? 2004-2010, allblue<br/>#!/usr/local/allblue/apps/python/bin/pythonParsed in 0.008 seconds<br/><br/>拷贝源代码树files目录下的redhat-initd到init.d目录用来自启动。<br/><br/>cp files/redhat-initd /etc/init.d/fail2ban chmod 0755 /etc/init.d/fail2ban <br/><br/>最后写一个logrotate的配置文件，并拷贝成/etc/logrotate.d/fail2ban，用来定期清理日志文件<br/><br/><br/>fail2ban<br/>/var/log/fail2ban.log &#123;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;missingok&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;notifempty&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;size 30k&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;create 0600 root root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;postrotate&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/usr/bin/fail2ban-client reload 2&gt; /dev/null &#124;&#124; true&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;endscript&nbsp;&nbsp;&#125;Parsed in 0.009 seconds<br/> <br/>安装完毕的Fail2ban的配置文件在/etc/fail2ban下，0.8版本有两个配置文件fail2ban.conf和jail.conf两个，前者里面是一些fail2ban本身的参数设置，后者是具体保护服务的配置。<br/><br/>默认fail2ban.conf里面就三个参数，而且都有注释。<br/><br/><br/>#默认日志的级别&nbsp;&nbsp;loglevel = 3&nbsp;&nbsp;#日志的目的&nbsp;&nbsp;logtarget = /var/log/fail2ban.log&nbsp;&nbsp;#socket的位置&nbsp;&nbsp;socket = /tmp/fail2ban.sock&nbsp;&nbsp;<br/>jail.conf配置里是fail2ban所保护的具体服务的配置，这里以SSH来讲。<br/><br/>在jail.conf里有一个[DEFAULT]段，在这个段下的参数是全局参数，可以被其它段所覆盖。<br/><br/><br/>#忽略IP,在这个清单里的IP不会被屏蔽&nbsp;&nbsp;ignoreip = 127.0.0.1 172.13.14.15&nbsp;&nbsp;#屏蔽时间&nbsp;&nbsp;bantime&nbsp;&nbsp;= 600&nbsp;&nbsp;#发现时间，在此期间内重试超过规定次数，会激活fail2ban&nbsp;&nbsp;findtime&nbsp;&nbsp;= 600&nbsp;&nbsp;#尝试次数&nbsp;&nbsp;maxretry = 3&nbsp;&nbsp;#日志修改检测机制&nbsp;&nbsp;backend = auto&nbsp;&nbsp;&nbsp;&nbsp;[ssh-iptables]&nbsp;&nbsp;#激活&nbsp;&nbsp;enabled&nbsp;&nbsp;= true&nbsp;&nbsp;#filter的名字，在filter.d目录下&nbsp;&nbsp;filter&nbsp;&nbsp; = sshd&nbsp;&nbsp;#所采用的工作，按照名字可在action.d目录下找到&nbsp;&nbsp;action&nbsp;&nbsp; = iptables[name=SSH, port=ssh, protocol=tcp]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mail-whois[name=SSH, dest=root]&nbsp;&nbsp;#目的分析日志&nbsp;&nbsp;logpath&nbsp;&nbsp;= /var/log/secure&nbsp;&nbsp;#覆盖全局重试次数&nbsp;&nbsp;maxretry = 5&nbsp;&nbsp;#覆盖全局屏蔽时间&nbsp;&nbsp;bantime&nbsp;&nbsp;= 3600&nbsp;&nbsp;<br/>对jail.conf进行一定的设置后，就可以使用fail2ban了。 <br/><br/>启动fail2ban<br/><br/><br/>/etc/init.d/fail2ban start&nbsp;&nbsp;<br/>启动之后，只要符合filter所定义的正则式规则的日志项出现，就会执行相应的action。由于0.8源码树采用客户机/服务器的模式，因此可以很方便的查询fail2ban的执行情况。比方所，要查询刚才定义的“ssh-iptables”段的情况，只要执行 <br/><br/><br/>fail2ban-client status ssh-iptables&nbsp;&nbsp;<br/>会打印出结果<br/><br/>Status for the jail: ssh-iptables&nbsp;&nbsp;&#124;- filter&nbsp;&nbsp;&#124;&nbsp;&nbsp;&#124;- Currently failed: 0&nbsp;&nbsp;&#124;&nbsp;&nbsp;`- Total failed:&nbsp;&nbsp;&nbsp;&nbsp; 5&nbsp;&nbsp;`- action&nbsp;&nbsp;&nbsp;&nbsp; &#124;- Currently banned: 1&nbsp;&nbsp;&nbsp;&nbsp; &#124;&nbsp;&nbsp;`- IP list:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 192.168.210.21&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`- Total banned:&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;<br/>fail2ban-client也可以直接定义运行中的fail2ban参数 <br/><br/>比如增加屏蔽时间为一天<br/><br/><br/>fail2ban-client set ssh-iptables bantime 86400&nbsp;&nbsp;<br/>重新读入配置文件<br/><br/>fail2ban-client reload&nbsp;&nbsp;<br/>其它还有很多用法，可以不带参数执行fail2ban-client查看更多选项。 <br/><br/>因为fail2ban的框架，所以可以执行修改filter或者action来满足自己的特殊需要，比如我希望改变fail2ban默认的iptables规则插入方式，那么我就可以到action.d目录下，找到希望修改的action，这里的例子是iptables.conf<br/><br/>默认actionstart的iptables规则有一条是<br/><br/><br/>iptables -I INPUT -p &lt;protocol&gt; --dport &lt;port&gt; -j fail2ban-&lt;name&gt;&nbsp;&nbsp;<br/>这样就把fail2ban的规则插到INPUT链的最前面，而我希望自己写的一条iptables -A INPUT -p ALL -s 1.2.3.4/32 -j ACCEPT一直作为第一条规则从而使自己的IP作为信任IP不受防火墙后面规则的限制。那么就要修改fail2ban的启动规则，把上面那条改为<br/><br/>iptables -I INPUT 2 -p &lt;protocol&gt; --dport &lt;port&gt; -j fail2ban-&lt;name&gt;&nbsp;&nbsp;<br/>这样fail2ban就会把自己的规则作为INPUT链的第二条规则插入，而不影响第一条。 <br/><br/>这里只是一个很简单的例子，你可以根据自己的规则，对action做更多的修改。<br/><br/>而在filter.d目录里就是一些日志的正则式匹配规则，系统自带了一些常见软件的匹配，如sshd,apache,postfix,vsftpd,pure-ftpd等等。来看看sshd的规则，就能了解这些filter应该怎么写，你就可以用fail2ban来保护更多自己的服务。<br/><br/>sshd.conf的内容<br/><br/><br/>[Definition]&nbsp;&nbsp;&nbsp;&nbsp;failregex = Authentication failure for .* from &lt;HOST&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Failed [-/w]+ for .* from &lt;HOST&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ROOT LOGIN REFUSED .* FROM &lt;HOST&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[iI](?:llegal&#124;nvalid) user .* from &lt;HOST&gt;&nbsp;&nbsp;&nbsp;&nbsp;ignoreregex =&nbsp;&nbsp;<br/>可以看到，每行一则正则式，对应各种错误认证，如果你的sshd版本错误认证日志项不太一样，可以修改这里的，或者加入更多。 <br/>来自：http://zhumeng8337797.blog.163.com/blog/static/10076891420107181045105/
]]>
</description>
</item><item>
<link>http://jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] 使用Fail2ban保护Linux系统]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>