
証明書に LetsEncrypt を使用して、ポート 3000 で実行される Node/Express HTTPS / SSL サーバーをセットアップしました。 動作し、 経由でアクセスできますwww.example.com:3000
。 しかし、 から直接アクセスできるようにしたいのですwww.example.com
。
独自の nginx 構成を作成し、を実行することで、これを動作させることができました (以下のコードを参照) sudo systemctl restart nginx
。
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _; // *
location / {
allow all; // *
}
}
server {
server_name www.example.com;
listen [::]:443 ssl;
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/www.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
location / {
proxy_pass https://127.0.0.1:3000;
allow all; // *
}
}
証明書を設定するときに、Certbot の自動生成サーバーから 2 番目のサーバーを適応させました。
私は nginx 設定ファイルの初心者です。私の実装の安全性についてアドバイスをいただけませんか? 何か見落としている点はありますか? 特に追加した行について疑問に思っています// *
。よろしくお願いします。
答え1
の最新バージョンを使用していることを確認してください
nginx
。有効にしたSSL暗号を確認してください
nginx
- ダウングレード攻撃を回避するには、古いバージョンを無効にする必要があります。本当にプレーンテキスト ポート 80 と 443 の両方でアクセスできるようにする必要がありますか? 暗号化されていない HTTP を特に必要としない場合は、最初のブロックを完全に削除し、2 番目のブロックを にします
default server
。よく知られているパブリック HTTP/HTTPS ポート上のものはすべて、最近の CVE 脆弱性を探すために多くの国から定期的にボット スキャンを受けます。
アプリケーションを URL のルートでホストするのではなく、パスへのリバース プロキシと、
https://yourdomain.example.com/codeword
"codeword
" が一意であり、一般的なまたは特定のコンピューター/インターネット アプリケーションや管理概念に少しでも関連するものと接続されていないような場所にホストすることを検討する必要があります。たとえば、https://yourdomain.example.com/admin
またははhttps://yourdomain.example.com/app
スキャンを受ける可能性は高いですが、https://yourdomain.example.com/kittens
おそらく受けないでしょう。について学ぶことを検討してみてはいかがでしょうか
ngx_http_geoip_module
。予想される国のみを許可する。HTTP 基本認証また、nginx に基本認証のユーザー名とパスワードを伝えることなく、誰かがサーバー上で Web アプリケーション コードを実行するのをブロックするためにも使用できます。