ラズベリーパイ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接続をする場合は以下の記事を参考にしてください。
セキュリティの設定
今回はローカルネットワーク内での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
“で行うことができる。
ここからもパスワードの変更などが行える。
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カードの負担軽減
を目的として最適化していく。
ここでは長くなってしまうので、別記事で解説しています。
主な内容としては以下となる。
まとめ
この記事はRaspberry Piのwebサーバー構築方法となります。この段階では、ローカルネットワーク内でしかwebサーバーとして機能していません。
webサーバーは通常、動的(グローバル)IPアドレスを固定する必要があるらしい。動的IPアドレスを固定するにはプロバイダーとの契約内容を変える必要がある。
しかし、色々と調べると動的IPアドレスを固定しなくても外部からアクセス出来るようにwebサーバーを構築出来るらしいので、この方法を調べてやってみようと思う。