nginx安全加固

1. 在Nginx中禁用server_tokens指令

該server_tokens指令告訴nginx的錯誤頁面顯示其當前版本。 這是不可取的,因爲您不想與世界共享這些信息,以防止在您的Web服務器由特定版本中的已知漏洞造成的攻擊。
要禁用server_tokens指令,設定在關閉服務器塊內:

server {
listen       192.168.0.88:80;
Server_tokens        off;
server_name  howtoinglovesnginx.com www.nginx.com;
access_log  /var/www/logs/nginx.access.log;
error_log  /var/www/logs/nginx.error.log error;
root   /var/www/nginx.com/public_html;
index  index.html index.htm;
}

2. 在Nginx中禁用不需要的HTTP方法

對於一般的網站和應用程序,你應該只允許GET,POST,和HEAD並禁用所有其他人。
爲此,將以下行代碼放在服務器塊中。 444 HTTP響應指空響應,並經常在Nginx的用來愚弄惡意軟件攻擊:

if ($request_method !~ ^(GET|HEAD|POST)$) {
return 444;
}

3. 在Nginx中設置緩衝區大小限制

爲了防止對您的Nginx Web服務器的緩衝區溢出攻擊,坐落在一個單獨的文件以下指令(創建的文件名爲/etc/nginx/conf.d/buffer.conf爲例):

client_body_buffer_size  1k;
client_header_buffer_size 1k;
client_max_body_size 1k;
large_client_header_buffers 2 1k;

上面的指令將確保對您的Web服務器的請求不會導致系統中的緩衝區溢出。
然後在配置文件中添加一個include指令:

include /etc/nginx/conf.d/*.conf;

4. 日誌設置

查看nginx.conf配置文件中,error_log、access_log前的“#”是否去掉
將error_log前的“#”去掉,記錄錯誤日誌 將access_log前的“#”去掉,記錄訪問日誌 設置access_log,修改配置文件如下:

log_format  nsfocus  '$remote_addr - $remote_user [$time_local] '
              ' "$request" $status $body_bytes_sent "$http_referer" '
              ' "$http_user_agent" "$http_x_forwarded_for"'; access_log  logs/access.log  nsfocus;

nsfocus是設置配置文件格式的名稱

5. 自定義錯誤信息

修改src/http/ngx_http_special_response.c,自己定製錯誤信息

## messages with just a carriage return.
static char ngx_http_error_400_page[] = CRLF;
static char ngx_http_error_404_page[] = CRLF;
static char ngx_http_error_413_page[] = CRLF;
static char ngx_http_error_502_page[] = CRLF;
static char ngx_http_error_504_page[] = CRLF;

常見錯誤:

400 bad request
404 NOT FOUND
413 Request Entity Too Large
502 Bad Gateway
504 Gateway Time-out

Nginx安全防護

1.高Nginx後端服務指定的Header隱藏狀態

隱藏Nginx後端服務X-Powered-By頭

隱藏Nginx後端服務指定Header的狀態: 
1、打開conf/nginx.conf配置文件; 
2、在http下配置proxy_hide_header項; 
     增加或修改爲 proxy_hide_header X-Powered-By; proxy_hide_header Server;

2.針對Nginx SSL協議進行安全加固

Nginx SSL協議的加密策略進行加固

Nginx SSL協議採用TLSv1.21、打開conf/nginx.cconf配置文件; 2、配置

server { 
               ...
              ssl_protocols TLSv1.2;
               ...
                     }

3.檢查是否配置Nginx賬號鎖定策略

1.執行系統命令passwd -S nginx來查看鎖定狀態
出現Password locked證明鎖定成功
如:nginx LK … (Password locked.)或nginx L …
2.默認符合,修改後纔有(默認已符合)
3.執行系統命令passwd -l nginx進行鎖定

配置Nginx賬號登錄鎖定策略:
Nginx服務建議使用非root用戶(如nginx,nobody)啓動,並且確保啓動用戶的狀態爲鎖定狀態。
可執行passwd -l <Nginx啓動用戶> 如passwd -l nginx 來鎖定Nginx服務的啓動用戶。
命令 passwd -S <用戶> 如passwd -S nginx可查看用戶狀態。 
修改配置文件中的nginx啓動用戶修改爲nginx或nobody 如: user nobody;

4.檢查Nginx進程啓動賬號

Nginx進程啓動賬號狀態,降低被攻擊概率

修改Nginx進程啓動賬號: 
1、打開conf/nginx.conf配置文件; 
2、查看配置文件的user配置項,確認是非root啓動的;
3、如果是root啓動,修改成nobody或者nginx賬號; 備註: 
4、修改完配置文件之後需要重新啓動Nginx。

5.Nginx的WEB訪問日誌記錄狀態

Nginx後端服務指定的Header隱藏狀態

開啓Nginx的WEB訪問日誌記錄: 
1、打開conf/nginx.conf配置文件; 
2、在http下配置access_log項
   access_log logs/host.access.log main; 
3、 並刪除off項

6.隱藏Nginx服務的Banner

Nginx服務的Banner隱藏狀態

Nginx後端服務指定的Header隱藏狀態隱藏Nginx服務Banner的狀態: 
1、打開conf/nginx.conf配置文件; 
2、在server欄目下,配置server_tokens項 server_tokens off;

7.確保NGINX配置文件權限爲644

把控配置文件權限以抵禦外來攻擊

修改Nginx配置文件權限: 
執行chmod 644 <conf_path>來限制Nginx配置文件的權限;(<conf_path>爲配置文件的路徑,
如默認/安裝目錄/conf/nginx.conf或者/etc/nginx/nginx.conf,或用戶自定義,請 自行查找)

8.nginstatus

Active connections    Nginx正處理的活動鏈接數個數;重要
accepts               Nginx啓動到現在共處理了多少個連接。
handled               Nginx啓動到現在共成功創建幾次握手。 
requests              Nginx總共處理了幾次請求。
Reading               Nginx讀取到客戶端的 Header 信息數。
Writing               Nginx返回給客戶端的 Header 信息數。
Waiting               Nginx已經處理完正在等候下一次請求指令的駐留鏈接,開啓。
Keep-alive的情況下,Waiting這個值等於active-(reading + writing)。
請求丟失數=(握手數-連接數)可以看出,本次狀態顯示沒有丟失請求。、

參考連接 :

nginx安全加固 :https://mp.weixin.qq.com/s/EUxa9ZSBCVTHgq3RATvoQg

Nginx安全防護 :https://www.jianshu.com/p/4e024c1f5591

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章