2010年6月 归档
安全 FTP 协议 FTPS 和防火墙
6月30日
在前一个博文《FTP和LDAP认证的整合》中实现了能够和 LDAP 认证整合的 FTP 服务器。但是我们知道,FTP协议并不安全,认证信息都明文传输。就像 HTTPS 之于 HTTP,FTPS 就是安全的 FTP 服务。
采用 ProFTPD 架设 FTPS 是小菜一碟,但是你有可能倒在防火墙上…
ruby中的实例方法、类方法、单体方法、私有方法、protected方法
6月29日
1、ruby的的实例方法和Java等其他语言的定义类似
irb(main):065:0> class Dog irb(main):066:1> def run irb(main):067:2> puts "I'm running!" irb(main):068:2> end irb(main):069:1> end => nil irb(main):070:0> dog = Dog.new => #<Dog:0x7fabbbefd918 @name="Dog"> irb(main):071:0> dog.run I'm running!
2、类方法定义时需要在方法前加入类名称或者self关键字
阅读全部内容 »
LDAP 作为 FTP 认证源
6月29日
有很多用户都提出把 LDAP 和内部的 FTP 服务器整合的需求。好吧,就说一说三个主要的 FTP 服务器:vsftpd, Pure-FTPd 和 ProFTPD 和 LDAP 的整合。
阅读全部内容 »
用 greylist 做邮件服务器的保护罩
6月28日
据考证,第一个垃圾邮件是 1994 年 3 月 5 日由一对夫妻律师发送出来的。自此,垃圾邮件充斥着你、我邮箱的各个角落。要怪罪的话,只能怪罪 SMTP 协议的创造者是一个大好人,设计之初压根没有考虑人性的贪婪导致邮件被滥用。
防止垃圾邮件,已经是商业邮件服务器的必选项。但是一些被广泛使用的垃圾邮件防范机制的效果很有限。
- 基于黑名单的垃圾邮件防护,因黑名单维护和更新存在滞后性和时效性,效果并不显著
- 基于内容的过滤,即使准确度 99%, 那 1% 被隔离的正常邮件也可能会造成意想不到的损失。对 1% 邮件的牵肠挂肚,让 99% 的准确度失去意义。
Greylist —— 灰名单,则在另外的一个角度上另辟蹊径。
- 基于邮件服务器行为,而非邮件内容本身
- SMTP 服务器发送的正常邮件存在重发机制,而垃圾邮件往往缺乏正规邮件的重发机制
- 在某个IP或者某个网段以某个用户名义发送邮件到本邮件域的某个用户,如果是第一次发送,拒收邮件
- 第一次拒收的同时,会记录发送方的IP地址,MAIL FROM,RCPT TO 等 SMTP 会话信息
- 在某个时间段之内(10分钟到8小时),发送方重新发送邮件,则会话被接受,灰名单进入白名单
在 Debian 上,可以很容易的安装名为 greylistd 的软件包,稍加配置,就可以为你的邮件服务器穿上保护罩。
logcheck, fail2ban 的副作用
6月28日
今天客户遇到的问题,让我们看到了 logcheck与 fail2ban 的副作用,采取适当的配置,可以减少副作用的发生。
logcheck 工具周期性(每个小时)读取系统日志,检查日志中可能的安全风险,并将相关信息发送给管理员。fail2ban 也是检查相应的日志文件,检查服务滥用情况(如暴力口令破解),并自动采取相关措施(针对IP地址暂停服务)。
今天客户的机器发生CPU占用过高的情况,经过检查发现(虽然不是直接原因) logcheck 和 fail2ban 导致了CPU高占用率。
- 客户的服务器还提供用户SSH登录和执行运算等工作
- 有一个用户写的程序,频繁的发送日志,在一天之内,就在 /var/log/messages 中写了 12G 的数据,而且还在不停的写
- logcheck 和 fail2ban 等日志检查程序,在处理如此之大的日志文件时,造成 CPU 占用过高
- 此外,还(曾经)出现内存耗尽的情况(总共64G物理内存)
停止 fail2ban 服务进程,杀掉正在执行的 logcheck 进程,CPU 占用量降为正常水平。
最根本的是用户自己的应用不要频繁的发送日志,后台进程运行将 debug 信息输出到空设备(/dev/null)。还有,为了防止类似情况的发生,还要解决 logchec 和 fail2ban 因庞大日志导致的性能降低问题:
- logcheck 只跟踪 /var/log/auth.log 日志,不要跟踪 /var/log/syslog 和其它有可能因为意外导致奇大无比的日志
编辑 /etc/logcheck/logcheck.logfiles 文件,设定跟踪的日志文件 - fail2ban,关闭跟踪 /var/log/messages 文件的事件。当然最好修改相关应用,日志存放在独立的文件而非 /var/log/messages 中。
“当时我就震惊了”——六月北京 OpenParty
6月20日
标题并非取自“豆瓣网”传说中的“震组”,首次听说豆瓣有这个小组以及有这句“潮”语,还是在昨天参加北京OpenParty活动日的时候。
Horse老师/老板在介绍他的“奇遇花园”和他的社会学研究心得的时候,提到了豆瓣和这句话,马上就在接下来的由淘宝的章亦春 (Agentzh) 的报告中应验了。Agentzh 的报告主题是他在 Nginx 插件开发和在淘宝中Nginx的应用,“当时我就震惊了”。
知道 Nginx 很久了,就在上一周,公司的一个同事在做 Redmine 性能优化的时候也拿 Apache 和 Nginx 做了对比,吞吐量至少相差了10倍(具体数字我忘记了)。但是有两个东西一直困扰着我,如果解决不了,无法实现由 Apache 向 Nginx 迁移。
- Subversion。一般客户安装 Subversion,都使用的是 https 协议,依靠 mod-dav-svn 模组运行在 Apache 下
- CoSign。单点登录需要Web服务器安装相应插件,有 Apache 和 IIS 插件,但是没有 Nginx 插件。
Agentzh 在他的报告中介绍了他 Hack Nginx 的经历以及他如何使用 Hack 后的 Nginx 极大的提升了服务器吞吐量甚至将千兆网卡跑满。
- Nginx 的优秀源自于非阻塞IO模型,当然这并非一个简单的话题
- Nginx 不仅仅是 Web 服务器,可以配置为其它应用服务器。
- Agentzh 通过 Nginx 的配置文件在一个 URL location 中完成数据库操作等调用并返回 JSON 数据,实现 AJAX 功能,真的让人眼前一亮,看到网络应用优化的另辟蹊径。
- Nginx 的代理功能,不但可以和 Tomcat 等应用服务器整合,Apache 也可以。这不就是 Subversion 运行在 Nginx 下的办法么。
回来后,查了一下 Subversion 在 Nginx 下运行的解决方案:
- Nginx 下直接运行 SVN 是不行的,而且 Nginx 的 WebDAV 协议实现的不完全。
- SVN 仍旧使用 Apache 做服务器,但是使用 Nginx 代理是可行的,但是会遇到问题:
- copy,rename,建立分支/里程碑这样的操作有问题,会因为操作的内容中存在路径未经代理替换
COPY /path HTTP/1.1 Host: host Destination: https://host/another_path
- 有个解决方案,但是尚未进行验证。原文出自:这里
location / { # to avoid 502 Bad Gateway: # http://vanderwijk.info/Members/ivo/articles/ComplexSVNSetupFix set $destination $http_destination; if ($destination ~* ^https(.+)$) { set $destination http$1; } proxy_set_header Destination $destination; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; proxy_pass http://svn; }
- copy,rename,建立分支/里程碑这样的操作有问题,会因为操作的内容中存在路径未经代理替换
至于 CoSign 单点登录系统在 Nginx 的运行,则必须在 Nginx 上开发插件了。还好已经和 agentzh 交换了名片,遇到问题向他请教吧。据 Agentzh 说,Nginx 代码量没有 Apache 那么大,但是也有10万行,没有注释但很优美(这点可能和 CoSign 的代码类似),开发插件因为文档的匮乏,看相当数量的代码是必须的,我再次震惊了。 ;-)

