nginxのセキュリティ最適化

隠されたバージョン番号

HTTPは{ 
    オフserver_tokens。
}

セキュリティの抜け穴のためのnginxのバージョンがしばしばあり、隠されたnginxのバージョン番号はもちろん、最も重要なのは、バグ修正をアップグレードするための時間である、最適化されたセキュリティの主な手段の一つとなっています。

第二に、HTTPSをオンにします

サーバー{ 
    聞く443 ; 
    SERVER_NAMEオプス - coffee.cn。
    上のSSL; 
    ssl_certificateの/ etc / nginxの/ をserver.crt。
    ssl_certificate_keyの/ etc / nginxの/ server.keyの。
    ssl_protocols TLSv1のTLSv1の。1 TLSv1の。2 ; 
    ssl_ciphers HIGH:!aNULL :! MD5; 
}
  • SSL ON:オープンHTTPS。
  • ssl_certificate:パス構成nginxのSSL証明書
  • ssl_certificate_key:キーのnginxのSSL証明書の構成パス
  • ssl_protocols:接続時に互換性がありませんTSLv1は、直接削除することができますかどうかを指定し、クライアントのSSLプロトコルのバージョンを確立するためには、使用しました
  • ssl_ciphers:指定のクライアント接続で使用する暗号化アルゴリズム、そしてここで、あなたは、より高いセキュリティアルゴリズムを構成することができます。

第三には、ブラックリストを追加します

ホワイトリストの設定

位置/管理/ {
    192.168.1.0/24を可能にします。
    すべてを否定します。
}

トップは、ホストネットワークセグメント192.168.1.0/24へのアクセスを許可する他のすべてを拒否することを示しています

また、他のすべてをできるように、特定のアドレスへのアクセスを禁止するブラックリストを書き込むことができます

位置/ OPS-コーヒー/ { 
    拒否    192.1681.0 / 24 ; 
    すべて許可します; 
}

多くの場合の薬剤の層を介してクライアントの要求は、我々は$ HTTP_X_FORWARDED_FOR、書き込みによって制限する必要があります:

$許可設定はfalse もし($ HTTP_X_FORWARDED_FOR = " 211.144.204.2 "){セット$は許可}
 場合($ HTTP_X_FORWARDED_FOR〜" 108.2.66 [89]。" {設定$可能)}
 もし($は=許可 {リターン)404}

 

第四に、アカウント認証を追加

サーバ{ 
    位置 / { 
        AUTH_BASIC を入力してくださいユーザー&passwdの
        auth_basic_user_fileキー / auth.key。
    } 
}

 

アカウント認証「nginxの構成およびいくつかの一般的なヒント」の記事が詳細に記載されているについては、ここではそれらを繰り返しません

第五に、規制要求方法

もし(!$ REQUEST_METHOD〜^(GET | POST)$){ 
    リターン405 ; 
}

 

$ REQUEST_METHODは、nginxのリクエストの方法を得ることができます

設定は、専用アクセス、他のメソッドが返す405へ\ POSTメソッドをGETできます。

ユーザエージェントに拒否した第六に、

もし($ HTTP_USER_AGENT〜* LWP :: Simpleは| BBBike | wgetの | カール){ 
    リターン444 ; 
}

 

いくつかの不謹慎な人々は、当社のウェブサイトなどのwget /カールスキャンツールを使用するがあるかもしれません、我々は簡単に対応するユーザーエージェントを無効にすることによって阻止することができます

ウェブサイトのように接続できないように、クライアントがサーバから返された情報を受信しません444を返した場合444の状態nginxのは、かなり特殊です

七抗ホットリンクの写真

位置/画像/ { 
    valid_referersなしwww.ops遮らない -coffee.cn ops- coffee.cn。
    もし($ invalid_referer){ 
        返す   403 
    } 
}

valid_referers:確認いずれもブロックされたプロトコルを用いて、空のリファラ許可しない、請求リファラは、2つ以上の外部又はwww.ops-coffee.cnのみリファラops-coffee.cn許可されている場合を除き、画像にアクセス画像リソースに対する要求を許可しますそれ以外の場合は、403を返します。

もちろん、あなたもリクエストには、以下のように、このデフォルトのイメージへのリダイレクトリファラのルールに準拠していないことができます。

場所/画像/ { 

valid_referersブロックさwww.ops -coffee.cn ops- coffee.cn 

場合($ invalid_referer){ 

書き換え ^ /画像/.* \。(gif形式| JPG | JPEG | PNG)$ /static/qrcode.jpg 最後; 

  } 

}

 

八、同時接続の数を制御

あなたは1 IPモジュールngx_http_limit_conn_moduleを通じて同時接続数を制限することができます

HTTP { 
    limit_conn_zone $ binary_remote_addrゾーン = OPS:10メートル; 

    サーバー{ 
        聞く        80 
        SERVER_NAMEオプス - coffee.cn。

        ルート /ホーム/プロジェクト/ Webアプリケーション。
        インデックスindex.htmlを。

        位置 / { 
            limit_conn OPS 10 
        } 

        のaccess_log   / TMP / nginx_access.logメイン。
    } 
}

 

limit_conn_zone:サイズ:設定各キー(例えば、$ binary_remote_addrがある)パラメータ共有メモリ空間の状態、ゾーン=スペース名を保持

記録IPV6アドレスは16のバイトを固定しながら、記憶状態は、32ビットプラットフォームで32または64バイトを占有し、変数のサイズ、IPv4アドレスは4バイトの固定された記録の例えば$サイズbinary_remote_addr変数を計算する、64ビットプラットフォーム64バイトを占めます。1メートル共有メモリ空間は32,000状態32、16000本の64の状態について、保持することができます。

limit_connの指定された共有メモリ領域が既に設定されている接続の最大数(例えば、空間OPSの名前)、および与えられたキー値の各:

