LAMP架构 【3】

 

 

一、配置防盗链

  • 防盗链,用于防止链接被其他网站盗用导致占用服务器的流量,此时可以通过限制referer来防止链接被盗用。
  • 防盗链:通俗来说,就是不让别人盗用你网站上的资源。
  • 打开虚拟主机配置文件 vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf,增加内容如下,保存退出
    <Directory /data/wwwroot/111.com>     指定网站的目录
        SetEnvIfNoCase Referer "http://111.com" local_ref     指定白名单referer
        SetEnvIfNoCase Referer "http://ask.apelearn.com" local_ref
        SetEnvIfNoCase Referer "^$" local_ref                 将空referer加入白名单
        <FilesMatch "\.(txt|doc|mp3|zip|rar|jpg|gif|png)">定义规则(针对这些文件设置防盗链)
            Order Allow,Deny         order定义规则顺序,allow表示同意,deny表示拒绝。
            Allow from env=local_ref
        </FilesMatch>
    </Directory>
  • 测试配置文件及重载
  1. /usr/local/apache2.4/bin/apachectl -t
  2. /usr/local/apache2.4/bin/apachectl graceful

curl测试:

  • 用curl模拟referer,-e指定referer
  • 使用命令curl -e参数模拟refer为http://www.qq.com时拒绝方位状态码403,其中refer必须以http开头,如图:

  • 使用命令curl -e参数模拟refer为白名单中的referer时,状态码为200,可以访问,如图:

 

 

二、访问控制Directory

  • 用于限制某些IP访问重要的目录
  • 修改apache虚拟主机配置文件/usr/local/apache2.4/conf/extra/httpd-vhosts.conf   增加如下内容:
核心配置文件内容
<Directory /data/wwwroot/111.com/admin/> 指定需要限制的目录
    Order deny,allow   Order确定执行顺序,整个语句都会执行一遍。
    Deny from all 如果先deny,后allow,则会先执行deny的操作,再执行允许的动作,后面的动作会覆盖前面的操作。如果先allow,后deny all,则最后的结果会是deny。
    Allow from 127.0.0.1   添加白名单IP
</Directory>
  • 创建admin目录,新建一个index.php文件,内容位121212
  1. # mkdir admin/
  2. # cd admin/
  3. # touch index.php
  4. # echo "121212" > index.php
  • 测试配置及加载配置
  1. usr/local/apache2.4/bin/apachectl -t
  2. /usr/local/apache2.4/bin/apachectl graceful
  • 访问测试:
  • curl -x127.0.0.1:80 111.com/admin/index.php -I,-x指定的是目标IP 127.0.0.1,限制的源IP也是127.0.0.1,也可以访问内容

  • 改变目标IP,源IP也会改变

 

 

三、访问控制FilesMatch

  • 访问控制除了目录的形式之外,也可以去匹配链接;
  • 针对某一个文件或者某一种文件类型来设置规则
  • 修改apache虚拟主机配置文件/usr/local/apache2.4/conf/extra/httpd-vhosts.conf   增加如下内容:
<Directory /data/wwwroot/www.123.com>

    <FilesMatch "admin.php(.*)">

        Order deny,allow

        Deny from all

        Allow from 127.0.0.1

    </FilesMatch>

</Directory>
  • 测试配置及加载配置
  1. usr/local/apache2.4/bin/apachectl -t
  2. /usr/local/apache2.4/bin/apachectl graceful
  • 使用命令curl测试
  1. 指向IP为127.0.0.1时显示状态码为404,意味可以访问只是文件没有创建不存在所以无法找到。

 

 

  1. 指向IP为192.168.133.150时显示状态码为403,无法访问。

 

 

四、限定某个目录禁止解析php 

  • 有些目录是存放静态文件的目录,如图片目录,本身不需要允许php的解析。如果没有注意,允许了php解析,而且又开放了该目录的文件上传权限。很可能被别有用心的人利用上传木马,导致服务器被攻破。除了开发人员在程序开发过程中要注意安全的设计,也可以通过apache限制某些目录的php解析。
  • 本节内容应用于对静态文件目录或可写的目录进行优化设置,通过限制解析/访问权限来避免别恶意攻击,提高安全性。
  • 修改apache虚拟主机配置文件/usr/local/apache2.4/conf/extra/httpd-vhosts.conf   增加如下内容:

<Directory /data/wwwroot/abc.com/upload>

        php_admin_flag engine off

</Directory>

  • 创建相应的目录:
[root@gaodehua33 111.com]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf 
    <Directory /data/wwwroot/111.com/upload>
        php_admin_flag engine off
    </Directory>
  • 测试配置及加载配置
  1. usr/local/apache2.4/bin/apachectl -t
  2. /usr/local/apache2.4/bin/apachectl graceful
  • 测试

[root@gaodehua33 111.com]# curl -x192.168.8.131:80 'http://111.com/upload/123.php' 
<?php
echo "welcom to 123file";
?>
 
[root@gaodehua33 111.com]# curl -x192.168.8.131:80 'http://111.com/upload/baidu.pnp' -I
HTTP/1.1 200 OK
Date: Thu, 03 Aug 2017 04:47:16 GMT
Server: Apache/2.4.27 (Unix) PHP/5.6.30
Last-Modified: Thu, 03 Aug 2017 04:25:26 GMT
ETag: "e7a-555d1c5172a6c"
Accept-Ranges: bytes
Content-Length: 3706
Content-Type: image/png
  • 同时禁止显示源代码,可以添加filesmatch语句,来禁止访问php文件。内容如下:

