Raspberry Pi 2 + RASPBIAN JESSIE LITE でサーバー構築 (準備と初期設定)

2016/11/15

 

今年は NAS の故障が続きバックアップの大切さを痛感しております。 そこで、不意のクラッシュに対応できるバックアップを前提としたサーバー構築を目指します。

NAS のクラッシュ時に、HDD 内のデータは何とかリカバリー出来ましたが、ブログのデータはとうとう復旧できませんでした。

データベースの知識がもう少しあればどうにかなっていたかもしれませんが、半年分のブログデータをあきらめ新たにサーバーを構築するようにしました。

初めてのサーバーでは、Raspberry Pi にホームページからブログまで全てのサーバー機能を持たせました。

次に Diskstation(NAS) をサーバーにした時にはホームページをプロバイダのサーバースペースに置きましたが、ブログは NAS に設置しました。

NAS を外部に公開するようにしたため、使用しない場合電源が切れるようになっているのですが、アクセス時に電源が入るために HDD に余分なストレスを与えてました。

今回は、NAS は NAS 目的のみに使用し HDD をいたわるよう設置し、ホームページはプロバイダへ、ブログは Raspberry Pi での運用とすることにします。

ホームページのデータはアップロード時のデータが PC 内に残っているため、完全なバックアップが存在します。

NAS はこれまでのリカバリー経験があるため、どうにかなる算段が付いております。

問題はブログのバックアップで、更新時にデータをエクスポートしても良いのですが、今回は USB アダプタで取り付けた microSD に Raspberry Pi のシステムを同期させる方法でバックアップを取るようにします。

とりあえず OS のインストール、SSH FTP のインストール、ファイヤーウォールのインストール。

WEB サーバー、ブログシステムのインストールが終了した時点で microSD のクローンを作り、毎日同期させるようにします。


OS (Raspbian Jessie Lite) のインストール

ここは、初代サーバーの 準備と初期設定 と同じなので今回は説明を省きます。

以降は、microSD にシステムイメージを書き込んだ状態からの説明とします、

初めてのログイン

ユーザー pi、パスワード raspbian でログインします。 ログイン後、設定ツールの raspi-config を起動します

pi@raspberrypi:~$ sudo raspi-config

初期設定 パスワード変更

ユーザー pi のパスワードは広く知られているため、早めにパスワードを変更します。

 2 Change User Password 
 Enter new UNIX password:
 Retype new UNIX password: 2回パスワードを入力

初期設定 タイムゾーン

地域とタイムゾーンの設定を行う。

 5 Internationalisation Options 
 I1 Change Locale
[*] ja_JP,UTF-8 UTF-8
 en_GB,UTF-8 サーバー用途なので標準で英語にしておく


 I2 Change Timezone
 Asia

 Tokyo

グラフィックメモリの設定

GUI は使用しないのでグラフィックメモリを最小限に設定しておきます。

 9 Advanced Options 
 A3 Memory Split
 16

初期設定 SD カードの領域拡張

Raspbian のイメージは SD カードの全領域を使用していないので、領域いっぱい使用できるようにする。

 1 Expand Filesystem 

他にも設定はあるのだが、特に変更が必須なものがないので <Finish> を選択し終了する。 終了すると再起動される。

root のパスワード変更と su -

再度、ユーザー pi でログインするがパスワードは先ほど設定した新しいものを使う。

ファイルの構成を確認してみると SD カード全体を使用していることがわかる。

pi@raspberrypi:~$ df -h
 Filesystem      Size  Used Avail Use% Mounted on
 /dev/root        15G  883M   14G   7% /
 devtmpfs        459M     0  459M   0% /dev
 tmpfs           463M     0  463M   0% /dev/shm
 tmpfs           463M  6.2M  457M   2% /run
 tmpfs           5.0M  4.0K  5.0M   1% /run/lock
 tmpfs           463M     0  463M   0% /sys/fs/cgroup
 /dev/mmcblk0p1   63M   21M   43M   33% /boot

