Raspberry Pi 3+の設定（忘備録）その１　無線LANにつないでSSHでリモート接続まで（ファイアウォール関連追記）

今までRaspberry Pi 3+に16GBのmicroSDを挿してwebサーバとして運用していましたが、手狭になってきたので64GBに改めて環境構築をした時の自分の作業の忘備録です。以前導入した時とだいぶ変わっている部分が多かったので驚いたのが第一印象でした。

# 前提

* このラズベリーパイは外部に公開はしません。（twitterへのポストはします）
* 普段、このRaspberry Pi 3+は午前7時から午後11時まで30分毎にcronでbotを運用しています。
* そのため一日当たりの作業時間は夜間の23時から0時までの1時間ぐらいをメンテナンス時間として作業を行う予定です。

またこういう世界から遠ざかって久しいのでいろいろと拙い部分があると思います。ぜひご指摘ください。

# 準備したハード・書籍

* 64GBのmicroSDカード×2枚。1枚は予備用

また今回作業するにあたり、以下の本を参考にしました。

* 日経Linux2019年特別付録　初めてのラズパイ＆電子工作ブック
* 技術評論社　ゼロからわかるLinaxWebサーバー超入門

# 準備するソフトウェア
<dl>
<dt>Raspberry Pi Imager</dt>
<dd>Raspberry Pi OSをmicroSDカードに書き込みをする為に使用</dd>
<dt>Win32DiskImager</dt>
<dd>microSDのバックアップを取る為に使用。都度にバックアップを取っておくと、設定をミスした時にリカバリーが楽になります</dd>
<dt>Teraterm</dt>
<dd>作業用windowsPCからラズベリーパイにリモートログインするために使用</dd>
</dl>

# Raspberry Pi Imager導入→microSDカードをフォーマット&書き込み

※この作業はwindows上で完結する作業なので、23時のメンテ時間前に済ませておくことができます。

## 作業用WindowsPCにRaspberry Pi Imagerをインストール
作業用windowsPCに導入するRaspberry Pi Imagerをダウンロードしてきます。

https://www.raspberrypi.org/software/

から実行ファイルをダウンロードします。今回の環境はwindowsなのでwindows用を落とします。
![01_ファイルダウンロード1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1207708/f45ad06f-e790-9231-67a9-eff163ac9ca7.jpeg)
実行ファイルがダウンロードされました。このファイルをダブルクリックすれば、Raspberry Pi Imagerがインストールされます。
![02_フォーマットファイルインストール1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1207708/f06b2368-c448-187a-6d66-00c22c7afdb7.jpeg)
![02_フォーマットファイルインストール2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1207708/3cad50a7-662e-7531-330c-77bd5ec62c43.jpeg)
「Install」をクリックすればインストール完了です。
![02_フォーマットファイルインストール3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1207708/00e81668-046a-bee1-6133-d5dcdeb6d23f.jpeg)
完了しました。

## microSDをフォーマット＆ディスクイメージの書き込み
Raspberry Pi Imagerを起動します。
「microSDにどのOSをインストールするか」「どのドライブにインストールするか」の2点を選択して「WRITE」ボタンを押します。
![03_ラズパイOSダウンロード選択1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1207708/a82edc30-311b-07e5-08f6-9ffb9ddf59e6.jpeg)
とりあえず一番上のRaspberryPiOS(32-bit)を選んでおきました。
![03_ラズパイOSダウンロード選択2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1207708/d7a89679-1e7e-7d81-2ea8-c48ee177bb15.jpeg)
インストールするmicroSDカードが刺さっているドライブを選択します。今回はFドライブを選択しました。
![03_ラズパイOSダウンロード選択3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1207708/ac401da7-e9e8-0c8f-43eb-72df13fc884d.jpeg)
一番右の「WRITE」ボタンをクリックして実行です。
![03_ラズパイOSダウンロード選択4.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1207708/1be58d79-846c-3222-d022-b8e78c7c1c5b.jpeg)
「デバイス内のすべてのデータが消されるがよいか？」と聞かれます。Yesと答えるしかないです。しばらく時間がかかるのでお茶でも飲んでいましょう。
![03_ラズパイOSダウンロード選択5.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1207708/8a91f6e3-fe5f-c5d9-eb06-59dfd1e5a28e.jpeg)
書き込み中の画面です。
![03_ラズパイOSフォーマット・書き込み1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1207708/de821006-02c1-2369-ef94-52a5e3ae7eb8.jpeg)

