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的过滤
上一页 [1] [2] |