龙飞:浅谈如何防止论坛被黑

[复制链接]
查看: 966   回复: 3
发表于 2009-9-1 13:01:14 | 显示全部楼层 |阅读模式
演讲主题:PHP+MYSQL类社区的服务器通用安全防护措施
  各位站长大家下午好,先自我介绍一下,我是来自无锡太湖明珠网的毛伟,我们今天下午的话题是PHP+MYSQL类社区的服务器通用安全防护措施,虽然这个话题,有一个前提,就是面对对象是那些使用自己独立服务器的站长,如果现在没有使用独立服务器的站长也希望可以先了解了解,相关知识,相信你们很快就会有独立服务器的到时候就派的上用处了,安全 和 危险是相对的,这世界上没有绝对的安全 和绝对的危险。如果有不太明白的同学可以参考下爱因斯坦的 狭义相对论。
  首先声明下,下面说所的这些防护措施,不是说照着做了就能保证服务器不被黑,因为我们所使用的大部分都是开源的社区程序,开源就等于不可避免的存在漏洞。那么这些防护措施的出发点,就是在程序产生漏洞的时候,尽可能的避免遭受攻击所影响的范围。比如服务器沦陷,整个服务器给黑客控制。我们今天所讲的防护措施分成 服务器环境安全,php安全设置,mysql安全设置几个方面。首先讲一下服务器环境方面的安全措施,一般现在跑PHP+MYSQL类社区的服务器无非就是小流量的windows比较多,大流量的linux比较多。
  不管是windows还是linux或者说其他的系统,任安全防护第一步,关掉不用的端口,第二步限制重要端口的访问来源ip地址,比如我们跑web的,可以全开80端口,限制ftp、远程管理端口的来源ip地址,其它端口全部关闭
  像ssh的22,远程终端的3389,mysql的3306这类重要端口我们可以通过软件防火墙或者硬件防火墙,限制来源的ip地址,有些tx可能会说我是adsl动态的,我没有办法固定ip地址,好这里给你2个方案。1.放开限制的范围,每个地区的adsl拨号上网ip地址总有一定的范围,比如a.b.x.x,那么我们就把ip限制到a.b.*.*。2.中转方法,有些站长可能不止1台服务器,可以通过另外一台中转的有固定ip地址的机器,来中转管理你的服务器。使用端口转发这种方法,限制了端口的访问,那么如果还要将安全级别提高一点的话,那就是修改端口号来增加安全性,这里也提个醒,实际上除非你有防止端口扫描的这种防火墙 ,不然改端口作用并不大,hack扫描下端口很方便,说到防止端口扫描,这个原来实际上就是跟踪用户在一定时间内访问服务器端口数量来实现的,比如在5秒内访问超过3个端口,就判断为端口扫描行为,然后就把用户的ip封掉。这里推荐个windows下面的软件防火墙
  这类防火墙 windows主机我推荐VisNeticFirewall (也叫8sign),VisNeticFirewall 是款强大的windows下软件防火墙可以限制进出规则包括http应许访问的文件类型,比如限制mdb下载等等也可以做端口扫描自动阻断。
  linux用自带的iptables,功能很强大,只有想不到,没有做不到,网络这一层安全做得好,你的系统就加固了很多。就算hack有你服务器的管理员,他也无从入手。除了80 webshell ,他什么也做不了。下面讲讲webserver的安全配置
  windows主机用iis的站长还可以给每一个iis站点单独设定一个运行帐号而且严格设置站点目录只有管理员和这个站点运行账户有权限这样即使某个站点有漏洞,hack webshell进来了,危机到其他站点 和 系统因为他除了能控制这个站点的目录下面的内容外,他根本无法访问其他目录。当然这个方法还有个前提,就是得把系统的目录权限梳理一边,检查下有everyone权限的目录,一般c盘 windows目录下面这类的目录蛮多,要记住everyone的目录 就算做了上面的独立iis账户的方法 hack还是能访问的,关于这类网上文章也蛮多,搜一下仔细看看。linux的可就没这么方便咯,因为apache nginx是以统一的用户身份来运行的没法每个站点独立设置一个运行用户。比较要命的是linux下面系统的目录一般其它用户都是可读的。所以比较安全的做法是把apache或者nginx php的用户 和web目录的所有者用户独立开来。所以比较安全的做法是把apache或者nginx php的用户 和web目录的所有者用户独立开来。
  这里把nginx和目录所有权用户都用www是方便一些静态文件的访问,省得权限卡得很死,非得完全严格的去设置目录权限。当然要求严格的站长完全可以把nginx和web目录的用户也分开。apache和php结合有个非常方面的好处,就是可以给每个vhost设定一些php的设置。所以我们用apache的tx可以用这一特性 给每个vhost 设定下open_basedir 这个php设置open_basedir就是这个vhost的php运行的时候能够访问的目录,这样也就能在apache下面实现iis那样独立帐号运行的类似效果
  把php的访问范围框住,防止1个有漏洞危及系统和其他站点
  这里举个例子,就贴部分了
  
  DocumentRoot /website/www/bbs.site.com
  ServerName bbs.site.com
  php_admin_value open_basedir /website/www/bbs.site.com/:/website/tmp/
  php_admin_value open_basedir /website/www/bbs.site.com/:/website/tmp/
  这个意思就是bbs.site.com下面运行的php
  只能访问 /website/www/bbs.site.com/ 和 /website/tmp/下面的文件,想访问其他目录的文件,没门
  这个设置 如果有多个目录,比如php上传临时目录,session临时目录,可以用 : 冒号分割(windows下面用 ; 号)
  这个方法在windows 和 linux的apache上都能用
  但是必须要以LoadModule 方式跑php的才行
  这个方法像nginx那样 用fastcgi php方式的就没法
  如果实在想用可以用nginx proxy的方式,php用apache来跑这样就能在 nginx下面也用上这个open_basedir功能了。
  如果实在要用nginx+fastcgi php的方式的话 可以在php.ini里面设置个总的open_basedir
  比如你的站点都是放在/website/www/ 下面的那就把 open_basedir 设定到 /website/www/
  这样虽然一个站点沦陷了 也会跟着沦陷其他站点,但是至少能保证系统文件不会沦陷
  比较适合喜欢偷懒的
  刚刚说到的apache里面vhost 还有个有用的设置php_flag engine off
  先来看个例子
  
  php_flag engine off
  
  这个意思就是
  /website/www/bbs.thmz.com/attachments 这个目录下面的文件,不进行php执行,哪怕是个php也会把源代码爆出来就是不执行php
  一些永远也不会有php执行需要的目录,特别是用户上传的文件啊,头像啊这些目录 可以用这个设置下
  设的时候注意别搞错了,这个开了 ,要是有php可是直接暴源代码的,iis用户不要急,其实iis里面也是有这个功能的。在iis站点管理里面找到不需要执行的目录右键 属性。
  把这个执行权限设成无就行了
  反正记得关之前先看看目录下面的文件
  别关错了暴了源代码
  这个功能同样用fastcgi方式跑的php 没戏,这个环境目前也就想起来这么多,就先到这里把
  这里顺便提一下,如果有多台服务器的站长,提倡把前台和数据库分开。就是运行程序1台服务器,数据库1台服务器。这样其实也有点和安全有关系。一些程序可能 注入漏洞这漏洞爆的比较多
  假如你把数据库分离开来了,那么hack在注入的时候实际上是在数据库那台服务器上面
  万一你mysql连接的用户是个root权限的话 那他用mysql的load file这种函数 也只能去读取数据库那台服务器上面的系统文件
  这样乐观的将至少你web程序这台服务器保障了,下面就简单说说php和mysql把
  php的安全设置刚刚那个open_basedir 也讲过了
  其它无非就是一些php.ini里面的设置了,首先肯定是 display_errors=Off
  关闭出错日志
  然后log_errors = On
  再设置下error_log=
  把出错信息记录到服务器文本上
  这里注意不要放在web目录下 或者说open_basedir的目录下
  不然hack用webshell一读 你这设置就=白做了
  magic_quotes_gpc = On
  register_globals = Off
  这2个参数可以限制下非法参数或者变量的提交,防止某些程序写的不是很严谨的时候,带来安全隐患
  disable_functions = phpinfo,get_cfg_var,passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_restore,dl,pfsockopen,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,show_source,popen,escapeshellcmd,escapeshellarg
  disable_functions 就是php禁止使用的函数。
  php是很强大的,所以有很多危险的php函数,这些函数给hack利用能直接危及到系统的安全。所以我们需要在web程序不需要这些函数的前提下,把这部分危险的函数禁止。
  上面的disable_functions是我安装dz的程序列出的一个参考,如果和你服务器上的某些程序使用的函数冲突,那自己衡量下可以去掉,把程序需要的函数 在disable_functions 里面去掉就行,php结束 就这么简单,这里实际上最关键的就是open_basedir和disable_functions,这2个一做,那安全性的提升是相当显著的。
  下面说mysql,说mysql前 补充下
  不要用系统管理员用户,或者 root 来运行 mysql
  windows的服务默认执行用户权限可都是很高的哦,SYSTEM
  linux就是root用户
  用管理员身份运行php mysql,一但 mysql 权限设置不当沦陷了,那他的webshell可就是你系统的root身份
  所以mysql 第一件事,把运行用户检查下
  一定要以普通用户身份运行,然后清理下mysql的用户,在默认安装的mysql里面有一些用于本地登录的不需要密码的root用户,这类用户应该全部删掉,如果你需要远程用工具管理mysql的留个root@% ,本机用phpmyadmin的就留个root@localhost当然其他你自己建的用户别删。mysql的用户 权限可以定的很细root@localhost 就是root用户 只能在本机登陆这个root用户请注意,不要给任何web应用程序用,自己管理用用就行,看紧了。然后对于每个web应用程序 注意了是每个
  单独建立一个对应的mysql帐号
  还有每个web程序的 datebase也单独建个
  比如uc database 用 xx_uc, mysql用户用xx_uc
  dz database 用 xx_bbs, mysql用户用xx_bbs
  uch database 用 xx_uch, mysql用户用xx_uch
  然后这几个mysql的xx_uc bbs uch用户 记得了不要给全局权限global privileges
  一个都不要给
  给了就和root差不多了
  应该有个地方设置用户权限的,manage privileges
  xx_uc bbs uch 每个用户选择对于的数据库
  xx_uc 就选择 xx_uc bbs就选 bbs uch就选uch
  记住了只给 select insert update delete create drop index alter 权限
  其实一般的程序就只需要 select insert update delete,论坛的程序可能在某些后台操作下需要用到create drop index alter,喜欢严格的站长可以 需要的时候再开 create drop index alter这样就算有注入漏洞,那他也就只能取取 改改当前数据库的内容。这里也有个提议不要用dz默认的cdb_ uc_ uch_前缀 ,使用这些默认都是公开的前缀,hack进来一猜就知道你用户表是什么名字,然后update下密码,就拿到你的管理员了,mysql的基本也就这样了,关键每个程序独立用户 权限最小化的设置,想如果自己做过一些调用程序,那完全可以只给个有select权限的mysql用户就行了。最后程序方面 小改改。比如使用dz的站长把admincp.php文件改改名字。
  只需要跟着改几个模板就行 不影响后台使用。但是确安全很多。想如果改了这个文件,那上次dz被黑,后台风格那个漏洞 根本就没法使用,直接免疫,人家拿了管理员也没法进后台,多安全。最后总结一句话,安全做得好,就算程序 有漏洞,hack也没办法利用,就算hack利用了漏洞,那他也上传不了webshell,就算hack上传了webshell,那他也拿不到系统权限,就算hack拿到了系统权限,那他也上不来服务器。
  好了今天就到这里了,谢谢大家。
  互动环节
  问:用软件搭建的环境有什么需要注意的吗?
  答:这里不知道这个软件搭建是不是指的那种一体化试的装完直接由apache+mysql+php这种软件,其实这种软件的安全配置和单独安装的并没有什么区别,都是一样的方法。
  问:网站,分很多个系统,有PHP开发又有asp开发,又共享些信息(如成整合一次登录之类)会不会在安全性上出现很大问题呢?该怎么防?谢谢。
  答:这种混合系统一般是使用iis来跑的,不知道你问的是否是指的这个asp和php混合运行在iis下面的问题。php刚刚已经讲过了,asp的话主要是结合asp的一些特色来注意防范,比如讲座里面说的针对iis站点的独立用户设置这个实际上是asp php通用的,而且asp的站点更加需要做独立用户权限设置,因为他没有php的open_basedir这种设置。
  问;VisNeticFirewall 我刚才搜了一下发现都是注册版,能否给一个安全可靠的免费软件网址,现在我们用的是antiarp,感觉功能不够强大。
  答:这个软件确实是需要购买的,这里不方便公开,但是大家可以去一些0day的站点搜索下。
  问:"另外一台中转的有固定ip地址的机器,来中转管理你的服务器。使用端口转发这种方法!" 这样的话,会不会一台沦陷,另外一台也沦陷呀!
  答:恩这里有个口误,端口转发的方法,要建立在第一步小范围开放ip地址的基础上来做。
  特别提示:2009.11.7首届江苏站长年会500人规模目前火热报名、参与互助推广中 http://2009.jiangsu.com 诚邀诸位站长同仁参与。
  最后总结:本期嘉宾龙飞是国内知名的社区安全专家,特别是在地方社区联盟中享有盛誉,经常热心为大家解答技术难题,深受大家的欢迎。本次有幸请到龙大侠来给诸位站长讲解社区安全性的相关问题,由于参与站长技术参差不齐还是有不少站长不是很明白的,所以需要多多学习消化。网站的盈利始终是大家最关心的话题,所以下期讲座我们特别邀请了在业内知名的网赚专家丘仕达来和诸位站长说说个人网站如何创造最大效益,绝对经典不容错过有兴趣的站长可以参与互动,但是如果是发AD的就免了,感谢诸位的支持下期见。讲座主群、直播群已满,新到站长可加500人讲座五号群:39463377,我们将永久免费提供公益服务,但是长期不发言的会员一律被T。
  特别鸣谢:本讲座得到中国站长站、admin5站长网、落伍者、草根网、中国站长、中国建站、站长中国、web开发网、爱聚集、我拉网、《站长》杂志、站长Z周刊、挖软件、门户通等多家知名站长相关媒体的鼎力支持及国内知名IDC服务商炎黄网络的技术支持。本次讲座将会在上述站长媒体同期发布,在此表示特别感谢。

评分

参与人数 1 +2 收起 理由
nod32 + 2

查看全部评分

发表于 2009-9-2 00:16:31 | 显示全部楼层
收藏了
希望老大也研究下
省的我们被攻击
回复 支持 反对

使用道具 举报

发表于 2009-9-2 01:06:32 | 显示全部楼层
这个是不是对用wordpress的也有帮助啊
回复 支持 反对

使用道具 举报

发表于 2009-9-2 07:23:38 | 显示全部楼层
发晚了,应该早给X水看一看的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则