Raspberry Pi のセキュリティ設定~ SOCKET SERVER 'HAL'

自宅のコンピューターをインターネットで公開するのはそれなりに危険が伴います。何も準備しないで公開したら、想像もしていなかったような被害を被るかもしれません。

このページでは最低限、これだけはやっておきたいセキュリティ対策をご紹介します。

Raspberry Pi のセキュリティ設定

Raspberry Pi をインターネットに公開するにあたっては、それなりのセキュリティ対策をしておく必要があります。

このページでは、最低限やっておきたい設定をご紹介します。今後気づいた事があればこのページに追記していきますので、たまに覗いていただけると情報が増えているかもしれません。

1. root ユーザーにパスワードを設定する

あらゆるコンピューターで、絶対にやっておきたいセキュリティ対策です。

Unix や Linux では root ユーザーという、あらゆる操作のできる一番偉いユーザー権限が存在します。この権限を乗っ取られたらもう、そのコンピューターで出来ることは全てやられてしまいます。ですから、何はなくともこの root ユーザーにパスワードを設定して下さい。

sudo passwd root

で、パスワードの入力を求められます。強固なパスワードを設定しましょう。パスワードを入力すると、入力間違いがないか確認するために、もう一度同じパスワードの入力を求められます。2回のパスワードが同じであれば、パスワード設定が完了します。

root パスワード設定

なおこのパスワード、絶対に忘れないようにしてください。忘れてしまったら OS の再インストール一直線です。金庫が有るのであれば、紙に書いて金庫にしまっておくくらいでもいいでしょう。

2.1 SSH のポート番号を変更する

離れた所から別のパソコンを操作するには SSH で接続するのが一般的でとても便利です。ですから、悪い人があなたのサーバーを不正操作しようとする場合、まず SSH での接続を試みるでしょう。Raspbian ですと、インストール直後から sshd が起動していてすぐに SSH 接続できます。何も対策をしなければ恰好の的ですね。

sshd をインターネットに公開する場合の常套手段はポート番号を変更する事です。

SSH では 22 番ポートを使うのが一般的となっています。ですから、サーバーを公開すると 22 番ポートが開いていないか調べに来る人がたくさんいます。大体、チャイナとか、チャイナとか、チャイナからです。

というわけで、このポート番号を変えてしまうだけで、かなりの攻撃を未然に回避できます。

ポート番号は0~65535までで、基本的には好きな番号を利用できますが、他のプログラムで利用するポートと重複することはできないので ウェルノウン・ポート(well known ports) と呼ばれる、使用目的が定められたポート番号(0-1023)を避けた上で、適当なポート番号を選んで下さい。(※自由に利用できる番号として、公式には49152-65535が規定されているようです)

sudo vi /etc/ssh/sshd_config

次のようにポート番号を指定している記述がありますので、この記述を書き換えます。

# What ports, IPs and protocols we listen for
Port 22

   ↓

# What ports, IPs and protocols we listen for
#Port 22
Port 51327

51327の部分をお好みの番号に書き換えてください。保存して閉じた(shift + zz)ら sshd を再起動します。

sudo service sshd restart

ターミナルやTeraTerm等で SSH 接続して、22 番ポートへの接続が拒否され、指定したポートで接続できるようになっていることを確認して下さい。

2.2 鍵方式 SSH ログインの導入

ポート番号を変更するだけでかなりの危険を回避できるのですが、もう一手間加えると、とても強固な壁を作ることができます。

Raspberry Pi の場合デフォルトユーザーは pi となっていて、もし、そのサーバーが Raspberry Pi であると分かっている場合は pi ユーザーが標的になり、それだけで不利です。pi ユーザーを削除して、新たなユーザーを作る方法もあるのですが、pi ユーザーにはいろいろ設定されていてとても便利なユーザーなので、できれば削除するのは避けたいのが本音です。

そこで、SSH 接続についてパスワード接続を辞め、鍵方式接続を用いるようにします。pi ユーザーでログインしてホームディレクトリに移動した後、以下のコマンドを入力します。

cd ~

ssh-keygen -t rsa
-t dsa | ecdsa | ed25519 | rsa | rsa1
生成する鍵の種類を指定します。とりうる値として、プロトコル バージョン 1 で使う"rsa1"、およびプロトコル バージョン 2 で使う"dsa ,""ecdsa ,""ed25519"または"rsa"があります。
SSH-KEYGEN (1) より引用

すると

Generating public/private rsa key pair.
Enter file in which to save the key (/home/pi/.ssh/id_rsa):

という入力が求められるので、keyとして保存するファイルパスを入力してください。通常は何も入力せず Enter でかまいません。/home/pi/.ssh/id_rsa という秘密鍵ファイルが作成されることになります。

つぎは、パスフレーズの入力を求められます。確認用に2回入力を求められるので、好きなフレーズを2回、なんでもいいので同じものを入力して下さい。このフレーズは忘れないで下さい。

2回のフレーズの入力が一致すれば、秘密鍵と公開鍵が生成されファイルとして保存されます。

Your identification has been saved in /home/pi/.ssh/id_rsa.
Your public key has been saved in /home/pi/.ssh/id_rsa.pub.

上が秘密鍵、下が公開鍵です。

鍵生成完了

ls /home/pi/.ssh/

で、生成された秘密鍵と公開鍵ファイルを確認できます。

cat /home/pi/.ssh/id_rsa

