7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

自宅ネットワーク更新!Fortigate&Zabbix導入!

Posted at

はじめに

この記事は、自宅ネットワークを見直してアップデートをした内容についてかんたんに説明する記事となります。
この記事を読んで、「Fortigate使ってみようかな」「Zabbixちょっとやってみよっかな」という方の後押しになれば幸いです。

ちなみに、私の初めての自宅ネットワーク構築については、次の記事を参照ください。

今回ネットワークの環境を更新しようと思った理由

自分のさらなるスキルアップを図るため、よりプロ?の業務のような環境を学びたいと思い挑戦しました。

また、環境更新にあたっては、次の新しい技術を導入しました。

⭐環境更新のポイント

  • 業務用?FirewallのFortigateの導入
  • ネットワーク&サーバ監視のZabbixの導入

「ちゃんとFirewall触ってみたい!」って思ったのと
やはり実践的にするためにはログ監視を含めて、しっかり管理できる環境の経験は必要だろうと思いこの2つの新しい技術に挑戦しました。

今回構築したネットワーク環境

セキュリティの観点から、一部実際と違う部分がありますが、おおむねこんな感じになりました。

今回も、みんな大好き?ラズパイを調達しました。

物理ネットワーク

物理ネットワークは、イメージですがこんな感じです。
ホームネットワーク図_20260103-Qiita用物理ネットワーク.drawio.png

論理ネットワーク

論理ネットワークは、イメージですがこんな感じです。
Zabbixエージェントは、見た目を簡素化するために、DMZ内については監視しているものを対象に、併記しています。
LAN2についても簡素化を図るために省略しました。
ホームネットワーク図_20260103-Qiita用論理ネットワーク.drawio.png

Fortigate導入

調達方法

Fortigate 60Fをヤフオクで約9,000円で調達しました。
本当は、2台ゲットしてHA構成もしてみたかったのですが、まだファイアウォール(以下「FW」)を触ったこともないひよっこなので、1台のみにしました。

Fortigateを触った感想

やはり実機を触ると学びが多いですね。
情報も充実していますし、生成AIもかなり高精度でサポートしてくれたのでほとんど躓かずに導入することができました。
ビギナーにはとても扱いやすいと思いました。

Fortigateおすすめポイント

  1. 比較的安価
  2. GUIはとても分かりやすいし、CLIでもFWの基本操作が学べる!
  3. インターフェースの設定やファイアウォールポリシーなどの(おそらく)一通りの設定を試すことができてGood
  4. Zabbix導入時に、SNMPによる監視も試せてよかった!

Zabbix導入

導入前の準備

Zabbixの本を図書館で借りてきて少し勉強しました。
が、結局ネットの情報の方がスムーズだったため、ネット情報で基本を学習しました。

環境構築は、Dockerに比較的慣れていたのと、今の公開サーバもDockerで環境構築をしていたので、ZabbixもDockerで環境構築しました。

Dockerのファイルたち

セキュリティに関する注意
これらの設定ファイルは学習・検証環境向けのサンプルです。実際に利用される場合は:

  • パスワードなどの機密情報は環境変数ファイル(.env)で管理し、Gitリポジトリにコミットしない
  • デフォルトポート番号の変更を検討
  • 適切なファイアウォールルールの設定
    などのセキュリティ対策を必ず実施してください。

ネット情報やらなんやら試行錯誤して、最終的に次のようなファイルを作成しました。

もしご利用される方は自己責任でよろしくお願いします。
なお、利用される際は、別途「.env」ファイルを作成し、ポート設定などを調整する必要があると思います。


Zabbix AgentのDockerのファイル(サンプル)

docker-compose.yml

services:
  zabbix-agent:
    build: 
      context: .
      dockerfile: Dockerfile**
    container_name: ${CONTAINER_NAME}
    environment:
      - ZBX_HOSTNAME=${ZBX_HOSTNAME}
      - ZBX_SERVER_HOST=${ZBX_SERVER_HOST}
    init: true
    restart: unless-stopped
    cap_add:
      - NET_RAW  # Pingコマンド実行に必要
    group_add:
      - "991" # これでdockerグループにイン。これがないとPingがエラーになる。
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock # Dockerソケットのマウント
    ports:
      - "10050:10050"  # ポートフォワーディング設定    

