1. 程式人生 > >LAMP環境-限定PHP解析、useragent、PHP相關配置、Apache相關配置

LAMP環境-限定PHP解析、useragent、PHP相關配置、Apache相關配置

LAMP環境-限定PHP解析、usera

11.28 限定某個目錄禁止php解析

本節內容應用於對靜態文件目錄或可寫的目錄進行優化設置,通過限制解析/訪問權限來避免別惡意攻擊,提高安全性。

編輯虛擬主機配置文件:

[root@centos-01inux 111.com]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<Directory /data/wwwroot/111.com/upload>
php_admin_flag engine off
</Directory>
創建相應的目錄:

[root@centos-01inux 111.com]# mkdir upload
……
[root@centos-01inux 111.com]# ls upload/

123.php abc.jpg baidu.png
測試:

[root@centos-01inux 111.com]# curl -x192.168.8.131:80 ‘http://111.com/upload/123.php‘
<?php
echo "welcom to 123file";
?>

[root@centos-01inux 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@centos-01inux 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@centos-01inux 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@centos-01inux 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,即無法訪問!

11.29 限制user_agent

user_agent(用戶代理):是指瀏覽器(搜索引擎)的信息包括硬件平臺、系統軟件、應用軟件和用戶個人偏好。

需求背景:
有時候網站受到CC攻擊,其原理是:攻擊者借助代理服務器(肉機)生成指向受害主機的合法請求,實現DDOS和偽裝。CC攻擊的一個特點就是其useragent是一致的,所以,可以通過限制攻擊者useragent的方法來阻斷其攻擊。

編輯虛擬主機配置文件:

[root@centos-01inux 111.com]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
……
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} .curl. [NC,OR]
RewriteCond %{HTTP_USER_AGENT} .baidu.com. [NC]
RewriteRule .* - [F]
</IfModule>
……
說明: NC表示忽略大小寫,OR選項表示或者(不加任何選項表並且)連接下一個條件,F=forbidden禁止。

檢測:

[root@centos-01inux 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@centos-01inux 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@centos-01inux 111.com]# curl -A "aminglinux aminglinux" -x192.168.8.131:80 ‘http://111.com/123.php‘
welcom to 123file
說明: curl -A 指定useragent。

11.30 PHP相關配置

查看PHP配置文件:

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

設定時區
date.timezone
一些功能選項:
“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 ”
以上功能選項可以通過“disable_function”來限制,以達到提高網站安全性的目的:

disable_function=
日誌相關
display_errors=On/Off :設定是否顯示錯誤原因,需要註意的是,此處設置為off(防止用戶看到)後必須設置錯誤日誌,設定保存路徑,和錯誤日誌級別,否則將無法查找錯誤原因 。

log_errors=On/Off 開啟/關閉錯誤日誌

“error_log=/tmp/” 設定錯誤日誌的保存路徑。如果定義好路徑後無法生產日誌,此時需要檢查日誌文件所在目錄是否有寫(w)權限

“errorreporting =” 設定錯誤日誌級別,級別有:E ALL 、~E NOTICE 、~E STRICT 、~EDEPRECATED(可以自由組合)。生產環境使用:E ALL & ~E_ NOTICE就可以。

官方說明:

E_ALL (Show all errors, warnings and notices including coding standards.)
E_ALL & ~E_NOTICE (Show all errors, except for notices)
E_ALL & ~E_NOTICE & ~E_STRICT (Show all errors, except for notices and coding standards warnings.)
E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR (Show only errors)
安全參數“open_basedir”
open_basedir, if set, limits all file operations to the defined directory
; and below. This directive makes most sense if used in a per-directory
; or per-virtualhost web server configuration file.
譯:如果設置了open_basedir選項,將會把所有關於文件的操作限制在指定目錄及其子目錄。
將該指令設定在每個目錄或者虛擬主機web服務器配置文件中非常重要。
說明: php.ini文件中的內容是針對所有虛擬主機進行的配置。

問題: 一臺服務器運行著不止一臺虛擬主機,所以在該文件下設置該選項並不合適。那麽,該如何設定該配置呢?

辦法: 分別在每個虛擬主機的配置文件進行相關設置。