書き込みが終了したmicroSDのパーティッションです。複数に分割されています。
![06_イメージ書き込み後sd.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1207708/5ce6ad02-95f0-7ff2-c985-4db23f6debc7.jpeg)

# microSDをRaspberryPiに挿してネットワーク設定
この日のノルマは「ラズパイを無線LANでつなげてTeratermでSSH接続」までを目標とします。

実際にこの日行った作業

* /etc/hostnameと/etc/hostsでホスト名の変更
* /etc/dhcpcd.confで固定IPとデフォルトゲートウェイの設定
* SSHサービスの起動
* nmapのインストール
* /etc/ssh/sshd_configでSSHのポート番号を任意の番号に変更
* /etc/wpa_supplicant/wpa_supplicant.confで無線LANのSSIDなどの設定

## ラズベリーパイ起動
windowsでディスクイメージを書き込んだmicroSDをRaspberry Pi 3+に挿して起動します。この段階ではHDMI、キーボード、マウス、LANケーブル、電源と小さな箱にケーブルだらけで取り回しが非常に面倒です。早いところリモートログインができるように設定したくなります。
しばらくはラズベリーパイでの作業になります。

![07_ラズパイ起動後1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1207708/09ecbeb0-89c6-167f-c054-844eb501b4c4.png)
初回の起動は少し時間がかかりますが無事起動しました。
![07_ラズパイ起動後2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1207708/3222fc85-09a3-b7ca-470f-00e08d723fe4.png)
![07_ラズパイ起動後3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1207708/50031215-cd89-b2e9-7c6f-394b9642747e.png)
起動した際に国と言語、デフォルトのユーザー名piのパスワードを設定するように求められるので設定しましょう。
![07_ラズパイ起動後5.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1207708/3eb661f1-5cc9-203c-7afc-7f4f6d2ba689.jpeg)
無線LANの設定画面も出てきますが、今回はskipして有線LANの設定を後程行います。

## ホスト名の変更
ホスト名を変更します。

```config:/etc/hostname
raspberrypi #（デフォルト）
↓
hogehostname #（任意の名前）
```

```config:/etc/hosts
127.0.1.1 raspberrypi
↓
127.0.1.1 hogehostname #（任意の名前）←hostnameで変更したのと同じ名前にしておく事
```

## 固定IPとデフォルトゲートウェイの変更
LANにつなぐ際の固定IPとデフォルトゲートウェイの設定を行います。

```config:/etc/dhcpcd.conf

# 有線LAN
interface eth0
static ip_address=xxx.xxx.x.xx/24　#←固定したいIPアドレス/サブネットマスク
static routers=xxx.xxx.x.x　#←デフォルトゲートウェイ
static domain_name_servers=
static domain_search=

# 無線LAN
interface wlan0
static ip_address=xxx.xxx.x.yy/24
static routers=xxx.xxx.x.x
static domain_name_servers=
static domain_search=
```
IPアドレスの/24はサブネットマスクの255.255.255.0(11111111.11111111.11111111.0←1を全部足したら24)を現しています
有線LANと無線LANは別のIPを設定します。

このあたりで一度再起動してみましょう。再起動して、どこかにpingが通るか、ブラウジングができるのであれば無事ネットワークにつながっています。

## SSHサービスの起動
ネットワークにつながったので、作業用windowsPCにインストールしてあるTeratermから有線LANのIPへSSHで接続を試みます。 **拒否されました。Raspbianと違う。。。**
SSHのポートが何番であるか調べるためにnmapを使用しようとしたところ、 **入っていません。**
nmapをインストールを行います。

```console:
$ sudo apt-update
$ sudo apt-get nmap
```

これでnmapがインストールされました。早速実行してみます。

```console:
nmap -p 1-65535 localhost
```
sshのポートが開いていないことが判明しました。SSHのサービスを起動します。

```console:
$ sudo raspi-config
```
![07_ラズパイ起動後6.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1207708/e16595fc-7b34-33ea-954e-34d7aa8b27e3.jpeg)
設定画面が開かれるのでInterfacing Optionsを選択
![07_ラズパイ起動後7.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1207708/f078a8ff-4082-3bb2-65ef-a3eabc1b4add.jpeg)
SSHを選択
![07_ラズパイ起動後8.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1207708/b419ee7a-4b51-128b-afa8-18be42f2338c.jpeg)
「SSHサービスを実行するか」と聞かれるので「はい」を選択
また再起動をします。（sudo /etc/rc.d/init.d/sshd restartでもいいかもしれません）

