0511 LAMP架构(三)

0511 LAMP架构(三)

一、配置Apache防盗链

956e59248a99e94118f1b33bbfb5ad7cac5.jpg

       Apache防盗链定义:指不让别人盗用你网站上的资源,这个资源指的是图片、视频、歌曲、文档等,在这之前需要理解一下referer的概念,如果你通过A网站的一个页面http://a.com/a.html里面的链接去访问B网站的一个页面http://b.com/b.html,那么这个B网站页面的referer就是http://a.com/a.html。也就是说,一个referer就是一个网址。

1、进入主机配置文件

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

2、修改以下配置内容

<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 //白名单地址allow,其他deny

Allow from env=local_ref // 白名单为local_ref对应的地址

</FilesMatch>

</Directory>

3、检测重启

/usr/local/apache2.4/bin/apachectl -t //更改配置后,需要检查配置语法

Syntax OK

/usr/local/apache2.4/bin/apachectl graceful //重启httpd

4、使用qq.png进行测试

0fe90d5696ef0435c0209874879cb810255.jpg

HTTP/1.1 403 Forbridden //定义refer为qq,此为禁止refe

HTTP/1.1 200 OK //定义refer为111.com,可以访问

二、Apache访问控制

1、访问控制Directory(目录)

252385d9c3ece088592c62a8096ad4214aa.jpg

(1)进入虚拟主机配置文件

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

(2)修改配置文件内容

<Directory /data/wwwroot/111.com/admin> //增加admin目录

Order deny,allow //按先拒绝,再允许执行

Deny from all //拒绝所有

Allow from 127.0.0.1 //允许ip

</Directory>

(3)添加测试的必要文件

ls123.php 1.jpg 1.txt ceshi.png index.php

mkdir admin //在111.com下创建admin目录

touch admin/index.php //在admin下创建index.php文件

echo "qeqe2222" >> admin/index.php

cat !$

cat admin/index.php

qeqe2222

检测并重启虚拟主机配置文件

(4)访问测试

curl -x127.0.0.1:80 111.com/admin/index.php -I //可以正常访问

HTTP/1.1 200 OK

curl -x127.0.0.1:80 111.com/admin/index.php //能够输出

qeqe2222

curl -x127.0.0.1:80 http://111.com/admin/asdsf -I

HTTP/1.1 404 Not Found //404代表允许访问,此页面没有

2、访问控制FilesMatch(文件匹配)

3a142a582592e1a19efcfe95bc14b67b947.jpg

(1)进入虚拟主机配置文件

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

(2)修改配置文件内容

<VirtualHost *:80>

DocumentRoot "/data/wwwroot/111.com"

ServerName 111.com

ServerAlias www.example.com 2111.com.cn

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

(3)在满足admin.php 条件下,不同IP进行访问测试

curl -x192.168.112.136:80 'http://111.com/admin.php#aaaaaaaaaaaa' -I //满足admin.php

HTTP/1.1 403 Forbidden //因为只允许IP:127.0.0.1访问

curl -x127.0.0.1:80 'http://111.com/admin.php#aaaaaaaaaaaa' -I //加上单引号,是因为有特殊符号#

HTTP/1.1 404 Not Found //能够连接,但是无此页面

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

       情况示例:有这样一种情况,有些站点和论坛是允许上传图片到服务器,他们上传一些php文件或者js到服务器,然后被我们执行加载,从而对数据造成威胁。为了避免这种事情的发生,我们需要限制上传类型。

1acdae7febb875cbbe14d68fb0483239e63.jpg

(1)编辑虚拟主机配置文件

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

(2)修改配置文件内容

<VirtualHost *:80>

DocumentRoot "/data/wwwroot/111.com"

ServerName 111.com

ServerAlias www.example.com2111.com.cn

<Directory /data/wwwroot/111.com/upload> //在111.com定义upload目录

php_admin_flag engine off //禁止php解析,所有访问都报403错误

<FilesMatch (.*)\.php(.*)> // .php 前后匹配任意字符

Order deny,allow //按禁止,允许执行

Deny from all //禁止全部

(3)创建测试文件

创建目录,并把123.php复制到upload,并重启配置

mkdir upload

ls123.php 1.jpg 1.txt admin ceshi.png index.php upload

cp 123.php upload/

