スマホ等から自宅ラズパイにセキュアアクセスするためのメモ

# はじめに
安価で低消費電力のRaspberry Pi（ラズベリー・パイ）は、自宅のサーバ構築の上でとてもおすすめです。ここでは、セキュアに宅外からでもアクセスできるようにするための手順をまとめてみました！ ポートフォワーディングを活用すれば、ここで紹介しているもの以外にも、RDP接続やCrowiへのアクセスなど、様々なことをいつでも・どこでも（スマホのインターネット接続が可能な環境であれば）できるようになります。
## 手順
 1. [備品購入](https://qiita.com/miya_sts/items/8a552d67a9842dd4006e#1%E5%82%99%E5%93%81%E8%B3%BC%E5%85%A5)
 2. [OSインストール](https://qiita.com/miya_sts/items/8a552d67a9842dd4006e#2-os%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)
 3. [SSHサーバ化](https://qiita.com/miya_sts/items/8a552d67a9842dd4006e#3-ssh%E3%82%B5%E3%83%BC%E3%83%90%E5%8C%96)
 4. [NASサーバ化](https://qiita.com/miya_sts/items/8a552d67a9842dd4006e#4-nas%E3%82%B5%E3%83%BC%E3%83%90%E6%A7%8B%E7%AF%89)
 5. [SSHポートフォワーディング](https://qiita.com/miya_sts/items/8a552d67a9842dd4006e#4-nas%E3%82%B5%E3%83%BC%E3%83%90%E6%A7%8B%E7%AF%89)

## 1.備品購入
主に以下のものが必要となります。
 - Raspberry Pi 本体
 - Raspberry Pi カバー
 - 電源
 - MicroSDカード（16GB以上）
 - 外付けHDD 
 - USBマウス（#Bluetoothのペアリング/SSH接続する前に必要になります）
 - HDMIケーブル
 - モニター # HDMI端子があるTVでも代用可
Amazon
■参考：[スターターセット(Amazon)](https://www.amazon.co.jp/Raspberry-Pi-Model-%E3%82%B9%E3%82%BF%E3%83%BC%E3%82%BF%E3%83%BC%E3%82%BB%E3%83%83%E3%83%88-BASIC/dp/B07BHZP92R)
## 2. OSインストール
Raspberry Piの大きな特徴の１つに、”MicroSDごとにOSを変えられる”ことがあります。
市販でプリインストールのものを買うのも一つの手ですが、おすすめは余っているSDカードをフォーマットして、好きなOSを入れてみると良いと思います。
詳細な手順は下記のサイト等をご参照ください。
■参考：[Raspberry Pi 3（RASPBIAN JESSIE）OSインストールから初期設定(前編)](https://hirazakura.hatenablog.com/entry/raspberrypi/setup/first)

## 3. SSHサーバ化
続いて、

- パスワード認証のSSH導入
- 公開鍵認証に変更
- パスワード認証でのSSH試行を禁止
- 自宅の無線WiFiルータでのポートマッピング設定

を行います。
以下のサイトに詳しくまとめられているので、そちらを参照してください。
■参考：[Raspberry Pi3のLAN外からのSSH接続設定方法](https://qiita.com/3no3_tw/items/4b5975a9f3087edf4e20#raspberry-pi%E3%81%AEssh%E6%8E%A5%E7%B6%9A%E8%A8%AD%E5%AE%9A)

###Tips1: おすすめのSSHクライアントAndroid/iOSアプリ
外出先からSSHしたい！というとき、あると思います。
そんなときには、「Termius」というアプリがおすすめです。
[Termius](https://termius.com/)
Android でも iOSでも対応で、基本的な機能（SSH, SSHポートフォワーディング）であれば無料で使えます。ぜひ試してみてください。
### Tips2:Wi-FiルータのWAN側のIPアドレスが変更になる原因と対策
ISP(インターネット・サービス・プロバイダ)側でのDHCPにより、Wi-FiルータWAN側のIPアドレス（つまりグローバルIPアドレス）は、モデムやWi-Fiルータ再起動時に変更となってしまいます。その対策としては、
1. NoIP等を活用する
2. 予めcrondで再起動時等にグローバルIPアドレスをメール/LINE通知するシェルスクリプトを走らせる設定をしておく
    - 参考：<https://qiita.com/kumasun/items/e02a4847963cfc73d003>
    - 参考：<https://shell-mag.com/rensai-shellscript1-9/>
3. モデムやWi-Fiルータを再起動するたびに、LAN内でルータの管理画面にアクセスし、WAN側IPをメモしておく
ことが挙げられます。

## 4. NASサーバ構築
続いて、外付けHDDをNAS(Network Attached Strage)にします。
[Raspberry Piで快適コンピューターライフ(NAS構築編)](https://qiita.com/3no3_tw/items/9baf638cdfbc986cba4f)
※もし購入した外付けHDDが動かない、途中途中で止まる、という場合は、電流不足になっている可能性があります。その際には、下記のサイト等を参考に、供給電流を増やしてみてください。
■参考：[Raspberry Piに3TBのUSB HDD(HD-AC30TK)を追加してみた](http://akkagi.info/20160402_web/)

## 5. SSHポートフォワーディング
ここまでで、
- LAN内でのNASへのアクセス
- 外部からのSSHでのコンソール接続
までは出来るようになっています。
ここからは、外付けHDD内のデータを、外部からセキュアにアクセスするために、**SSHポートフォワーディング**を使ったアクセス方法を解説します。
### Windowsからアクセスする場合
(※筆者自身は出来ているのですが、まとめるのに時間がかかりそうなのでいったん保留にします。)
### Macからアクセスする場合
1. ターミナル上で、以下のコマンドを実行します。

        ssh -i .ssh/ida_rsa.raspi -L 5555:192.168.10.XXX:443 [ユーザ名(pi等)]@[自宅ルータのWAN側IPアドレス]
SSHポートフォワーディングでポイントとなる部分は以下の2点です。
 - `-i .ssh/ida_rsa.raspi` : 公開鍵認証に用いる秘密鍵を指定
 - `-L 5555:192.168.10.XXX:443`：ローカル(127.0.0.1)の5555/tcpへの通信を、リモート接続先内のLANの192.168.10.xxxの443/tcpへ転送する

2. 続いて、デスクトップをクリックした上で、`⌘ + K`で「サーバへ接続」画面を出します。

3. 下記のように入力し、「接続」を押します。
 ![スクリーンショット 2019-06-23 10.24.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/330628/25d89377-8354-57da-978f-280e77119a0d.png)

4. 次の画面が出てくるので、接続を押します。
![スクリーンショット 2019-06-23 10.27.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/330628/2616a0b0-acc7-a908-b3be-d89580a9d6b3.png)

5. Samba設定時に設定したユーザ名とパスワードを入力します。
![スクリーンショット 2019-06-23 10.27.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/330628/196ce7ca-59ef-0554-ea6b-38c8c73ceafe.png)

6. 最後に、マウント先のフォルダを選択すれば、接続完了です。
![スクリーンショット 2019-06-23 10.27.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/330628/a097c1ee-e0aa-c77b-592d-4a86bbcf2541.png)

### Android/iOSからアクセスする場合
1. 「Termius」を開き、「Port Forwarding」を選択します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/330628/2bf48f39-09c0-6c70-9a94-d8165b0f02ba.png" width = "50%">

2. 各項目を入力してきます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/330628/829c36f6-c69e-a3f3-50b1-8a01290a9527.png" width = "50%">

入力時のポイントは下記の通りです。

- Label:フレンドリ名。任意に設定可能。 
- Type:ポートフォワーディングの種類。基本、LocalのままでOK。 
- Host from:先に、Termiusの「Hosts」の項目で設定したSSH接続先のレコードから、SSHポートフォワーディング先を選択する。
- Port from, e.g. 22055:SSHトンネルの入り口のtcpポートを指定する。22055/tcpなど、他のサービスで使っていなさそうなポートを選択する。
- Host to, hostname : SSHトンネルを出た先の、LAN内での対象機器のIPアドレスを指定する。ラズパイがSSHサーバ兼NASを兼ねているので、ラズパイのLocal IPを入力することになる。
- Port to:SSHトンネルの出口のポートを指定する。Sambaの場合、特に変更していなければ445となる。
- Address:スマホ自身からポートフォワーディングするので、127.0.0.1を入力する。

入力後、好きなAndroid/iOSのエクスプローラアプリを使って、「IP:127.0.0.1, Port:5555/tcp」に接続することで、NASにアクセスできます!!
参考（おすすめ）：[「ファイルマネージャー」(for Android)](https://play.google.com/store/apps/details?id=com.alphainventor.filemanager&hl=ja)

# おわりに
今回、ここ1-2年で少しずつ構築してきたラズパイサーバの作り方を抜粋してまとめてみました！　よりセキュリティを高めるためには、ログ監視をしたりfirewall設定したり、まだまだこの記事で紹介できていないことが多々あります。
今後も少しずつ記事を増やしていきますので、よろしければぜひフォローお願いします！！