Skip to content


网站挂马

收到google小组的邮件

主题: Malware notification regarding www.c1gstudio.com

Dear site owner or webmaster of www.c1gstudio.comm,

We recently discovered that some of your pages can cause users to be infected with malicious software. We have begun showing a warning page to users who visit these pages by clicking a search result on Google.com.

Below are some example URLs on your site which can cause users to be infected (space inserted to prevent accidental clicking in case your mail client auto-links URLs):

http://www.c1gstudio.com/?q=Asp
http://www.c1gstudio.com/?q=CPA
http://www.c1gstudio.com/?q=LTE

Here is a link to a sample warning page:
http://www.google.com/interstitial?url=http%3A//www.c1gstudio.com/%3Fq%3DAsp

We strongly encourage you to investigate this immediately to protect your visitors. Although some sites intentionally distribute malicious software, in many cases the webmaster is unaware because:

1) the site was compromised
2) the site doesn’t monitor for malicious user-contributed content
3) the site displays content from an ad network that has a malicious advertiser

If your site was compromised, it’s important to not only remove the malicious (and usually hidden) content from your pages, but to also identify and fix the vulnerability. We suggest contacting your hosting provider if you are unsure of how to proceed. StopBadware also has a resource page for securing compromised sites:
http://www.stopbadware.org/home/security

Once you’ve secured your site, you can request that the warning be removed by visiting
http://www.google.com/support/webmasters/bin/answer.py?answer=45432
and requesting a review. If your site is no longer harmful to users, we will remove the warning.

Sincerely,
Google Search Quality Team

1.在网页查到恶意js代码

