任务列表:
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
预习笔记
配置Apache防盗链
1.配置虚拟主机配置文件
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
//定义允许访问链接的referer
SetEnvIfNoCase Referer "^$" local_ref
//定义空referer设为白名单,即直接访问的地址
<FilesMatch "\.(txt|doc|mp3|zip|rar|jpg|gif|png)">
//定义匹配的类型
Order Allow,Deny
//白名单地址allow,其他deny
Allow from env=local_ref
// 白名单为local_ref,referer定义的地址
</FilesMatch>
</Directory>
/usr/local/apache2.4/bin/apachectl -t 检查配置
/usr/local/apache2.4/bin/apachectl graceful 重新加载配置
测试效果
curl -e “http://ask.apelearn.com” 自定义referer
curl -e “http://ask.apelearn.com” -x127.0.0.1:80 111.com/111.png -I
指定referer为ask.apelearn.com访问111.com/111.png被允许
指定referer为www.baidu.com访问111.com/111.png被拒绝
Apache访问控制
访问控制Directory
通过来源IP限制不正常的请求
配置虚拟主机配置文件
<Directory /data/wwwroot/111.com/admin>
//配置限制的目录
Order deny,allow
//先拒绝,再允许执行
Deny from all
//拒绝所有
Allow from 127.0.0.1
//允许的ip
</Directory>
/usr/local/apache2.4/bin/apachectl -t 检查配置
/usr/local/apache2.4/bin/apachectl graceful 重新加载配置
通过127.0.0.1访问,成功
通过其他IP访问,被拒绝。
访问控制FilesMatch
配置虚拟主机配置文件
既要匹配文件,又要限制IP
<Directory /data/wwwroot/111.com>
//在111.com目录下
<Filesmatch admin.php(.*)>
//文件匹配admin.php后面跟任意的字符
Order deny,allow
Deny from all
Allow from 127.0.0.1
//只允许127.0.0.1访问
</Filesmatch>
</Directory>
/usr/local/apache2.4/bin/apachectl -t 检查配置
/usr/local/apache2.4/bin/apachectl graceful 重新加载配置
不允许的IP访问非被保护的内容,成功
不允许的IP访问被保护的内容,拒绝
被允许的IP访问被保护的内容,成功
限定某个目录禁止解析php
有些站点和论坛是允许上传图片到服务器,用户上传一些php或者js到服务器,然后被我们执行加载,从而对数据造成威胁。 为了避免这种事情的发生,需要限制上传类型。
修改虚拟主机配置文件
<Directory /data/wwwroot/abc.com/upload>
//在111.com定义upload目录
php_admin_flag engine off
//禁止php解析,所有访问都报403错误
<FilesMatch (.*)\.php(.*)>
// .php 前后匹配任意字符
Order deny,allow
//先执行禁止,后执行允许
Deny from all
//禁止全部
</Filesmatch>
</Directory>
/usr/local/apache2.4/bin/apachectl -t 检查配置
/usr/local/apache2.4/bin/apachectl graceful 重新加载配置
访问upload下的php文件显示403
注释掉filematch部分
再次测试,虽然访问成功,但是PHP无法解析,直接显示源代码
限制user_agent
User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。
修改虚拟主机配置文件
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} .*curl.* [NC,OR]
//匹配curl,NC表示不区分大小写,OR表示或者
RewriteCond %{HTTP_USER_AGENT} .*baidu.com.* [NC]
RewriteRule .* - [F]
</IfModule>
/usr/local/apache2.4/bin/apachectl -t 检查配置
/usr/local/apache2.4/bin/apachectl graceful 重新加载配置
使用curl测试,提示被拒绝
用curl -A指定user_agent的值
使用被禁止的user_agent,访问被禁止,其他则访问成功。
PHP配置
php配置文件
在111.com下,编辑index.php
<?php
phpinfo();
查看index.php,显示配置文件并未加载
把php.ini-development文件,复制到/usr/local/php7/etc/php.ini,并重新刷新index.php
cp /usr/local/src/php-7.1.6/php.ini-development /usr/local/php7/etc/php.ini
/usr/local/apache2.4/bin/apachectl graceful 重新加载配置文件
禁用危险函数
编辑配置文件/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
/usr/local/apache2.4/bin/apachectl graceful 重新加载配置文件
刷新index.php,此时已无法解析php,但显示了文件的具体路径
把配置文件中的display_errors改为OFF,此时文件路径不再显示
搜索display
/usr/local/apache2.4/bin/apachectl graceful 重新加载配置文件
刷新index.php
设置php的错误日志
修改PHP配置文件,搜索log_errors
log_errors = On //需要执行,且为on
error_log = /tmp/php_errors.log //定义错误日志目录
/usr/local/apache2.4/bin/apachectl -t 检查配置
/usr/local/apache2.4/bin/apachectl graceful 重新加载配置
查看错误日志
open_basedir配置
如果有一台服务器跑了很多个站点,其中就有一个站的程序写的很烂,漏洞百出,很容易被黑,一旦该站点被黑,整个服务器就会沦陷,其它站点同样也会被黑。为了防止这样的事情发生,我们对PHP进行配置
在php配置文件中设置open_basedir,把111.com故意写成1111.com
/usr/local/apache2.4/bin/apachectl -t 检查配置
/usr/local/apache2.4/bin/apachectl graceful 重新加载配置
此时已无法访问
查看日志提示,根据配置的路径找不到文件
我们将配置文件的open_basedir改为正确的,访问正常
针对不同的虚拟主机限定不同的open_basedir
删除php.ini中open_basedir的配置
设置虚拟主机配置文件
设置vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
/usr/local/apache2.4/bin/apachectl -t 检查配置
/usr/local/apache2.4/bin/apachectl graceful 重新加载配置
PHP扩展模块安装
下载源码包(redis为例)
进入src目录 cd /usr/local/src
wget https://codeload.github.com/phpredis/phpredis/zip/develop
改名下载下来的文件
mv develop phpredis-develop.zip
解压文件
unzip phpredis-develop.zip
进入文件目录,生成configure文件
cd phpredis-develop/
/usr/local/php7/bin/phpize //生成configure文件
提示缺少autoconf
安装autoconf,yum install -y autoconf
安装完成后继续生成configure文件,/usr/local/php7/bin/phpize //生成configure文件
生成成功
配置、编译,安装
./configure --with-php-config=/usr/local/php7/bin/php-config
make
make install
查看扩展模块存放目录
/usr/local/php7/bin/php -i |grep extension_dir
在php.ini加载一条扩展语句
vim /usr/local/php7/etc/php.ini
编译PHP自带的模块
php7的源码包中,有很多自带的源码包,直接编译即可!
ls /usr/local/src/php-7.1.6/ext
编译 zip模块
cd ls /usr/local/src/php-7.1.6/ext/zip
生成configure文件
/usr/local/php7/bin/phpize
配置、编译,安装
./configure --with-php-config=/usr/local/php7/bin/php-config
make
make isntall
查看目录
/usr/local/php7/lib/php/extensions/no-debug-zts-20160303/
课堂笔记
使用pecl安装PHP扩展模块
/usr/local/php/bin/
pecl install