跳到主要内容

最近的维护心得总结(关于安全)

提示

这是一篇较为久远的文章,其中的知识有可能已经过时

一. windows下分时记录nginx日志

先说点题外话: 近日在维护项目的时候闹了个笑话,由于家里刚装了个4M的宽带网,在家也可以干活了,所以有时候会去访问下自己维护的项目,发现登录的时候奇慢无比,打开页面需要将近10秒钟,这已经让我无法忍受,不由自主的想到了前一段服务器遭到攻击的事情:

有一天看到群里有用户抱怨网站太卡,于是上远程排查原因,发现 有一个湖南孝感的ip地址(当时不知道)不停的向服务器发请求,访问一个导出Excel的Action,由于此方法里有很多访问数据库的语句,每一次请求都会消耗cpu的资源,造成cpu利用率一直为100%,,恰巧被我看到了方法中一些打印句子才知道被攻击了,于是狼狈的赶紧上去改代码,给它返回null值,但是他的请求依然不停的发送。我觉得必须封掉这个ip,先是使用request.getHeader(“X-Real-IP”) 得到了一个地址,赶紧将他报给经理,让他找人在防火墙里封掉这个ip,后来经理打电话过来说不是这个ip,这个ip只是反向代理服务器(应该是叫这个名字,不知道理解的对不,反正就是负责负载均衡的)的内网ip地址,所有的请求都由这台服务器拦截并转发给应用服务器,所有从应用服务器的角度看任何访问的地址都是这个。百度了一下,换了个方法得到了真实的ip地址:request.getHeader(“X-Forwarded-For”),屏蔽之,才算结束了这场风波。 这件事过后我都会有事没事都会查看一下网站的打开速度,这次在家里同样慢的速度让我不得不怀疑又被攻击了,但是我想到,上次是运气好看到了用户方法的句子,知道他访问的方法,改了代码才知道对方的ip,但是如果再被攻击的话就不知道攻击者的ip了,必须的做点什么才行,很自然的就想到将访问者的ip记录在日志中,打开了nginx的日志目录发现acccess.log这个文件居然有8g多,用屁股去想也知道想打开这个文件基本不可能了。必须的拆分它才行,最好一天一个文件这样就差不多了。 上网百度发现大部分的解决方案都是写一个shell脚本,但是在Windows下肯定运行不了,后来终于找到一个解决方案,虽然不算那么高端,但是总算解决了问题,并经过实践,先在本地测试通过后部署至远程,方法如下: 第一步: 建立一个bat文件,将下面代码拷贝如下:

net stop nginx_80
taskkill /F /IM nginx.exe
set "cmdstr=move C:\Common\nginx-1.3.9\logs\access.log C:\Common\nginx-1.3.9\logs_2014\access_%date:~0,4%- %date:~5,2%-%date:~8,2%.log
call %cmdstr%"
net start nginx_80

这句代码的作用就是先停掉nginx服务,然后将原log下的日志文件 移动至新的目录,遗憾的是移动操作只能在服务关闭的时候进行。

第二步:创建新的日志目录,并将这个批处理文件放到nginx根目录下

第三步: 创建一个在windows下添加一个任务计划,让服务器在每天的2点运行这个bat文件。 图片

图片

图片

图片

图片

图片

顺便修改了一下nginx的配置文件:

在http中加入

log_format main 
'$host $status [$time_local] $remote_addr [$time_local] $request_uri '
'"$http_referer" "$http_user_agent" '
'用户信息:$remote_addr - $remote_user [$time_local] "$request" '
'客户ip:"$http_x_forwarded_for" '
'$bytes_sent $request_time $sent_http_x_cache_hit';
log_format log404 '$status [$time_local] $remote_addr $host$request_uri $sent_http_location';
access_log logs/access.log main;

重启nginx,运行了下bat,并访问了下系统,看到日志里多了ip地址,其中红线部分是反向代理服务器的ip,“客户 ip” 处则是真正的ip

图片

ps:后续的优化计划还有一些,不过都要一步一步来: 将一直运行的插入数据的应用和网站应用分离,使用独立的Tomcat 将数据库和应用分离(需要一台新服务器); nginx的详细配置参数说明请参看另一篇转载的日志 《 nginx配置详解》

最恶心的事是后来我才发现网站并没有遭到攻击,是我室友在看视频下片搞的网速太慢了,尼玛。

二.WebService安全认证

这个是我这两天在完善的东西,用以在数据同步时加入认证操作来给数据库加上一扇门卡。

主要涉及到的是 3个字段:

客户标识(user_key):数据同步用户的标识符 验证密码(auth_key)::数据同步用户的密码,10位的随机字符串 访问密码(visit_key):由客户标识和验证密码用加密算法生成的访问密码

对于数据同步的用户,我会在系统里为他创建账户,并将他的标识符和验证密码告知, 要做数据同步时,要验证对方传过来的标识符和验证密码产生的访问密码和数据库中的是否完全一致,有一个不对都将验证失败。

加上这道 “防护罩”之后系统应该说不再裸奔了。

Ps:感谢雷总给我的指点和帮助
路漫漫其修远兮,吾将上下而求索,程序员的路才刚开始,以后还要继续加油才行!

本文写自2014-3-29 1:39,入行 一年左右,怀念