1. 程式人生 > >更新11.25 配置防盜鏈 11.26 訪問控制Directory11.27 訪問控制FilesMatch11.28限定某個目錄禁止解析PHP11.29 限制user_agent/11.30-31 P

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

第一條是 哪裡跳過來  第二條是直接訪問  第一個是白名單,第二個等自己直接打上去這個地址

結果測試

經過部落格網站進行訪問時,部落格網站域名沒有加入網站白名單,防盜鏈生效,訪問被拒絕

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才可以正常訪問。

結果測試

[[email protected] 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

[[email protected] 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(允許)

黑名單 黑名單就是全部都同意然後挑幾個拒絕,白名單就是全拒絕然後挑幾個同意

正確配置檔案

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

測試結果 

[[email protected] 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

[[email protected] 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"

</VirtualHost>

<VirtualHost *:80>

    DocumentRoot "/data/wwwroot/111.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>

    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>

擴充套件

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

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/wwwroottmp/"   新增這行根據目錄填寫 TMP是一定要的

11.30 PHP擴充套件模組

/usr/local/php/bin/php -m //檢視模組

下面安裝一個redis的模組

cd /usr/local/src/

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