技術備忘録

環境構築によるトラブルの解決方法、知った技術のまとめなどを自分のためにも書き連ねていきます。あわよくば誰かの参考になればと思います。

ラズパイを外部からSSHできるように設定

今回やること

ラズパイへ外部からSSHできるように設定します。

  • ラズパイのSSHの設定

  • ファイヤーウォールの設定

  • ルーターの設定

ラズパイのSSHの設定

ラズパイへ同じWiFi内のSSHは以前の記事で書いたのでそちらを参照してみてください。ここではローカル内のSSHはできていることを想定して進めます。今回はグローバルIPからラズパイへSSHできるように設定していきます。

/etc/ssh/sshd_configの設定から行なっていきます。

Port 22 → Port xxxxx

デフォルトでのSSHのポートは22番で設定されているのですが、任意のポートに変更します。何番でもいいのですが、49152番 - 65535番が他のシステムで使われることが少ないのでこの間の番号から選ぶといいと思います。私は49500番を選びました。

PermitRootLogin yes → PermitRootLogin no

rootでのSSH接続を禁止します。万が一入り込まれた際にめちゃくちゃに荒らされたりするので極力被害を防ぐためにrootではSSHできないようにしておきます。

PubkeyAuthentication no → PubkeyAuthentication yes

公開鍵認証方式でのSSHをできるようにします。

これで設定は終わりです。次に公開鍵認証方式でするために設定を行います。

公開鍵の設定

この記事が公開鍵の設定について詳しく書いてあり分かりやすかったのでこちらを参照してみてください。

ssh公開鍵認証設定まとめ

注意する点としてはこの記事にも書いてあるのですが、公開鍵の設定を行なったとしてもそのタブは閉じずに別タブでsshログインを試してみてください。なんらかの原因でsshができなくなる可能性があるので。

公開鍵の設定ができ、公開鍵認証方式でSSHのログインができることを確認したらもう一度/etc/ssh/sshd_configの設定を行います。

PasswordAuthentication yes → PasswordAuthentication no

この設定を行い、SSHをパスワードで接続を禁止し公開鍵のみでのみ許可をします。こうすることでブルートフォースアタックの危険性がなくなります。

ファイヤーウォールの設定

ファイヤーウォールは外部からの特定のポートの接続を許可したり禁止したりするものです。外部に公開する以上この設定は行なっておくべきです。

$ sudo apt-get install ufw
$ sudo ufw status

ファイヤーウォールをインストールしてstatusで現在の状態を確認します。デフォルトでは動いていないため

Status: inactive

になっていると思います。

$ sudo ufw default deny
$ sudo ufw allow xxxxx
$ sudo ufw enable

xxxxxはSSHの設定のポート番号を指定してください。

ここではデフォルトでポート接続を禁止した後、使うものを許可するという方針で設定を行なっています。

今回はSSHのみ許可をします。enableでファイヤーウォールを起動します。

動いているとは思いますが念のため、$ sudo ufw statusで確認してみてください。

Status: active

To                         Action      From
--                         ------      ----
49500                      ALLOW       Anywhere
49500                      ALLOW       Anywhere (v6)

xxxxxはSSHのポート番号です。このように表示されていたらファイヤーウォールの設定は完了です。

(v6)はIPv6での接続の場合のことだと思います、多分…。

ルーターの設定

今はローカルでのSSH接続しかできないので外部(グローバルIP)からの接続ができるようにルーター設定を行います。

今の状態では外部から接続しようとした時にルーターはどこのローカルにあるどこのマシンが目的かわからないので教えてあげる必要があります。この教えて設定をNATやポートフォワーディング、と呼ばれるものから設定を行います。ルーターの設定はメーカーによって違いますが私のは http://192.168.2.1 で接続できました。

設定で行うことは

ラズパイのローカルのIPアドレス,SSHのポート番号です。

この設定の時にステータスなどで自分のグローバルIPが確認できるのでわからない方は自分のグローバルIPアドレス確認ツール、「IP君」で確認できるかと思います。

グローバルからのSSH

SSHをグローバルからできるか試してみましょう。

$ ssh -i /.ssh/<秘密鍵の名前> -p <ポート番号> <ユーザ名>@<グローバルIP>

上記のコマンドでできると思います。

今回はグローバルIPのまましましたが、これはプロバイダによって動的に変わるのでhttps://ieserver.netなどのDNSのサービスを使って固定するのもいいと思います。