ラズパイで何かしたい[Webサーバ構築(1)]
皆さんこんにちは非情報系大学生のgypsです.
Raspberry piを持っているのに全く使っていなかったので,もったいないと思いWebサーバ構築に挑戦しました.
使用するRaspberry pi
実機: Raspberry pi 3 modelB+
OS: Raspbian GNU/Linux 1
とりあえず立ち上げるだけなのでやることはこの3つ
- セキュリティ設定
- アップデートの実行
- サーバの起動と動作確認
OSの導入とssh接続の設定は済んでいるので,今回はmac bookからRaspberry piを触っていきます!
セキュリティの設定
セキュリティの設定では以下のことをしました.
ユーザの追加
まずはスーパーユーザに切り替えます.
$ 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 PiのIPアドレス]
アップデート
最新のパッケージをインストール
$ 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制作