【ミドルウェア補強】——2、Nginx安全補強規範


1.適用状況
Nginxを使用して導入するWebサイトに適しています.
2.スキル要件
Nginxの構成に精通しており、Nginxを導入し、サイトに対してNginxを使用してセキュリティを強化することができます.
3.前置条件
1、サイトオープンポート、プロセスIDによって、サイトがNginxで配置することを確認する;
2、Nginxインストールディレクトリを見つけて、具体的なサイトに対してプロファイルを修正する.
3、実行中に何か疑問や提案があれば、速やかにフィードバックしなければならない.
4.詳細な操作
4.1ログ構成
1.nginx.confプロファイルをバックアップする.
構成を変更し、以下のようにログ記録ファイル、記録内容、記録フォーマットを設定し、mainというラベルのlog_を追加します.formatフォーマット 
(http   ,    server       ):
log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
   '$status $body_bytes_sent "$http_referer" '
   '"$http_user_agent" "$http_x_forwarded_for"';

2、serverラベル内で、ログパスを定義する
access_log logs/host.access.log main

3、保存してからnginxサービスを再起動します.
4.2ディレクトリ閲覧禁止
nginx.confプロファイルをバックアップします.
プロファイルを編集し、HTTPモジュールに次の行を追加します.
autoindex off;

保存してからnginxサービスを再起動します.
4.3ディレクトリ実行権限の制限
nginx.confプロファイルをバックアップします.
プロファイルを編集し、serverラベルに次の内容を追加します.
#  :       PHP    
location ~ /attachments/.*\.(php|php5)?$ {
deny all;
}
 
#  :       PHP    
location ~
/(attachments|upload)/.*\.(php|php5)?$ {
deny all;
}

保存してからnginxサービスを再起動します.
次の点に注意してください.
1、以上のプロファイルコードはlocation~.php{...}の上に置く必要があります.下に置くと無効です.
2、attachmentsは相対パスを書く必要があり、絶対パスを書くことはできません.
4.4エラーページリダイレクト
nginx.confプロファイルをバックアップします.
構成を変更し、http{}セグメントに次の内容を追加します. 
http {
...
fastcgi_intercept_errors on;
error_page 401 /401.html;
error_page 402 /402.html;
error_page 403 /403.html;
error_page 404 /404.html;
error_page 405 /405.html;
error_page 500 /500.html;
...
}
    :
ErrorDocument 400 /custom400.html
ErrorDocument 401 /custom401.html
ErrorDocument 403 /custom403.html
ErrorDocument 404 /custom404.html
ErrorDocument 405 /custom405.html
ErrorDocument 500 /custom500.html
  401.html、402.html、403.html、404.html、405.html、500.html            。

保存、nginxサービスの再起動が有効
4.5ベストプラクティス
4.5.1バージョン情報の非表示
nginx.confプロファイルをバックアップします.
プロファイルを編集し、httpモジュールの次の行を追加します.
server_tokens off;

保存してからnginxサービスを再起動します.
4.5.2 HTTPリクエストの制限方法
nginx.confプロファイルをバックアップします.
プロファイルを編集し、次の内容を追加します.

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

保存してからnginxサービスを再起動します.
備考:よく使うGETとPOSTの方法だけを許可して、せいぜい1つのHEADの方法をプラスします
4.5.3 IPアクセス制限
nginx.confプロファイルをバックアップします.
プロファイルを編集し、serverラベルに次の内容を追加します.
location / {
deny 192.168.1.1; #  IP
allow 192.168.1.0/24; #  IP
allow 10.1.1.0/16; #  IP
deny all; #      IP
}

保存してからnginxサービスを再起動します.
4.5.4同時および速度の制限
nginx.confプロファイルをバックアップします.
プロファイルを編集し、serverラベルに次の内容を追加します.
limit_zone one $binary_remote_addr 10m;
server
{
     listen   80;
     server_name down.test.com;
     index index.html index.htm index.php;
     root  /usr/local/www;
     #Zone limit;
     location / {
         limit_conn one 1;
         limit_rate 20k;
     }
………
}

保存してからnginxサービスを再起動します.
4.5.5制御タイムアウト時間
nginx.confプロファイルをバックアップします.
次のように設定されたプロファイルを編集します.
client_body_timeout 10;  #               
client_header_timeout 10;  #              
keepalive_timeout 5 5;  #                     ,         ,                
send_timeout10;  #            

保存してからnginxサービスを再起動します.
4.6リスク操作項目
4.6.1 Nginx降格
nginx.confプロファイルをバックアップします.
プロファイルを編集し、次の行を追加します.
 user nobody;

保存してからnginxサービスを再起動します.
4.6.2盗難防止チェーン
nginx.confプロファイルをバックアップします.
プロファイルを編集し、serverラベルに次の内容を追加します.
location ~* ^.+\.(gif|jpg|png|swf|flv|rar|zip)$ {
    valid_referers none blocked server_names *.nsfocus.com http://localhost baidu.com;
    if ($invalid_referer) {
        rewrite ^/ [img]http://www.XXX.com/images/default/logo.gif[/img];
        # return 403;
    }
}

保存してからnginxサービスを再起動します.
4.6.3パッチ更新
1、ソフトウェア情報
       nginx -v 
       nginx –t

2、パッチのインストール
パッチの手動インストールまたは最新バージョンのソフトウェアのインストール
 
変換元:https://blog.csdn.net/qq_23936389/article/details/85013923