更新11.25 配置防盗链 11.26 访问控制Directory11.27 访问控制FilesMatch11.28限定某个目录禁止解析PHP11.29 限制user_agent/11.30-31 P

11.25 配置防盗链 11.26 访问控制Directory 

11.25 配置防盗链

CURL +X 是来源IP

11.26 访问控制Directory

11.27 访问控制FilesMatch

通过限制referer来实现防盗链的功能

配置文件增加如下内容

  <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)">

            Order Allow,Deny

            Allow from env=local_ref

        </filesmatch>

    </Directory>

curl -e "http://www.aminglinux.com/123.html" 自定义referer 

11.25 配置防盗链

防盗链的功能可以通过限制referer来实现,不是本机服务器所认识的referer,不允许第三方服务器通过链接引用跳转至本机服务器进行访问。

修改虚拟主机配置文件

<Directory /data/wwwroot/def.com> //定义访问目录

SetEnvIfNoCase Referer "http://def.com" local_ref //设置referer白名单

SetEnvIfNoCase Referer "http://www.def.com" local_ref //设置referer白名单

SetEnvIfNoCase Referer "^$" local_ref //设置referer白名单(空regerer)

<filesmatch "\.(txt|doc|mp3|zip|rar|jpg|gif)"> //定义防盗链需要防护的文件类型

Order Allow,Deny //访问控制规则

Allow from env=local_ref

</filesmatch>

</Directory>

空referer:直接在浏览器输入目的域名,则referer为空。

SetEnvIfNoCase Referer "http://www.111.com" local_ref

        SetEnvIfNoCase Referer "http://111.com" local_re

第一条是 哪里跳过来  第二条是直接访问  第一个是白名单,第二个等自己直接打上去这个地址

结果测试

从浏览器直接访问时(空referer),访问正常   测试 http://www.def.com/test.txt

 

经过博客网站进行访问时,博客网站域名没有加入网站白名单,防盗链生效,访问被拒绝

curl -e "http://www.qq.com/123.html" -x 192.168.88.5:80 def.com/test.txt -I

 

HTTP/1.1 403 Forbidden

Date: Sun, 03 Jun 2018 09:19:19 GMTServer: Apache/2.4.33 (Unix) PHP/5.6.32Content-Type: text/html; charset=iso-8859-1

 

curl -e可以自定义referer,进行模拟测试。

11.26 访问控制Directory

访问控制可以限制一些白名单IP,只有白名单上的IP才可以进行正常访问,否则全部拒绝

修改虚拟主机配置文件

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

Order deny,allow

Deny from all

Allow from 127.0.0.1

</Directory>

 

Order用于定义顺序,上述文件中的顺序为先deny(禁止)后allow(允许),并且和防火墙规则匹配机制不同的是,下方具体规则的先后顺序和真正执行的顺序无关,且会按照从先至后依次全部匹配,按照上述文件的策略顺序,最终只有源IP为127.0.0.1才可以正常访问。

结果测试

[root@linux-5 admin]# curl -x 127.0.0.1:80 def.com/admin/test.php -I

HTTP/1.1 200 OK

Date: Sun, 03 Jun 2018 11:30:16 GMTServer: Apache/2.4.33 (Unix) PHP/5.6.32X-Powered-By: PHP/5.6.32Cache-Control: max-age=0Expires: Sun, 03 Jun 2018 11:30:16 GMTContent-Type: text/html; charset=UTF-8

 

[root@linux-5 admin]# curl -x 192.168.88.5:80 def.com/admin/test.php -I

HTTP/1.1 403 Forbidden

Date: Sun, 03 Jun 2018 11:30:27 GMTServer: Apache/2.4.33 (Unix) PHP/5.6.32Content-Type: text/html; charset=iso-8859-1

虽然-x选项后面的IP地址为目的IP,但是127.0.0.1为主机回环IP,访问时也需要用127.0.0.1作为源IP进行访问,因此满足条件,可以正常访问。同理访问外部网卡地址也需要用外部网卡IP进行访问,不满足访问控制条件,因此无法访问。

11.26 访问控制Directory 

