Raspberry Pi 3 B セットアップ

Raspi のセットアップの手順です。基本的な流れは他の Linux と同様でそれがより簡単になったものですが、要望もありましたのでさっと勢いよく準備できるようにまとめておきます。ここでは最小の構成で Raspi をセットアップして使えるようにするところまで持っていきます。

Raspberry Pi 公式サイト

起動するまで

設置

Raspberry Pi 3 B (in a case)

私はケースも買ったので、ケースに入れます。ケースは分解して中のピンに繋ぐ場合も扱いやすいようになっています。

給電

5 [V]、2.5 [A] を USB で給電する必要があるらしいです。いつも使っていて手元にある Anker PowerPort 5 (40W 5ポート USB急速充電器ハブ) マルチポート USB急速充電器 iPhone 6 / 6 Plus、 iPad Air 2 / mini 3、 Galaxy S6 / S6 Edgeなど対応 (ホワイト) A2124522 を使いました。これは 3 年前の 2014 年に買ったもので、今は USB type-C にも対応した新しいモデルが出ています。現在はこちらに買い換えて使っています。

これを 2 A 対応の太いケーブルを使って繋いでいます。

Raspberry Pi に電源スイッチなどなく繋ぐとただちに電源が入るので、接続は最後にします。

その他の配線

イーサネットは適当に手元にあった CAT5e の LAN ケーブルです。 そもそも Raspi が 10/100 BASE-T なので適当でよいです。

画面に繋いで使用する場合は HDMI でディスプレイに繋ぎ、USB でキーボードを繋いでおきます。最初から SSH でやることもできるので、この場合は必要ありません。

Micro SD カード

Micro SD card (Toshiba 4GB class4)
手元にあった東芝製の micro SD カードを使いました。4 GB です。空きは少ないですが割とこれでも行けます。

その後さすがに手狭になってきたため、今は 32 GB の Micro SD カードを使っています。4 GB ほどある TeX を入れてしまったため 10 GB ほど使っていますが、このようによほど大きいファイルやパッケージを保存したりしなければ 8 GB や 16 GB のものでも十分そうという印象です。

Raspberry Pi 3 B (micro sd)
本体の裏に差し込みます。ケースを付けていてもむき出しになっています。別にカチッと止まったりはせず刺さるだけです。

OSのインストール

最初に Raspberry Pi の公式サイトの “Downloads” から Raspbian をダウンロードします。GUI はたぶん使わないので RASPBIAN JESSIE LITE です。最低限のパッケージしか入っていないようなので必要な時に随時インストールしていきます。ダウンロードが遅いという話も聞いたので Torrent でダウンロード。

ディスクの RAW イメージなので、Windows の場合は Win32DiskImager あたりで書き込みます。

初めから  SSH を使用する場合

Micro SD の一番上のディレクトリに ssh という名前でファイルを作っておくと最初から SSH が有効になるので、最初から作業が SSH だけでできます。

起動

USB ケーブルを接続し給電されるとただちに電源が入り起動します。起動したら、初期ユーザ pi、初期パスワード raspberry でログインします。

raspi-config

ログインするとターミナルが表示されるので sudo raspi-config で設定画面に入ります。

  1. Change User Password
    • さすがに初期パスワードは NG
  2. Hostname
    • コンピュータ名を適当に設定
  3. BootOption
    • B1 BootOption で Console に設定→用途によって適宜 Desktop
  4. Localisation Options
    1. Locale
      • ロケールの設定
      • この設定は SSH ログインしてマウスのスクロールを利用して(特に Mac のトラックパッド)一気にスクロールすると探しやすくて楽
      • ja-JP.UTF-8 UTF-8
    2. Timezone
      • タイムゾーンの設定
      • Asia-Tokyo
    3. Wi-Fi Country
      • 国によって使える Wi-Fi のチャンネル(周波数帯)が違うため使用国を設定する(日本は 2.4 GHz 帯を全部使えるらしい)
      • JP Japan
  5. Interfacing Options
    • SSH を enabled にするだけ
  6. Overclock
    • この端末では不可
  7. Advanced Options
    • Expand Filesystem を選択・実行してSD カードの全容量を使えるようにする
  8. Update
    • ちょっと時間かかる

Localisation Options の表記はどうも前のバージョンでは違うらしい。

IP アドレスの確認と固定

ifconfig で MAC アドレスを確認し、ルータの DHCP に IP アドレスを設定し固定します。

SSH のための設定

適当に ssh-keygen.ssh フォルダと鍵を生成します。.ssh フォルダを自分で作った場合はパーミッションを 700 に変更します。

SSH でのログインができるように、今のうちに適当に公開鍵を入れておきます。ここでは手っ取り早く wget で GitHub あたりから落として、authorized_keys として保存しています。そうでなければ、authorized_keys ファイルにログインに使用するマシンの公開鍵を入れておきます。

ssh-keygen
wget https://github.com/{自分のID}.keys -i authorized_keys

DDNS の設定