/usr/local/apache2.4/bin/apachectl -t

Syntax OK

/usr/local/apache2.4/bin/apachectl graceful

(4)再进行测试,则禁止解析php

curl -x127.0.0.1:80 http://111.com/upload/123.php -I

HTTP/1.1 403 Forbidden

(5)再进行配置,在FilesMatch部分加上#号不执行

#<FilesMatch (.*)\.php(.*)> // .php 前后匹配任意字符

# Order deny,allow //按禁止,允许执行

# Deny from all //禁止全部

#</Filesmatch>

(6)重启配置测试,也无法解析php,只能输出源码

curl -x127.0.0.1:80 http://111.com/upload/123.php //不能够解析PHP,只能输出源代码

<?php

echo "123.php";

因此为了安全,我们可以设置让其根本不能访问php(匹配.php),不给其解析机会;

4、限制user_agent

       User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。

d31218d19a066ba7d5bf45792f4ee057909.jpg

(1)进入虚拟主机配置文件

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

(2)修改配置文件内容

<VirtualHost *:80>

DocumentRoot "/data/wwwroot/111.com"

ServerName 111.com

ServerAlias www.example.com 2111.com.cn

<IfModule mod_rewrite.c>

RewriteEngine on //

RewriteCond %{HTTP_USER_AGENT} .*curl.* [NC,OR] //匹配curl,不区分大小写,或者

RewriteCond %{HTTP_USER_AGENT} .*baidu.com.* [NC]

RewriteRule .* - [F]

</IfModule>

(3)使用curl直接访问111.com目录下的123.php

curl -x127.0.0.1:80 http://111.com/123.php -I

HTTP/1.1 403 Forbidden //禁止访问

(4)使用curl -A指定user_agent的值

curl -A "123456" -x127.0.0.1:80 http://111.com/123.php -I //指定user_agent为123456

HTTP/1.1 200 OK //可以访问

(5)调用访问日志;可以看出user_agent为"curl/7.29.0"

808a2c5ab09ffcc88faabbf4e4edc0eb4c3.jpg

user_agent为"curl/7.29.0" 匹配配置文件,因此禁止访问;而用curl -A指定user_agent的值,则状态码为200;

三、PHP相关配置

1、php的配置文件

试验准备工作;在111.com下,编辑index.php内容

cd /data/wwwroot/111.com

ls

123.php 1.jpg 1.txt admin ceshi.png index.php upload

vim index.php

<?php

phpinfo();

此时我们在浏览器上访问index.php, 发现** Loaded Configuration File**没有加载

c361e535b9b3bf671e08419c2c79c6c4fc5.jpg

此时把php.ini-development文件,复制到/usr/local/php7/etc/php.ini

cp php.ini-development /usr/local/php7/etc/php.ini

重新加载后,再用浏览器上访问index.php,此时** Loaded Configuration File**已经加载

3629ea17063de2b066a18e6673ecdd7ec31.jpg

2、危险函数的禁用

(1)编辑/usr/local/php7/etc/php.ini配置文件

vim /usr/local/php7/etc/php.ini

(2)比较危险的函数示例

c5a3944b246fcc38b3b5f1a104e54e39b77.jpg

(3)在php.ini配置文件中搜索 disable_functions

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

(4)再次访问已被禁用,phpinfo也已被禁用

c536604b93da5307b4d9dc227e4290fedde.jpg

(5)虽然不能访问了,但是它却在页面上显示错误信息; 为了不让其显示错误信息,需要将配置文件vim /usr/local/php7/etc/php.ini中的display_errors = off //把on改为off

/usr/local/apache2.4/bin/apachectl graceful //重新加载

5ea9e6d0e4e956b384db578de62b95830f6.jpg

3、设置php错误日志

虽然免除了危险,但是对于我们管理员来说,这个页面不友好,无法判断此页面错误原因;此时需要设置错误日志。

(1)再次打开php.ini配置文件vim /usr/local/php7/etc/php.ini,log_errors = On //需要执行,且为on,error_log = /tmp/php_errors.log //定义错误日志目录

(2)设置error_reporting 错误级别,搜索error_reporting

error_reporting = E_ALL //默认为E_ALL,

error_reporting = E_ALL & ~E_NOTICE //在生产环境中,最常用的就是这个!有时候出现notice并不是出错,但却会记录日志。