Raspbian の初期状態では root のパスワードは設定されていないので、これを設定する。

pi@raspberrypi:~$ sudo passwd root
 Enter new UNIX password:
 Retype new UNIX password: 2回パスワードを入力

設定項目が多く、毎回 sudo を付けるのが面倒なので su - で root として作業を行う。

pi@raspberrypi:~$ su -
 Password: root のパスワードを入力
 root@raspberrypi:~#

固定アドレスの設定

初めに現在のアドレスを確認する。

 root@raspberrypi:~# ifconfig

初期状態のアドレスは、ルーターから割り振られたアドレスなので固定アドレスにする。 ただし、Wheezy と Jessie では設定ファイルが異なる。 以前の /etc/network/interfaces を編集しても固定アドレスにはならない。 Jessie では、/etc/dhcpcd.conf を変更する必要がある。

 root@raspberrypi:~# vi /etc/dhcpcd.conf

 =エディタでファイル末尾に追記=
 interface eth0
 static ip_address=192.168.1.20/24 環境にあったアドレスを入力
 static routers=192.168.1.1
 static domain_name_servers=192.168.1.1

ネットワークの設定が終了したら再起動する。

再起動後アドレスを確認し、固定アドレスになっていればキーボードやディスプレイを外します。

これ以降は、SSH で外部接続を行いユーザー pi でログイン後 su- を実行し root として作業する前提で記述します。 また、クライアントソフトに関しては割愛します。

FDcloneのインストール

必要のない人は入れる必要はありません。以前インストールした際のまとめページを参照してください。

なお、まだ apt-get を実行していないのでアップデートしておきます。

 root@raspberrypi:~# apt-get update

メールの送信環境を構築

今回のサーバーは特にメール機能は持たせませんが、管理情報などをメールで送信したいので、メールの送信機能のみ使用します。 メール送信は Gmail 経由で行うため Gmail のアカウントが必要となります。

既にアカウントを持っていても、メール送信専用のアカウントを作成することをお勧めします。 また、アカウントのパスワードで設定してみたところ正常に動作しなかったので、2段階認証とし、アプリパスワードを取得しておきます。

まずはユーティリティと送信ソフトをインストールします。

 root@raspberrypi:~# apt-get install -y mailutils ssmtp

インストールが終了したら sSMTP の設定をします。 設定は /etc/ssmtp/sstmp.conf の末尾に設定項目を追記します。

 root@raspberrypi:~# vi /etc/ssmtp/ssmtp.conf

   =エディタでファイル末尾に追記=
   FromLineOverride=YES
   AuthUser=※メールアドレス
   AuthPass=※アプリパスワード
   FromLineOverride=YES
   mailhub=smtp.gmail.com:587
   UseSTARTTLS=YES
   AutoLogin=YES

ログインユーザーが実行できるようにパーミッションを変更します。

 root@raspberrypi:~# chmod 644 /etc/ssmtp/ssmtp.conf

ユーザー pi を mail グループに追加

 root@raspberrypi:~# gpasswd -a pi mail

メールの送信実験を行う

 echo "TEST" | mail -s "title" "送信先メールアドレス"

メールの受信確認が取れたら設定終了です。

ユーザー追加と pi の削除

新たにユーザーを登録します。 ユーザー登録後はユーザー pi を使用することは無いので削除します。

 root@raspberrypi:~# adduser ユーザー名
 Enter new UNIX password:
 Retype new UNIX password: 2回パスワードを入力
 :
 Enter the new value, or press ENTER for the default
         Full Name []: 空エンターで進む
         Room Number []:
         Work Phone []:
         Home Phone []:
         Other []:
 Is the information correct? [Y/n] Y

ユーザー pi の参加しているグループを調べます。

 root@raspberrypi:~# groups pi
 pi : pi adm mail dialout cdrom sudo audio video plugdev games users input netdev spi i2c gpio

