Webサーバのセキュリティを強化する!

WordPressサーバのセキュリティの強化を図ります。主に、インターネットからの不正アクセス対策を行います。

サーバアクセスのセキュリティ強化

公開サーバは、インターネット上に晒されているため、サーバセキュリティ対策は必須です。

SSHのセキュリティ強化

サーバの設定や制御を行うためにサーバにアクセスする主な手段は、SSHになります。SSHのセキュリティを高めることでサーバセキュリティを向上させます。

SSHサーバのログ確認

SSHサーバのログを確認します。

$ sudo less /var/log/secure
Jan  1 06:06:35 pubser001 sshd[22293]: Invalid user admin from 101.75.117.125 port 38643
Jan  1 06:06:35 pubser001 sshd[22293]: input_userauth_request: invalid user admin [preauth]

ログを見ると、ひっきりなしに不正アクセスが試みられているようです。SSHの不正アクセスに対するセキュリティ対策としては、以下の対応があります。

  • パスワードでのログインを禁止し、鍵認証でのログインのみ許可する。
  • rootユーザでのログインを禁止する。
  • SSHのポート番号を変更する。

根本的対応として、上から2つ目までの対応を初期のサーバ構築時に実施済みですが、追加でポート番号の変更を行い、不正アクセスの削減を図ります。

SSHサーバのポート番号の変更

SSHサーバのポート番号をデフォルトの22から2222に変更します。まず、firewalldで2222番のポートへのアクセスを許可します。

$ sudo firewall-cmd --add-port=2222/tcp --zone=public --permanent
$ sudo firewall-cmd --reload
$ sudo firewall-cmd --list-all --zone=public | grep tcp

次に、SSHサーバの設定を変更して、SSHサーバのポート番号を変更し、設定ファイルを再読込します。

$ sodo vi /etc/ssh/sshd_config
#Port 22
Port 2222
$ sudo systemctl reload sshd

22番ポートでアクセスできず、2222番ポートでアクセスできることを確認します。

$ ssh -l admin001 lab4ict.com
ssh: connect to host lab4ict.com port 22: Connection refused
$ ssh -p 2222 -l admin001 lab4ict.com
$

サイトアクセスのセキュリティ強化

サイトアクセスのセキュリティ強化として、以下の対応を実施します。Qualys SSL LABSの「SSL Server Test」のサイトでテストを行い、根気よく一つ一つ対策を打つのがよさそうです。

  • サイトアクセスのHTTPS化
  • 不正なサーバ証明書の発行防止(DNS CAA)
  • SSL/TLSプロトコルの制限
  • 暗号化方式(Cipher Suite)の削除
  • 暗号化方式(Cipher Suite)の追加

サイトアクセスのHTTPS化

サイトアクセスを全てHTTPSで暗号化することにより、通信内容の漏えいと改ざんを抑止することができます。サイトのHTTPS化は、本サイトの手順では、Let'encryptの導入により、サーバの初期構築時に対応済みです。

不正なサーバ証明書の発行防止(DNS CAA)

サーバ証明書を発行する認証局をDNSで指定することにより、他の認証局で不正なサーバ証明書が発行されることを防ぐことができます。Sakura InternetのDNSでは、CAAレコードを登録することができます。

DNS1レコード種別 設定値(例)
CAA 0 issue "letsencrypt.org"
CAA 0 iodef "postmaster@lab4ict.com"

SSL/TLSプロトコルの制限

SSL/TLSのプロトコルをTLS1.2のみに制限します。

$ sudo vi /etc/httpd/conf.d/ssl.conf
#SSLProtocol all -SSLv2
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
$ sudo systemctl stop httpd.service
$ sudo systemctl start httpd.service
$ sudo systemctl status httpd.service

opensslコマンドで管理用のPCからテストします。

$ openssl s_client -connect lab4ict.com:443 -ssl3
$ openssl s_client -connect lab4ict.com:443 -tls1
$ openssl s_client -connect lab4ict.com:443 -tls1_1
$ openssl s_client -connect lab4ict.com:443 -tls1_2

暗号化方式(Cipher Suite)の削除

脆弱性が指摘されている暗号化方式(Cipher Suite)を削除します。RC4暗号の使用を不可に設定します。

$ sudo vi /etc/httpd/conf.d/ssl.conf
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA:!RC4
$ sudo systemctl stop httpd.service
$ sudo systemctl start httpd.service
$ sudo systemctl status httpd.service

opensslコマンドで管理用のPCからテストします。

$ openssl s_client -connect localhost:443 -cipher RC4-SHA

暗号化方式(Cipher Suite)の追加

強度の強い暗号化方式(Cipher Suite)を追加します。Forward Securityを使用可にして、暗号化方式を全面的に見直して設定します。

$ sudo vi /etc/httpd/conf.d/ssl.conf
#SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA
#SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA:!RC4
SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4"
...
SSLHonorCipherOrder on
$ sudo systemctl stop httpd.service
$ sudo systemctl start httpd.service
$ sudo systemctl status httpd.service

opensslコマンドで管理用のPCからテストします。

$ openssl s_client -connect localhost:443 -cipher ECDHE-RSA-AES256-GCM-SHA384

おわりに

本稿では、WordPressサーバのセキュリティ強化を行いました。