0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

校内独自ネットワークにモバイルオーダーシステムを導入する際のネットワーク設計

Posted at

食堂にモバイルオーダーシステムの構築を考えている先生がいて、レンタルサーバ上での運用を検討していたのですが、校内ポリシーの関係で学校内でのサーバー設置を考えているようで実際運用する際の設計を考えてみました。

前提条件

  • フレッツ光を契約
  • YAMAHAのRTX1200ルーターを使用
  • 校内に多数のAPを設置済み
  • 個人情報は扱わない
  • 追加の機器設置は不可(予算的に)
  • Next.jsとCloudflareを使用したモバイルオーダーシステムを導入予定

ネットワーク設計のポイント

1. VLANによるセグメンテーション

既存のネットワークを活用しつつ、モバイルオーダーシステム用のトラフィックを分離するためにVLANを使用します。

  • VLAN ID 20をモバイルオーダーシステム用に設定
  • VLAN ID 10は既存のネットワーク

2. DMZの設定

YAMAHAのRTX1200にDMZ機能があるため、これを活用してモバイルオーダーシステムのサーバーを配置します。

  • DMZにLinuxサーバーを配置(例:192.168.30.10)
  • 外部からのアクセスは特定のポート(HTTP/HTTPS)のみ許可
  • DMZから内部ネットワークへの直接アクセスを制限(VLAN10も安全)

3. リバースプロキシの導入

追加コストを抑えつつセキュリティを強化するため、NginxをリバースプロキシとしてDMZ内に設置します。

server {
    listen 80;
    server_name hogehoge.com;

    location / {
        proxy_pass http://192.168.30.10:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

リバースプロキシはNginxでもApache2でもいいけれど、個人的にはNginxの方が高性能で新しいからNginxがいいかな。
設定は
hogehoge.comへのリクエストを192.168.30.10:3000に転送してくれる。
セキュリティは勿論上がります。

4. セキュリティ強化

  • Cloudflareを利用したSSL/TLS設定
    Cloudflareを使用することで、追加のSSL証明書を購入せずにHTTPS通信を実現できます。
    Cloudflareにドメインを追加
    ネームサーバーをCloudflareのものに変更
    Cloudflareダッシュボードで「SSL/TLS」設定を「Flexible」または「Full」に設定
    ページルールを作成し、常時HTTPS化を強制:
    URL: http://hogehoge.com/*
    設定: Always Use HTTPS

  • ファイアウォールの最適化(不要なポートを閉じる)
    YAMAHAのRTX1200ルーターとLinuxサーバー両方でファイアウォールを設定します。

ip filter 1 reject 192.168.0.0/16 * * * *
ip filter 2 reject * 192.168.0.0/16 * * *
ip filter 3 pass * 192.168.30.20 tcp * 80 in
ip filter 4 pass * 192.168.30.20 tcp * 443 in
ip filter 5 pass 192.168.30.20 * tcp * * out
ip filter 100 reject * * * * *
bashCopysudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow from 192.168.30.20 to any port 3000
sudo ufw enable
  • Nginxのアクセスログとエラーログの定期監視
    ログ監視を自動化するために、簡単なシェルスクリプトを作成し、crontabで定期実行します。
    監視スクリプト(monitor_nginx_logs.sh)の例:
monitor.sh
bashCopy#!/bin/bash

LOG_DIR="/var/log/nginx"
ALERT_EMAIL="admin@yourdomain.com"

# アクセスログの監視(例:5分間に100回以上のアクセスがあった場合にアラート)
ACCESS_COUNT=$(tail -n 1000 ${LOG_DIR}/access.log | wc -l)
if [ $ACCESS_COUNT -gt 100 ]; then
    echo "警告: 直近5分間に${ACCESS_COUNT}回のアクセスがありました。" | mail -s "Nginx高負荷アラート" $ALERT_EMAIL
fi
# エラーログの監視(例:エラーが発生した場合にアラート)
ERROR_COUNT=$(grep -c "error" ${LOG_DIR}/error.log)
if [ $ERROR_COUNT -gt 0 ]; then
    echo "警告: Nginxエラーログに${ERROR_COUNT}件のエラーが検出されました。" | mail -s "Nginxエラーアラート" $ALERT_EMAIL
fi

crontabに以下を追加して5分ごとに実行:

cron.sh
Copy*/5 * * * * /path/to/monitor_nginx_logs.sh
  • 定期的なバックアップの実施
    重要なデータと設定ファイルを定期的にバックアップします。
    バックアップスクリプト(backup_system.sh)の例:
backup.sh
!/bin/bash

BACKUP_DIR="/path/to/backups"
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="${BACKUP_DIR}/backup_${DATE}.tar.gz"

# Nginxの設定ファイルをバックアップ
tar -czf $BACKUP_FILE /etc/nginx

# アプリケーションのデータをバックアップ(例:Next.jsアプリ)
tar -rf $BACKUP_FILE /path/to/nextjs/app

# データベースのバックアップ(例:PostgreSQL)
pg_dump -U username -d database_name | gzip >> $BACKUP_FILE

# 古いバックアップの削除(30日以上前のものを削除)
find $BACKUP_DIR -type f -name "backup_*" -mtime +30 -delete

crontabに以下を追加して毎日深夜3時に実行:

cron.sh
Copy0 3 * * * /path/to/backup_system.sh

ネットワークトポロジー

フレッツ光
     |
[ RTX1200 ルーター ]
     |
[ VLAN 10: 教職員用 ]
     |
[ VLAN 20: 食堂用 ]
     |
[ DMZ: モバイルオーダーシステム用 ]
     |
[ Nginxリバースプロキシ - 192.168.30.20 ]
     |
[ Linuxサーバ (Next.js) - 192.168.30.10 ]

まとめ

この設計により、既存のネットワークインフラを活用しつつ、セキュアなモバイルオーダーシステムを構築することが出来そうです。
VLANによるセグメンテーション、DMZの活用、リバースプロキシの導入により、セキュリティを強化しながらも、追加コストを最小限に抑えることが可能です。

また定期的なログ監視やバックアップなど、運用面での対策も忘れずに実施することで、より安全で安定したシステム運用を実現できます。

ただしそれなりの経験と技術・知識が無いと運用は難しいなとも思います。
何より頭の中では動いていても実際に設定すると、これがうまくいかないんですよね。

私はエンジニアではありませんので、本職の方々を本当に尊敬します!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?