家のサーバーのセキュリティ対策と監視 ― 入れておきたいアプリと、実際に入れているもの
前の記事で、公開していた Web やメールを AWS に移し、家のサーバーはインターネットから見えない“内側”に下げました。とはいえ、家の中のサーバーにも家族のデータや設定が集まっています。この記事では、家のサーバーに入れておきたいセキュリティのアプリと、実際に入れているもの、そして Web やメールのサービスを監視するのに便利なアプリを、導入方法と一緒にまとめます。OS は AlmaLinux 9(Red Hat 系)です。
考え方:4つの段階で守る

- 入口を減らす:外から入れる場所を最小限にする
- 入られにくくする:ログインの方法を固くする
- 入られても気づく:ファイルの改ざんやウイルスを見つける
- 止まったら気づく:サービスの停止や異常をすぐ知らせる
1. 入口を減らす(ルーターと firewalld)
いちばん効くのは、そもそも外から入れる入口を作らないことです。家のルーターは、外からの入口を VPN だけにしました。そのうえで、サーバー自身のファイアウォール firewalld でも、家の中のアドレスからだけ受け付けるようにしています。
# 家の中(例:192.168.0.0/16)からの接続だけを許可する
sudo firewall-cmd --permanent --zone=trusted --add-source=192.168.0.0/16
# 外向けに開けていたサービスは外す(例:http)
sudo firewall-cmd --permanent --zone=public --remove-service=http
sudo firewall-cmd --reload
sudo firewall-cmd --list-all-zones | less
外にサービスを公開していた頃は、国別の IP アドレスの一覧を毎日取り込み、「国内からだけ許可」「特定の国からは遮断」という使い分けもしていました。公開をやめた今も、ルーターの設定を誤ったときの保険として残しています。
2. 入られにくくする(SSH と fail2ban)
- SSH は鍵だけでログインでき、パスワードと root でのログインは禁止(詳しくは「SSH で相互接続する」の記事)
- 監視用の SNMP は、暗号化と認証のある v3 だけを使い、読み取り専用・サーバー自身からだけ受け付ける
外にサービスを公開するサーバーなら、fail2ban は必須です。ログイン失敗を繰り返す相手を、ファイアウォールで自動的に締め出してくれます。今は公開している AWS のサーバー側で動かしていて、SSH・メールの不正ログインの試みを日々締め出しています。
sudo dnf install -y epel-release
sudo dnf install -y fail2ban
# /etc/fail2ban/jail.d/local.conf
[DEFAULT]
banaction = firewallcmd-rich-rules
ignoreip = 127.0.0.1/8 自宅のアドレス
[sshd]
enabled = true
sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd
ignoreip に自宅のアドレスを入れておくと、自分のパスワードの打ち間違いで自分が締め出される事故を防げます。
3. 入られても気づく(Tripwire・chkrootkit・ClamAV)
Tripwire:ファイルの改ざんを見つける
Tripwire は、大事なファイルの「指紋」(ハッシュ値)を記録しておき、毎日比べて変わったファイルを報告してくれます。見覚えのない変更があれば、侵入や設定ミスに気づけます。
sudo dnf install -y tripwire
sudo tripwire-setup-keyfiles # 鍵を作る(パスフレーズを2つ決める)
sudo tripwire --init # 今の状態を記録
sudo tripwire --check # 比べる(毎日 cron で実行し、結果をメールで受け取る)
実は、サーバーの名前を変えたときに Tripwire の鍵の名前と合わなくなり、毎日のチェックが何か月も失敗し続けていたことがありました。鍵を作り直して直すと同時に、「チェック自体が失敗したら、そのことをメールで知らせる」ように変えています。報告が届かないのは「何も起きていない」ではなく「見張りが止まっている」かもしれない、というのが教訓です。
chkrootkit:侵入の痕跡を探す
chkrootkit は、侵入者が仕込む「ルートキット」の典型的な痕跡を探すツールです。毎日 cron で実行し、怪しいものがあればメールで届くようにしています。
ClamAV:ウイルスを見つける
ClamAV は無料のウイルス対策ソフトです。家のサーバーでは、共有フォルダのファイルを毎日検査しています。
sudo dnf install -y clamav clamd clamav-update
sudo systemctl enable --now clamav-freshclam # ウイルス定義を自動で更新
sudo systemctl enable --now clamd@scan # 検査を常駐させる
clamdscan --fdpass --infected /home/samba # 検査(毎日 cron で)
ClamAV はメモリを 1GB ほど使うので、メモリの少ないサーバーでは注意が必要です。また、メールの検査に使う場合は「ClamAV が止まるとメールの受信まで止まる」設定になっていないかを必ず確認してください(以前それで4週間メールを受け取れなかったことがあります)。
4. 更新を自動にする(dnf-automatic)
セキュリティの修正は、出たらすぐ当てるのが基本です。dnf-automatic で、更新を毎日自動で入れるようにしています。
sudo dnf install -y dnf-automatic
sudo systemctl enable --now dnf-automatic-install.timer
カーネルの更新は再起動するまで反映されないので、時々 needs-restarting -r で再起動が必要かを確認しています。
5. 記録を残す(auditd・rsyslog・chrony)
- auditd:誰がいつ何をしたか(ログイン・権限の変更など)を記録する。AlmaLinux では最初から動いている
- rsyslog:ルーター・無線 LAN のアクセスポイント・NAS などのログを家のサーバーに集めて、1か所で見られるようにした(機器ごとのファイルに1年分、データベースに90日分)
- chrony:時刻を正確に合わせる。時刻がずれていると、ログの照合も AD のログインもうまくいかない
6. 入れておきたいが、運用で気をつけるもの
- SELinux:プログラムごとに「触ってよいファイル」を細かく制限する仕組み(SELinux Project)。Red Hat 系では最初から入っていて、有効のまま使うのがおすすめです。Web サーバーがファイルを書けないなどのエラーが出たときに無効にしてしまいがちですが、
setseboolやsemanageで必要な許可だけを足すのが正しい対処です(AWS のサーバーではこの方法で運用しています) - Lynis:サーバーの設定を点検して、改善点を一覧にしてくれるツール(Lynis)。年に数回、健康診断のつもりで実行すると、見落としに気づけます
- バックアップ:どれだけ守っても、壊れるときは壊れます。設定ファイルを変える前には必ず控えを取り、データは NAS など別の場所にも置いておく
7. サービスを監視するアプリ
セキュリティとは別に、「Web やメールが止まっていないか」を見張る仕組みも欠かせません。家のサーバーでは次の3つを使っています。
| アプリ | 役割 | 向いている使い方 |
|---|---|---|
| Uptime Kuma | 死活監視(止まったらメールで通知) | Web・メール・DNS・ping などの「動いているか」を短い間隔で確認 |
| Cacti | 監視のグラフ | CPU・メモリ・通信量・ディスクなどの「量」の変化を長期間グラフで見る |
| awstats | アクセスの集計 | Web サイトのアクセス数や検索語の集計 |
Uptime Kuma(死活監視)
Uptime Kuma は、画面から監視先を登録するだけで使える死活監視のアプリです。HTTP(証明書の期限も)・TCP の接続・ping・DNS など、たいていの種類に対応しています。家では Podman(Docker 互換のコンテナ)で動かしています。
# /etc/containers/systemd/uptime-kuma.container(systemd から自動で起動する設定)
[Container]
Image=docker.io/louislam/uptime-kuma:2
Volume=/var/lib/uptime-kuma:/app/data:Z
Network=host
AddCapability=NET_RAW
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl start uptime-kuma
おすすめの使い方が2つあります。
- お互いを外から監視する:家の Uptime Kuma で AWS のサーバーを、AWS の Uptime Kuma で家の回線を監視しています。片方が止まっても、もう片方が知らせてくれます
- 「Push」型の監視:家のサーバーから1分ごとに AWS の Uptime Kuma へ「生きています」と連絡し、連絡が途絶えたら通知させる。家のルーターに外からの入口を開けなくても、家のサーバーの停止に気づけます
Cacti(グラフ)
Cacti は、SNMP(Net-SNMP)で機器から数値を集めてグラフにするアプリです。サーバーだけでなく、ルーター・スイッチ・無線 LAN のアクセスポイント・NAS も同じ画面で見られます。
sudo dnf install -y cacti net-snmp net-snmp-utils
# SNMPv3 の読み取り専用ユーザーを作る(パスワードは自分で決める)
sudo net-snmp-create-v3-user -ro -a SHA -x AES 監視用ユーザー名
さらに Syslog プラグイン を入れると、上の rsyslog で集めたログを Cacti の画面で検索できます。ルーターが外からの通信を拒否した記録まで見えるので、「どれくらい攻撃されているか」を調べるときにも役立ちました。
まとめ:家と AWS で使っているもの
| 目的 | アプリ・仕組み | 家のサーバー | AWS のサーバー |
|---|---|---|---|
| 入口を減らす | ルーターの VPN・firewalld | ○ | ○(Lightsail のファイアウォールと二重) |
| ログインを守る | SSH は鍵だけ・fail2ban | 鍵のみ | 鍵のみ+fail2ban |
| 改ざんに気づく | Tripwire・chkrootkit | ○ | — |
| ウイルス | ClamAV | 共有フォルダを検査 | メールを検査 |
| 更新 | dnf-automatic | ○ | ○ |
| 記録 | auditd・rsyslog・chrony | ○(機器のログも集約) | ○ |
| 死活監視 | Uptime Kuma | ○ | ○(お互いを監視) |
| グラフ | Cacti | ○(家の機器全部) | ○(サーバー自身) |
セキュリティは「何を入れたか」より「止まっていないか・報告が届いているか」のほうが大事だと、今回あらためて感じました。見張り役のアプリ自身も、見張る仕組みを作っておくと安心です。