パッケージの更新

apt パッケージを更新しておきます。

sudo apt update
sudo apt upgrade

ユーザ名の変更と設定

Raspbian のデフォルトユーザ pi について調べる | 荏苒社 azw.jp に書いたように、ユーザ名を変更しておきます。ここではユーザ名を変更する方法をとりますが、必要に応じてそのまま使用したり、別のユーザで使用するなど適宜。

まず初期ユーザ pi

sudo useradd -M tmp
sudo gpasswd -a tmp sudo
sudo passwd tmp

つぎに、一旦ログアウトし tmp ユーザに切り替えて

echo {新ユーザ名} | xargs -I{} sh -c "sudo usermod -l {} -d /home/{} -m pi; sudo groupmod pi -n {}"

最後に、またログアウトし pi だったユーザに切り替えて

sudo userdel tmp

で完了です。

エディタの変更

ここまでは特にエディタを使うことはありませんでしたが、そろそろエディタを使いやすい物に変更しておきます。デフォルトの nano では不便なので vim にしたいですが、Raspberry Pi に入っているのは tiny な Vim なので、普通の huge な Vim を入れます。

sudo apt install vim

として入れます。そのあと、

select-editor

と実行すれば

Select an editor.  To change later, run 'select-editor'.
  1. /bin/ed
  2. /bin/nano        <---- easiest
  3. /usr/bin/vim.basic
  4. /usr/bin/vim.tiny

Choose 1-4 [2]: 

と聞かれるので、好きなエディタを指定します。

sudo update-alternatives --config editor ではどうも上手く変わらないみたいです。

SSH の設定

ポート変更について

SSH ポートに 22 番ポートを開けておくのは面倒なので、適当なポートに変えるか何かしておきます。

念入りに設定する場合はもっとちゃんといろいろ設定したりもしますが、家庭内の LAN で行っている場合はそもそもルータ部分で弾かれてしまっていたりして、そしてお高いルータのようにポートスキャンに対抗してくれる機能もないので、労力を考えるとそこまで頑張らなくてもよいかなと思います。

sshのポートをデフォルトの22/tcpから変えるべきか論争に、終止符を打ちました – ろば電子が詰まっている

sshハニーポットをkippoで作ってみる – ろば電子が詰まっている

設定

sudo vim /etc/ssh/sshd_config

で、以下のように適宜設定します。CentOS 等のものと違い元から Protocol 2 などがデフォルトで色々書いてあるので、他はおおよそ大丈夫かと思います。

  • PermitRootLogin no
    • SSH でのルートログインを禁止するので no
    • そもそもパスワード設定していないので SSH でなくてもルートログインできないはず
  • PasswordAuthentication no
    • 公開鍵認証のみにする場合 no
  • ListenAddress ::
    • IPv6 ですべてのアドレスから許可する場合
  • ListenAddress 0.0.0.0
    • 同 IPv4
  • Port 22
    • 必要に応じて適当に変えたり変えなかったり増やしたり
    • 複数行書けばポートを増やせる
    • 既にファイアウォールを設定している場合は、SSH の設定のあと切断する前にファイアウォールの SSH 部分の設定もここの数字に変えておく

設定が終わったら sshd を再起動します。

sudo /etc/init.d/ssh restart

Match ブロックを設定してユーザごとだったりアクセス元だったりによって設定を変えるのも良いかもしれません。

ポートを22番から変更した場合はファイアウォールの設定も変えておきます。

秘密鍵の設定

秘密鍵を生成して、公開鍵を GitHub あたりから持ってきます。

ssh-keygen
wget https://github.com/{自分のID}.keys -i authorized_keys

ファイアウォールの設定

初期設定では全部の通信を通過するようになっているので、必要なもののみを通すように設定します。

iptables 設定永続化

Ubuntu などと同様に、Raspbian では iptable の設定に一手間かかるようなので iptables-persistent を設定します。参考: 【Debian 8 Jessie】iptablesの設定をこれだけはやっておく – Qiita

sudo apt install iptables-persistent

“save current rules?” と言われてもすぐに上書きしてしまうので適当に Yes と流しておきます。インストールが終わったら、/etc/iptables/rules.v4 と /etc/iptables/rules.v6 にそれぞれ設定を書いていきます。

設定が終わったら

sudo netfilter-persistent reload

と実行すれば新しい設定でファイアウォールが再起動されます。

run-parts: executing /usr/share/netfilter-persistent/plugins.d/15-ip4tables start
run-parts: executing /usr/share/netfilter-persistent/plugins.d/25-ip6tables start

のように問題なさそうなメッセージが出てくれば OK です。設定が間違っていた場合は failed. とか言われて怒られます。

IPv4

とりあえず無難な設定をさくらのナレッジあたりを参考に……というかコピペして設定しておきます。自分の設定のために追加した部分を抜いて説明用にちょっと変えたらまったく同じ物に戻ってしまいました。SSH の部分は適宜ポート番号を変更してください。

*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]