eval(function(p,a,c,k,e,d){e=function(c){return c.toString(36)};if(!”.replace(/^/,String)){while(c–){d[c.toString(a)]=k[c]||c.toString(a)}k=[function(e){return d[e]}];e=function(){return

2.粗览下web根目录,没有找到可疑文件
在日志报告中也没找到可疑请求
用命令搜一下特征码,找出所有被感染的文件。

grep -R ‘eval’ /opt/htdocs > /tmp/eval

3.过滤出可能含用木马的php文件

cat /tmp/eval |grep ‘.php’ > /tmp/evalphp

在evalphp中找到木马

eval(gzinflate(base64_decode(‘ZJ1Hj4NsloX3/Uf6k1iQkzSaFjmaYEzctMg5Z379UOspqRZ2VWF4773nnAew6z//+z//marpX//Kj7j7p3zqoejiLf8ni
….

4.确认是dede文章的漏洞

5.把木马改名
在web日志中找访问时文件的请求,可以得攻击者ip,并可查看都做了什么操作
参照
http://blog.c1gstudio.com/archives/448
打上补丁,恢复被感染文件
dede程序真不告谱,给其加上ip限制。

Posted in 安全, 技术.

Tagged with , .


[转]Facebook性能大提升的秘密:HipHop

转自cdsn http://news.csdn.net/a/20100203/216872.html

HipHop

Facebook神秘的PHP项目HipHop for PHP终于揭开面纱。这个项目由一个PHP到C++的转换程序,一个重新实现的PHP运行库,和许多常用PHP扩展的重写版本构成,目的是旨在加速和优化PHP。

Facebook官方博客(无法直接访问)上项目负责人赵海平(北大1987届遗传与分子生物专业,普林斯顿计算机科学博士)的话说,HipHop项目对Facebook影响巨大。它目前已经支撑了Facebook 90%的Web流量。由于HipHop,Facebook Web服务器上的CPU使用平均减少了50%,从而大大减少了服务器的需求。为了让这一改进也惠及社区,他们决定将之开源,希望能够进一步帮助提高更多大型复杂PHP网站的可伸缩性。

PHP和Facebook的问题

众所周知,Facebook的前端主要是用PHP写的。赵海平说,过去六年Facebook从PHP语言的进展上获益良多。PHP非常简单,易学易用,好读好调试,因此新工程师成长很快,有利地促进了Facebook的更快的创新。

PHP是一种脚本语言,其好处是编程效率高,能够支持产品的快速迭代。但是与传统的编译语言相比,脚本语言的CPU和内存使用效率不好。随着Ajax技术的广泛采用,加上SNS对动态要求较高,这些缺点更显得突出。对于每月超过4000亿次PV的Facebook来说,如何实现扩展,尤其具有挑战性。

常见的办法是直接用C++重写PHP应用中比较复杂的部分,作为PHP扩展。实际上,PHP就转变为一种胶水语言,连接前端HTML和C++应用逻辑。从技术角度讲这也没有问题,但是增加了技能需求,能够在整个应用上工作的工程师数量就大大减少了。学习C++只是编写PHP扩展的第一步,接下来还要理解Zend API。由于Facebook的工程团队较小,每个工程师要支持100万以上的用户。有些代码不是团队里每个人都能看懂,这对于Facebook是无法接受的。

Facebook网站本身的可伸缩性更具挑战性,因为几乎每次页面浏览都是有个性化体验的登录用户发起。浏览主页 时,系统需要查询所有朋友、朋友最重要的状态更新、 根据隐私设置筛选结果,然后还要显示评论、照片等等动态,这一切都需要在一秒内完 成。

自2007年以来,Facebook曾写过几种不同办法解决这些问题。其中包括用另 一种语言重写Facebook,但是由于开发的复杂性和速度等原因,未能实现。他们还重写了PHP的核心部分Zend引擎,并提交给了PHP项目,但最终还是没有获得所需的性能。最后,他们选择了HipHop,终于得偿所愿。

有了HipHop,工程师可以编写代码,用PHP编写组合最后页面的逻辑,并能够继续快速迭代,同时后端服务使用C++, Erlang, Java, Py thon编写,提供新闻提要、搜索、聊天和其他核心功能。

HipHop开发故事

赵海平透露,项目最初是来自几年前Facebook公司一次Hackathon活动(员工在一个晚上自由发挥,实验新的想法),他手工将PHP转换为C++代码,虽然语法上很类似,但是无论是CPU还是内存使用,转换后的C++代码都大大优于PHP。于是他想,如果构建一个系统,编程实现转换,会怎么样呢?

在此之前,已经有了不少改善PHP性能的方法。Zend引擎在运行时转换PHP源代码为运行在Zend虚拟机上的opcode。开源项目APC和eAccelerator将输出缓存,为大多数PHP网站所使用。此外,还有Zend Server这样的商业产品,通过opcode优化和缓存,提高PHP速度。赵海平选择了另一条道路,将PHP直接转为C++,然后再变成本地机器码。当然,有许多开源项目也是同样的思路,Roadsend和phc编译为C,Quercus编译为Java,而Phalanger编译为.NET。

Hackathon之后8个月,赵海平拿出了原型,足以说明这条路可以走通,编译后的代码的确更快。不久,Iain Proctor和Minghui Yang加入进来。接下来又开发了10个月,在生产服务器上测试了6个月。然后正式上线部署,6个月之后,Facebook 90%以上的Web流量都使用了HipHop。

按赵海平的说法,凭借HipHop,Facebook Web服务器上的CPU使用平均减少了50%,从而大大减少了服务器的需求。项目对Facebook影响巨大。为了让这一改进也惠及社区,他们决定将之开源,希望能够进一步帮助提高更多大型复杂PHP网站的可伸缩性。

HipHop的原理

HipHop将PHP代码转换为高度优化的C++代码,然后再用g++编译器编译。它可以保持语义等效地执行源代码,但为了提高性能,牺牲了一些很少用到的特性,比如eval()。

HipHop开发中的主要困难在于,在PHP和C++这两种很不一样的语言之间怎么实现转换。虽然PHP也可以写一些很巧妙的动态特性,但是大多数PHP代码还是非常简单的。if (…) {…} else {..} 比foo($x) { include $x; } 肯定更常见。这为性能提高提供了机会。HipHop生成的代码尽可能地使用函数和变量的静态绑定。同时,还使用类型推演来选出变量最可能对应的某个类型,从而节省内存。

转换过程分三步:

1. 静态分析。收集声明关系和依赖关系等信息。

2. 类型推演。选择最合适的类型,是C++的标量?还是String, Array, classes, Object或者Variant。

3. 代码生成。大部分直接将PHP语句和表达式对应为C++的语句和表达式。

在开发过程中,还有一个副产品:HPHPi,是一个实验性的解释器。通过它,不编译PHP源代码也可以运行。它已经用于HipHop自身的调试中。

HipHop在保持了PHP优点的同时,也兼得了C++的性能优势。项目总共有30万行代码,5000多个单元测试。所有这些都将以PHP开源许可证形式发布到GitHub。

更多信息,可以申请加入HipHop的邮件列表:

http://groups.google.com/group/hiphop-php-dev

Posted in PHP, 技术.

Tagged with , , .


拯救Mysql!Save MySQL!

拯救Mysql!Save MySQL!
save mysql

为阻止Oracle收购Sun,在欧盟似乎已决定批准这项70亿美元的收购案之后,MySQL数据库创始人开始寻求中国和俄罗斯帮助。

在一封给中国 MySQL用户的邮件中写道 “亲爱的拯救MySQL的中国签名支持者,欧盟可能无法拯救MySQL, 中国和俄罗斯可能是拯救MySQL的希望之所在。中国拥有强大、独立以及自信的反垄断主管机关,因此,我本人在此请求您的帮助。对于您的签名,我们深表感谢。如果可以的话,我们需要您的进一步帮助……”

下面是具体的参与方法
点击这个链接并且填写自己的信息提交即可
http://helpmysql.org/cn/petition

FAQ:

———————————-

我们还有多少时间?

时间紧迫,但您仍然可以帮上忙。如果已经太晚(不论好还是坏),我们将立即停用请愿书,并在本网站每一页面上公布结果。

在我们通知您之前,请不要相信已经结束的任何说法。这些说法可能是试图破坏本次活动的某些人散布的。

本次活动网站于2009年12月28日启动。我们越早赢得大量支持者越好。关键的日期是2010年1月4日。那一天(明年的第一个工作日)我们计划 正式向监管者、其他政府机构、议会和记者提交请愿书。之后,我们将继续收集支持,直到程序结束,而且表示持续的支持也很重要。我们可能在2010年1月或 者可能2月份进行请愿书的多次提交。

活动为何是全球性的?

甲骨文需要在全球所有主要市场取得审批。因此,我们将在世界不同地区提交请愿书。

一般而言,监管者会把数据库市场的地理范围界定为全球性的。只要想想MySQL,显然就明白了:人们可以在全球各地下载或获取MySQL,并在各地使用它。因此,您的签名支持甚至会到达您的国家以外的世界其他地方的监管者面前。

我们需要多少签名才能成功?

没有特定限值。这不是事先就知道100,000签名者就能启动政治程序(根据某些法律)的请愿。这是有关MySQL用户的关注和希望达成令MySQL今后独立于甲骨文的真正解决方案(或者至少依赖程度更小)的表达。

这不仅仅是关于绝对数字的问题,而是如何能尽快签字,而且签字是否始终以较高速度增长的问题。您越快签字,越快让其他人知道就越好。

如何处理我的数据?我能相信你吗?

我们知道如您支持本次活动那么您就信任我们,我们将证明我们是值得信赖的。

我们有明确的资料保密声明,请见请愿书页,说明您的数据将只能用于提交请愿书给监管者、其他政府机关、议会和重要、声誉良好的新闻机构记者。如我们向您发送了有关本次活动的信息,您可点击取消链接,这样您将不会收到我们的任何其他电子邮件。

你们如何向监管者、议会和新闻机构提交请愿书?谁会看到请愿书?

有时候请愿书是以打印文件的方式提交,以表明其数量庞大。但是,为了环保考虑,我们可能选择以电子格式提交大多数的请愿书。监管者、议会和重要、著 名的新闻媒体会收到它们,其中附带了不得以任何与本次活动无关的方式使用数据的明确要求,并且,新闻媒体必须签署接收上述要求的文件,并将不被允许从请愿 书中引用任何姓名和其他唯一或范围较窄的识别数据,除非他们从签字人处收到书面明示许可(包括电子邮件方式),允许在报道中提及。

处理本次案件的监管者将把请愿书放入甲骨文/太阳微电子案卷中。对于查看该卷宗有特殊的规定。例如,欧盟甲骨文律师当然会有权看到请愿书。因此,有必要让请愿书具有真正的震撼效果。

我们不要求请愿书中提供任何特殊的敏感信息,如您决定填写其中内容的,我们也不希望您在公共或私人评论字段中提供任何敏感信息。

如何能最有效地帮助请愿成功?

显然最好的第一步就是您在请愿书上签字。

在帮助倡议 部分,您可找到进一步说明和材料,以及在网站上设置的标语。

我们相信您知道其他专业的MySQL用户,并且有办法鼓励他们在请愿书上签字。

我需要现在亲自写信给欧盟吗?或者写信给本国的反垄断机构或议会,例如欧洲议会?

我们认为本次活动将产生大量的回复,当然对于各个机构而言处理完整的请愿书更加容易一些。我们尽可能通过互联网进行号召,包括通过电子邮件,除非通过直接联系能够取得明显不同的良好效果。

如果您可以代表10名或以上员工规模的公司发言,并且MySQL对贵公司很重要,或者如果您可以代表100名或以上员工规模的公司发言,而且贵公司 把MySQL用于重大业务目的,请联系贵国反垄断机构,并表达您关于甲骨文收购MySQL计划的关注。如您需要任何帮助,请使用联系表向我们提问。

Posted in 其它, 网站建设.

Tagged with , .


[转]喜悦村 美国移民之路

http://www.phpx.com/happy/thread-258821-1-1.html
转自村长sadly
个人站长不容易。除了有时间 有热情 没什么资源。

有关部门动辄就一个通知,随时掐你的生命线。

本站由于有论坛,无法完成相关要求现主站已移民至美国 he.net 的 Fremont 机房。
该机房位于美国西海岸的加州Fremont市。

“中美之间的网络电话等数据传输毫无疑问得通过跨域太平洋的海底光缆来进行。目前中美之间有两条直达海底光缆,一条是China-US Cable Network, 网络容量达到了80Gbps,中国大陆登陆点为上海崇明岛和汕头,美国登陆点为加州的San Luis Obispo(位于圣何塞与洛杉矶之间)。还有一条即著名的Trans Pacific Cable,设计容量达到了惊人的5.12Tbps,大陆登陆点为上海(中国电信)和青岛(中国联通),美国登 陆点为俄勒冈州的Nedonna沙滩。两条光缆均已开通商用,但从目前我多次traceroute的结果来看,TPE似乎还没有向一般宽带用户开放。中美之间的带宽增长速度相当惊人,根据CNNIC的统计数据,截至2008年底中国电信与美国之间的带宽为203980MB,而中国网通为110456MB.目前中国电信在北美西海岸的节点有华盛顿州的西雅图,加州的圣何塞,洛杉矶和帕拉阿图。

一般电信/网通用户访问美国站点网络数据传输所走的路线先是本地ISP网络,然后是城域网,接着是各省市网络节点,然后是骨干网,最后从上海等出口出去,跨越一万多公里的浩瀚太平洋后,在美国加州/俄勒冈州登陆。网络延时(latency)在200ms以上。很多人误认为GFW的网络过滤会影响网速,但事实上这种影响可以忽略不计的,网络延时在200ms以上主要还是在于传输距离太长,日本/澳大利亚网民的对美网络延时和大陆用户差不多的,而欧洲用户跨越大西洋一般在100ms以上。如果是你是移动用户的话,带宽资源想对于两大巨头要少的可怜,移动用户一般是先南下到香港连接NTT的节点,然后绕道日本达到美国,网络延时达到了惊人的七八百毫秒。

  这样对于大陆用户来说最佳的机房所在地应该是在西海岸加州,加州的机房最集中的主要有三个,San Jose(圣何塞),Fremont和洛杉矶。其中,San Jose和Fremont都位于湾区,也即是硅谷的入口。
” (文字为引用,未找到原始出处)

另外,在Dallas 和Seattle由于有光纤连接加州主要的数据交换中心,大陆的访问速度也不错。

 

服务器选址过程及注意事项

基于以上帖子所说的信息,村长开始选择IDC。

大家一般用的工具包括 ping 看ping值, traceroute 看路由线路。
这两个工具都不错,但是要会合理利用。

C:\>ping www.phpx.com -t
Pinging www.phpx.com [72.13.82.90] with 32 bytes of data:
Reply from 72.13.82.90: bytes=32 time=224ms TTL=51
Reply from 72.13.82.90: bytes=32 time=223ms TTL=51
Reply from 72.13.82.90: bytes=32 time=223ms TTL=51
Reply from 72.13.82.90: bytes=32 time=223ms TTL=51
Reply from 72.13.82.90: bytes=32 time=223ms TTL=51
Reply from 72.13.82.90: bytes=32 time=223ms TTL=51
Reply from 72.13.82.90: bytes=32 time=224ms TTL=51
Reply from 72.13.82.90: bytes=32 time=223ms TTL=51
Reply from 72.13.82.90: bytes=32 time=224ms TTL=51
Reply from 72.13.82.90: bytes=32 time=226ms TTL=51
Ping statistics for 72.13.82.90:
    Packets: Sent = 10, Received = 10, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 223ms, Maximum = 226ms, Average = 223ms

如上ping值的意义:
a)主机的IP地址是 72.13.82.90,这个比较简单啦
b)数据包的大小是32个字节
c)最小ping值223毫秒,最大ping值226毫秒,平均 223毫秒
d)累计发送了10个ping包,收到10个,丢失0个,丢失率 0%

测ping值要注意,
ping 值只是个参考值,它的大小和用户访问速度有关但并不完全相等
(我在北京联通ping上海电信服务器基本不超过140ms,但是访问速度比美国
还慢。)

ping要关注的是,ping值是否稳定也就是线路是否稳定,如果一条线路最快10ms,
最慢100ms,平均50ms,这条线路绝对是够烂的。

另外重点关注的是丢包率,丢包意味着一个数据发出去但是对端没收到,丢包率
高一般意味着对方带宽用的比较满。
—————————————————–

下面说tracert

C:\>tracert www.phpx.com
Tracing route to www.phpx.com [72.13.82.90]
over a maximum of 30 hops:
  1    <1 ms    <1 ms    <1 ms  localhost [192.168.10.1]
  2    24 ms    21 ms    23 ms  localhost [10.160.38.1]
  3    46 ms    22 ms    12 ms  61.148.45.65
  4    31 ms    12 ms     8 ms  61.148.154.237
  5    37 ms    25 ms    11 ms  bt-228-021.bta.net.cn [202.106.228.21]
  6    50 ms    32 ms    10 ms  202.96.12.25
  7    50 ms    56 ms    53 ms  219.158.4.58
  8    57 ms    54 ms    41 ms  219.158.5.134
  9   226 ms   279 ms   223 ms  219.158.25.26
10   249 ms   276 ms   222 ms  gige-g5-7.core1.sjc2.he.net [216.218.209.113]
11   223 ms   294 ms   234 ms  10gigabitethernet1-1.core1.fmt1.he.net [72.52.92
.109]
12   225 ms   224 ms   237 ms  10gige1-1.fmt1.egihosting.com [64.71.129.70]
13   225 ms   224 ms   249 ms  72.13.82.90
Trace complete.

traceroute (linux) tracert (win) 用来跟踪从用户端发出的数据到达对端经过了
哪些路由节点。

请注意    9   226 ms   279 ms   223 ms  219.158.25.26 ,这一行,他的ip是中国
网通的,但它并不在中国,到这里数据实际已经到达了中美海缆的美国登陆点。

tracert的意义在于,知道从你这里出发是怎么到达服务器的,譬如北京从家里到天津,可以有
多条路有多种走法,坐公车可能要2个小时(可能要转乘市内公交,相当于路由节点增加了),
开车可能要1个小时,坐城际特快可能要30分钟。

虽然路径的两端一致,但是总共所花费的时间却很大不同。

数据传递所经过的节点越多,出错的概率就越大,好比你做公交车,换来换去的走到某一段路赶上那堵车,速度就超慢了。

但是所经过的节点少也不完全等于快,好比你家门口两条路,可以从门口的广场直接到1公里以外
的单位,也可以从另一边的公园里绕到单位的另一侧再往回走。 可是广场上有活动人超多(带宽阻塞了),走不快,而公园里很空,这样虽然绕了路(多了中间节点),但花费的时间却很少。

 

上面说过了IDC选址的基本出发点和测试工具。

不过呢,要想知道一个地方是不是合适,最重要的办法,还是让潜在用户群直接访问看效果
当然,可以是显式的(如村长经常在群里请大家帮忙测试某个网站的速度)也可以是隐式的(如监控宝工具)。

村长将着眼点放在了  
The planet的Dallas机房, Softlayer的Dallas机房,Seattle机房,
Peer1的Los Angeles机房, He.net的Fremont等几个地方。

这几个机房都是属于带宽、实体面积都比较大的独立服务商,企业实力比较雄厚,不太会出现跑路的情况。

村长选择了主机以上机房的多个客户网站,请大家做了测试,也使用很多工具做了自动测试。
最后的综合结论是各家都不错,但是Theplanet,Peer1的机房方向性比较强,有的地方很快,有的地方很慢。
另外的两个相对来说,各地访问速度比较均衡。

Softlayer的用户也比较多,购买也方便。He.net几乎是专心运营骨干网的,租用服务器的价格高的吓人。
于是村长决定先在Softlayer Seattle做个更长时间的实际访问测试,荷包不鼓啊不能直接租独服
做测试用,找个二级代理商租个VPS算了。

这样 sea.phpx.com 就诞生了,这是假设在一台 openvz 基础上的vps服务器,内存512M,流量500G每月。

这里来说一下VPS, 村长想大部分人都用过vmware吧? 就是那个意思。
把一台物理的服务器分隔成多个逻辑独立的虚拟服务器,每个虚拟服务器也就是VPS都有自己的
CPU,内存,硬盘,可以单独的安装不同的操作系统,应用程序。 那台物理的主机被称为母机。

VPS的核心技术是虚拟化,包括虚拟机(如vmware,virtual pc) ,准虚拟化(如XEN),全虚拟化
(如Virtuozzo/OpenVZ), 这方面说起来很长,大家自己百度学习吧。

这里强调一下,首先母机的挂掉会直接的让所有的vps都挂掉,这个不难理解:)

然后,虚拟机毕竟不是实体的,有仿真损耗,性能要平均损失20%左右。

再然后,基于XEN软件的vps分配的是独占资源,也即1G的内存分配512M的vps只能分配4个,
基于OpenVZ软件的vps分配的是共享资源,也即1G的内存可以分配多余4个VPS。
因此OpenVZ的VPS是可以超售(over selling)的,一旦一台母机上的vps子机都来请求资源就会
使用硬盘模拟内存,性能急剧下降,有可能挂掉。

最后,也是最重要的,vps不是物理机,你的所有数据只是对应到母机的一个文件夹下相应的目
录树而已。
比如你的 /etc/iptables 可能对应的就是 /vz/vps000/etc/iptables 。
因此你的所有数据对于母机而言是完全暴露的,母机管理员还可以通过工具直接进入你的vps运
行中环境
而不需要把他们停机,这也不会在你的系统上留下任何log。
所以万不可把私密的数据放在那里,倒不是说母机管理员会盗你的数据,而是一旦母机被黑客攻
击,就全玩完了,你自己在vps上做再多的安全设置都保护不了。 。

还有一点,无论物理机,还是vps,都存在硬件或者仿真硬件失效的可能性,经常做数据备份是
个好习惯。

好啦,下面继续说村子,有了VPS又不能把重要数据放在上面,那么Nginx就该上场了。
村长于是在西雅图的vps上用nginx做了一个反向代理,直接从北京联通的服务器上取网页数据
送给用户。
因为没有数据库,php这些,所以512M跑这个简直就是小菜一碟啦。

大家对cdn还是有误区,这个诞生于网络带宽匮乏的Web1.0时代的产物。
大家都认为它是搞静态的,比如新闻,把服务器上的文件取下来放在自己这缓存下来,
然后用户请求的时候就从自己的缓存发给用户而不用去服务器上取了。

这是老观念了。实际上,你用Nginx对网站做个反向代理,不带缓存,就是个动态的CDN了
那这样每次都去一对一的请求,也没有节省服务器的web请求啊,还浪费了更多带宽,这不是
瞎折腾吗?

不是这样的!它是解决了访问速度的问题。
上一次说tracert的时候,村长提到过, 访问节点少的路径未必是最快的。
一个北京的用户走公开路径去访问上海A机房里的网站速度很慢,
但是他从北京访问北京机房的B机房的服务器, 再由B机房的服务器做A机房的网站的反向代理
传输数据这样却可能很快。

这是为啥呢? 因为IDC之间和用户到IDC直接走的路径是不同的,这条路径上的带宽状况要好的多。
这也是为什么你家里安装了上行4Mbps的ADSL开个网站,用户访问速度也远比在IDC里租个1Mbps
的带宽慢的原因。

 

今天说点简单的。

大家租服务器的时候经常遇到,端口、带宽这种问题。 在此细讲一下。

100Mbps端口指的是你的主机接在交换机的100Mbps端口上,它为你提供了支持大峰值
访问条件。
如果是10Mbps端口,则指的是你的主机接在交换机的10Mbps端口上,这样,你的最大
峰值就是10Mbps,冲不上去了

而带宽是指你可以使用的数据流量,这个有用 带宽速率 和 数据量两种表达方式

譬如本站Fremont的服务器,网络方面的限制是
100Mbps端口,月数据流量2000GB,超出部分$1/GB

数据流量2000GB,折合成带宽限制就是
2000GB/30天/86400秒* 1024  (1GB=1024MB) * 8 (1Byte =1 bits) = 6.32Mbps
换言之,相当于一个全天24小时满载的独享6.32Mbps带宽。

那既然用量这么低为什么端口是100Mbps呢? 大家都知道,网站的访问是有明显的峰
谷效应的

白天人多的时候可能有几千人,晚上则可能只有几十个人。
这样,如果你租的是一个独享6.32Mbps的线路,那白天繁忙的时候一定是不够用的。

现在计算一下:
100Mbps端口,意味着你全天24小时满载每月数据流量可以达到32400GB,提供了
更好的峰值带宽。
10Mbps端口,意味着你全天24小时满载每月数据量可以达到3240GB,限制了最大
可能发生的费用

另外租主机的时候,要注意 10Mbps unmetered port ,10Mbps bandwidth,
这是两个不同的概念。
10Mbps unmetered port 指的是给你的主机接在10Mbps的交换机端口上,带宽不限
也就是最大可以跑3240GB
10Mbps bandwidth 指的是以速率方式计算带宽用量,月平均速度不高于10Mbps,
也就是实际可以跑到3240GB。
如果服务商没有明确的说明,最好问一下,以免发生不必要的麻烦。

然后,请注意一下服务商是全额计数据流量,还是95%计费法,(称作 95th percentile)
95%计费法是对用户比较有利的,也是一般服务商采用的。
简单的说,就是在一个月的计费周期里的,把带宽使用量按每五分钟统计一次(以bps速率计),
然后去掉最高的5%,而剩下的95%就是要付费的使用量。

你注意看MRTG 或者 CACTI 的流量图表里,那个偶然高上去的毛刺,最后一般
都会被平均掉。

本村用的100Mbps端口,然后每天清晨做数据备份的时候,实时带宽速率达到过80Mbps,
哈哈,这远高于平均速率,所以最后肯定被去掉了,于是一个月就省去了100GB左右的数据流量。

最后,请注意以上说的都是主机和IDC内部交换机的连接,带宽也是指的最大可能带宽。

机房的出口将会是最后限制,比如一个机房他的出口带宽就2Gbps,但它在机房里卖了
50个100Mbps独享带宽的机柜,大家无非就是在2Gbps的范围内抢罢了,不会都能跑
到100Mbps的。 所以机房出口越大越好。

当然还有接入商的问题,美国有很多带宽运营商,所以机房是单线接入,还是多线接入也
是个需要考虑的问题。

Posted in IDC.

Tagged with .


yum卸载X window

查看已安装的包

yum list installed

卸载X window

yum groupinstall “X Window System”

卸载时的包会比安装的包少,install 对应的是“包所依赖的”包,remove对应“包被依赖的”包。

Posted in linux 维护优化, 技术.

Tagged with .


nginx反向代理多个域名(虚似主机)

nginx反向代理同一ip多个域名,给header加上host就可以了

proxy_set_header Host $host;

nginx.conf例子

upstream mysvr {
server 127.0.0.1:8080;
}
server
{
listen 80;
server_name servera.c1gstudio.com;
index index.html index.htm index.php;
root /opt/htdocs/www;

location / {
proxy_pass http://mysvr;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
server
{
listen 80;
server_name serverb.c1gstudio.com;
index index.html index.htm index.php;
root /opt/htdocs/www;

location / {
proxy_pass http://mysvr;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

Posted in Nginx, 技术.

Tagged with , .


phpize不重新编译PHP实现扩展的安装

当php已经编译好在运行,又不想停机重新编译时可用此方法增加扩展。
增加自已写的库也可用此方法,参考HonestQiao 的记录
http://chinaunix.net/jh/27/547568.html

php之前的编译环境
增加运行phpmsnclass需mhas和pcntl库为例

1.先下载类库
cd /home/c1g/src/

wget http://blog.s135.com/soft/linux/nginx_php/mcrypt/libmcrypt-2.5.8.tar.gz
wget http://blog.s135.com/soft/linux/nginx_php/mhash/mhash-0.9.9.9.tar.gz
wget http://blog.s135.com/soft/linux/nginx_php/mcrypt/mcrypt-2.6.8.tar.gz

2.编译安装类库

tar zxvf libmcrypt-2.5.8.tar.gz
cd libmcrypt-2.5.8/
./configure
make
make install
/sbin/ldconfig
cd libltdl/
./configure –enable-ltdl-install
make
make install
cd ../../

tar zxvf mhash-0.9.9.9.tar.gz
cd mhash-0.9.9.9/
./configure
make
make install
cd ../

ln -s /usr/local/lib/libmcrypt.la /usr/lib/libmcrypt.la
ln -s /usr/local/lib/libmcrypt.so /usr/lib/libmcrypt.so
ln -s /usr/local/lib/libmcrypt.so.4 /usr/lib/libmcrypt.so.4
ln -s /usr/local/lib/libmcrypt.so.4.4.8 /usr/lib/libmcrypt.so.4.4.8
ln -s /usr/local/lib/libmhash.a /usr/lib/libmhash.a
ln -s /usr/local/lib/libmhash.la /usr/lib/libmhash.la
ln -s /usr/local/lib/libmhash.so /usr/lib/libmhash.so
ln -s /usr/local/lib/libmhash.so.2 /usr/lib/libmhash.so.2
ln -s /usr/local/lib/libmhash.so.2.0.1 /usr/lib/libmhash.so.2.0.1

tar zxvf mcrypt-2.6.8.tar.gz
cd mcrypt-2.6.8/
/sbin/ldconfig
./configure
make
make install
cd ../

3.开始编译安装mhash扩展
进入php原始编译目录

cd /home/c1g/src/php-5.2.6/ext/mhash
/opt/php/bin/phpize
#会有以下信息生成,并产生编译文件
#Configuring for:
#PHP Api Version: 20041225
#Zend Module Api No: 20060613
#Zend Extension Api No: 220060519
./configure –with-php-config=/opt/php/bin/php-config
make
make install

生成的mhash.so会存下以下目录
Installing shared extensions: /opt/php/lib/php/extensions/no-debug-non-zts-20060613/

4.安装pcntl

cd ../pcntl
/opt/php/bin/phpize
./configure –with-php-config=/opt/php/bin/php-config
make
make install

生成的pcntl.so会存下以下目录
Installing shared extensions: /opt/php/lib/php/extensions/no-debug-non-zts-20060613/

5.编辑php.ini,指定好扩展的目录和需加载的库

extension_dir = “/opt/php/lib/php/extensions/no-debug-non-zts-20060613/”

extension=”mhash.so”
extension=”pcntl.so”

6.重新reload一下php

7.检查下是否已生效
/opt/php/bin/php -m

[PHP Modules]
bcmath
ctype
curl
date
dom
filter
gd
hash
iconv
json
libxml
mbstring
mcrypt
memcache
mhash
mysql
mysqli
pcntl
pcre
PDO
pdo_sqlite
posix
Reflection
session
shmop
SimpleXML
SPL
SQLite
standard
sysvsem
tokenizer
XCache
xml
xmlreader
xmlwriter
zlib

[Zend Modules]
XCache

参考:
http://blog.s135.com/nginx_php_v5/
http://blog.csdn.net/sdomain/archive/2009/09/04/4520425.aspx

Posted in PHP, 技术.

Tagged with , , .


snmpd输出日志的过滤

messages会有很多snmpd的信息,影响阅读正常信息
#tail /var/log/messages

Jan 19 10:01:07 touran snmpd[4033]: Received SNMP packet(s) from UDP: [127.0.0.1]:5392
Jan 19 10:01:07 touran snmpd[4033]: Connection from UDP: [127.0.0.1]:5392
Jan 19 10:01:07 touran last message repeated 10 times
Jan 19 10:04:09 touran snmpd[4033]: Connection from UDP: [127.0.0.1]:5396
Jan 19 10:04:09 touran snmpd[4033]: Received SNMP packet(s) from UDP: [127.0.0.1]:5396
Jan 19 10:04:09 touran snmpd[4033]: Connection from UDP: [127.0.0.1]:5396
Jan 19 10:06:07 touran last message repeated 11 times
Jan 19 10:06:07 touran last message repeated 11 times

我们可以重新定义snmpd的日志输出级别来降低垃圾信息
我这里是centos的系统
#vi /etc/init.d/snmpd

OPTIONS=”-Lsd -Lf /dev/null -p /var/run/snmpd.pid -a”

修改此行为下面

OPTIONS=”-LS 0-4 d -Lf /dev/null -p /var/run/snmpd.pid -a”

重启snmpd
#/etc/init.d/snmpd restart

详细的参数意思
可以用 man snmpd和man snmpcmd来查看
man snmpcmd中对日志等级的定义
0 or ! for LOG_EMERG,
1 or a for LOG_ALERT,
2 or c for LOG_CRIT,
3 or e for LOG_ERR,
4 or w for LOG_WARNING,
5 or n for LOG_NOTICE,
6 or i for LOG_INFO, and
7 or d for LOG_DEBUG.

参考:http://www.diybl.com/course/6_system/linux/Linuxjs/2008930/146976.html

Posted in linux 维护优化, 技术, 日志.

Tagged with , .


使用fail2ban来阻止Ssh暴力入侵

fail2ban可以设置对方密码失败n次后用防火墙屏蔽n分钟,
写入日志中,并可邮件你。
时间到后会恢复iptables,很干净

http://sourceforge.net/projects/fail2ban/files/
http://www.fail2ban.org/

目前最新版为0.8.4

下载安装
wget “http://downloads.sourceforge.net/project/fail2ban/fail2ban-stable/fail2ban-0.8.4/fail2ban-0.8.4.tar.bz2?use_mirror=ncu”
#tar xvfj fail2ban-0.8.4.tar.bz2
#cd fail2ban-0.8.4
#python setup.py install
#cp ./files/redhat-initd /etc/init.d/fail2ban #./files目录下还有供其它系统使用的文件如:getoon,suse等
#chkconfig –add fail2ban #添加开机启动
#chkconfig –list |grep fail2ban #检查一下是否已装载到服务

修改配置文件

/etc/fail2ban/fail2ban.conf
可以定义日志记录级别,保存路径及套接字文件,这个使用默认
#vi /etc/fail2ban/jail.conf

ignoreip = 127.0.0.1 # 忽悠 IP范围 如果有二组以上用空白做为间隔
bantime = 600 # 设定 IP 被封锁的时间(秒),如果值为 -1,代表永远封锁
findtime = 600 # 设定在多少时间内达到 maxretry 的次数就封锁
maxretry = 3 # 允许尝试的次数

[ssh-iptables]
#针对sshd暴力入侵防护
enabled = true # 开启
filter = sshd
action = iptables[name=SSH, port=6022, protocol=tcp] #我的sshd port为6022
# sendmail-whois[name=SSH, [email protected], [email protected]] #不发送邮件
logpath = /var/log/secure #ssh 失败日志路径
maxretry = 3 #重试次数

#service fail2ban start 注:如果重起iptables 记的一定还要重起fail2ban(fail2ban-client reload),不然他就不能生效,fail2ban的过滤表是在iptables 启动后在加入的.

测试
#tail -f /var/log/secure /var/log/fail2ban.log
==> /var/log/secure <== Jan 13 17:02:02 localhost sshd[24207]: Failed password for c1g from 192.168.1.8 port 10270 ssh2 Jan 13 17:02:12 localhost last message repeated 2 times Jan 13 17:02:19 localhost sshd[24287]: Failed password for c1g from 192.168.1.8 port 10398 ssh2 Jan 13 17:02:28 localhost last message repeated 2 times Jan 13 17:02:35 localhost sshd[24322]: Failed password for c1g from 192.168.1.8 port 10447 ssh2 ==> /var/log/fail2ban.log <== 2010-01-13 17:02:36,849 fail2ban.actions: WARNING [ssh-iptables] Ban 192.168.1.8 ==> /var/log/fail2ban.log <== 2010-01-13 17:12:36,852 fail2ban.actions: WARNING [ssh-iptables] Unban 192.168.1.8 #fail2ban-client status ssh-iptables
Status for the jail: ssh-iptables
|- filter
| |- File list: /var/log/secure
| |- Currently failed: 0
| `- Total failed: 4
`- action
|- Currently banned: 0
| `- IP list:
`- Total banned: 1

配置日志
写一个logrotate的配置文件,并拷贝成/etc/logrotate.d/fail2ban,用来定期清理日志文件

/var/log/fail2ban.log {
missingok
notifempty
size 30k
create 0600 root root
postrotate
/usr/bin/fail2ban-client reload 2> /dev/null || true
endscript
}

参考
http://www.fail2ban.org/wiki/index.php/MANUAL_0_8#Jail_Options
http://allblue.mllm.org/node/186
http://www.lsanotes.cn/fail2ban

Posted in linux 维护优化, 安全, 技术.

Tagged with , .


对apache 访问日志排序练习

记录一下练习
假设多台web服务器的日志合并在一起,需按日期重新排序。

样列:

127.0.0.1 – – [01/Dec/2005:14:00:55 +800] “GET /test/testregx.php HTTP/1.1” 200 32
127.0.0.1 – – [01/Dec/2005:14:01:55 +800] “GET /test/testregx.php HTTP/1.1” 200 32
127.0.0.1 – – [01/Dec/2005:14:05:55 +800] “GET /test/testregx.php HTTP/1.1” 200 32
127.0.0.1 – – [01/Dec/2005:14:04:55 +800] “GET /test/testregx.php HTTP/1.1” 200 32
127.0.0.1 – – [01/Dec/2005:14:02:55 +800] “GET /test/testregx.php HTTP/1.1” 200 32
127.0.0.1 – – [01/Dec/2005:14:02:55 +800] “GET /test/testregx.php HTTP/1.1” 200 32
127.0.0.1 – – [01/Dec/2005:15:02:55 +800] “GET /test/testregx.php HTTP/1.1” 200 32
127.0.0.1 – – [01/Dec/2005:14:02:55 +800] “GET /test/testregx.php HTTP/1.1” 200 32
207.0.0.1 – – [01/Dec/2005:14:02:54 +800] “GET /test/testregx.php HTTP/1.1” 200 32
227.0.0.1 – – [01/Dec/2005:14:02:54 +800] “GET /test/testregx.php HTTP/1.1” 200 32
217.0.0.1 – – [01/Dec/2005:14:02:54 +800] “GET /test/testregx.php HTTP/1.1” 200 32
127.0.0.1 – – [01/Dec/2005:14:02:55 +800] “GET /test/testregx.php HTTP/1.1” 200 32
127.0.0.1 – – [01/Dec/2005:14:02:55 +800] “GET /test/testregx.php HTTP/1.1” 200 32
127.0.0.1 – – [01/Dec/2004:14:12:55 +800] “GET /test/testregx.php HTTP/1.1” 200 32
127.0.0.1 – – [01/Feb/2005:14:02:55 +800] “GET /test/testregx.php HTTP/1.1” 200 32
127.0.0.1 – – [01/Jan/2005:14:02:55 +800] “GET /test/testregx.php HTTP/1.1” 200 32
127.0.0.1 – – [01/Jan/2004:14:22:55 +800] “GET /test/testregx.php HTTP/1.1” 200 32

开始的想法:
不知道sort还可以分段排序,
所以先替换成一定规则,用awk提到行首,再用sort排序
然后清除行首排序字符,再替换成原来的样子。
缺点:
不能对年和月排序,效率慢,代码很傻

cat http.log |sed -e ‘s#\[#:#’ -e ‘s#/#:#’ -e ‘s#/#:#’ -e ‘s# +800]#:#’|awk -F: ‘{print $2$5$6$7″|”$0}’|sort -n|cut -d’|’ -f2|sed -e ‘s/:/[/’ -e ‘s#:#/#’ -e ‘s#:#/#’ -e ‘s/: “/ +0800]” /’

最简单的方法:
按空格分割后对第四列排序
缺点:
日志中的月份为英文,跨月后排序可能不正确,但速度很快

cat http.log |sort -t” ” -k4

改进型:
对年月时间进行多列排序
缺点:
算位不太好算,速度也不快,但是解决了日期排序

export LC_ALL=POSIX
cat http.log |sort -t’ ‘ -f -i -k 4.9,4.12n -k 4.5,4.7M -k 4.2,4.3n -k 4.14

#LC_ALL未声明可能会在排序月份再排日时显示错误顺序

输出结果

127.0.0.1 – – [01/Jan/2004:14:22:55 +800] “GET /test/testregx.php HTTP/1.1” 200 32
127.0.0.1 – – [01/Dec/2004:14:12:55 +800] “GET /test/testregx.php HTTP/1.1” 200 32
127.0.0.1 – – [01/Jan/2005:14:02:55 +800] “GET /test/testregx.php HTTP/1.1” 200 32
127.0.0.1 – – [01/Feb/2005:14:02:55 +800] “GET /test/testregx.php HTTP/1.1” 200 32
127.0.0.1 – – [01/Dec/2005:14:00:55 +800] “GET /test/testregx.php HTTP/1.1” 200 32
127.0.0.1 – – [01/Dec/2005:14:01:55 +800] “GET /test/testregx.php HTTP/1.1” 200 32
207.0.0.1 – – [01/Dec/2005:14:02:54 +800] “GET /test/testregx.php HTTP/1.1” 200 32
217.0.0.1 – – [01/Dec/2005:14:02:54 +800] “GET /test/testregx.php HTTP/1.1” 200 32
227.0.0.1 – – [01/Dec/2005:14:02:54 +800] “GET /test/testregx.php HTTP/1.1” 200 32
127.0.0.1 – – [01/Dec/2005:14:02:55 +800] “GET /test/testregx.php HTTP/1.1” 200 32
127.0.0.1 – – [01/Dec/2005:14:02:55 +800] “GET /test/testregx.php HTTP/1.1” 200 32
127.0.0.1 – – [01/Dec/2005:14:02:55 +800] “GET /test/testregx.php HTTP/1.1” 200 32
127.0.0.1 – – [01/Dec/2005:14:02:55 +800] “GET /test/testregx.php HTTP/1.1” 200 32
127.0.0.1 – – [01/Dec/2005:14:02:55 +800] “GET /test/testregx.php HTTP/1.1” 200 32
127.0.0.1 – – [01/Dec/2005:14:04:55 +800] “GET /test/testregx.php HTTP/1.1” 200 32
127.0.0.1 – – [01/Dec/2005:14:05:55 +800] “GET /test/testregx.php HTTP/1.1” 200 32
127.0.0.1 – – [01/Dec/2005:15:02:55 +800] “GET /test/testregx.php HTTP/1.1” 200 32

参考
http://www.gnu.org/software/coreutils/faq/#Sort-does-not-sort-in-normal-order_0021
http://www.softpanorama.org/Tools/sort.shtml
http://www.phpman.info/index.php/info/sort
http://www.technow.com.hk/bash-shell-use-sort
http://www.chedong.com/tech/rotate_merge_log.html

Posted in shell, 技术.

Tagged with , , .