ConoHa VPSの基本的なセキュリティ設定

投稿日:2016年12月26日 更新日:

どうも、okuzawatsです。

普段はアプリの開発をしているので、サーバーサイドのことはあまり良くわかっていないです。
でも、ConoHaのVPSにKUSANAGIでWordPressをインストールしたら、どんな高速なブログができるのだろうか...。
という誘惑から逃れられません。

ということで、ConoHaのVPS(Cent OS)にKUSANAGIでWordPressを作りました。
VPSのセキュリティ対策で悩むことが多かったので、今後の参考のためにConoHaのVPSの基本的なセキュリティ対策について書き残しておきます。

本当はもっと詳しい方に解説を譲るべきであると思うんですが...。
検索してもあまり情報が出てこない点もあったので、そのあたりの情報を残しておければと思います。
具体的には、ConoHa特有のトラブルとかですね。

基本的なセキュリティと言っても、どこまでやれば十分、というのは中々言えないと思います。
今回は、rootログインの禁止、SSHのポート変更、パスワードログインの禁止について書いています。
もっとセキュリティ対策を進めたい時は、専門書を参照してください。

rootログインの禁止

rootユーザーでのログインを許可しておくと、もしrootユーザーとしてログインされてしまった時にメチャメチャされてしまって大変なことになります。
rootユーザーとしてのログインを禁止しておきます。

まずは作業用ユーザーを追加して、パスワードを設定します。
adduserコマンドでユーザーの追加、passwdコマンドでパスワードの設定を行います。
「vpsuser」の部分を自分で決めたユーザーの名前にします。

adduser vpsuser
passwd vpsuser

passwdコマンドを叩くと、vpsuserに設定するパスワードを聞かれるので入力します。
確認のために2回聞かれるので、同じパスワードを繰り返し入力。
これで新しいユーザーが追加されます。

次に、このユーザーがadmin権限で作業できるように、vpsuserをwheelグループに追加します。
wheelグループにユーザーを追加することで、vpsuserはスーパーユーザー権限を得ることができるようになります。

wheelグループに追加せずにsudoコマンドを実行しようとすると、
vpsuser は sudoers ファイル内にありません。この事象は記録・報告されます
というようなエラーが出てしまい、コマンドを実行できません。

wheelグループへの追加には、gpasswdコマンドを使います。

gpasswd -a vpsuser wheel

これで新しく追加したユーザーはスーパーユーザー権限を持つことができるようになりました。
ConoHaでは、デフォルトでwheelグループに特権が付いているのでsudoersファイルの編集は不要...のはずです。

次に、rootでのログインを禁止します。
viを使ってsshd_configを編集します。
sshd_configには、SSHサーバーの設定情報が書き込まれています。
sshd_configは/etc/ssh/にあるはずですので、以下のコマンドでファイルを開きます。

vi /etc/ssh/sshd_config

PermitRootLoginと書いてある行を探して、「PermitRootLogin yes」から「PermitRootLogin no」に書き換えます。
viの操作で検索するには、Esc、/、PermitRootLoginと順番に入力してエンターを押します。
すると、PermitRootLoginと書かれた行が表示されると思います。

PermitRootLoginと書かれた行が表示されたら、Esc、iと入力して編集モードにして、以下のように書き換えます。
書き換えたら、Esc、:wqと順番に入力してエンターを押し、変更を保存してviを閉じます。

PermitRootLogin no

設定を変更したら、sshdを再起動して設定を反映します。
以下のコマンドを入力します。

service sshd restart

これで、rootでSSH接続しようとしてもパーミッションがないので接続できないようになりました。
rootログインの禁止は完了です。

ssh root@xxx.xxx.xxx.xxx
root@1xxx.xxx.xxx.xxx's password:
Permission denied, please try again.

SSHのポート番号を変更

SSHのポート番号は、デフォルトで22番に設定されています。
このままでは22番のポートが機械的に攻撃されてしまって良くないので、SSHのポート番号を変更していきます。

ConoHaのCent OSにはデフォルトでiptablesがインストールされていないので、まずiptablesのインストールしておきます。
yumでインストールします。

sudo yum install iptables-services

iptablesを編集して、ポート番号を変更します。
1番~1023番のポート番号はウェルノウンポートと呼ばれており、他のサービスで頻繁に使われるので1024番以降のポート番号を指定します。
ポート番号は0番から65536番まであるので、1024番から65536番までの番号を指定しましょう。

viを起動して、iptablesを編集します。
iptablesは、/etc/sysconfig/の下にあるはずです。

vi /etc/sysconfig/iptables

iptables内で指定されているSSHのポート番号を変更します。

-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

となっているところをこんな感じで書き換え。