新ユーザーを表示されたグループすべてに参加させます。

 root@raspberrypi:~# usermod -G pi,adm,mail,dialout,cdrom,sudo,audio,video,plugdev,games,users,input,netdev,spi,i2c,gpio 新ユーザー

groups コマンドで新ユーザーのグループ参加状態を確認して、問題なければ一度ログアウトし、新ユーザーでログインしてみます。

pi を使用することはもう無いので潔くユーザー pi を削除します。

 root@raspberrypi:~# userdel -r pi

グループ pi が残っているので、新ユーザーをグループ pi から退会し、空になったグループ pi を削除します。

 root@raspberrypi:~# gpasswd -d 新ユーザー pi
 root@raspberrypi:~# groupdel pi

SSHサーバーの設定

あまり多くありませんが SSH サーバーの設定を行います。 設定ファイルは /etc/ssh/sshd_config です。

 root@raspberrypi:~# vi /etc/ssh/sshd_config

   =該当箇所を修正=
   PermitRootLogin no root のアクセスを禁止する

   =末尾に追記=
   AllowUsers ユーザー名 接続許可を与えるユーザーを限定する

ssh サーバーを再起動させます。

 root@raspberrypi:~# service sshd restart

一度ログアウトした後、root でログインできないことを確認し、新ユーザーでログインできることを確認します。

もし、ログインできなければディスプレイとキーボードを接続し直接問題を解決してください。

SSHのアクセスをメールで通知

外部より SSH に接続された際にメールで通知するようにします。

SSH は接続時に /etc/ssh/sshrc を実行するので、スクリプトを記述することでメールの送信をするようにします。

 root@raspberrypi:~# vi /etc/ssh/sshrc 新しいファイルが作成される

   =新規に記述=
  #!/bin/sh
  ##SSH LOGIN MAIL##
  echo "`whoami`@`hostname` `date +\%Y/\%m/\%d/\%H:\%M:\%S`" | mail -s "ssh-login: `whoami`@`hostname`" メールアドレス

一度ログアウトし、再度ログインした際に指定した宛先にメールが届いていることを確認する。

FTPサーバーのインストールと設定

データのアップロードやダウンロードの為の FTP サーバーをインストールします。

 root@raspberrypi:~# apt-get install -y vsftpd

設定ファイルは /etc/vsftpd.conf です。

vsftpd に関しては以下の箇所を修正、追記します。 以前のまとめページにはもう少し詳細が書かれています。

 root@raspberrypi:~# vi /etc/vsftpd.conf

   =該当箇所を修正= 先頭の # はコメント削除 は修正・追記

   #write_enable=YES ファイルシステム変更コマンドを許可
   #local_umask=022 ファイル作成時のパーミッションを755に設定
   #xferlog_file=/var/log/vsftpd/vsftpd_xfer.log 転送ログファイルを指定
   #xferlog_std_format=YES 標準フォーマットでログを記録
   #ascii_upload_enable=YES asciiモードでのアップロードを許可
   #ascii_download_enable=YES asciiモードでのダウンロードを許可
   #chroot_local_user=YES
   #chroot_list_enable=YES 上コマンドと組み合わせ、リストで設定されたユーザーのみ上層へのアクセスを許可
   #chroot_list_file=/etc/vsftpd/chroot_list 上層へアクセスできるユーザーリストの指定
   #ls_recurse_enable=YES ディレクトリ削除の許可

   =末尾に追記=
   userlist_enable=YES ログイン許可ユーザーリストを使用する
   userlist_deny=NO ログイン禁止ユーザーリストを使用しない
   userlist_file=/etc/vsftpd/user_list ログイン許可ユーザーリストを指定
   log_ftp_protocol=NO xferログを使用するのでこちらのログは使用しない
   vsftpd_log_file=/var/log/vsftpd.log 一応ログファイルを指定
   dual_log_enable=YES vsftpd形式とwu-ftpd形式のログを保存する