で、生成された秘密鍵の中身を見てみましょう。訳の分からない沢山の文字の羅列が見られますね。これが SSH で接続するための鍵です。あなたが外部から Raspberry Pi に SSH 接続するには、この秘密鍵ファイル(id_rsa)を持ち歩く事になります。名前の通り“秘密”鍵なので、絶対に誰かに見られてはいけません。パスワードロックがかけられる USB メモリなどに入れて携帯すると良いかもしれませんね。

では、公開鍵(id_rsa.pub という pub ファイル)の方はどうするかというと、こちらは Raspberry Pi の方に、公開鍵 authorized_keys として登録しておきます。

cd ~

cat .ssh/id_rsa.pub >> .ssh/authorized_keys

これで登録完了です。念のため pi ユーザー以外はこれらのファイルにアクセスできないよう、パーミッションを設定しておきましょう。

chmod 600 ~/.ssh/authorized_keys
chmod 600 ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa.pub

600 は、自分のみ読み書きが出来る、という意味です。

さあ、これでひとまず鍵の生成と設定は完了です。作成された秘密鍵 id_rsa を別のパソコンにコピーして、ターミナルや TeraTerm 等で 鍵方式 SSH 接続を試してみましょう。

秘密鍵によるログイン

入力したパスフレーズと秘密鍵が揃わないとログイン出来ないことを確認して下さい。

※ Mac でターミナルを使う方は ISTB16 BLOG を参考にされると良いかもしれません。

ここまで来たら最後のしめくくりです。パスワードのみのログインを禁止するため、最初にポートを指定した sshd_config ファイルを再編集します。

sudo vi /etc/ssh/sshd_config

まず、root でのログインを禁止します。PermitRootLogin を検索して下さい。( / をタイプしてから PermitRootLogin で検索できます)

見つかったら、no を指定して、SSH での root ログインを出来なくしてしまいます。

#PermitRootLogin without-password
PermitRootLogin no

次は、パスワードでのログインの禁止です。PasswordAuthentication を検索し、これも no にします。

#PasswordAuthentication yes
PasswordAuthentication no

あとは一応、空パスワードでのログインを禁止する設定になっているか確認しておいて下さい。

PermitEmptyPasswords no

以上を設定・確認して保存したら、sshd を再起動してください。

sudo service sshd restart

これであなたの Raspberry Pi の SSH はとても強固なものになりました。欲を言えば chroot の設定を行い、root になることの出来るユーザーを限定することもできるのですが、少し大変なのでここでは省きます。ご興味の有る方は SSHサーバー構築(OpenSSH) 等を参考にされると良いのではないでしょうか。(※Cent OS の説明なので、多少読み替える必要が有るかもしれません)

なお、SSH 接続状況のログは、デフォルトでは

/var/log/auth.log

として書きだされているようです。

また、強力な監視ツールとして、lastb というコマンドがあります。

sudo lastb

これは失敗したログインの履歴を見ることができるコマンドで、多くの Linux に搭載されており、勿論、Raspberry Pi でも利用できます。

lastb コマンドの強力なところは、ログイン試行に使われた id はもとより、入力されたパスワードも確認できてしまうところです。ですから、辞書攻撃やブルートフォースアタック等は一目で分かります。反面、普通の入力間違いなども見えてしまうので、これを見た人は本来知ってはいけない他人の正しいパスワードを推測できてしまう場合があります。

このため、lastb コマンドの実行には root 権限が必要になっていて、su - (substitute user)で root 権限に切り替えるか、sudo をつけて管理者権限で実行する必要があります。

最後に

自宅のコンピューターをインターネットに公開するのは結構度胸のいるものです。私も、初めて Cent OS サーバーを公開した時は本当に心配しましたし、正直のところ今でも多少は不安で、新しい脆弱性が発見される度にドキッとします。

Shellshock とかは今でもたまに攻撃が来ていて、アクセスログに痕跡が残っていると、前に調べて安全だと分かっているのに大丈夫か心配になって、再び対策されているかチェックするみたいなことを何度も繰り返しています。

そう言うと、気苦労ばかり多そうでメリットがなさそうに感じるかもしれませんが、勿論そうではありません。

自分が立てたサーバーを公開できるのはインターネットの醍醐味でもあります。サーバーを運営していけば、否が応でもいろんな情報に目を通すことになるので、いままで何だかわからなかった事が自然とわかるようになったりします。

大体、「Raspberry Pi で電子工作しよう」みたいな人は、そんなに物怖じしないでしょう。「こんな配線むき出しで、留守中にショートして火事になったらどうしよう…」とか、本気で心配する人は Raspberry Pi なんていじらないでしょうし、そうならないように情報を集める人だと思います。

Raspberry Pi は、マイコンや他の電子工作デバイスとは全く違う、特別なデバイスです。せっかく Raspberry Pi を使っているんですから、それをインターネットに繋げて、どこからでも操作できるように仕立てあげるのは、とても刺激的な体験になるのではないでしょうか。


ご購入

ソケットサーバー「HAL」は以下のオンラインショップでご購入いただけます。ご購入に先立っては、ぜひ、体験版で動作の確認をお願いいたします。

体験版

ソケットサーバー「HAL」の体験版をダウンロード
hal_trial version 1.5
試用期限 2016/11/30 まで
※ sudo wget -O hal_trial_1_5.tar.gz 'http://feijoa.jp/getFile/?place=products&filename=hal_trial_1_5.tar.gz' でもダウンロードできます。
HAL の IP アドレス制限を解除してライセンス制に変更しました。お好きな IP アドレスで HAL をお試しいただけます。なお、ライセンスされていない製品では起動から 40 時間後に HAL は自動終了します。

この記事へのコメント

※現在コメントはMarkdown記法が強制です。>>Markdown の書き方


この記事に返信

このコメントに返信