"Security is a journey, not a destination."
by Bruce Schneier
セキュリテイ・チェックリスト
OS(CentOS7)をインストールした直後に設定するセキュリティ対策の ToDo リストです。
可能な限りインラインコードや括弧内は、各々にそのキーワードで検索の関連リンクを張っています。
「さくらの VPS」ユーザーは、主に Apache の設定がメインであるものの『VPS 設定マニュアル』は必読だと思います。
-
アップデート(
yum update
, WordPress, plug-inなど)-
yum --enablerepo=remi,remi-php56 update -y && reboot
(KUSANAGIの場合)
-
- root のパスワードを他のユーザと同じにしない
- root になれるユーザの作成と限定
- log を監視しやすい体制を整える
-
接続失敗を繰り返す IP をブロックする
denyhosts
- 2020/01/21 現在
yum
ではインストールできなくなっています。ソースからビルドする必要があります。
- 不要なポートを閉じる
-
.ssh
ディレクトリのパーミッション - SSH 接続ユーザの公開鍵のアップロード
- authorized_keys ファイルのパーミッション変更
-
/etc/ssh/sshd_config の編集
-
パスワード認証による SSH の接続を禁止(
PasswordAuthentication
) -
rootのssh接続を無効にする(
PermitRootLogin
) -
SSH 接続するユーザーを限定(
AllowUsers
) -
SSH ポート番号の変更(
Port
)-
/usr/lib/firewalld/services/ssh.xml の変更
ポート変更箇所は2箇所あるので忘れずに。("/etc/ssh/sshd_config" と "/usr/lib/firewalld/services/ssh.xml")yum update
をするとssh.xml
のポートがデフォルトに戻ることがあるので注意!アップデート後デフォルトに戻った場合は SSH 接続できなくなります。頻繁におきるようだったら、ssh.xml をコピーして別途登録します。以下の記事が参考になります。- CentOS7でSSHのポート番号を変更する @ Qiita
-
/usr/lib/firewalld/services/ssh.xml の変更
-
パスワード認証による SSH の接続を禁止(
$ # 設定の確認
$ firewall-cmd --list-all
$ # 設定ファイルの作成(SSH 22 ポートの設定ファイルをコピー)
$ cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/ssh-<ポート番号>.xml
$ # XML 内のポート番号の箇所を変更
$ vi /etc/firewalld/services/ssh-<ポート番号>.xml
$ # 設定変更(旧 SSH のポート 22 を閉じて新しい SSH のポートを開ける)
$ firewall-cmd --permanent --remove-service=ssh
$ firewall-cmd --permanent --add-service=ssh-<ポート番号>
$ firewall-cmd --reload
$ # 設定の確認
$ firewall-cmd --list-all
-
SSH 接続元を IP・ホスト名で限定(
hosts.allow
,hosts.deny
)-
接続元である自宅や会社のプロバイダーのグローバル IP からホスト名を探しワイルドに指定する。
(例:123x123x123x123.ap123.ftth.ucom.ne.jp
が現在のホスト名だとすると*.ap123.ftth.ucom.ne.jp
のように変動しないホスト部分を残して指定する。hosts.deny
で全てをブロックしておき、hosts.allow
に*.ap123.ftth.ucom.ne.jp
を加えて SSH 接続元の許可を限定させる)- 資料:接続時のセキュリティの設定(CentOS 7) @ さくらの VPS 設定マニュアル
- 資料:Bash で未使用の空きポートをランダムに取得する関数 @ KEINOS Blog
-
接続元である自宅や会社のプロバイダーのグローバル IP からホスト名を探しワイルドに指定する。
(netstat --listening --all --tcp --numeric | sed '1,2d; s/[^[:space:]]*[[:space:]]*[^[:space:]]*[[:space:]]*[^[:space:]]*[[:space:]]*[^[:space:]]*:\([0-9]*\)[[:space:]]*.*/\1/g'| sort -n | uniq; seq 1 $PORT_NUM_MIN; seq 1 $PORT_NUM_MAX ) | sort -n | uniq -u | shuf -n 1
-
Web サーバ(主に nginx)
-
http 接続を https に転送させる(
/etc/nginx/conf.d/*_http.conf
) - Let's Encrypt/SSLの更新(有効期限確認)
-
HTTP応答ヘッダー
-
OS のバージョン情報を含めない(
server_tokens
) -
SSL 用に HSTS を含める設定(
Strict-Transport-Security
) -
CSP を含める設定(
Content-Security-Policy
) -
X-Frame-Option を SAMEORIGIN に設定にする(iframe での利用拒否、
DENY
が理想) -
ダウンロードしたファイルの種類をファイルの内容から決定させない(
X-Content-Type-Options
を "nosniff" に)- OWASP ZAP ツールの X-Content-Type-Options header missing エラー対策
-
ダウンロードしたファイルを自動で開かせない(
X-Download-Options
)
-
OS のバージョン情報を含めない(
-
SSL の conf に SSLv2, SSLv3 が含まれていないか確認(
ssl_protocols
) - デフォルトの Welcome ページを変更する
- DocumentRoot 以下の各ディレクトリ直下に index.html を設置する(ない場合)
- 資料:KUSANAGI の nginx で HSTS を設定する方法
-
http 接続を https に転送させる(
-
Wordpress の設定
- DB の接頭辞を "WP_" 以外にする
-
ソース内のWordpressバージョンを非表示にする(
remove_action,generator
) -
重要ファイルはWEBアクセス圏外のディレクトリに移動する(
wp-config
) -
ファイル・ディレクトリの所有者の確認(
wp-config.php
,0600
) -
ファイル・ディレクトリのアクセス権の確認(
0700
) -
管理者向けディレクトリはベーシック認証もかける(
.htaccess
,0600
,wp-admin
) -
Wordpress
セキュリティ
対策
を Qiita に絞って検索 @ Google
-
セキュリティチェック
- SSL サーバーテスト(SSL 対応グレード評価)
- https://www.ssllabs.com/ssltest/ @ SSL Labs
- レスポンスヘッダー、SSL/TLS 設定のセキュリティ・チェック
- https://observatory.mozilla.org/ @ Mozilla.org
- Webアプリケーション脆弱性診断ツール
- WordPress 脆弱性チェック
- 総合チェック
- SSL サーバーテスト(SSL 対応グレード評価)
-
その他(やった方がいいが諸事情でペンディングにしているもの)
-
HTTP 応答ヘッダー
-
HPKP(PIN)を設定する(
HTTP Public Key Pinning
) -
Referrer-Policy を設定する(
Referrer-Plicy
Nginx
)
-
HPKP(PIN)を設定する(
-
IDS(ファイル改ざん検知ツール)を入れる(
IDS
AIDE
) -
マルウェア/ウィルス検知ツールを入れる(
Sophos AV
,Clam AV
)- 特にユーザー・アップロードやダウンロード・ファイルをサーバーに保存する必要がある場合
-
HTTP 応答ヘッダー
所感
最近、検証のために OS を入れ直すことが多いのですが、バニラ状態から毎回行う設定項目の私的チェック・リストです。VPS だと簡単に入れ直すことが出来て便利ですね。
毎回行うことなので、作業効率的にはスクリプトや Ansible などで設定した方がいいかもしれません。しかし、私は絶対忘れる自信があります。そのため、最低限のセキュリティ設定は体で覚えたいなと思って毎回ゴリゴリ設定しています。もぅ、写経ならぬ乱取り稽古の勢い。
基本的に自分用(メモを見てあっ!と思い出せるもの)なので詳しい内容は記載していませんが、せっかくなので Qiita でシェアします。
「これ忘れとるよー」とお気付きの点や、おすすめの項目などありましたらコメントいただけるとありがたいです。