# roopback
-A INPUT -i lo -j ACCEPT

# drop packets without data
-A INPUT -p tcp --tcp-flags ALL NONE -j DROP

# block SYNflood attack
-A INPUT -p tcp ! --syn -m state --state NEW -j DROP

# stealth scan
-A INPUT -p tcp --tcp-flags ALL ALL -j DROP

# ping
-A INPUT -p icmp --icmp-type echo-request -m hashlimit --hashlimit-name t_icmp --hashlimit 1/m --hashlimit-burst 10 --hashlimit-mode srcip --hashlimit-htable-expire 120000 -j ACCEPT

# connected
-A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT

# DNS
-A INPUT -p udp --sport 53 -j ACCEPT

# SSH (port 22)
-A INPUT -p tcp -m state --syn --state NEW --dport 22 -m hashlimit --hashlimit-name t_sshd --hashlimit 1/m --hashlimit-burst 10 --hashlimit-mode srcip --hashlimit-htable-expire 120000 -j ACCEPT

COMMIT

IPv6

Raspberry Pi はデフォルトで IPv6 が無効なので、ここは必須ではないでしょう。

IPv6 の設定もほとんど同じですが、ICMP ではなく ICMPv6 ですからちょっとだけ違います。19 行目を以下のようにすればよいはずです。

# ping
-A INPUT -p icmp --icmp-type echo-request -m hashlimit --hashlimit-name t_icmp --hashlimit 1/m --hashlimit-burst 10 --hashlimit-mode srcip --hashlimit-htable-expire 120000 -j ACCEPT

IPv6の有効化

参考: Raspberry Pi/IPv6/IPv6を有効にしてみる – Berry Pie Lab

Raspbian ではどうも IPv6 がオフになっているようです。ifconfig を見てみても IPv6 のアドレスが割り当てられていません。そのため必要に応じて有効化する設定を行っておきます。

/etc/modprobe.d/ipv6.conf を編集し、alias net-pf-10 off の行頭に # を書いてコメントアウトします。次に

modprobe net-pf-10

を実行して設定を有効化します。

外部・インターネットからのアクセス

必要に応じて、外部のネットワークからアクセスできるようにします。

DDNS の設定

外部のインターネットからアクセサスしやすいように DDNS を設定します。私は MyDNS を使っています。登録方法は基本的に MyDNS の「HOW TO USE」を見ればわかるかと思います。

2017 年 11 月時点では、ページ上部の「JOIN US」から登録できます。自分の情報を入力するとメールに ID とパスワードが送られてくるので、これでログインします。「DOMAIN INFO」のページで DOMAIN に使用したいドメインを設定すれば、そのアドレスでアクセスできるようになります。MX は自動で入力されます。

cron の設定

MyDNSに適当に登録したあとは MyDNS の解説ページ を参考に、crontab を設定します。IPv4 と IPv6 を両方通知させるために二回行っています。

公式の解説ページでは 5 分間に一回行っています。時間は適当に設定してよいのですが、間隔が長すぎると IP アドレスが変更されてから再接続可能になるまでに時間がかかってしまいます。

crontab -e でエディタを開いて、

*/5 * * * * wget -q -O /dev/null http://ID:パスワード@ipv4.mydns.jp/login.html
*/5 * * * * wget -q -O /dev/null http://ID:パスワード@ipv6.mydns.jp/login.html

のように追記します。-q でメッセージの出力を停止し、-O /dev/null で出力を無視しています。

適当に待つか自分で wget して一度アクセスすれば、後は先ほど指定したドメインでアクセスできるようになります。

また、私はより簡単にアクセスできるように、自分で持っているドメインのサブドメインに CNAME として MyDNS のドメインを指定しておいています。

複数のアドレスを持ちたい場合

MyDNS では 256 個まで子 ID が作成出来るのでこれを使用します。MyDNS に親 ID でログインした後、「USER INFO」のページに入ります。「子ID関連」のところで追加する ID の数を設定し「CHECK」を選択、更新します。メールで ID とパスワードが送られてくるので完了です。

次に、「DOMAIN INFO」に入り一番下のサブドメインの所に設定をします。

下のボックスに適当なサブドメインを入力し、DELEGATE を選択、右側のドロップボックスで子 ID を指定すれば、子 ID とドメインの結びつけが完了です。

例えば自分のドメインが「*\*.mydns.jp」でサブドメインが「foo」なら「foo.**.mydns.jp」でアクセスできます。

ルータの設定

特にこのあたりはネットワークの環境に依ってもだいぶ違うと思うので適当に。

IPv4 の場合は、ルータの設定で静的IPマスカレード設定を行います。ここでは SSH 接続ですから、適当なポートに入ってくる TCP の通信が先ほど指定したポートへ行くように設定します。また、パケットフィルタによって遮断されないように設定します。ping が使えるように必要に応じて ICMP  や ICMPv6 も許可しておきます。

参考

【初心者向け】ゼロから始める!自宅で ownCloud on Raspberry Pi – Qiita