ラズパイで何かしたい[Webサーバ構築(1)]

皆さんこんにちは非情報系大学生のgypsです.

Raspberry piを持っているのに全く使っていなかったので,もったいないと思いWebサーバ構築に挑戦しました.

 

使用するRaspberry pi

実機: Raspberry pi 3 modelB+

OS: Raspbian GNU/Linux 1

 

とりあえず立ち上げるだけなのでやることはこの3つ

 

  1. セキュリティ設定
  2. アップデートの実行
  3. サーバの起動と動作確認

 

OSの導入とssh接続の設定は済んでいるので,今回はmac bookからRaspberry piを触っていきます!

 

セキュリティの設定

セキュリティの設定では以下のことをしました.

  1. ユーザの追加
  2. SSHポート変更とrootログイン無効化
  3. ファイアウォールのインストール
  4. sshの公開鍵認証

 

ユーザの追加

まずはスーパーユーザに切り替えます.

$ sudo su

 

pi以外のユーザを作っていなかったので新しいユーザを追加します.

(以下のような出力が出るので,それぞれの入力を済ませます.)

$ adduser {ユーザ名}

Adding user `ユーザ名' ...
Adding new group `ユーザ名' (1001) ...
Adding new user `ユーザ名' (1001) with group `gypsy' ...
Creating home directory `/home/ユーザ名' ...
Copying files from `/etc/skel' ...
New password:
Retype new password:
passwd: password updated successfully
Changing the user information for ユーザ名
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

 

続いて作ったアカウントをsudoグループへの追加!

$ gpasswd -a gypsy sudo
Adding user gypsy to group sudo

gpasswdコマンドはユーザが所属するグループを管理するためのコマンドで所有グループを変更することができるそう.

 

また,今まで使っていたユーザが使用されないように lightdm.confのautoligin-user=pi をコメントアウトします.

デフォルトだとpiユーザなのでこの設定をしないままpiユーザを削除するとエラーが出るそう.

$ sudo vi /etc/lightdm/lightdm.conf
#autologin-user=pi
autologin-user={新しいユーザ名}

その後再起動し,新しく作ったユーザでログインします!

 

SSHポート変更とrootログイン無効化

どうやらsshでのrootログインがパスワード認証で許可されているようなので,これを無効化します.

まずはssh設定ファイルのバックアップ

$ sudo su
$ cd /etc/ssh
$ sudo cp sshd_config sshd_config.org

 

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

$ sudo vi sshd_config
#Port 22
Port ???????
#PermitRootLogin prohibit-passwword
PermitRootLogin no

 

rootユーザは狙われやすく,攻撃者はとりあえずrootでログインできるか試すそうなのでできないようにする必要があります.

そのためPermitRootLoginをnoにすることで,rootでのログインを拒否する設定にし,安全性を高めます.

 

portはsshdがリッスンするポートのことを示していて基本は22番portのままであるため, sshdへの不正アクセスを減らすためポートを変える必要があります.

 

ssh接続は外部からアクセスされコンピュータを乗っ取られる危険があるため, ローカルまたは指定IPアドレスからの接続のみを許可するようにアクセス制限を行います.

$ sudo vi /etc/hosts.deny
sshd:ALL
$ sudo vi /etc/hosts.allow
sshd: 192.168.11.0/24 127.0.0.0/8

 

ファイアウォール(UFW)の設定

サーバとして用いる場合に最低限のセキュリティとしてファイアウォールをインストールし設定しておきます.

$ sudo apt-get install ufw

 

アクセス制限の設定でlimitを行うと30秒間に6回アクセスした接続を拒否する.

$ sudo ufw limit {ポート番号}

 

webページを公開するため, httpの80とhttpsの443を開放し, このポート以外を閉じます.

$ sudo ufw allow 80
$ sudo ufw allow 443
$ sudo ufw default deny

 

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

$ sudo ufw enable

 

設定を確認して動いていれば完了!

$ sudo ufw status

 

sshの公開鍵認証

公開鍵認証を使う場合,macとpaspberry piにあらかじめ設定をする必要があるのでその設定を行っていきます.

公開鍵認証では公開鍵と秘密鍵ファイルをmacで生成し,これらの鍵ファイルのうち公開鍵ファイルをRaspberry piにセットすることでRaspberry piにパスワードを入力せずに接続できるようになります.

 

まずmac上で鍵ペアファイルを作ります.

$ ssh-keygen -t rsa

 

以下のような鍵ペアが生成され指定したパスにファイルが生成されていることを確認します.

Your identification has been saved in /Users/{}/.ssh/id_rsa.
Your public key has been saved in /Users/{}/.ssh/id_rsa.pub.
The key fingerprint is:
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx tool-lab@iMac.local
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|                 |
|                 |
|                 |
|        S    .   |
|       o ...  + o|
|      . . .o +.=.|
|       o .o++o.=.|
|      . o    .+.o|
+-----------------+

 

つぎに公開鍵をRaspberry pi に保存します.

ここではscpコマンドをしようしRaspberry pi に送信します.

mac側のコンソールで以下のコマンドを入力

$ scp {送信するファイル} {ユーザ}@{アドレス}

 

Raspberry piのホームに同じファイルが移っており,以下のようにまとめ,権限をそれぞれ与えます.

$ mkdir .ssh
$ cat id_rsa.pub >> .ssh/authorized_keys
$ chmod 700 .ssh
$ chmod 600 .ssh/authorized_keys 

 

これらの設定が終わったらホームにあるファイルは消して構いません.

設定ができたら今度は鍵ファイルの認証方式を有効にして,パスワード認証を向こうにします.

$ sudo vi/etc/ssh/sshd_config
RSAAuthentication    yes
PubkeyAuthentication yes
AuthorizedKeysFile   %h/.ssh/authorized_keys

 

以下のコマンドでアクセスできるようになります.

$ ssh -i [秘密鍵ファイル] -p [ポート番号] [ユーザ名]@[Raspberry PiIPアドレス]

 

アップデート

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

$ sudo apt-get update
$ sudo apt-get upgrade

 

OSのアップデート

$ sudo apt-get dist-upgrade

 

raspberry piファームウェアのアップデート

$ sudo rpi-update

 

念の為OSとファームウェアのupdate

$ sudo apt-get dist-upgrade

 

Webサーバ化

webサーバにはapache やNgixやIISなどがあるらしいですが今回はApache2

$ sudo apt-get install apache2

 

この状態で他の同じローカルネットワーク上のpcブラウザで以下を入力して動いているか確認してみます.

 

http://ラズパイのIPアドレス

上記のように表示されればwebサーバ(ローカル)の構築はとりあえず完了です.

 

とは言ってもまだまだ無駄な部分や,外部アクセスをできるようにした方が面白いので調べながらやっていきたいと思います.

 

<参考文献>

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

デフォルトだと危険!Raspberry Piの初期セキュリティ対策やってみた | 株式会社LIG(リグ)|コンサルティング・システム開発・Web制作

Raspberry Piに公開鍵認証を使ってssh接続する | ツール・ラボ

LinuxでSSHサーバーを建てる - どっかの高専生の技術備忘録