開発者でも何でもない素人によるサイト

最低限のセキュリティ設定

  • このエントリーをはてなブックマークに追加

このページでは、外部に公開するために欠かせない設定を行います。いずれも定番中の定番の設定をとりあげています。最低限、これだけはしておかないとサーバが乗っ取られる確率が格段に高くなるのでぜひ実行しておきましょう。

新たなユーザーの作成とpiユーザーの削除

これまで、デフォルトの「pi」というユーザー名と「raspberry」というパスワードを使ってきましたが、このままだと第三者に容易にログインされてしまします。

なので、「pi」の代わりとなる新たなユーザーを作成したうえで、「pi」を削除したいと思います。

まず新たなユーザーを追加します。ユーザー名は半角英数であれば任意のもので大丈夫です。ここではhogeとします。

sudo adduser hoge

と打つと、「新しい UNIX パスワードを入力してください:」と表示されると思うので、新しいユーザーのパスワードを決めて入力します。

確認のため、2回入力が求められます。このあと個人情報について怒涛の質問攻めにあうので、適当に入力してください。全部空欄でも良いと思います。最後に確認されるので、yを入力してユーザー作成は完了です。

つぎに、この新しいユーザーをpiユーザーと同じグループに入れます。

「pi」ユーザーはデフォルトでたくさんのグループに入っています。ネット上だと「pi」の代役たる新しいユーザーについて、「sudo」グループ(sudoを使えるユーザーのグループ)だけに加えとけばいいという人と、「pi」ユーザーが入っていたグループ全てに入れといたほうがいいという人の両方がいるみたいですが、面倒臭いので(笑)、前者の方法を取りたいと思います。

sudo usermod -aG sudo hoge

と打ってください。

これでhogeというユーザーは「sudo」グループに加わりました。

また、sudoをパスワード無しで使える設定を無効にします。

sudo nano /etc/sudoers

と打ってください。sudoの設定ファイルが開くはずです。

Screenshot from 2016-05-20 09-41-41

このファイルの最終行に上の図のように付け加えます。

piの行の先頭に#、次の行に

hoge ALL=(ALL) PASSWD: ALL

と付け加えます(hogeがユーザー名)。これで新たなユーザーがパスワード付きでsudoを使えるようになりました。同時にpiユーザーがパスワードなしではsudoを使えなくなりました。

ここまで来たら、ユーザー「pi」を削除します。おそらく、今piでログインしていると思うので、一旦ログアウトします。

exit

SSHが切断されたら、新しく作ったユーザー名でSSHログインしてください。

ログインできたら、

sudo userdel -r pi

と打ちます。エラー表示が出なければOKです。

SSH鍵認証

SSHではこれまで平文のパスワードを入力してログインしてきましたが、外部に晒すサーバーだと危険です。

従って鍵認証という仕組みでより安全にログインするようにします。

鍵認証を行うには、

  1. 公開鍵と秘密鍵のペアを作る
  2. 公開鍵をサーバに、秘密鍵をクライアントに設定する
  3. 次回から秘密鍵を持ったクライアントは鍵認証でログインできる

というながれです。

この鍵認証を設定したうえで、パスワードログインの禁止、rootログインの禁止と、後ほど取り上げるポート変更を行えば、最低限のセキュリティは確保されます。

クライアントのOSや使用ソフトによって1の鍵ペア作成方法が異なりますが、Tera Termを挙げて書きます。

Teratermでの鍵生成

teratermを起動すると、「新しい接続」というウィンドウが表示されますが、ここでは「キャンセル」をクリックして閉じます

次に、「設定」→「SSH鍵生成」の順にクリックします。

seisei

「鍵生成」ウィンドウが立ち上がるので、下図の通り操作します。

terakey

パスフレーズとコメントの入力は任意です。それぞれの鍵の保存先も決められた場所はないので、任意の場所に保存します。

Teratermからサーバ(Raspberry Pi)への公開鍵転送とサーバの設定

次に作成した公開鍵をサーバに送って、設定します。

まず、通常通りSSHでパスワードログインします。そして下図のようにして、SCPのウィンドウを立ち上げます。

seisei

立ち上がったら、下図のように操作します。気を付けるのは公開鍵(id_rsa.pub)を送るということです。秘密鍵は送らないようにして下さい。

sshscp2

これでサーバに公開鍵ファイルが送られます。

これを認証に使えるように設定していきます。

一度Raspberry Piにログインして、ホームディレクトリ(ログイン直後にいるディレクトリ)直下に「.ssh」というディレクトリを作成します。

mkdir ~/.ssh

次に、このディレクトリを所有者だけが操作できるように設定します。

chmod 700 ~/.ssh

エラーなく実行出来たら、このディレクトリに移動します。

cd ~/.ssh

ここに先ほどSCP転送した公開鍵ファイルを、「authorized_keys」という名前にして移します。

cat ~/id_rsa.pub >> authorized_keys

これを所有者以外読み書き禁止にします。

chmod 600 authorized_keys

最後に、sshd_configという設定ファイルで鍵認証でログインできるよう設定します。

sudo nano /etc/ssh/sshd_config

で設定ファイルを開きます。

以下は上から順にRSA(鍵認証の暗号方式)の使用可否、公開鍵認証の可否、パスワード認証の可否を設定する項目です。

行頭の「#」を消して、設定を有効にします。

RSAAuthentication yes
PubkeyAuthentication yes
PasswordAuthentication no

ここまで設定したら

CTRL+x→Y→Enterでnanoを抜けます。

最後にSSHを再起動ます。

sudo /etc/init.d/ssh restart

設定は以上で完了です。

SSHポートの変更とファイアーウォール

セキュリティのため、ファイアーウォールを設定して不要なポートを閉じ、必要なポートだけ開放します。

ここではついでにSSHのポート変更も合わせておこないます。

SSHはデフォルトで22番ポートを使っており、Tera Termのログイン画面でも始めから22番が設定されています。しかし、デフォルトの22番ポートは攻撃されやすいらしいです。

以下のコマンドでSSHサーバの設定を開きます

sudo nano /etc/ssh/sshd_config

この/etc/ssh/というディレクトリには、sshd_configの他に、ssh_configという瓜二つのファイルがあるので気をつけてください。ssh_configはクライアントの設定ファイルです。

sshd_configが開けたら下図の赤丸の箇所をウェルノウンポートと被らないよう、好きな数字に書き換えます(上限は6万数千)。

juice2

書き換えたらCtrl+X→Y→Enterで上書き保存して抜けます。

ファイアーウォール(ufw)導入

ファイアーウォールでは、iptablesが最も定番らしいですが、初心者には敷居が高いです(僕がそうです)。

そのため、ufwというiptablesを簡単に設定するためのツールを利用します。コマンドでの操作ですが、直感的で分かりやすいはずです。

sudo apt-get ufw

でufwをインストールします。

ufwをインストールできたら、

sudo ufw enable

でファイアーウォールを有効にし、

ufw default deny

で一旦全てのポートを閉じます。

次にSSHのポートを開放します。これをし忘れると次に再起動やシャットダウンした際、SSHログインできなくなります。以下のコマンドで先ほどSSHで設定したポート番号を入れます(12345はポート番号の例)。

sudo ufw allow 12345

これで、SSHのポートは開放されたはずです。

念のため、

sudo ufw status

と打って、現在のポート開放状況を確認しましょう。

おそらく、指定したポートのみしか開放されていないとおもいます。

次から新たにポート開放が必要になり次第、上のような手順で開放していきます。