HTTPセキュリティ設定
(前提条件)
・ Rapid7などからの(誤)警告対策のため
・ バージョン情報の隠蔽を行う。
・ XST(Cross Site Tracing)対策
・ OPTIONメソッドの無効化
1 2 3 4 5 6 7 8 9 10 11 |
# バージョン情報の隠蔽 ServerSignature off ServerTokens ProductOnly # XST 対策 TraceEnable Off # OPTIONメソッドの無効化 RewriteEngine On RewriteCond %{REQUEST_METHOD} ^OPTIONS RewriteRule .* - [F] |
管理コマンド
1 2 |
systemctl enable httpd systemctl restart httpd |
HTTPSセキュリティ設定
適切な証明書(Let’s Encryptまたは有償の証明書)のファイルの設置および設定が完了している前提で追加のセキュリティ対策を行います。(Qualysの SSL Server TestでA+評価を取得するため)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# OCSP stapling の有効化 SSLStaplingCache "shmcb:/var/run/httpd/stapling_cache(32768)" <VirtualHost _default_:443> # OCSP stapling の有効化 SSLUseStapling on SSLStaplingResponderTimeout 2 SSLStaplingReturnResponderErrors off SSLStaplingFakeTryLater off SSLStaplingStandardCacheTimeout 86400 # HSTSの有効化 Header add Strict-Transport-Security "max-age=31536000" # 高セキュリティ型 SSLProxyProtocol -all +TLSv1.2 +TLSv1.3 #SSLCipherSuite PROFILE=SYSTEM SSLCipherSuite ECDHE+AESGCM:DHE+aRSA+AESGCM:ECDHE+AESCCM:DHE+aRSA+AESCCM:ECDHE+CHACHA20:DHE+aRSA+CHACHA20:+AES128:+DHE SSLCipherSuite TLSv1.3 TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:TLS_AES_128_CCM_SHA256:TLS_AES_128_CCM_8_SHA256 # openssl dhparam -out /etc/httpd/conf/dhparams.pem 2048 SSLOpenSSLConfCmd DHParameters "/etc/httpd/conf/dhparams.pem" # XST 対策 TraceEnable Off # OPTIONメソッドの無効化 RewriteEngine On RewriteCond %{REQUEST_METHOD} ^OPTIONS RewriteRule .* - [F] |
上記の設定を反映する前に以下のコマンドで、「dhparams.pem」を作成すること。
1 |
openssl dhparam -out /etc/httpd/conf/dhparams.pem 2048 |
秘密鍵のパスフレーズを使用する場合の自動入力
1 2 |
# SSLPassPhraseDialog exec:/usr/libexec/httpd-ssl-pass-dialog SSLPassPhraseDialog exec:/etc/httpd/conf/ssl.crt/pass_phrase.sh |
事前にスクリプトを作成する。
・ FQDNは、サイトに合わせて変更する。
・ パスフレーズは、作成した秘密鍵のパスフレーズに変更する。
1 2 3 4 5 6 7 8 |
#!/bin/sh case $1 in FQDN:443) echo 'パスフレーズ';; esac exit 0 |
接続確認
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# telnet 127.0.0.1 80 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. OPTIONS * HTTP/1.1 <- 入力 host:localhost <- 入力 <- Enterキー入力 HTTP/1.1 200 OK Date: Tue, 16 May 2023 01:45:32 GMT Server: Apache <- バージョン情報の隠蔽が行えている。 Content-Length: 0 Connection closed by foreign host. |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# openssl s_client -quiet -connect 127.0.0.1:443 : GET / HTTP/1.1 HTTP/1.1 400 Bad Request Date: Tue, 16 May 2023 01:48:56 GMT Server: Apache <- バージョン情報の隠蔽が行えている。 Content-Length: 226 Connection: close Content-Type: text/html; charset=iso-8859-1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>400 Bad Request</title> </head><body> <h1>Bad Request</h1> <p>Your browser sent a request that this server could not understand.<br /> </p> </body></html> |