再起動後、またnmapでポートの状況を見てみると無事開かれました。

## ポート番号の変更と、SSHにリモートログインしてくるIPアドレスの限定
以降、ポート番号はそのままでよい人は無線LANの項目まで読み飛ばしてください。

ポート番号がデフォルトのままだとセキュリティに問題があるので任意の番号に変更します。
/etc/ssh/sshd_configのportの設定値がコメントアウトされているのでそれを外し、任意のポート番号を入力します。

```config:/etc/ssh/sshd_config
#port=22
↓
port=（任意の番号)
```
再度、再起動を行いnmapを実行。ポート番号が変更されている事を確認します。（サービス名がunknownになっていても問題なし。/etc/servicesに登録されていないため）

この変更を踏まえ、作業用windowsPCのTeratermから有線LANのIPと、変更したSSHのポート番号でリモートログインができることを確認したところ無事に入ることができました。
これでラズベリーパイからHDMI、キーボード、マウスの線を抜くことができます。

続いてリモートログインしてくるIPアドレスの設定です。

```config:/etc/hosts.allow
#アクセスを許可するIPアドレス
sshd:xxx.xxx.x.xxx,xxx.xxx.x.yyy #IPアドレスが複数ある場合はカンマで区切ります。
```

```config:/etc/hosts.deny
#アクセスを拒否するIPアドレス
sshd:ALL
```

これで、/etc/hosts.allowで設定したIPからのみSSH接続が可能となります。

## ファイアウォールの設定
※　2023/04/25　この設定をすることがすっぽり抜けていたため追記です。

参考url

https://101010.fun/iot/raspi-ufw.html

```config
#ファイアウォールのインストール
$ sudo apt install ufw

#とりあえずすべてのポートを拒否
$ sudo ufw default deny

#！！まだ有効化してはダメ！！

#まずはssh
$ sudo ufw allow 22（前述の項目でsshのポート番号を変更していた場合はその値を入れる)

#http関係
$ sudo ufw allow 80
$ sudo ufw allow 8080
$ sudo ufw allow 443

#samba関連
$ sudo ufw allow 137
$ sudo ufw allow 138
$ sudo ufw allow 139
$ sudo ufw allow 445

#ここまで設定してからファイアウォールを有効化
$ sudo ufw enable
```

## 無線LANの設定
ここからは作業用WindowSPCからリモートで作業ができます。
/etc/wpa_supplicant/wpa_supplicantを編集します。

```config:/etc/wpa_supplicant/wpa_supplicant.conf
network={
        scan_ssid=1
        ssid="hogehoge_ssid"
        psk="hogehagehoge_psk"
}
```
**scan_id=1は、SSIDがステルスの時に設定します。** これを設定しておかないといくらssidとpskが合っていても繋がりません。
さらにpskがこの場合、平文なので暗号化を行います。
コマンドで以下を実行

```console:
$ wpa_passphrase "hogehoge_ssid" "hogehagehoge_psk"
```

```console:
#実行結果
network={
        ssid="hogehoge_ssid"
        #psk="hogehagehoge_psk"
        psk=（暗号化された内容）
}
```
すると、暗号化されたpskの内容が出力されるので、/etc/wpa_supplicant/wpa_supplicant.confのpskの部分にコピーしましょう。scan_ssid=1を追記することをお忘れなく。

有線LANを抜き、再起動しましょう。
再起動後、無線LANのIPにリモートログインが出来ることを確認します。（SSHのポートは先ほど変更した任意の数値です）

この日の作業はここまで。

:::note info
念のためこのあたりでWin32DiskImagerでmicroSDのイメージをコピーしておくことをお勧めします。
:::

# 関連ページ

https://qiita.com/cafe-capitola/items/b5e3e5dfdc8ca9f9a744

https://qiita.com/cafe-capitola/items/283f41793cde409a36a6

https://qiita.com/cafe-capitola/items/d167b4e96fa78dc8878c

https://qiita.com/cafe-capitola/items/97dd713185049d4a8274

https://qiita.com/cafe-capitola/items/2b80853490c88d6eae0c?1

https://qiita.com/cafe-capitola/items/91e10926bfbe9cea61e0

https://qiita.com/cafe-capitola/items/9f97c791a598420a7e57