<Directory /data/wwwroot/abc.com/upload>

        php_admin_flag engine off

       <FilesMatch (.*)\.php(.*)>                      添加filesmatch规则,禁止访问php的文件

       Order allow,deny

       Deny from all                                         全部拒绝

       </FilesMatch>

    </Directory>

  • 此时在使用命令curl测试,显示状态码403。无法解析访问php文件,不会显示源代码。如图:
[root@gaodehua33 upload]# curl -x192.168.199.128:80 'http://111.com/upload/123.php'
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access /upload/123.php
on this server.<br />
</p>
</body></html>
[root@gaodehua33 upload]#

 

 

五、限制user_agent

  • user_agent(用户代理):是指浏览器(搜索引擎)的信息包括硬件平台、系统软件、应用软件和用户个人偏好。
  • 有时候网站受到CC攻击,其原理是:攻击者借助代理服务器(肉机)生成指向受害主机的合法请求,实现DDOS和伪装。CC攻击的一个特点就是其useragent是一致的,所以,可以通过限制攻击者useragent的方法来阻断其攻击。
  • 修改apache虚拟主机配置文件/usr/local/apache2.4/conf/extra/httpd-vhosts.conf   增加如下内容:
 <IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteCond %{HTTP_USER_AGENT}  .*curl.* [NC,OR]            限制curl,baidu.com代理的访问,其中OR表示或者,NC表示忽略大小写。
        RewriteCond %{HTTP_USER_AGENT}  .*baidu.com.* [NC]
        RewriteRule  .*  -  [F]
    </IfModule>
  • 需要在apache配置文件中开启rewrite模块
  • 测试配置及加载配置
  1. usr/local/apache2.4/bin/apachectl -t
  2. /usr/local/apache2.4/bin/apachectl graceful
  • 使用curl命令测试,报错代码403
[root@gaodehua33 upload]# curl -A "www.baidu.com" -x192.168.199.128:80 'http://111.com/123.php' -I
HTTP/1.1 403 Forbidden
Date: Sat, 15 Dec 2018 17:49:16 GMT
Server: Apache/2.4.34 (Unix) PHP/5.6.30
Content-Type: text/html; charset=iso-8859-1
  • 使用curl ,选项-A 指定user_agent为aming,访问正确
[root@gaodehua33 111.com]# curl -A "aming" -x192.168.199.128:80 'http://111.com/123.php' -I
HTTP/1.1 200 OK
Date: Sat, 15 Dec 2018 18:04:06 GMT
Server: Apache/2.4.34 (Unix) PHP/5.6.30
X-Powered-By: PHP/5.6.30
Content-Type: text/html; charset=UTF-8

[root@gaodehua33 111.com]#

 

 

六、PHP相关配置

修改php配置文件后,都要使用apachectl测试并重新加载配置文件

使用命令的方式查看php配置文件(不太准确):/usr/local/php/bin/php -i|grep -i "loaded configuration file"

建立一个phpinfo()函数的页面来查看(最准确)

编辑abc.com下的index.php文件,输入以下内容:

        <?php

        phpinfo();

        ?>

通过游览器访问abc.com

进入对应PHP版本的源码包目录下,复制配置文件到phpinfo()指定的目录中
复制配置文件:cp php.ini-development /usr/local/php7/etc/php.ini
其中该目录下有两个php-ini的配置文件,development(开发)和production(生产)。
重新加载apache配置文件,后再次打开游览器访问,显示如图:

修改php配置文件/usr/local/php7/etc/php.ini 在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,phpinfo

禁止phpinfo函数后,通过游览器访问效果如下:

  • 在date.timezone处设置时区放置报错,如图:date.timezone =Asia/Shanghai

  • 不在网页上显示phpinfo等函数的报错信息(当禁止这些函数时):display_errors = Off  (设置为On时显示报错):

当display_errors设置为Off不在显示报错信息,所以此时需要配置一些相关的错误日志
开启错误日志和相关设置
修改php配置文件开启错误日志:log_errors = On  (默认开启状态)
修改php配置文件设置错误日志路径:error_log =/tmp/php7_errors.log
修改php配置文件,定义记录日志的错误级别:error_reporting = E_ALL & ~E_NOTICE  (生产环境中使用该错误等级,默认为E_ALL会记录所有的错误,但是不会记录通知和一般性的警告。)


在php.ini下配置open_basedir隔离虚拟主机目录全局生效,不能细分化单独配置
修改php.ini文件:open_basedir= /data/wwwroot/abdc.com:/tmp  将访问限制在abdc.com和tmp目录下
使用curl访问测试abc.com/index.php,状态码500:


在apache配置文件下配置open_basedir,针对不同的虚拟主机配置,更加灵活
修改apache虚拟主机配置文件/usr/local/apache2.4/conf/extra/httpd-vhosts.conf   增加如下内容:php_admin_value open_basedir "/data/wwwroot/abc.com:/tmp/"
使用curl访问测试abc.com/index.php,状态码200访问正确:

 

七、PHP扩展模块安装

有时候php安装编译完成后,这时候发现缺少了一个模块,但又不想重新编译php模块,可以使用扩展模块编译。

查看php模块:/usr/local/php/bin/php -m
安装一个redis的模块:
移动到src目录下: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
生成configure文件:/usr/local/php/bin/phpize      (可能会提示报错,缺少autoconf,使用yum安装即可)
生成安装目录和配置:./configure --with-php-config=/usr/local/php7/bin/php-config
安装编译:make && make install
查看扩展模块存放目录,我们可以在php.ini中去自定义该路径 :/usr/local/php7/bin/php -i |grep extension_dir
在php.ini配置文件中添加一行配置:extension = redis.so 
查看模块是否加载成功:/usr/local/php7/bin/php -m | grep redis


在PHP源码包ext目录下有很多的模块源码包,直接进入需要安装的模块源码包根据上面的安装方式安装即可。

 

课堂笔记

几种限制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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值