設定ファイル内で指定しているディレクトリ及びユーザーリストを作成する。

 root@raspberrypi:~# mkdir /etc/vsftpd ディレクトリの作成
 root@raspberrypi:~# mkdir /var/log/vsftpd ディレクトリの作成
 root@raspberrypi:~# echo 許可するユーザー名 >> /etc/vsftpd/user_list ユーザーリストの作成
 root@raspberrypi:~# echo 許可するユーザー名 >> /etc/vsftpd/chroot_list 上層へアクセスできるユーザーリストの作成

vsftpd を再起動させます。 その後、外部の FTP ソフトでのアクセスを確認します。

 root@raspberrypi:~# service vsftpd restart

自動実行の設定

centos で使い慣れた chkconfig パッケージをインストールします。 必須ではありません。

 root@raspberrypi:~# apt-get install -y chkconfig

以下のコマンドで vsftpd の状態を確認します。

 root@raspberrypi:~# chkconfig --list

時刻の同期

Raspbian Jessie には標準で ntpd が動作している。 設定ファイルは /etc/ntp.conf で特に動作の変更はないが、ntp サーバーの指定を国内のサーバーに変更しておく。

 root@raspberrypi:~# vi /etc/ntp.conf

  =以下のサーバーが記載されている行をコメントアウト=
   #server 0.debian.pool.ntp.org iburst
   #server 1.debian.pool.ntp.org iburst
   #server 2.debian.pool.ntp.org iburst
   #server 3.debian.pool.ntp.org iburst

  =続けて日本国内のサーバーを追記=
   pool ntp.nict.jp iburst

再起動して ntp の同期状態を確認します。 リスタート直後では同期してませんがしばらくして同期を確認しました。

 root@raspberrypi:~# service ntp restart

 root@raspberrypi:~# ntpq -p
      remote           refid      st t when poll reach   delay   offset  jitter
 ==============================================================================
  ntp-a3.nict.go. .NICT.           1 u    2   64    1   24.873   -1.230   0.147
  ntp-a2.nict.go. .NICT.           1 u    1   64    1   22.812   -2.224   0.333
  ntp-b3.nict.go. .NICT.           1 u    2   64    1   24.236   -0.714   0.001
  ntp-b2.nict.go. .NICT.           1 u    1   64    1   21.879   -1.334   0.001
  ntp-a3.nict.go. .INIT.          16 -    -   64    0    0.000    0.000   0.000
  ntp-a2.nict.go. .INIT.          16 -    -   64    0    0.000    0.000   0.001

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

既に iptables が実行されファイヤーウォール働いてはいますが、ルールの設定がないために機能していません。 次のコマンドで確認できます。

 root@raspberrypi:~# /sbin/iptables -L

iptables のルールの設定はかなり複雑なので ufw というツールを使用するのでインストールします。

 root@raspberrypi:~# apt-get install -y ufw

ファイヤーウォールを不用意に設定すると ssh での接続が拒否されたりするので注意してください。

ufw の設定はコマンドラインで設定します。

 root@raspberrypi:~# ufw status 状態の確認
 Status: inactive	←無効、有効ならば active と表示される
 root@raspberrypi:~# ufw default DENY 標準で全てのアクセスを拒否
 root@raspberrypi:~# ufw allow 20 ポート20(ftp)のアクセスを許可 
 root@raspberrypi:~# ufw allow 21 ポート21(ftp)のアクセスを許可
 root@raspberrypi:~# ufw allow 22 ポート22(ssh)のアクセスを許可

 root@raspberrypi:~# ufw enable ufw を有効にする

設定終了後ログアウトし、再度 ssh でログインできることを確認する。

バックアップのおすすめ

ここまでの設定が終了したら、一度電源を落とし Win32DiskImager で SD カードのシステムイメージをバックアップしておきます。 

 root@raspberrypi:~# shutdown -h now