1、執行安全
嚴禁使用root賬戶執行nginx(首字母大寫代表軟體,首字母小寫代表指令),應該使用nginx使用者或者nobody執行nginx。在nginx配置中使用user來指定nginx worker程序執行使用者以及使用者組。
2、專案配置檔案配置檔案禁止放在web目錄中,因為一旦攻擊者對web目錄擁有讀寫許可權後即可更改nginx.conf。
client_boby_temp_path /etc/shadow;# optional but more fun :)location /wat
當重啟nginx時,nginx會執行。
# strace -e trace=chmod,chown -f nginxchown("/etc/shadow",33,4294967295)=0+++exited with 0 +++
任何檔案或資料夾一旦被攻擊者寫入到上述配置檔案中,它的所有者都會被更改,攻擊者將擁有相應的許可權。
3、日誌配置
access_log logs/access.log combined;error_log logs/error.logerror;
使用log_format配置命令來配置nginx日誌格式。log_format有乙個預設的無須設定的combined日誌格式,相當於apache的combined日誌格式。
log_format combined '$remote_addr - $remote_user [$time_local] ''"$request" $status $body_bytes_sent '' "$http_referer" "$http_user_agent" ';
nginx日誌格式允許包含的變數注釋如表1所列。
表1 nginx日誌變數含義
4、目錄和檔案安全
凡允許「上傳或寫入」目錄的許可權,執行許可權必須設定成禁止訪問。在nginx中使用deny all指令來實現。
禁止對目錄訪問並返回403 forbidden,可以使用下面的配置。
5、隱藏版本號為了防止nginx的版本號指紋暴露,線上伺服器要對nginx的資訊進行隱藏,通常可以通過修改配置檔案來實現。進入nginx配置檔案的目錄,如/etc/nginx.conf,在http標籤裡加上server_tokens off。
http
staticchar ngx_http_server_string="server:nginx" crlf;staticchar ngx_http_server_full_string="server: " nginx_ver crlf;
還要修改src/core/nginx.**件中nginx_version和nginx_ver的值。
# define nginx_version "1.7.0"# define nginx_ver "nginx/" nginx_version
編輯php-fpm配置檔案中的配置,如fastcgi.conf或fcgi.conf,修改其中的版本號資訊。
fastcgi_param server_software nginx/$nginx_version;
可以通過以上方式將伺服器資訊修改為其他字串標識,以達到隱藏版本號、迷惑部分攻擊者的效果。
6、防止目錄遍歷
nginx預設是不允許列出整個目錄的,預設情況下不需要配置,配置不規範可造成目錄遍歷漏洞。如果有開啟情況應該將其禁用,修改為off或者直接將其刪除即可。
location /
7、nginx檔案型別錯誤解析漏洞該漏洞導致只要使用者擁有上傳許可權的nginx+php伺服器,就有被入侵的可能。其實此漏洞並不是nginx的漏洞,而是php path_info的漏洞。例如,使用者上傳了一張**,訪問位址為而test.jpg檔案內的內容實際上是php**時,通過下面的修復方法務必先經過測試,以確保修改配置不會對應用帶來影響。
(1)修改php.ini,設定cgi.fix_pathinfo=0,然後重啟php-cgi。此修改會影響到使用path_info偽靜態的應用。
(2)在nginx的配置檔案中新增如下內容,該配置會影響類似為目錄)的訪問。
if($fastcgi_script_name~..*/.*php)
(3)在cgi模組中對php的檔案是否存在進行校驗,可以避免該漏洞的發生。
location ~ .php$ if(!-e $php_url.php) fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;fastcgi_param script_filename $document_root $fastcgi_script_name;include fastcgi_params;}
(4)對於儲存的location,應只允許純靜態訪問,不允許php指令碼執行。
location ~ *^/upload/.*.(php|php 5)$
8、ip訪問限制nginx與apache一樣,也可以通過ip對訪問者進行限制。
deny 10.10.1.0/24; # 禁止該ip段進行訪問
allow 127.0.0.1; # 允許該ip進行訪問
deny all; # 禁止所有ip進行訪問
同時,可以使用geo白名單方式來進行ip訪問限制,具體配置如下。配置ip.config檔案。
default 0; //預設情況key=default,value=1127.0.0.1 1;10.0.0.0/8 1;//key=10.0.0.0, value=0 192.168.1.0/24 1;配置nginx.conf檔案。geo $remote_addr #ip_whitelist location /console return 403;}
NGINX隱藏版本
1 背景 軟體的漏洞都和版本有關,當黑客知道版本號後,可以針對漏洞進行攻擊,所以隱藏版本號是保證web服務安全的手段之一 2 隱藏版本號方法 1 通過修改nginx.conf檔案,在http標籤加上如下字段 server tokens off 作用 這個引數作用是控制http response he...
nginx 隱藏nginx版本號
為什麼要隱藏 nginx 版本號 一般來說,軟體的漏洞都與版本有關,隱藏版本號是為了防止惡意使用者利用軟體漏洞進行攻擊 server tokens off 隱藏版本號 server listen 80 server name www.abc.com location root html www in...
nginx 優化 Nginx 站點目錄
禁止解析指定目錄下的指定程式 location data php php5 sh pl py 根據實際來禁止哪些目錄下的程式,且該配置必須寫在 nginx 解析 php 的配置前面 deny all 禁止訪問指定目錄 location data php php5 sh pl py 根據實際來禁止哪些...