核心配置文件内容

  <Directory /data/wwwroot/www.123.com/admin/> 必须里面的目录

        Order deny,allow

        Deny from all

        Allow from 127.0.0.1

    </Directory>

  Order deny,allow             ##    定义顺序 是先 拒绝还是先  允许

        Deny from all                  ##先被拒绝

        Allow from 127.0.0.1        ##再被允许  

上述文件中的顺序为先deny(禁止)后allow(允许)

黑名单 黑名单就是全部都同意然后挑几个拒绝,白名单就是全拒绝然后挑几个同意

 

111.com/admin/index.php

curl -x127.0.0.1:80 www.111.com/admin/index.php

 

正确配置文件

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

        Order deny,allow

        Deny from all

        Allow from 172.16.90.41

        Allow from 172.16.20.16

    </Directory>

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

可以添加多个IP

11.27 访问控制FilesMatch

有时只需要限制某些访问链接,且访问链接中含有一些特殊符号(?、&等),对整个目录进行限制较不合理,可以使用FilesMatch进行限制。

修改虚拟主机配置文件

<Directory /data/wwwroot/def.com>

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

Order deny,allow

Deny from all

Allow from 127.0.0.1

</FilesMatch>

</Directory>

使用.*代指PHP文件后所有特殊符号 针对文件

正确设置

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

        <FilesMatch admin.php(.*)>

        Order deny,allow

        Deny from all

        Allow from 127.0.0.1

        </FilesMatch>

    </Directory>

测试结果 

[root@linux-5 admin]# curl -x 192.168.88.5:80 def.com/admin.php? -I

HTTP/1.1 403 Forbidden

Date: Sun, 03 Jun 2018 11:58:16 GMTServer: Apache/2.4.33 (Unix) PHP/5.6.32Content-Type: text/html; charset=iso-8859-1

 

[root@linux-5 admin]# curl -x 127.0.0.1:80 def.com/admin.php? -I

HTTP/1.1 200 OK

Date: Sun, 03 Jun 2018 11:58:34 GMTServer: Apache/2.4.33 (Unix) PHP/5.6.32X-Powered-By: PHP/5.6.32Cache-Control: max-age=0Expires: Sun, 03 Jun 2018 11:58:34 GMTContent-Type: text/html; charset=UTF-8

 

 


 

正确配置

<VirtualHost *:80>

    DocumentRoot "/data/wwwroot/abc.com"

    ServerName abc.com

    ServerAlias www.abc.com www.123.com

    ErrorLog "logs/abc.com-error_log"

    CustomLog "logs/abc.com-access_log" common

</VirtualHost>

 

<VirtualHost *:80>

    DocumentRoot "/data/wwwroot/111.com"

    ServerName www.111.com

    ServerAlias www.example.com www.2111.com www.222.com

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

   #     AllowOverride AuthConfig

   #     AuthName "111.com user auth"

   #     AuthType Basic

   #     AuthUserFile /data/.htpasswd  

   #     require valid-user

    #</Directory>

    # 核心配置文件内容

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

        <FilesMatch admin.php(.*)>

        Order deny,allow

        Deny from all

        Allow from 172.16.20.16

        </FilesMatch>

    </Directory>

 

 

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

        SetEnvIfNoCase Referer "http://www.111.com" local_ref

        SetEnvIfNoCase Referer "http://111.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>

 

    ErrorLog "logs/111.example.com-error_log"

    SetEnvIf Request_URI ".*\.gif$" img

    SetEnvIf Request_URI ".*\.jpg$" img

    SetEnvIf Request_URI ".*\.png$" img

    SetEnvIf Request_URI ".*\.bmp$" img

    SetEnvIf Request_URI ".*\.swf$" img

    SetEnvIf Request_URI ".*\.js$" img

    SetEnvIf Request_URI ".*\.css$" img

    CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/111.com-access_%Y%m%d.log 86400" combined env=!img

</VirtualHost>

 

 

 

扩展

几种限制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://www.365mini.com/page/apache-options-directive.htm

apache禁止trace或track防止xss http://ask.apelearn.com/question/1045

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