Dockerfile

# 公式 Zabbix Agent2 Ubuntu イメージをベースにする
FROM zabbix/zabbix-agent2:trunk-alpine

# root 権限でパッケージをインストール
USER root

RUN apk update && apk add --no-cache netcat-openbsd iputils iproute2

# デフォルトのユーザーに戻す
USER zabbix

Zabbix ServerのDockerのファイル(サンプル)

Zabbix Server、Web UI、PostgreSQLの構成

docker-compose.yml

version: "3.9"

services:
  postgres:
    image: postgres:16
    container_name: zabbix-postgres
    restart: unless-stopped
    environment:
      POSTGRES_DB: ${POSTGRES_DB}
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
    volumes:
      - postgres_data:/var/lib/postgresql/data
    # network_mode: host は削除 → デフォルトは bridge

  zabbix-server:
    image: zabbix/zabbix-server-pgsql:alpine-7.0-latest
    container_name: zabbix-server
    restart: unless-stopped
    depends_on:
      - postgres
    environment:
      DB_SERVER_HOST: zabbix-postgres  # bridgeモードならサービス名でアクセス
      POSTGRES_DB: ${POSTGRES_DB}
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
    ports:
      - "10051:10051"  # ポートフォワーディング設定

  zabbix-web:
    image: zabbix/zabbix-web-nginx-pgsql:alpine-7.0-latest
    container_name: zabbix-web
    restart: unless-stopped
    depends_on:
      - zabbix-server
      - postgres
    environment:
      DB_SERVER_HOST: zabbix-postgres
      POSTGRES_DB: ${POSTGRES_DB}
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      ZBX_SERVER_HOST: zabbix-server
      PHP_TZ: ${PHP_TZ}
    ports:
      - "8080:8080"  # ポートフォワーディング設定

  zabbix-agent:
    image: zabbix/zabbix-agent2:alpine-7.0-latest
    container_name: zabbix-agent
    hostname: zabbix-agent
    restart: unless-stopped
    group_add: # groupIDは適宜確認
      - "8"  # これでadmグループにイン。これがないとsyslogが読めない。
    environment:
      ZBX_SERVER_HOST: zabbix-server
    volumes:
      - /var/log/syslog:/var/log/syslog:ro # syslogのマウント


volumes:
  postgres_data:
  

Dockerfile

FROM zabbix/zabbix-server-pgsql:alpine-7.0-latest

USER root

RUN apk add --no-cache net-snmp-tools

USER zabbix

Zabbixで今できていること

Zabbixで実装できたこと

  • 各サーバの基本的な障害検知(CPU、メモリ、ディスク使用率など)
  • 不正ログインの疑いの検知
  • ネットワークインターフェースなどのステータスの監視

ハマったポイント

Zabbixを導入する際にハマったポイント

  • 別サーバ内のDockerコンテナのZabbix Agentとの通信
    • 実機のポートに対するコンテナのポートフォワードの設定や、実機のポート開放などしっかり通信の流れを意識しながら解決しました。一度FWを含め全開放しながら絞っていくなどの作業をコツコツしました。

Zabbixを導入しての感想

よかったポイント

  • おうちのネットワークやサーバの状況を一か所で監視できる
  • ちゃんと設定したらなんでも通知で検知できるようになる(きっと)
  • 実際の現場でも(おそらく)こんな感じなのかなーという疑似体験ができる

さいごに

Fortigateは本当に扱いやすい機器だと思います。
また、Zabbixも環境を作るだけなら、そこまで難しくないのでは?と感じています。
Zabbixについては、導入したあとに、どういったことにアラートを出して、どんな時に通知を出すかという設定をするのかがとても大事で、また難しい部分になると思います。

私自身、Zabbixの設定自体は、本当に表面的なことしかできていないので、今後は、合間を見てアップグレードしていきたいと思います。

最後まで読んでいただきありがとうございました。

7
5
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
7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?