服务器 频道

打造Linux下超级安全的LAMP服务器(下)

【IT168 服务器学院】现在我们安装mod-security,debian下同样很简单,并且自动把模块加到httpd.conf里

  [root@debian /]apt-get install libapache-mod-security

  默认这个模块是没激活的,编辑一下httpd.conf文件并去掉下面这行的注释

  LoadModule security_module /usr/lib/apache/1.3/mod_security.so

  接着在httpd.conf的末尾加上

      # 打开或者关闭过滤引擎

      SecFilterEngine On

      # 设置缺省的动作    

      SecFilterDefaultAction "deny,log,status:404"

      # 把设置传递给字目录

      SecFilterInheritance Off

      # 检测URL编码是否正确

      SecFilterCheckURLEncoding On

      # 检测内容长度以避免堆溢出攻击

      SecFilterForceByteRange 32 126

      # 日志文件的位置和名字

      SecAuditLog logs/audit_log

      # debug设置

      SecFilterDebugLog logs/modsec_debug_log

      SecFilterDebugLevel 0

      # 检测POST数据

      SecFilterScanPOST On

      # 当匹配sh的时候,重新定向到一个特殊的页面,让攻击者知难而退

      SecFilter sh redirect:http://secu.zzu.edu.cn/hack/fu.htm

      # Only check the body of the POST request

      #过滤一些敏感的东西,我们使用*是为了攻击者使用/etc/./passwd来绕开检测

      SecFilter /etc/*passwd

      SecFilter /bin/*sh

      # 防止double dot攻击,也就是类似http://www.test.com/openfile.php?path=/../../..,虽然这个漏洞看似弱智,但是很多网站都有的,比如CERNET某大学某图片站:)

      SecFilter "../"

      # 防止跨站脚本(CSS)攻击

      SecFilter "<( | )*script"

      SecFilter "<(.| )+>"

      # 防止SQL插入(SQL Injection)攻击

      SecFilter "delete(空格| )+from"

      SecFilter "insert(空格| )+into"

      SecFilter "select(空格| )+from"

      SecFilter "union(空格| )+from"

      # 下面是限制了upload.php文件只能用来上传jpeg.bmp和gif的图片

           SecFilterInheritance Off

          SecFilterSelective POST_PAYLOAD "!image/(jpeg|bmp|gif)"

   用好了mod-security,可以使你的网站的安全性大大的提高的,在他带的manual里你可以找到更多的设置的,在光盘中附带了更加详细的规则

  (mod-security.rule.txt)

 

  然后我们装Zend Performance Suit,在安装的时候,他问你使用的用户的时候,记得写chrapax而不是www-data

  order allow,deny

  allow from 211.43.125.63(你的IP)

  deny from all

  Options All

  下面重头戏到了,chroot,非常重要的一步,但可能还是比较简单的一步,先把几个python写的配置文件复制到/etc/makejail下

  [root@debian /etc/makejail]cp /usr/share/doc/makejail/examples/apache.py ./

  然后编辑apache.py文件添加修改相应的信息

  users=["chrapax"]

  groups=["chrapax"]

  packages=["apache","apache-common","php4","php4-gd","mysql-common","libapache-mod-security"]

  然后执行makejail命令

  [root@debian /etc/makejail]makejail apache.py

  完成之后,我们得先做个软连接并把chrapax从passwd和group文件分离出来

  [root@debian /etc/makejail]ln -s /var/chroot/apache /apache

  [root@debian /etc/makejail]grep chrapax /etc/passwd > /apache/etc/passwd

  [root@debian /etc/makejail]grep chrapax /etc/group > /apache/etc/group

  [root@debian /etc/makejail]cp /etc/mime.types /apache/etc/

  然后在/etc/init.d里建一个叫chrapax的文件并让他可执行,内容详见光盘中的chrapax

  [root@debian /etc/makejail]cat > /etc/init.d/chrapax

  [root@debian /etc/makejail]chmod +x /etc/init.d/chrapax

  接着使用rcconf命令让他在系统启动的时候启动(如图rcconf.bmp)

  [root@debian /etc/makejail]rcconf

  启动chroot的apache

  [root@debian /etc/makejail]/etc/init.d/chrapax start

  先测试一下php和mysql连接是否有问题

  [root@debian /etc/makejail]cat > /apache/var/www/mysql.php

      $conn = mysql_connect("localhost", "fatb", "urpassword")

        or die;

      print "php can work with mysql now";

      mysql_close($conn);

      phpinfo();

  结果浏览器返回

  Warning: Can''t connect to local MySQL server through socket ''/var/run/mysqld/mysqld.sock'' (2) in /var/www/mysql.php on line 2

  但是我们可以看到在/var/run/mysqld/下的确有mysqld.sock文件,其实就是因为我们已经chroot apache了,他只能访问apache root jail里的东西,也就是/var/chroot/apache下面的东西,而mysqld.sock明显在jail外面,所以连接不上当然是很正常的了,解决这个问题的方法也很简单,做个硬连接就是了

  [root@debian /apache/var/run/mysqld]ln /var/run/mysqld/mysqld.sock mysqld.sock

  再访问一下mysql.php看看,果然OK了吧(如图ok.bmp)

  做硬连接很麻烦,而且在访问mysqld的时候导致apache用资源好厉害,解决的办法就是在mysqld的配置文件里加上bind-address 127.0.0.1这样就通过tcp连接而不是通过socket连接了

  经过我们这样一弄,整个LAMP服务器就安全的多了,就算万一php程序编写的不安全或者apache,php出了什么漏洞,想入侵进来并且跳出root jail还是非常困难的  

  参考:

  security apache step by step

  security php step by step

  security mysql step by step

  (不知道为什么在家里上网搜索不到这三个文章了,在www.securityfosuc.com的,有兴趣的可以去看看)

  mod-security manual

  san的php安全配置

  http://www.xfocus.net/articles/200111/304.html

  版本信息

  v1@2003.11 初始版

  v2@2004.1  解决chroot后php程序连接mysql的时候apache耗用大量资源的问题

      修正ustc.edu.cn为电子科大而不是中科大:)

  v3@2004.9  增加allow_url_fopen = Off

      增加mod-security对sql injection的过滤

0
相关文章