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.2: 1、打開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