配置防盗链、访问控制Directory、访问控制FilesMatch、限定某个目录禁止解析php、限制user_agent、php相关配置、php扩展模块安装

一、配置防盗链

通过限制referer来实现防盗链的功能
配置文件增加如下内容
<Directory /data/wwwroot/www.111.com>

    SetEnvIfNoCase Referer “http://111.com” local_ref

    SetEnvIfNoCase Referer “http://aaa.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>

curl -e "http://www.aminglinux.com/123.html" 自定义referer
防盗链:通俗来说,就是不让别人盗用你网站上的资源。

打开虚拟主机配置文件 vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
这里写图片描述
SetEnvIfNoCase Referer “http://111.com” local_ref和SetEnvIfNoCase Referer “aaa.com” local_ref,定义白名单;SetEnvIfNoCase Referer “^$” local_ref ,定义空的页面的白名单(这里先注释掉)

二、访问控制Directory

核心配置文件内容

<Directory /data/wwwroot/111.com/admin/>

    Order deny,allow

    Deny from all

    Allow from 127.0.0.1

</Directory>

curl测试状态码为403则被限制访问了

打开虚拟主机配置文件,增加内容如下(红色方框区域),保存退出
这里写图片描述
Order 定义访问顺序,先执行deny后执行allow

创建admin目录,新建一个index.php文件,内容位121212

mkdir admin/

cd admin/

touch index.php

echo “121212” > index.php

这里写图片描述
检查语法是否有错误,并重新加载配置文件
这里写图片描述
访问测试:

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也会改变
这里写图片描述
查看访问日志
这里写图片描述
在浏览器中访问111.com/admin/,显示Forbidden
这里写图片描述

三、访问控制 FilesMatch

核心配置文件内容
<Directory /data/wwwroot/www.123.com>

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

        Order deny,allow

        Deny from all

        Allow from 127.0.0.1

    </FilesMatch>

</Directory>

访问控制除了目录的形式之外,也可以去匹配链接;
这里写图片描述
类似于以上中的链接,我们可以用FilesMatch去匹配

打开虚拟主机配置文件,增加内容如下,保存退出
这里写图片描述
检查语法是否有错误,并重新加载配置文件
这里写图片描述
做访问测试,出现403
这里写图片描述
更改目标IP,出现404,表面允许访问了
这里写图片描述

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

对静态文件目录或可写的目录进行优化设置,通过限制解析/访问权限来避免别恶意攻击,提高安全性
编辑虚拟主机配置文件

[root@han01 111.com]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf 
    <Directory /data/wwwroot/111.com/upload>
        php_admin_flag engine off
    </Directory>

创建相应的目录

扫描二维码关注公众号,回复: 2258746 查看本文章
[root@han01 111.com]# mkdir upload

测试:

[root@@han01 111.com]# curl -x192.168.8.131:80 'http://111.com/upload/123.php' 
<?php
echo "welcom to 123file";
?>

[root@@han01 111.com]# curl -x192.168.8.131:80 'http://111.com/upload/baidu.png' -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

在此访问123.php文件时直接显示源代码,即无法进行PHP解析,访问其他类型的文件没问题。

添加PHP访问限制

添加参数“< FilesMatch (.)\ .php(. ) > ”

[root@han01 111.com]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

    <Directory /data/wwwroot/111.com/upload>
        php_admin_flag engine off
        <FilesMatch (.*)\.php(.*)>
        Order Allow,Deny
        Deny from all
        </FilesMatch>
    </Directory>

如果只设置禁止PHP解析,用户访问PHP文件时会显示源代码,添加该参数可以避免用户看到服务器PHP源码,进一步提升安全性

[root@han01 111.com]# curl -x127.0.0.1:80 111.com/upload/123.php -I
HTTP/1.1 403 Forbidden
Date: Thu, 03 Aug 2017 04:28:49 GMT
Server: Apache/2.4.27 (Unix) PHP/5.6.30
Content-Type: text/html; charset=iso-8859-1

[root@han01 111.com]# curl -x127.0.0.1:80 111.com/upload/baidu.png -I
HTTP/1.1 200 OK
Date: Thu, 03 Aug 2017 04:29:25 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

此时访问123.php的状态码为403,即无法访问

五、限制user_agent

user_agent(用户代理):是指浏览器(搜索引擎)的信息包括硬件平台、系统软件、应用软件和用户个人偏好

需求背景:

有时候网站受到CC攻击,其原理是:攻击者借助代理服务器(肉机)生成指向受害主机的合法请求,实现DDOS和伪装。CC攻击的一个特点就是其useragent是一致的,所以,可以通过限制攻击者useragent的方法来阻断其攻击

编辑虚拟主机配置文件

[root@han01 111.com]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf 

    <IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteCond %{HTTP_USER_AGENT}  .*curl.* [NC,OR]
        RewriteCond %{HTTP_USER_AGENT}  .*baidu.com.* [NC]
        RewriteRule  .*  -  [F]
    </IfModule>

NC表示忽略大小写,OR选项表示或者(不加任何选项表并且)连接下一个条件,F=forbidden禁止

检测

[root@han01 111.com]# curl -x192.168.8.131:80 'http://111.com/123.php' -I
HTTP/1.1 403 Forbidden
Date: Thu, 03 Aug 2017 06:59:14 GMT
Server: Apache/2.4.27 (Unix) PHP/5.6.30
Content-Type: text/html; charset=iso-8859-1

