通过限制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 ,定义空的页面的白名单(这里先注释掉)
核心配置文件内容
Order deny,allow
Deny from all
Allow from 127.0.0.1
curl测试状态码为403则被限制访问了
打开虚拟主机配置文件,增加内容如下(红色方框区域),保存退出
Order 定义访问顺序,先执行deny后执行allow
创建admin目录,新建一个index.php文件,内容位121212
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
核心配置文件内容
<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,表面允许访问了
对静态文件目录或可写的目录进行优化设置,通过限制解析/访问权限来避免别恶意攻击,提高安全性
编辑虚拟主机配置文件
[root@han01 111.com]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
111.com/upload>
php_admin_flag engine off
创建相应的目录
[root@han01 111.com]# mkdir upload
测试:
[root@@han01 111.com]# curl -x192.168.8.131:80 'http://111.com/upload/123.php'
"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(用户代理):是指浏览器(搜索引擎)的信息包括硬件平台、系统软件、应用软件和用户个人偏好
需求背景:
有时候网站受到CC攻击,其原理是:攻击者借助代理服务器(肉机)生成指向受害主机的合法请求,实现DDOS和伪装。CC攻击的一个特点就是其useragent是一致的,所以,可以通过限制攻击者useragent的方法来阻断其攻击
编辑虚拟主机配置文件
[root@han01 111.com]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
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配置文件
将该指令设定在每个目录或者虚拟主机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模块:
[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