第十九课LAMP环境搭建与配置下

11.25 配置防盗链

盗链,全称是盗取链接,假如我们的网站有很多好看的图片,别人可以查看我们网站图片的链接,然后应用在他的网站上,这样的话,去访问他的网站,实际上消耗的是我们的流量(因为实际链接在我们这里),这样我们就不得不去配置防盗链,使得别人不能复制我们图片的链接。

1.	通过限制referer来实现防盗链的功能,配置文件增加如下内容:
[root@localhost ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf 

    DocumentRoot "/data/wwwroot/www.123.com"
    ServerName www.test.com
    ErrorLog "logs/test.com_error_log"
 CustomLog "logs/test.com_access_log" combined
    SetEnvIfNoCase Referer "http://www.123.com " local_ref    \\设置白名单表示只有www.123.com的访问才允许,其他的都拒绝
    SetEnvIfNoCase Referer 
     "http://123.com" local_ref
    SetEnvIfNoCase Referer "^$" local_ref //空的referer也设置白名单
    \\定义规则,
        Order Allow,Deny
        Allow from env=local_ref       
 Deny from all
    

11.26 访问控制Directory

除了可以使用用户认证限制访问之外,还可以通过其他方法做到限制,比如限制IP,也可以限制user-agent.限制IP指的是限制访问网站的来源IP,限制user-agent是指用来限制恶意或者不正常的请求。

限制ip

1. 编辑虚拟主机配置文件
vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
2. 在配置文件里添加如下段,目的是对111.com下的admin目录进行访问控制

        Order deny,allow
        Deny from all
        Allow from 127.0.0.1
     
Order  用来定义顺序        Order deny,allow    表示先deny 再allow
这段话表是拒绝所有的访问,仅通过127.0.0.1

11.27 访问控制FilesMatch

单独对某个文件做限制

1.对www.123.com下的admin.php开头页面进行访问控制,同样在虚拟主机配置文件上添加如下段:

         
           Order deny,allow
           Deny from all
           Allow from 127.0.0.1
         

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

如果网站代码有漏洞,让上传了一个用PHP代码写的,由于网站可以执行PHP程序,最终会让***拿到服务器权限,为了避免这种情况发生,我们需要把能上传文件的目录直接禁止解析PHP代码(不用担心会影响网站访问,若这种目录也需要解析PHP,那说明程序员不合格)

1. 修改虚拟主机配置文件
[root@locast ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

核心配置文件内容:
## 打开虚拟主机主机配置文件
.123.com/upload>
        php_admin_flag engine off  //这一段就可以禁止解析PHP代码
         //这一段就是让php的文件访问受到限制,这里访问都是403,防止php文件的源代码被查看,这里的.用\脱义
        Order allow,deny
        Deny from all
        
    
## 检查配置文件是否存在语法错误,并重新配置文件
[root@locast www.123.com]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK  //测试语法
[root@locast www.123.com]# /usr/local/apache2.4/bin/apachectl graceful  //加载配置
创建upload目录,新建php文件
[root@locast www.123.com]# mkdir upload //创建一个upload目录
[root@locast www.123.com]# ls
123.php  admin  index.php  qq.png  upload
[root@locast www.123.com]# cp 123.php upload/  
## curl访问
使用curl测试时返回403
[root@locast www.123.com]# curl -x127.0.0.1:80 'http://www.123.com/upload/123.php' -I  //直接不给访问权限
HTTP/1.1 403 Forbidden
Date: Tue, 26 Dec 2017 06:19:17 GMT
Server: Apache/2.4.29 (Unix) PHP/7.1.6
Content-Type: text/html; charset=iso-8859-1
## 这时在去虚拟主机配置文件中注释掉FilesMatch
.123.com/upload>
        php_admin_flag engine off  //这一段就可以禁止解析PHP代码
        # //这一段就是让php的文件访问受到限制,这里访问都是403,防止php文件的源代码被查看,这里的.用\脱义
        #Order allow,deny
        #Deny from all
        #
    
##     检查配置文件是否存在语法错误,并重新配置文件
## 这时候访问php,会发现无法解析php
curl -x127.0.0.1:80 'http://111.com/upload/123.php'       //下例信息说明123.php不能正常解析
"123.php";
?>

11.29 限制user_agent

user_agent(用户代理):是指浏览器(搜索引擎)的信息包括硬件平台、系统软件、应用软件和用户个人偏好。 当黑客用CC攻击你的服务器时,查看下日志发现user_agent是一致的,而且一秒钟出现多次user_agent,这样就必须限制user_agent

## 编辑虚拟配置文件:
vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
 //使用rewrite模块
        RewriteEngine on
        RewriteCond %{HTTP_USER_AGENT}  .*curl.* [NC,OR] //定义user_agent条件,OR表示两条件之间是或者的意思,NC表示忽略大小写
        RewriteCond %{HTTP_USER_AGENT}  .*baidu.com.* [NC] //定义user_agent条件
        RewriteRule  .*  -  [F] // 规则 [F] 表示forbidden(403)
    
##     保存退出检查配置文件语法并重新加载配置文件,测试:测试:
    
    curl -x127.0.0.1:80 'http://111.com/123.php' -IHTTP/1.1 403 Forbidden
Date: Tue, 26 Dec 2017 11:41:06 GMT
Server: Apache/2.4.29 (Unix) PHP/5.6.30
Content-Type: text/html; charset=iso-8859-1
## 指定一个user_agent测试:
curl -A "zanghao" -x127.0.0.1:80 'http://111.com/123.php' -I
HTTP/1.1 200 OK
Date: Tue, 26 Dec 2017 11:42:18 GMT
Server: Apache/2.4.29 (Unix) PHP/5.6.30
X-Powered-By: PHP/5.6.30
Content-Type: text/html; charset=UTF-8
命令:curl 
选项: 
-A 指定user_agent。 
如:

[root@shuai-01 111.com]# curl -A "shuailinux" -x127.0.0.1:80 
1
2
-e 指定referer,指定引用地址 
如:

[root@shuai-01 ~]# curl -e "http://111.com/123.txt" -x127.0.0.1:80 111.com/logo.png -I
1
2
-x 在给定的端口上使用HTTP代理 
如:

[root@shuai-01 111.com]# curl -x127.0.0.1:80 'http://111.com/123.php'
1
2
-I 查看状态码 
如:

[root@shuai-01 111.com]# curl -x127.0.0.1:80 'http://111.com/123.php' -I

11.30/11.31 php相关配置

# 查看php配置文件位置
/usr/local/php/bin/php -i|grep -i "loaded configuration file"
Loaded Configuration File => /usr/local/php/etc/php.ini\\php配置文件路径,php.ini为配置文件
# 编辑php配置文件
vim /usr/local/php/etc/php.ini
# 禁止危险函数
搜索disable_functions
在disable_functions =后面添加函数
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
## 生效配置
/usr/local/apache2.4/bin/apachectl -t
/usr/local/apache2.4/bin/apachectl graceful
## 禁用函数后,这些函数就无法被调用,例如phpinfo作用是显示php的配置,而禁用后使用网页无法显示出来;
## 定义时区
搜索date.timezone
修改date.timezone =为
date.timezone = Asia/Shanghai
## 关闭错误信息显示
搜索display_errors
将display_errors = On改为
display_errors = Off
## 配置error_log
搜索error_log =
修改error_log = 目录为
error_log = /var/log/php/php_errors.log
## 定义错误日志级别
搜索error_reporting =
在error_reporting = E_ALL 修改为
error_reporting = E_ALL & ~E_NOTICE
\\E_ALL为所有类型的日志,不管是提醒还是警告都会记录。在开发环境下设置为E——ALL,方便程序员排查问题,但同时也会记录很多无意义的内容。&表示且,~表示排除,所有两个组合就是在E——ALL基础上排除掉notice相关的日志。
## open_basedir参数设定
作用:将网站限制在指定目录里,就算该站点被黑了,黑客只能在该目录下面有所作为,而不能左右其他目录。
==但如果服务器上跑的站点较多,拿在php.ini中设置就不合适了,因为在php.ini中只能定义一次,也就是说,所有站点都一起定义限定的目录,这样就起不到隔离多个站点作用了==
# vim /usr/local/php-fpm/etc/php-fpm.d/test.conf 
php_admin_value[open_basedir]=/data/www/te
t.com:/tmp/
/usr/local/php-fpm/sbin/php-fpm -t
[09-Jan-2018 18:39:10] NOTICE: configuration file /usr/local/php-fpm/etc/php-fpm.conf test is successful
# /etc/init.d/php-fpm restart
Gracefully shutting down php-fpm . done
Starting php-fpm  done
# curl -x 127.0.0.1:80 test.com/test.php -I
HTTP/1.1 200 OK
Server: nginx/1.12.2
Date: Tue, 09 Jan 2018 10:39:20 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/5.6.3011.32

11.32 php扩展模块装安

当我们安装好php之后可能会忘记装一些模块,或者需要增加模块的时候我们可以使用扩展模块安装。PHP也一样有静态与动态之分,之前所涉及到的PHP安装都全部为静态,并没有任何动态的模块,所谓动态,就是一个独立存在的.so文件,在httpd中PHP就是以动态模块的形式被加载的。

## 查看php加载了哪些模块,使用命令
/usr/local/php/bin/php -m
## 下面演示下安装redis模块
cd进入安装下载目录
cd /usr/local/src/
## 下载一个redis的包
wget https://codeload.github.com/phpredis/phpredis/zip/develop
## 更改包的名字
mv develop phpredis-develop.zip
## 解压包
unzip phpredis-develop.zip
## cd进入解压后的包的目录
cd phpredis-develop/
## 然后我们需要做一个phpize操作,因为要生成configure文件,因为我们要编译它需要configure文件,而它的包里没有,(可能会报错,少一个包,我们提前yum安装一下这个包)
yum install -y autoconf
## 生成configure文件
/usr/local/php/bin/phpize
## 进行编译
./configure --with-php-config=/usr/local/php/bin/php-config
## make
make install
## 查看扩展模块的存放目录
usr/local/php/bin/php -i |grep extension_dir
## ## 在php配置文件中添加一行
vim /usr/local/php/etc/php.ini
打开配置文件后搜索关键字:extension=php
在最后面添加一行:
extension=redis.so
## 然后我们查看一下是否加载
/usr/local/php/bin/php -m |grep redis
显示redis就是加载了

步骤虽然多,但并不复杂。以后遇到增加扩展模块的需求,都可以按照此方法安装。另外要想在php网站使用redis模块,还需重启一下httpd服务。 扩展 几种限制ip的方法 http://ask.apelearn.com/question/6519 apache 自定义headerhttp://ask.apelearn.com/question/830 apache的keepalive和keepalivetimeout http://ask.apelearn.com/question/556 apache开启压缩 http://ask.apelearn.com/question/5528 apache2.2到2.4配置文件变更 http://ask.apelearn.com/question/7292apache options参数http://www.365mini.com/page/apache-options-directive.htm 视频课扩展:https://xiaozhou.net/enable_rewrite_module_of_apache-2012-02-15.html

你可能感兴趣的:(第十九课LAMP环境搭建与配置下)