-A INPUT -m state --state NEW -m tcp -p tcp --dport 12345 -j ACCEPT

iptablesを更新したら、リスタートします。

sudo service iptables restart

次に、sshd_configのポート番号も書き換えておきます。
#Port 22となっているところをiptablesの設定と同じ番号Port 12345にします。
「#」から始まる行の設定はコメントとみなされ無効になるので、必ず「#」は外しておきます。

sshd_configの編集は以下のコマンドです。

vi /etc/ssh/sshd_config

sshd_configの設定ファイルを書き換えたら、sshdサービスをリスタートして設定を反映します。

service sshd restart

設定がうまくいけば、ポート番号を指定してSSH接続する以下のコマンドでアクセスできるようになります。
一方、ポート番号を指定しないでSSH接続しようとするとアクセスできないようになっているはずです。

ssh conohauser@150.95.132.84 -p 12345

注意事項としては、ConoHaのインフラ側で接続を許可するポートを設定していると、新しく設定したポートでの接続がはねられます。
わたくしはこれに気付かず1時間くらい悩みました。

最後に、reboot時の自動起動を設定しておきます。
これでSSH接続のポート番号変更は完了です。

systemctl stop firewalld.service
systemctl mask firewalld.service
systemctl enable iptables.service

鍵認証の設定

パスワードログインよりもセキュリティが厳しい、公開鍵認証方式によるログインのみ許可するようにします。
まずはSSHの設定を変更して鍵認証を許可。

vi /etc/ssh/sshd_config

RSAAuthenticationとPubkeyAuthenticationのコメントを外して、鍵認証を許可。

RSAAuthentication yes
PubkeyAuthentication yes

AuthorizedKeysFileは鍵ファイルの場所を書いておく設定項目ですが、これは最初からコメントが外れていました。
コメントが外れていなければ外しておきます。

AuthorizedKeysFile .ssh/authorized_keys

sshd_configの設定を更新したら、sshdをリスタートします。

service sshd restart

サーバー側でキーを作成します。

cd ~/.ssh
ssh-keygen -t rsa -b 2048

キーペアが作成されます。
Enter passphraseと聞かれるので、パスワードを作って2回入力。
入力せずにエンターを押すとパスワード無しでキーペアが作成されますが、パスワードを設定しておいた方が安全ですね。

Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): keyfile
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in key.
Your public key has been saved in key.pub.

AuthorizedKeysFileで設定されているキーのパスにキーを移動して、パーミッションを変更します。
ログインするユーザーのディレクトリ(/home/vpsuser/.sshとか)にキーを移動しておかないとSSH接続できないので、気をつけましょう。

mv keyfile.pub authorized_keys
chmod 600 authorized_keys

キーの中身を表示して、ローカルに鍵を作ります。
キーの中身はcatコマンドで表示できますね。

cat keyfile

次にローカルでキーを登録します。
ConoHaのサーバー上の作業ではないので気をつけましょう。
まずは.sshディレクトリに移動して、viでキーファイルを作ります。

cd ~/.ssh
vi keyfile

viが立ち上がったら、先ほどサーバー側のcatコマンドで表示された内容をペーストします。
viでペーストするには、:set paste、iでペーストモードにしてからctrl + vです。

キーを保存したら、パーミッションを変更。

chmod 600 key

鍵認証で接続するには、こんな感じでコマンドします。
SSHのポート番号は既に変更してあるので、-pオプションでポートも指定します。
コマンドを叩くと鍵のパスワードとSSHユーザーのパスワードを聞かれるのでそれぞれ入力します。

ssh -i keyfile vpsuser@xxx.xxx.xxx.xxx -p 12345

ログインに成功したら、次にパスワードログインを禁止しておきます。
これで鍵を使ったSSH接続しかできないようになります。
sshd_configファイルを開いて、PasswordAuthenticationをnoに変更して保存。

vi /etc/ssh/sshd_config
PasswordAuthentication no

毎回これを打つのは大変なので、configファイルを作っておきます。
Macの場合、以下のコマンドでconfigファイルを作ります。
Linuxとかだと「~/.ssh/ssh_config」でしょうか。

cd ~/.ssh
vim config

configの中に以下の設定を書いて保存します。

#ConoHa
Host conoha
HostName xxx.xxx.xxx.xxx
User vpsuser
Port 12345
IdentityFile ~/.ssh/key

これで、ssh conohaと叩くだけでSSH接続できるようになります。

ssh conoha

以上で、ConoHa VPSの初歩的なセキュリティを設定できたかと思います。長かったですね。おつかれさまでした。

茨城県つくば市在住のAndroidアプリエンジニアです。

-プログラミング

Copyright© Androidアプリ開発@つくば , 2017 AllRights Reserved Powered by AFFINGER4.