保障4-0511任务打卡

任务列表:
11.25 配置防盗链
11.26 访问控制Directory
11.27 访问控制FilesMatch
11.28 限定某个目录禁止解析php
11.29 限制user_agent
11.30/11.31 php相关配置
11.32 php扩展模块装安装
扩展
几种限制ip的方法 http://ask.apelearn.com/question/6519
apache 配置https 支持ssl http://ask.apelearn.com/question/1029
apache rewrite教程 http://coffeelet.blog.163.com/blog/static/13515745320115842755199/ http://www.cnblogs.com/top5/archive/2009/08/12/1544098.html
apache rewrite 出现死循环 http://ask.apelearn.com/question/1043
php错误日志级别参考 http://ask.apelearn.com/question/6973

11.25 配置防盗链

为了防止本站资源被其他站点盗用,所以应当配置防盗链

11.25.1 如何配置防盗链

<Directory /data/wwwroot/www.123.com>
        SetEnvIfNoCase Referer "http://www.123.com" local_ref
        SetEnvIfNoCase Referer "http://123.com" local_ref
        SetEnvIfNoCase Referer "^$" local_ref
        <filesmatch "\.(txt|doc|mp3|zip|rar|jpg|gif|png)">
            Order Allow,Deny
            Allow from env=local_ref
        </filesmatch>
    </Directory>
  • 将以上内容添加至虚拟服务器配置下
  • "^$"的意思是空referer。指直接输入链接访问以及刷新。
  • 注意把必要的后缀填写进去,不然实验不成功。

11.25.2 测试

curl -e “http://wwww.aminglinux.com/111.html” -x127.0.0.1:80 111.com/1.png

  • -e 指定referer

11.26 访问控制Directory

Directory是针对目录的访问控制。

  • 限制ip与访问的目录

11.26.1 具体操作

<Directory /data/wwwroot/www.123.com/admin/>
Order deny,allow
Deny from all
Allow from 127.0.0.1

  • 表示,这个目录除了127.0.0.1以外都不能访问
  • Order用来定义顺序 这里后边先deny然后allow。和deny或allow出现的顺序无关。

11.26.2 测试

[[email protected] admin]# curl -x192.168.19.131:80 111.com/admin/1.txt -I
HTTP/1.1 403 Forbidden  \\由于限制了IP所以即使是本机地址也会显示403
Date: Sat, 11 May 2019 08:43:42 GMT
Server: Apache/2.4.39 (Unix) PHP/5.6.39
Content-Type: text/html; charset=iso-8859-1
................................................................................
[[email protected] admin]# curl -x127.0.0.1:80 111.com/admin/1.txt -I
HTTP/1.1 200 OK  
Date: Sat, 11 May 2019 08:44:53 GMT
Server: Apache/2.4.39 (Unix) PHP/5.6.39
Last-Modified: Sat, 11 May 2019 08:34:30 GMT
ETag: "7-588988d522488"
Accept-Ranges: bytes
Content-Length: 7
Content-Type: text/plain

11.27 访问控制FilesMatch

  • 核心配置文件内容
<Directory /data/wwwroot/www.123.com>
    <FilesMatch  "admin.php(.*)">
        Order deny,allow
        Deny from all
        Allow from 127.0.0.1
    </FilesMatch>
</Directory>
  • 针对文件的访问控制

11.28 限定某个目录禁止解析php

  • 核心配置文件内容
    <Directory /data/wwwroot/www.123.com/upload>
        php_admin_flag engine off
    </Directory>

curl测试时直接返回了php源代码,并未解析

11.29 限制user_agent

  • user-可以理解为浏览器标识
  • 需求背景:网站受到CC攻击。就是一次性大量客户端的访问。
  • 核心配置文件内容
   <IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteCond %{HTTP_USER_AGENT}  .*curl.* [NC,OR]
        RewriteCond %{HTTP_USER_AGENT}  .*baidu.com.* [NC]
        RewriteRule  .*  -  [F]
    </IfModule>
  • 以上配置可以限制类似的user-agent的访问
  • [OR]保证两条规则是或者的关系
  • [NC]表于乎略大小写