(3)加载重启配置

curl -A "Q" -x127.0.0.1:80 http://111.com/index.php //继续访问,肯定没有输出

ls /tmp/php_errors.log //但是此时有我们设置的错误日志出现

/tmp/php_errors.log

(4)查看错误日志权限ls -l /tmp/php_errors.log

-rw-r--r-- 1 daemon daemon 1350 7月 2 11:02 /tmp/php_errors.log

(5)查看php错误日志

cat /tmp/php_errors.log

PHP Warning: phpinfo() has been disabled for security reasons in /data/wwwroot/111.com/index.php on line 2

4、open_basedir配置

如果有一台服务器跑了很多个站点,其中就有一个站的程序写的很烂,漏洞百出,很容易被黑,一旦该站点被黑,整个服务器就会沦陷,其它站点同样也会被黑。为了防止这样的事情发生,需要对open_basedir进行配置。

(1)在php配置文件中设置open_basedir

在php配置文件中,把111.com故意写成1111.com

vim /usr/local/php/etc/php.ini

open_basedir = /data/wwwroot/1111.com:/tmp

(2)重启配置,测试

/usr/local/apache2.4/bin/apachectl -t

Syntax OK

/usr/local/apache2.4/bin/apachectl graceful

(3)访问2.php

curl -A "Q" -x127.0.0.1:80 http://111.com/2.php -I

HTTP/1.0 500 Internal Server Error //出现500状态码

查看错误日志:php_errors.log

PHP Parse error: syntax error, unexpected end of file in /data/wwwroot/111.com/2.php on line 4

(4)在php配置文件中,把错误的目录1111.com改为111.com

curl -A "Q" -x127.0.0.1:80 http://111.com/2.php -I

HTTP/1.0 500 Internal Server Error

(5)针对不同的虚拟主机限定不同的open_basedir

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

添加两行配置

659349b5948b74ffe8526848ef02ebe8d99.jpg

重新配置

/usr/local/apache2.4/bin/apachectl -t

Syntax OK

/usr/local/apache2.4/bin/apachectl graceful

重新访问成功:

curl -A "Q" -x127.0.0.1:80 http://111.com/2.php -I

HTTP/1.1 200 OK

四、PHP扩展模块安装

1、下载模块包安装

cd /usr/local/src/

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

改名,解压包

mv develop phpredis-develop.zip //更改名称[root@ying01 src]# unzip phpredis-develop.zip //解压,

2、使其生成configure 文件

cd phpredis-develop/

/usr/local/php7/bin/phpize   提示缺少包,安装:yum install -y autoconf

2c8935717f0fb7f036c88aa9c629497f9b0.jpg

安装完缺少的包以后,继续执行

/usr/local/php7/bin/phpize

861a8e867da6542d79b5288edc2066c2b31.jpg

3、编辑配置

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

make

make install

4、查看扩展模块存放目录

/usr/local/php7/bin/php -i |grep extension_dir

extension_dir => /usr/local/php7/lib/php/extensions/no-debug-zts-20160303 => /usr/local/ph

sqlite3.extension_dir => no value => no value

5、目录为空,此时在php.ini加载一条扩展语句

vim /usr/local/php7/etc/php.ini

将redis.so添加至末尾

ec543971bb0f755b43e0ce77c7aabfe06e7.jpg

6、此时查看存放扩展模块的目录,发现有刚才配置的 redis.so模块

/usr/local/php7/bin/php -m |grep redis

redis

7、编译自带的PHP源码包

php7的源码包中,有很多自带的源码包。我们不需要再次下载,直接编译即可!在php-7.1.6/etc目录下有很多目录

cd /usr/local/src/php-7.1.6/

cd ext/

ls

8be061f17e5f7413604109bcfd20724b297.jpg

(1)现在编译一个模块 zip

cd zip/  //进入zip模块

/usr/local/php7/bin/phpize

9d4596532287ebdf08490ebc9ab0f2a8760.jpg

(2)配置编译安装

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

make

make install

(3)查看目录,此时已有zip.so模块

ls /usr/local/php7/lib/php/extensions/no-debug-zts-20160303/

opcache.so redis.so zip.so

 

转载于:https://my.oschina.net/u/4095803/blog/3048840

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值