ラズパイ3(Raspberry Pi)で自宅webサーバー構築してみた

ラズベリーパイ3を利用したwebサーバーの構築を行います。

環境内容

今回ラズパイをwebサーバーにする環境内容です。

  • Raspberry Pi 3 Model B v1.2
    サーバーとなるコンピューター本体
    • OS:Raspberry Pi OS(32bit)の最新のもの
  • Apache2
    Raspberry Piにインストールするwebサーバー
  • webサーバーはローカルネットワークのみでの運用

Raspberry Pi の前準備

Raspberry Piの起動から設定までを手順を解説していきます。

OSのインストール

raspberry PiにOSをインストールします。

Raspberry Pi OSのインストール方法は以下の記事を参考にしてください。

ssh接続をする場合は以下の記事を参考にしてください。

https://it-syoya-engineer.com/headless-set-up/

セキュリティの設定

今回はローカルネットワーク内でのwebサーバーですが、今後外部からもアクセスできるようにするため、セキュリティは手を抜かずに設定していく。

rootパスワードの設定とユーザの追加

ssh接続で、rootログインはデフォルトで不可になっているがrootのパスワードを設定することでログインすることができる。

rootパスワードの設定

sudo passwd root

rootでログインしなおす。

sudo su

piではない、新しいユーザの追加。

adduser newuser

ユーザ `newuser' を追加しています...
新しいグループ `newuser' (1001) を追加しています...
新しいユーザ `newuser' (1001) をグループ `newuser' として追加していま す...
ホームディレクトリ `/home/newuser' を作成しています...
`/etc/skel' からファイルをコピーしています...
新しいパスワード:
新しいパスワードを再入力してください:
passwd: パスワードは正しく更新されました
newuser のユーザ情報を変更中
新しい値を入力してください。標準設定値を使うならリターンを押してください
        フルネーム []:
        部屋番号 []:
        職場電話番号 []:
        自宅電話番号 []:
        その他 []:
以上で正しいですか? [Y/n] y

sudoグループへの追加。

gpasswd -a newuser sudo

ユーザ newuser をグループ sudo に追加

新しいユーザ が作成できたので、piユーザを削除します。

初期設定のままだと”Desktop Autologin”でpiユーザが使用されているため”user pi is curently used by process”とのメッセージが出ます。

そこで自動ログインを停止します。

起動後直のDesktop起動はやめるようにするには、/etc/lightdm/lightdm.conf を変更します。

sudo nano /etc/lightdm/lightdm.conf

#変更内容
autologin-user=pi
↓
#autologin-user=pi

再起動し、先ほど新しく作った”newuser”でRaspberry Piにrootでログインし、piユーザを削除します。

userdel -r pi

“userdel: pi のメールスプール (/var/mail/pi) がありません”と表示されるが、問題ありません。

sshのポート変更とrootでのログインを無効化

sshでのrootログインがパスワード認証で許可されているので、無効化します。

ssh設定ファイルのバックアップを取る。

cd /etc/ssh
sudo cp sshd_config sshd_config.org

sshのポート番号を変更し、sshのrootでのログインを無効にする。

sudo nano sshd_config
#自由に利用できる番号として、公式には 49152 - 65535 が規定されている
Port 22 → Port nnnnn
PermitRootLogin prohibit-password → PermitRootLogin no

sshサーバーを再起動。

sudo service ssh restart

sshのポート番号を変更した場合sshログインするコマンドは以下のようになります。

ssh -p nnnnn ユーザ名@ホスト名.local (nnnnは変更したポート番号)

ssh接続のアクセス制限

ssh接続は、外部からアクセスされ、コンピュータを乗っ取られる危険がある。

そこで、”ローカル”または”指定IPアドレス”からの接続のみを許可するように、アクセス制限を行う。

hosts.denyファイルの編集。

sudo nano /etc/hosts.deny
#一番下にアクセス制限を追加(すべてのアクセスを拒否)
sshd: ALL

hosts.allowファイルの編集。

sudo nano /etc/hosts.allow
#ローカルLANからのアクセスのみを許可
sshd: 192.168.11.0/24 127.0.0.0/8

ファイアウォール(UFW)のインストール

サーバーとして使う場合、最低限のセキュリティとしてファイアウォールは設定しておきましょう。

以下のコマンドでUncomplicated Firewall(ufw)をインストールします。

sudo apt-get install ufw

アクセス制限の設定。(nnnnnはssh接続に使うポート番号。)
limitにすると30秒間に6回アクセスした接続を拒否します。

sudo ufw limit nnnnn

webページを公開するため、httpの80番とhttpsの443の開放。

sudo ufw allow 80
sudo ufw allow 443

上記のポート以外を閉じます。

sudo ufw default deny

最後にファイアウォールを有効化します。

sudo ufw enable

設定を確認して以下のようになっていたら完了です。

$ sudo ufw status

Status: active
To                         Action      From
--                         ------      ----
nnnnn                      limit       Anywhere
80                         ALLOW       Anywhere
443                        ALLOW       Anywhere
nnnnn (v6)                 limit       Anywhere (v6)
80 (v6)                    ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)

ssh接続の公開鍵化

Raspberry Piのssh接続を公開鍵化する方法は以下を参考にしてください。

アップデートの実行

OSやパッケージなどを最新のものにアップデートしていきます。ターミナルから以下のコマンドを実行してください。

最新のパッケージをインストール

sudo apt-get update
sudo apt-get upgrade

OSのアップデート

sudo apt-get dist-upgrade

Raspberry Piのファームウェアのアップデート

sudo rpi-update

その他の設定

タイムゾーンや言語などの設定は”raspi-config“で行うことができる。

raspi-config公式Documents

ここからもパスワードの変更などが行える。

webサーバー化

webサーバー”Apache2″のインストール

webサーバーで有名なものといえば”Apache”、”Nginx”、”IIS”などがある。

今回はApache2を使用していく。

sudo apt-get install apache2

動作確認

webサーバーが起動しているかどうかを確認するため、同ネットワーク内の別のPCでwebサーバーにアクセスします。

まず、以下のコマンドでラズパイのIPアドレスを調べます。

$ ip a

eth0が有線でwlan0が無線です。今回は有線でつないでいるので、そのIPアドレスを見ます。

同ローカルネットワーク上のPCのブラウザで”http://ラズパイのIPアドレス“を入力して以下のサイトが表示されたらwebサーバーとして機能しています。

これでローカルネットワーク内での簡易的なwebサーバーを構築することができました。

Raspberry Piの最適化

webサーバーとして運用するにあたって、
①不要な機能を取り除き、軽量化
②microSDカードの負担軽減
を目的として最適化していく。

ここでは長くなってしまうので、別記事で解説しています。

主な内容としては以下となる。

最適化内容
  1. Bluetoothの無効化
  2. Wi-Fiの無効化
  3. 仮想メモリのSWAP領域を2GBに拡張
  4. SWAPの無効化
  5. ログの最小化
  6. tmpフォルダのRAMディスク化
  7. cronにより一日に一回システムをリブート
  8. Chkconfigのインストールと不要デーモンの無効化
  9. 不要パッケージの削除

まとめ

この記事はRaspberry Piのwebサーバー構築方法となります。この段階では、ローカルネットワーク内でしかwebサーバーとして機能していません。

webサーバーは通常、動的(グローバル)IPアドレスを固定する必要があるらしい。動的IPアドレスを固定するにはプロバイダーとの契約内容を変える必要がある。

しかし、色々と調べると動的IPアドレスを固定しなくても外部からアクセス出来るようにwebサーバーを構築出来るらしいので、この方法を調べてやってみようと思う。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA