Nginx安全設定研究

WBOY
發布: 2016-08-08 09:22:52
原創
1044 人瀏覽過



0x00 測試環境

操作系统:CentOS6.5 
Web服务器:Nginx1.4.6 
Php版本:Php5.4.26
登入後複製

0x01 Nginx介紹

nginx本身不能處理PHP,它只是web伺服器,當接收到請求後,如果是php請求,則發給給php解釋器返回給客戶端。 nginx通常是把請求發fastcgi管理進程處理,fastcgi管理程序選擇cgi子程序處理結果並回傳被nginx。

nginx涉及到兩個帳戶,一個是nginx的運行帳戶,一個是php-fpm的運行帳戶。如果存取的是靜態文件,則只需要nginx的運行帳戶對文件具有讀取權限;而如果訪問的是一個php文件,則首先需要nginx的運行帳戶對文件有讀取權限,讀取到文件後發現是一個php文件,則轉發給php-fpm,此時則需要php-fpm帳號對文件具有讀取權限。 erre

1. linux下,要读取一个文件,首先需要具有对文件所在文件夹的执行权限,然后需要对文件的读取权限。
2. php文件的执行不需要文件的执行权限,只需要nginx和php-fpm运行账户的读取权限。
3. 上传木马后,能不能列出一个文件夹的内容,跟php-fpm的运行账户对文件夹的读取权限有关。
4. 木马执行命令的权限跟php-fpm的账户权限有关。
5. 如果木马要执行命令,需要php-fpm的账户对相应的sh有执行权限。
6. 要读取一个文件夹内的文件,是不需要对文件夹有读取权限的,只需要对文件夹有执行权限。
登入後複製
1. Nginx.conf的配置
2. php-fpm.conf的配置
3. nginx和php-fpm的运行账户对磁盘的权限配置
4. Php.ini的配置
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
0x04 常见需要配置的操作方法
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
1. 禁止一个目录的访问
登入後複製
rre
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
示例:禁止访问path目录
登入後複製
location ^~ /path {
deny all;
}
登入後複製
可以把path换成实际需要的目录,目录path后是否带有"/",带"/"只禁止访问目录,不带"/"禁止访问目录中的文件;注意要放在fastcgi配置之前。
登入後複製
2. 禁止php文件的访问及执行
登入後複製
示例:去掉单个目录的PHP执行权限
登入後複製
location ~ /attachments/.*\.(php|php5)?$ {
deny all;
}
登入後複製
示例:去掉多个目录的PHP执行权限
登入後複製
location ~
/(attachments|upload)/.*\.(php|php5)?$ {
deny all;
}
登入後複製
3. 禁止IP的访问
登入後複製
示例:禁止IP段的写法:
登入後複製
rr e
deny 10.0.0.0/24;
登入後複製
示例:只允许某个IP或某个IP段用户访问,其它的用户全都禁止
登入後複製
allow  
x.x.x.x;  
allow 10.0.0.0/24;  
deny all;
登入後複製
0x05 需要解决的常见问题
登入後複製
1. 让木马上传后不能执行
登入後複製
针对上传目录,在nginx配置文件中加入配置,使此目录无法解析php。
登入後複製
2. 让木马执行后看不到非网站目录文件
登入後複製
rr e
取消php-fpm运行账户对于其他目录的读取权限。
登入後複製
3. 木马执行后命令不能执行
登入後複製
取消php-fpm账户对于sh的执行权限。
登入後複製
4. 命令执行后权限不能过高
登入後複製
Php-fpm账户不要用root或者加入root组。
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
0x06 Nginx安全配置方案
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
1. 修改网站目录所有者为非php-fpm运行账户,此处修改所有者为root。
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
命令:
登入後複製
登入後複製
chown -R root:root html/ 
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
<img  src="http://image.codes51.com/Article/image/20150610/20150610084337_2340.png" border="0" alt="Nginx安全設定研究" >
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
2. 修改nginx及php-fpm的运行账户及组为nobody
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
nginx.conf
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
<img  src="http://image.codes51.com/Article/image/20150610/20150610084337_4840.png" border="0" alt="Nginx安全設定研究" >
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
Php-fpm.conf
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
<img  src="http://image.codes51.com/Article/image/20150610/20150610084337_7965.png" border="0" alt="Nginx安全設定研究" >
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
3. 取消nobody对所有目录的的读取权限,然后添加对网站目录的读取权限
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
命令:
登入後複製
登入後複製
chmod o-r –R / 
chmod o+r –R html/
登入後複製
一、白名單

首先這兩個模組是支持白名單,就是支持白名單可能有某些IP位址,我們是不需要進行限制的,例如可能會是搜尋引擎啦什麼的或是自己的IP,因此需要設定一個白名單,不需要的可跳過本步。具體方法:

在HTTP段中插入如下格式內容,聲明白名單IP

登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
geo指令定義了一個白名單$limited變量,預設值為1,如果客戶端IP在上面的範圍內,$limited的值為0。

接著緊接在上面內容後使用map指令映射搜尋引擎客戶端的ip為空串,如果不是白名單IP就顯示本身真實的IP,這樣搜尋引擎iIP就不能存到limit模組的記憶體session中,所以不會限制白名單的IP存取。

4. 取消nobody对于/bin/sh 的执行权限
登入後複製
二、訪問頻率限制

訪問頻率限制使用到的是ngx_http_limit_req_module,需要在兩個地方配置,首先在HTTP段中,聲明好這個模組一些參數,如果有設定白名單,設定如下

chmod 776 /bin/sh
登入後複製
如果沒有設定白名單,所有來訪IP都會限制,設定如下

登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
解釋一下上面的參數,第一個代表的是需要限制的ip群,這個很好理解,第二個z/s這樣。

最後是配置到Nginx的php的解析段

5. 确认网站目录对于nobody的权限为可读可执行,对网站文件的权限为可读
登入後複製
指定了使用名字為one的zone,然後緩衝隊列為5,無延遲,如果不設定無延遲,存取會卡住。

三、存取連線限制

存取連線限制使用到的是ngx_http_limit_conn_module,也是需要在兩個地方配置,首先在HTTP段中,聲明好這個模組一些參數,如果有設定白名單,設定如下

登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
如果沒有設定白名單,所有來訪IP都會限制,設定如下

6. 对于上传目录或者写入写文件的目录添加nobody的写入权限
登入後複製
參數的意思跟上面的差不多也就不多解釋了。

後面的就是在server段中進行設定了,可以具體到某個目錄什麼的了

登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
大功告成,打完收工,記得要nginx -s reload一下哦~

7. 配置nginx.conf 对于上传目录无php的执行权限
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
8. 配置nginx.conf禁止访问的文件夹,如后台,或者限制访问ip
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製

ﻟ

以上就介紹了Nginx安全配置研究,包括了方面的內容,希望對PHP教程有興趣的朋友有幫助。

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!