[root@centos-01inux 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/”目錄是為了使臨時文件能正常寫入。

擴展:

apache開啟壓縮功能

這裏的壓縮並不是對網站的圖片壓縮,而是對普通的靜態文件,諸如html, js, css 等元素壓縮,通過壓縮節省帶寬資源。

配置

檢查本地Apache是否支持壓縮功能
/usr/local/apache2/bin/apachectl -l
在此查看是否有“mod_deflate”模塊,如果沒有,繼續查看:

ls /usr/local/apache2/modules/
在此查看有沒有“mod_deflate.so”這個文件,如果這裏也沒有,那說明你的apache不支持壓縮,需要重編譯一下,或者擴展形式安裝,或者重新編譯apache, 需要在編譯的時候,加上“--enable-deflate=shared”。
添加完成deflate這個模塊後開始進行配置:

編輯Apache配置文件httpd.conf:

LoadModule deflate_module modules/mod_deflate.so

DeflateCompressionLevel 5
AddOutputFilterByType DEFLATE text/html text/plain text/xml
AddOutputFilter DEFLATE js css
其中DeflateCompressionLevel 是指壓縮程度的等級,從1到9,9是最高等級。

apache2.2到2.4後配置文件變更

訪問控制
Apache2.2 configuration:

Order deny,allow
Deny from all
Apache2.4 configuration:

Require all denied
常用配置有:

Require all denied
Require all granted
Require host xxx.com
Require ip 192.168.1 192.168.2
Require local
設定log記錄方式改變
RewriteLogLevel 指令改為 logLevel。
eg:

LogLevel warn rewrite: warn
NameVirtualhost被移除

模塊組:

網站壓縮,除了使用mod_ deflate,Apache2.4中還要modfilter。
使用ssl憑證,除了使用mod
ssl,Apache2.4中還需要mod_socache _shmcb
Apache 參數(options)

指令控制了在特定目錄中將使用哪些服務器特性。Options屬性有一個非常特別的功能: 如果你沒有用“+”或者“-”來增加或者減少一個功能的時候,每個之前定義的Options的所有功能都會被取消, 直到你又為它指定一些功能。所以options屬性在整體設置和虛擬主機設置的是不相關的, 互相不起作用,因為他們在特定的範圍內被重載了。 如果要在虛擬主機裏面使用在整體設置中的Options的設置, 那麽就不要在虛擬主機設置中指定Options屬性。如果要增加或者減少功能, 那麽用“+”或者“-”符號來實現。Options 指令控制了在特定目錄中將使用哪些服務器特性。 可選項能設置為 None ,在這種情況下,將不啟用任何額外特性。或設置為以下選項中的一個或多個:

All:
除MultiViews之外的所有特性,這是默認設置。
ExecCGI:允許執行CGI腳本
FollowSymLinks:
服務器會在此目錄中使用符號連接。
註意: 即便服務器會使用符號連接,但它不會改變用於匹配配置段的路徑名。 如果此配置位於配置段中,則此設置會被忽略。
Includes :允許服務器端包含。
IncludesNOEXEC:
允許服務器端包含,但禁用#exec命令和#exec CGI(通用網關接口,是用於初始化軟件服務的服務器方接口。)。但仍可以從ScriptAliase目錄使用#include 虛擬CGI腳本。
CGI(Common Gateway Interface)通用網關接口,它是一段程序,運行在服務器上,提供同客戶端HTML頁面的接口,通俗的講CGI就像是一座橋,把網頁和WEB服務器中的執行程序連接起來,它把HTML接收的指令傳遞給服務器,再把服務器執行的結果返還給HTML頁;用CGI可以實現處理表格,數據庫查詢,發送電子郵件等許多操作,最常見的CGI程序就是計數器。CGI使網頁變得不是靜態的,而是交互式的。

Indexes:
如果一個映射到目錄的URL被請求,而此目錄中又沒有DirectoryIndex(例如:index.html),那麽服務器會返回一個格式化後的目錄列表。

MultiViews: 允許內容協商的多重視圖。

SymLinksIfOwnerMatch:
服務器僅在符號連接與其目的目錄或文件擁有者具有同樣的用戶id時才使用它。
註意: 如果此配置出現在配置段中,此選項將被忽略。一般來說,如果一個目錄被多次設置了Options,則最特殊的一個會被完全接受,而各個可選項的設定彼此並不融合。然而,如果所有施用於Options指令的可選項前都加有+或-符號,此可選項將被合並。所有前面加有+號的可選項將強制覆蓋當前可選項設置,而所有前面有-號的可選項將強制從當前可選項設置中去除。

eg: 如果沒有任何+和-符號:

Options Indexes FollowSymLinks

Options Includes
則只有Includes設置到/web/docs/spec目錄上。然而如果第二個Options指令使用了+和-符號:

Options Indexes FollowSymLinks

Options +Includes -Indexes
那麽就會有FollowSymLinks和Includes設置到/web/docs/spec目錄上。

apache禁止trace或track防止xss攻擊

TRACE和TRACK是用來調試web服務器連接的HTTP方式。支持該方式的服務器存在跨站腳本漏洞,通常在描述各種瀏覽器缺陷的時候,把"Cross-Site-Tracing"簡稱為XST。 攻擊者可以利用此漏洞欺騙合法用戶並得到他們的私人信息。

禁用trace:使用rewrite功能

RewriteEngine On
RewriteCondi %{REQUEST_METHOD} ^TRACE
RewriteRule .* - [F]
或者還可以直接在apache的配置文件中配置相應參數

TraceEnable off
apache配置https支持ssl

??SSL(Secure Sockets Layer 安全套接層)協議,及其繼任者TLS(Transport Layer Security傳輸層安全)協議,是為網絡通信提供安全及數據完整性的一種安全協議。TLS與SSL在傳輸層對網絡連接進行加密,用於保障網絡數據傳輸安全,利用數據加密技術,確保數據在網絡傳輸過程中不會被截取及竊聽。SSL協議已成為全球化標準,所有主要的瀏覽器和WEB服務器程序都支持SSL協議,可通過安裝SSL證書激活SSL協議。
??SSL證書就是遵守SSL協議的服務器數字證書,由受信任的證書頒發機構(CA機構),驗證服務器身份後頒發,部署在服務器上,具有網站身份驗證和加密傳輸雙重功能。

安裝openssl
apache2.0 建議安裝0.9版本,我曾經試過2.0.59 對openssl-1.0編譯不過去。下載Openssl:http://www.openssl.org/source/
tar -zxf openssl-0.9.8k.tar.gz
#解壓安裝包
cd openssl-0.9.8k
#進入已經解壓的安裝包
./configure
#配置安裝。推薦使用默認配置
make && make install
#編譯及安裝
openssl默認將被安裝到/usr/local/ssl。

讓apache支持ssl
編譯的時候,要指定ssl支持。
靜態
--enable-ssl=static --with-ssl=/usr/local/ssl
動態
--enable-ssl=shared --with-ssl=/usr/local/ssl
其中第二種方法會在module/ 目錄下生成 mod_ssl.so 模塊,而靜態不會有,當然第二種方法也需要在httpd.conf 中加入:

LoadModule ssl_module modules/mod_ssl.so
生成證書
創建私鑰
在創建證書請求之前,您需要首先生成服務器證書私鑰文件。
cd /usr/local/ssl/bin
#進入openssl安裝目錄
openssl genrsa -out server.key 2048
#運行openssl命令,生成2048位長的私鑰server.key文件。
#如果您需要對server.key添加保護密碼,請使用 -des3擴展命令。Windows環境下不支持加密格式私鑰,Linux環境下使用加密格式私鑰時,每次重啟Apache都需要您輸入該私鑰密碼。
#(例:openssl genrsa -des3 -out server.key 2048)

cp server.key /usr/local/apache/conf/ssl.key/
生成證書請求(CSR)文件
openssl req -new -key server.key -out certreq.csr
Country Name: //您所在國家的ISO標準代號,中國為CN
State or Province Name: //您單位所在地省/自治區/直轄市
Locality Name: //您單位所在地的市/縣/區
Organization Name: //您單位/機構/企業合法的名稱
Organizational Unit Name: //部門名稱
Common Name: //通用名,例如:www.itrus.com.cn。此項必須與您訪問提供SSL服務的服務器時所應用的域名完全匹配。
Email Address: //您的郵件地址,不必輸入,直接回車跳過
"extra"attributes //以下信息不必輸入,回車跳過直到命令執行完畢。
備份私鑰並提交證書請求
請將證書請求文件certreq.csr提交給天威誠信,並備份保存證書私鑰文件server.key,等待證書的簽發。服務器證書密鑰對必須配對使用,私鑰文件丟失將導致證書不可用。
安裝證書
獲取服務器證書中級CA證書
為保障服務器證書在客戶端的兼容性,服務器證書需要安裝兩張中級CA證書(不同品牌證書,可能只有一張中級證書),從郵件中獲取中級CA證書:

將證書簽發郵件中的從BEGIN到 END結束的兩張中級CA證書內容(包括“-----BEGIN CERTIFICATE-----”和“-----END CERTIFICATE-----”)粘貼到同一個記事本等文本編輯器中,中間用回車換行分隔。修改文件擴展名,保存為conf/ssl.crt/intermediatebundle.crt文件(如果只有一張中級證書,則只需要保存並安裝一張中級證書)。

獲取EV服務器證書
將證書簽發郵件中的從BEGIN到 END結束的服務器證書內容(包括“-----BEGIN CERTIFICATE-----”和“-----END CERTIFICATE-----”) 粘貼到記事本等文本編輯器中,保存為ssl.crt/server.crt文件。

配置Apache2.0

編輯配置文件httpd.conf,添加如下內容:

Listen 443
NameVirtualHost *:443

DocumentRoot "/data/web/www"
ServerName aaa.com:443
ErrorLog "logs/error.log"
CustomLog "logs/access.log" combined

    SSLEngine on
    SSLCertificateFile /usr/local/apache/conf/ssl.crt/server.crt
    SSLCertificateKeyFile /usr/local/apache/conf/ssl.key/server.key
    SSLCertificateChainFile /usr/local/apache/conf/ssl.crt/intermediatebundle.crt

LAMP環境-限定PHP解析、useragent、PHP相關配置、Apache相關配置