topgit 分支的图形化显示
6月18日
使用 Git + topgit 做版本控制,当 topgit分支(功能分支)非常多并且相互依赖比较复杂时,非常需要有一个直观的图形化的分支依赖图。
联想到我们使用 git 经常用到的 git glog 命令输出,如果 topgit 分支图能够有类似的显示就太好了:
| | * t/unittest | |/ | *---. t/message_localize | |\ \ \ | * | | | t/auth_log_for_fail2ban |/ / / / | * | | t/factor_invite |/ / / | * | t/factor_ldap |/ / | * t/include_macro_for_templates | * t/multi_language |/ * master
正在冥思苦想如何实现时,忽然发现 topgit 的 tg-summary 中原来已经有图形输出的实现,是借用 graphviz 工具进行图形化输出…
阅读全部内容 »
性能测试工具小黑马—JMeter+Badboy
6月13日
众所周知,LoadRunner是性能测试的霸主。但因其高额的商业费用使小公司望而却步。难道小公司在性能测试方面就只能缴械投降了吗?
答案另所有人兴奋:当然不是了。JMeter+Badboy这一对后起之秀,完美地实现了只有LoadRunner才有的功能。
JMeter 是纯Java编写的功能与性能测试工具,但其录制脚本过于笨拙复杂,成为使用者的诟病。Badboy是用C++开发的,被用于测试和开发复杂的动态应用。 它提供了强大的屏幕录制和回放功能,同时也提供了丰富的图形结果分析功能。只要不用于商业目的就可以免费使用。因此这两工具的结合,就成为了绝配。你可以 用Badboy录制脚本,然后将录制的脚本导出为JMeter格式的脚本,最后将该脚本导入到JMeter,借助于JMeter强大的测试功能模拟大量的 虚拟用户,进行复杂的性能测试。
下面用一个简单的测试流程来演示一下如何使用
如何用apache+mongrel部署Rails应用
6月13日
- 安装mongrel和mongrel_cluster
sudo gem install mongrel mongrel_cluster
由于用gem安装后mongrel_rails命令被放在 /var/lib/gems/1.8/bin/mongrel_rails,使用不方便,所以建议建立符号链接
sudo ln -s /var/lib/gems/1.8/bin/mongrel_rails /usr/bin/mongrel_rails
- 配置并启动 mongrel_cluster
阅读全部内容 »

pySvnManager 升级
6月11日
pySvnManager 升级为 0.4.1,并撰写了用户手册和开发者手册。相关的更新:
- 重新设计的用户界面,更加人性化。不知道我当初为什么手那么懒,呵呵。

- 能够发现 svn 授权文件手动更改,并在警告信息中提供保存的链接

- 能够运行在最新的 Pylons 1.0 框架中,并且支持 virtualenv,可以彻底解决 python 包依赖问题
- pySvnManager 用户手册,提供详细的安装以及操作指南
- pySvnManager 开发者文档,提供 pySvnManager 软件架构的详细解说,供爱好者改进时参考

最新评论