测试

  • 由于以上限制规则里有curl,所以直接使用curl命令只会返回403
  • curl -A “dasfasdf” 指定访问的user-agent

11.30/11.31 php相关配置

11.30.1查看pnp配置文件相关位置

  • /usr/local/php/bin/php -i去查找php配置文件位置可能是错的。
  • /usr/local/php/bin/php -i|grep -i “loaded configuration file”
  • 最准确的方法是在网站的目录下添加一个phpinfo页面,在页面里查
vi /data/wwwroot/111.com/1.php
<?php
phpinfo()
?>

保障4-0511任务打卡

11.30.2 当配置文件没有或不生效时的解决方案

1,复制源码包中的配置文件至网页定义的配置文件目录中

cp /usr/local/src/php-5.6.39/php.ini-production /usr/local/php/etc/php.ini

2,重载apache

/usr/local/apache2.4/bin/apachectl graceful

11.30.3 初始化配置文件

1,配置无效化危险函数
eval,assert,popen,passthru,escapeshellarg,escapeshellcmd,passthru,exec,system,chroot,scandir,chgrp,chown,escapeshellcmd,escapeshellarg,shell_exec,proc_get_status,ini_alter,ini_restore,dl,pfsockopen,openlog,syslog,readlink,symlink,leak,popepassthru,stream_socket_server,popen,proc_open,proc_close,phpinfo

以上是绝大多数危险函数,把它们配置到disable_functions=下
保障4-0511任务打卡

2,定义时区

保障4-0511任务打卡
date.timezone = Asia/Shanghai

  • 一般时区定位到上海或重庆
3,是否在网页显示错误信息

display_errors = Off

  • 这个选项控制了是否把错误信息显示在浏览器中,默认应关闭。防止暴露目录。
4,配置错误日志
  • 首先保证log_errors = On
  • 然后在error_log = /tmp/php_errors.log配置错误日志的文件路径。
  • 配置日志级别error_reporting = E_ALL & ~E_NOTICE
  • 日志存放的目录必须给daemon用户写权限,否则不会生成日志。
  • 最保险的方法:touch /tmp/php_errors.log ; chmod 777 /tmp/php_errors.log
5,限制远程访问目录
  • 在php.ini中配置了open_basedir后,所有的远程访问都会限制在规定的目录中,以防止安全问题。
  • 对单个站点的open_basedir限制:
    在虚拟主机配置文件中加入php_admin_value open_basedir "/data/wwwroot/111.com:/tmp/"
    这样就可以对单独的站点进行访问限制了。

11.32 php动态扩展模块装安装

11.32.1 查看模块是否存在

/usr/local/php/bin/php -m //查看模块  
/usr/local/php/bin/php -i |grep extension_dir //查看扩展模块存放目录,我们可以在php.ini中去自定义该路径  

11.32.2 安装一个redis的模块

cd /usr/local/src/  
wget https://codeload.github.com/phpredis/phpredis/zip/develop   
mv develop phpredis-develop.zip  
unzip phpredis-develop.zip  
cd phpredis-develop  
/usr/local/php/bin/phpize //生成configure文件  
./configure --with-php-config=/usr/local/php/bin/php-config  
make && make install  
 vim /usr/local/php/etc/php.ini  //增加一行配置(可以放到文件最后一行)  
extension = redis.so    

只要添加配置文件就会启用,不用重载。

  • 源码包内有一些扩展模块,如需要安装可以直接去源码包内查找。
  • 还是按phpize ./configure make && make install的顺序安装。最后加入配置文件中。
  • 注意phpize工具在/usr/local/php/bin/目录下,而不在源码包里。

直播笔记

pecl工具

专用门用安装php扩展模块

  • /usr/local/php/bin/一般在这个目录下。
  • 也可以去官网php.pecl.net下载
  • /usr/local/php/bin/pecl install安装扩展。
  • 这是一款在线安装工具,不支持本地源。官网也支持扩展包下载。