犬ターネット

Apache, PHP, MySQL セキュリティ設定メモなど

2018-02-19 apache php mysql

Apache

/etc/httpd/conf/httpd.conf

Options から Indexes を除外。

<Directory "/var/www">
  Options -Indexes
  AllowOverride All
  Require all granted
</Directory>

/etc/httpd/conf.d/autoindex.conf

全部コメントアウト。

/etc/httpd/conf.d/deflate.conf

新規作成。コンテンツのgzip圧縮設定。

<IfModule mod_deflate.c>
  AddOutputFilterByType DEFLATE \
    "text/html" \
    "text/plain" \
    "text/xml" \
    "text/css" \
    "text/javascript" \
    "application/javascript" \
    "image/svg+xml"
</IfModule>

/etc/httpd/conf.d/errordocument.conf

新規作成。エラードキュメントに文字だけ設定。こだわりがあるなら html ファイルを作成して配置。

ErrorDocument 400 "Bad Request"
ErrorDocument 401 "Unauthorized"
ErrorDocument 403 "Forbidden"
ErrorDocument 404 "Not Found"
ErrorDocument 405 "Method Not Allowed"
ErrorDocument 500 "Internal Server Error"
ErrorDocument 503 "Service Unavailable"

/etc/httpd/conf.d/secure.conf

新規作成。このファイルにセキュリティ関連設定を記述する。

ServerTokens ProductOnly
TraceEnable Off
Header add X-Content-Type-Options "nosniff"
Header add X-Frame-Options "SAMEORIGIN"
Header add X-XSS-Protection "1; mode=block"
Header always unset X-Powered-By
RequestHeader unset Proxy
FileETag MTime Size
LimitRequestBody 10485760
RequestReadTimeout header=20-40,MinRate=500 body=20,MinRate=500

/etc/httpd/conf.d/ssl.conf

HSTS の追加、脆弱性のある暗号化方式は使わないよう修正。

<VirtualHost _default_:443>
  …
  Header set Strict-Transport-Security "max-age=31536000"
  SSLProtocol all -SSLv2 -SSLv3 -TLSv1
  SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA:!3DES:!RC4
  …
</VirtualHost>

/etc/httpd/conf.d/userdir.conf

すべてコメントアウト。

/etc/httpd/conf.d/welcome.conf

すべてコメントアウト。

PHP

php.ini の以下項目を修正。

output_buffering = 4096
expose_php = Off
error_reporting = E_ALL
display_errors = Off
html_errors = Off
date.timezone = Asia/Tokyo
session.use_strict_mode = 1
session.use_cookies = 1
session.use_only_cookies = 1
session.cookie_secure = 1
session.cookie_httponly = 1
mbstring.language = Japanese

MySQL

/etc/my.cnf

以下3行追加。

ssl-ca=/var/lib/mysql/ca-key.pem
ssl-cert=/var/lib/mysql/server-cert.pem
ssl-key=/var/lib/mysql/server-key.pem
jpeg-recompress を使った画像圧縮
ひな祭り