php开启短标签 http://ask.apelearn.com/question/120

php.ini详解 http://legolas.blog.51cto.com/2682485/493917

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

核心配置文件内容

    <Directory /data/wwwroot/www.123.com/upload>

        php_admin_flag engine off

    </Directory>

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

 

 

正确

    <Directory /data/wwwroot/111.com/upload/>          #这里一定要和服务器服务一样,(自己以前加了WWW出错老半天没找出原因)

        php_admin_flag engine off

        <FilesMatch (.*)\.php(.*)>                         

        Order deny,allow                                           #匹配PHP全部禁用

        Deny from all                                                 # 不加Deny就会访问你的源代码

        </FilesMatch>

    </Directory>

 

mkdir upload  然后里面放一个PHP文件

 

 

11.29 限制user_agent    用户代理

user_agent可以理解为浏览器标识  

核心配置文件内容

   <IfModule mod_rewrite.c>                           #改写

        RewriteEngine on

        RewriteCond %{HTTP_USER_AGENT}  .*curl.* [NC,OR]            #NC忽略大小写

        RewriteCond %{HTTP_USER_AGENT}  .*baidu.com.* [NC]      #2个条件直接连接符

        RewriteRule  .*  -  [F]

    </IfModule>

curl -A "123123" 指定user_agent

[NC,OR]         #2个条件直接连接符 匹配上面 或者下面这个不加OR是并且它或者它

{HTTP_USER_AGENT} 这个是定义条件

{HTTP_USER_AGENT

RewriteRule .*\.jpg -[F]             // 如果请求的是一个.jpg图片就拒绝

 

以后遇见这种配置前面就写.* 中间关键词再.*

 

 

11.30 PHP相关配置上

查看php配置文件位置

/usr/local/php/bin/php -i|grep -i "loaded configuration file"

date.timezone     #定义时区 不然会出现告警信息

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_closephpinfo

error_log, log_errors, display_errors, error_reporting

open_basedir

php_admin_value open_basedir "/data/wwwroot/111.com:/tmp/"

查看PHP路径位置 可以/data/wwwroot/111.com  创建一个php文件

<?php

phpinfo();

?>

•/usr/local/php/bin/php -i|grep -i "loaded configuration file"  这个方式不靠谱

 

vim /usr/local/php/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_closephpinfo

 

date.timezone  

date.timezone = Asia/Shanghai

 

display_errors = Off  #不希望把错误信息显示到游览器里

 

 

error_log = /tmp/php_errors.log   错误日志打开 放到tmp下面

touch /tmp/php_errors.log

chmod  777 /tmp/php_errors.log

 

 

最后实验游览器http://www.111.com/phpinfo.php

 

has been disabled for security reasons   出于安全原因被禁用

有错误日志就是对的

 

open_basedir  #一个网站只有一目录,被黑了也只有一个目录

 

vim /usr/local/php/etc/php.ini   #open_basedir 这个功能只要打开就可以,不要在里面设置,去虚拟主机里面设置vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

php_admin_value open_basedir "/data/wwwroot/111.com:/tmp/"   添加这行根据目录填写 TMP是一定要的

curl -A "a" -x127.0.0.1:80 http://111.com/index.php

 

 

11.30 PHP扩展模块

 

/usr/local/php/bin/php -m //查看模块

下面安装一个redis的模块

cd /usr/local/src/

wget https://codeload.github.com/phpredis/phpredis/zip/develop

mv develop phpredis-develop.zip

• yum install -y unzip yum install -y autoconf(可能少这个包)

unzip phpredis-develop.zip

cd phpredis-develop

/usr/local/php/bin/phpize //生成configure文件

• /usr/local/php7/bin/phpize  //生成7configure文件

./configure --with-php-config=/usr/local/php/bin/php-config

./configure --with-php-config=/usr/local/php7/bin/php-config  //7

make && make install

生成的文件

 

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

vim /usr/local/php/etc/php.ini  //增加一行配置(可以放到文件最后一行)

extension = redis.so 

/usr/local/php/bin/php -m |grep redis  //查看有没有这个文件

redis   

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值