[root@han01 111.com]# curl -A "aminglinux aminglinux" -x192.168.8.131:80 'http://111.com/123.php' -I
HTTP/1.1 200 OK
Date: Thu, 03 Aug 2017 07:01:01 GMT
Server: Apache/2.4.27 (Unix) PHP/5.6.30
X-Powered-By: PHP/5.6.30
Content-Type: text/html; charset=UTF-8
[root@han01 111.com]# curl -A "aminglinux aminglinux" -x192.168.8.131:80 'http://111.com/123.php' 
welcom to 123file

curl -A 指定useragent

六、php相关配置

查看PHP配置文件

  • /usr/local/php/bin/php -i|grep -i “loaded configuration file”
    PHP参数
  • date.timezone 设定时区
  • disable_function=
    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
    • display_errors=On/Off :设定是否显示错误原因,需要注意的是,此处设置为off(防止用户看到)后必须设置错误日志,设定保存路径,和错误日志级别,否则将无法查找错误原因 。
  • log_errors=On/Off 开启/关闭错误日志
  • error_log=/tmp/ 设定错误日志的保存路径。如果定义好路径后无法生产日志,此时需要检查日志文件所在目录是否有写(w)权限
  • error_reporting = 设定错误日志级别,级别有:E_ ALL 、~E_ NOTICE 、~E_ STRICT 、~E_DEPRECATED(可以自由组合)。生产环境使用:E_ ALL & ~E_ NOTICE就可以。
  • open_basedir 安全参数
    如果设置了open_basedir选项,将会把所有关于文件的操作限制在指定目录及其子目录。

将该指令设定在每个目录或者虚拟主机web服务器配置文件中非常重要。

php.ini文件中的内容是针对所有虚拟主机进行的配置

小扩展:一台服务器运行着不止一台虚拟主机,所以在该文件下设置该选项并不合适

所以分别在每个虚拟主机的配置文件进行相关设置

[root@han01 111.com]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
php_admin_value open_basedir "/data/wwwroot/111.com:/tmp/"

“php_admin_value”可以定义php.ini中的参数。使用该办法分别在每个虚拟主机设定相关的“open_basedir”即可!
在此开放“/tmp/”目录是为了使临时文件能正常写入。

七、php扩展模块安装

查看PHP模块:

[root@han01 ~]# /usr/local/php/bin/php -m

安装Redis模块

redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)和zset(有序集合)。

下载并解压包

[root@han01 ~]# cd /usr/local/src  

[root@han01 src]# wget https://codeload.github.com/phpredis/phpredis/zip/develop 

[root@han01 src]# mv develop phpredis-develop.zip

[root@han01 src]# unzip phpredis-develop.zip 

[root@han01 src]# cd phpredis-develop/  

[root@han01 phpredis-develop]# /usr/local/php7/bin/phpize

执行该命令的目的是生成configure文件,否则无法进行编译安装

报错:

Cannot find autoconf. Please check your autoconf installation and the
$PHP_AUTOCONF environment variable. Then, rerun this script.

解决办法:

[root@han01 phpredis-develop]# yum install -y autoconf

[root@han01 phpredis-develop]# /usr/local/php7/bin/phpize 
Configuring for:
PHP Api Version:         20160303
Zend Module Api No:      20160303
Zend Extension Api No:   320160303

环境配置

[root@han01 phpredis-develop]# ./configure --with-php-config=/usr/local/php7/bin/php-config
[root@han01 phpredis-develop]# echo $?  #检查是否有错误
  0

编译&安装

[root@han01 phpredis-develop]# make && make install
Installing shared extensions:     /usr/local/php7/lib/php/extensions/no-debug-zts-20160303/

[root@han01 phpredis-develop]# ls /usr/local/php7/lib/php/extensions/no-debug-zts-20160303/
opcache.so  redis.so

为PHP加载Redis模块

先查看扩展模块所在目录

[root@han01 phpredis-develop]# /usr/local/php7/bin/php -i|grep extension_dir
extension_dir => /usr/local/php7/lib/php/extensions/no-debug-zts-20160303 => /usr/local/php7/lib/php/extensions/no-debug-zts-20160303
sqlite3.extension_dir => no value => no value

该目录可以在PHP配置文件php.ini中进行设置(保持默认)。

加载Redis模块

编辑PHP的配置文件

[root@han01 phpredis-develop]# vim /usr/local/php7/etc/php.ini

; If you wish to have an extension loaded automatically, use the following
; syntax:
; ... or under UNIX:
;
;   extension=msql.so
   extension=redis.so

[root@han01 phpredis-develop]# /usr/local/php7/bin/php -m |grep redis
redis

在配置文件中加入“extension=redis.so”即可!该文件中“;”表示注释符号,同“#”。

关于扩展板块

在PHP的源码包中没有第三方模块的包,但是在PHP源码包的/ext/目录下有好多扩展模块,如果所需要的扩展模块在该目录下,可以直接进行安装

先切换到指定模块目录下

生成configure文件

[root@han01 phpredis-develop]# /usr/local/php7/bin/phpize

环境配置

[root@han01 phpredis-develop]# ./configure --with-php-config=/usr/local/php7/bin/php-config

最后编译&安装 make && make install

扩展:

几种限制ip的方法 http://ask.apelearn.com/question/6519
apache 自定义header http://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/7292
apache options参数 http://ask.apelearn.com/question/1051

猜你喜欢

转载自blog.csdn.net/iamfishhh/article/details/80880997