上記の例では、同じIPのみ10の接続を可能にする同一の時間を示しています。

limit_conn構成された命令が複数ある場合、接続の数が全て有効である制限します。

HTTP { 
    limit_conn_zone $ binary_remote_addrゾーン = OPS:10メートル; 
    limit_conn_zoneの$ SERVER_NAMEゾーン = コーヒー:10メートル; 
    サーバー{ 
        聞く        80 
        SERVER_NAMEオプス - coffee.cn。

        ルート /ホーム/プロジェクト/ Webアプリケーション。
        インデックスindex.htmlを。

        位置 / { 
            limit_conn OPS 10 
            コーヒーlimit_conn 2000 ; 
        } 
    } 
}

 

構成の上面に接続された接続の総数は、単一のIPソースが10で制限するだけでなく、単一の仮想サーバ2000を制限するだけでなく

ナインは、バッファオーバーフロー攻撃

バッファオーバーフロー攻撃を  効果的に防止することができるバッファへバッファメモリの境界を越えてデータの書き込みおよびフラグメントを書き換え、バッファのサイズを制限することによって達成されます。

client_body_buffer_size 1K; 
client_header_buffer_size 1K; 
client_max_body_size 1K; 
large_client_header_buffers 2 1K。
client_body_buffer_size:

 

デフォルト8Kまたは16Kは、ボディサイズのバッファ占有クライアントの要求を表します。接続要求バッファが指定した値を超えると、全体または要求側エンティティの試みの一部は、一時ファイルに書き込みます。

client_header_buffer_size:頭のクライアント要求バッファのサイズを表します。ほとんどの場合、リクエストヘッダが1Kよりも大きくないですが、あなたはそれが1Kよりも大きくすることができる大規模なクッキーのWAPクライアントから来ている場合は、nginxのは大きなバッファを割り当てますが、この値はlarge_client_header_buffers内で設定することができます

client_max_body_size:それは要求が所定値よりも大きい場合、クライアントは「要求エンティティが大きすぎます」(413受け取る、要求のContent-Lengthヘッダフィールドに表示されるように、身体のクライアント要求の最大許容サイズを表す。 ) 通常、エラーをサーバーにファイルをアップロードするときに制限されます

large_client_header_buffersは、  クライアントは、比較を送信する場合に使用されるバッファ要求ヘッダのいくつかの比較的大きな数とサイズ、オペレーティングシステムのページングファイルサイズのデフォルトのバッファサイズは、典型的には4Kまたは8K、要求フィールドは、バッファサイズよりも大きくない表します大型ヘッド、nginxの戻り「リクエストURIが大きすぎる」(414 )、 リクエストヘッダフィールドは、そうでなければサーバ戻る「不正要求」最長つのバッファよりも大きくない(400)

同時に、いくつかのタイムアウトの設定を変更する必要があります

client_body_timeout   10;
client_header_timeout 10;
keepalive_timeout     5 5;
send_timeout          10;
client_body_timeout:

 

表示读取请求body的超时时间,如果连接超过这个时间而客户端没有任何响应,Nginx将返回”Request time out” (408)错误

client_header_timeout: 表示读取客户端请求头的超时时间,如果连接超过这个时间而客户端没有任何响应,Nginx将返回”Request time out” (408)错误

keepalive_timeout: 参数的第一个值表示客户端与服务器长连接的超时时间,超过这个时间,服务器将关闭连接,可选的第二个参数参数表示Response头中Keep-Alive: timeout=time的time值,这个值可以使一些浏览器知道什么时候关闭连接,以便服务器不用重复关闭,如果不指定这个参数,nginx不会在应Response头中发送Keep-Alive信息

send_timeout: 表示发送给客户端应答后的超时时间,Timeout是指没有进入完整established状态,只完成了两次握手,如果超过这个时间客户端没有任何响应,nginx将关闭连接

十、Header头设置

通过以下设置可有效防止XSS攻击

add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";

 

X-Frame-Options: 响应头表示是否允许浏览器加载frame等属性,有三个配置DENY禁止任何网页被嵌入,SAMEORIGIN只允许本网站的嵌套,ALLOW-FROM允许指定地址的嵌套

X-XSS-Protection: 表示启用XSS过滤(禁用过滤为X-XSS-Protection: 0),mode=block表示若检查到XSS攻击则停止渲染页面

X-Content-Type-Options: 响应头用来指定浏览器对未指定或错误指定Content-Type资源真正类型的猜测行为,nosniff 表示不允许任何猜测

在通常的请求响应中,浏览器会根据Content-Type来分辨响应的类型,但当响应类型未指定或错误指定时,浏览会尝试启用MIME-sniffing来猜测资源的响应类型,这是非常危险的

例如一个.jpg的图片文件被恶意嵌入了可执行的js代码,在开启资源类型猜测的情况下,浏览器将执行嵌入的js代码,可能会有意想不到的后果

另外还有几个关于请求头的安全配置需要注意:

Content-Security-Policy: 定义页面可以加载哪些资源,

add_header Content-Security-Policy "default-src 'self'";

上边的配置会限制所有的外部资源,都只能从当前域名加载,其中default-src定义针对所有类型资源的默认加载策略,self允许来自相同来源的内容

Strict-Transport-Security: 会告诉浏览器用HTTPS协议代替HTTP来访问目标站点

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";

上面的配置表示当用户第一次访问后,会返回一个包含了Strict-Transport-Security响应头的字段,这个字段会告诉浏览器,在接下来的31536000秒内,当前网站的所有请求都使用https协议访问,参数includeSubDomains是可选的,表示所有子域名也将采用同样的规则

おすすめ

転載: www.cnblogs.com/FireLL/p/12082596.html
おすすめ