前書き
業務上、Syslogサーバでの検証が必要になったため、自分で構築してみることにしました。
検証用として VirtualBox 上に軽量な Syslog サーバを立てたいと考えましたが、一般的な Ubuntu や Debian を使うとリソース消費が大きくなってしまいます。
それに対して Alpine Linux は非常に軽量で、仮想環境でも負荷が極めて低いため、今回は Alpine Linux を採用することにしました。
つまり、Alpine は無駄が少なく、動作が速く、ディスク容量の節約にも優れている点が気に入りました。
環境:macOS 13.7.2(Intel)、VirtualBox
利用するイメージ:Alpine 3.21 (x86_64) ISO
standard ISO:alpine-standard-3.21.0-x86_64.iso
https://dl-cdn.alpinelinux.org/alpine/v3.21/releases/x86_64/
設計目安
用途:ネットワーク機器/サーバから syslog(UDP/TCP 514)を受信し、送信元ホスト別に保存
VMリソース:
・vCPU: 1
・RAM: 1GB
・ディスク: 40GB
・ネットワーク: Bridged(同一L2内で通信)
保存方針:/var/log/remote 以下にホスト別ディレクトリ、日次ローテーション、総量 20GB 上限
VirtualBox上でVMを立ち上げ
-
新規 → 名前例「syslog-alpine」 / タイプ: Linux / バージョン: Other Linux (64-bit)
-
メモリ:1024MB(512MB でも可)
-
プロセッサ:1
-
仮想ディスク:20GB
-
設定 → システム:EFI不要(チェック外すまま)
-
設定 → ネットワーク: ブリッジアダプター(Wi-Fi を選択)
-
設定 → ストレージ:コントローラに Alpine ISOをマウント
-
Boot Order(起動順序)を確認
VirtualBox → Settings → System → Motherboard
Boot Order:Hard Disk を最優先にしてください。

-
起動して OS インストールへ
setup-alpineで環境を初始化
1 . コマンドラインで「setup-alpine」を入力し、順番に出てくる質問に対してキーボード入力で回答していきます。
setup-alpine
2 . Keyboard layout(キーボードレイアウト): jsかus
3 . Keyboard variant(キーボードバリアント): 特にこだわりがなければ、そのまま Enter、そのまま進まない場合は再度「us」
4 . System hostname(ホスト名): syslog
5 . Network interface(ネットワークインターフェース): eth0
7 . DNS の手動設定を行うか?: 不要なので Enter
8 . root パスワード設定: 入力・再入力
9 . タイムゾーン: Asia/Tokyo
10 . Proxy(プロキシ): 使わない場合は Enter
11 . APK ミラー(パッケージ倉庫): デフォルトで OK → Enter
12 . SSH サーバの選択: 最も一般的で便利なのは openssh → openssh
13 . SSH 設定: 追加の設定が聞かれますが、デフォルトで OK なので Enter
14 . インストール先ディスクの選択: VirtualBox の disk は通常 /dev/sda → sda
15 . インストール方法(sys / data / lvm): 通常は sys(フルインストール) を選びます → sys
16 . ディスク消去の確認: y
17 . 16の後にインストールが自動的に開始、完了すると:「Installation successful」が表示されます。
18 . 再起動:reboot
19 . 再起動後に確認すべきこと: 「ip addr」でネットワークが上がっているかを確認、次に「ping 8.8.8.8」でインターネット通信化どうかを確認します。
20 . パッケージ更新: apk update
Syslogサーバを構築
1 . Alpine の基本更新とログサービス導入
apk update
apk upgrade
apk add syslog-ng logrotate
※syslog-ng が標準のSyslogデーモンです(rsyslogより軽い)。
2 . 自動起動の設定
rc-update add syslog-ng default
service syslog-ng start
3 . Syslog受信設定
デフォルトではローカルログしか受け付けないため、外部デバイスからログを受け取るようにします。
ファイルを編集:
vi /etc/syslog-ng/syslog-ng.conf
次の内容を追加または修正します(最後の方にOK)
# --- Remote log receiver ---
source s_net {
syslog(transport(udp) ip("0.0.0.0") port(514));
syslog(transport(tcp) ip("0.0.0.0") port(514));
};
destination d_per_host {
file("/var/log/remote/${HOST}/${PROGRAM}.log");
};
log { source(s_net); destination(d_per_host); };
保存して再読み込み:
service syslog-ng reload
4 . ログファイルのローテーション設定(容量制限)
/etc/logrotate.d/syslog-ng を作成:
/var/log/remote/*/*.log
{
daily
rotate 30
size 50M
compress
delaycompress
missingok
notifempty
}
これで毎日ローテーションし、最大30世代・1ファイル50MBで古いものを自動圧縮します。
5 . ファイアウォール制御(UDP 514のみ開放)
apk add iptables
rc-update add iptables default
iptables -A INPUT -p udp --dport 514 -j ACCEPT
iptables -A INPUT -p tcp --dport 514 -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -j DROP
/etc/init.d/iptables save
6 . テスト送信
ホストMacから:
echo "<13>$(date) Hello from test Mac" | nc -u -w1 <Syslog_VM_IP> 514
<13> は Syslog PRI(facility+severity)
13 = user.notice(ユーザーログ・通知レベル)
-u = UDP
-w1 = タイムアウト1秒
Syslog_VM_IP = あなたの Syslog サーバのIPアドレス
514 = Syslog標準ポート
その後、VM上で確認:
ls /var/log/remote/
tail -f /var/log/remote/<送信元ホスト名>/messages.log
または
tail -f /var/log/remote/*/*.log
MacからのSyslogを受信できました!




