【無料ツール】画像をPDFに変換するPhotoPDF Appを公開しました!

【最新Ubuntu 26.04 LTS】サーバー構築入門 第4回:不要サービスの停止とLinux Kernel 7.0セキュリティチューニング

記事内に広告が含まれています。

こんにちは!「LINUX工房」管理人の「リナックス先生」です。
「Ubuntu 26.04 LTS サーバー構築入門」も中盤の第4回に差し掛かりました。前回はUFWとFail2banを使って、外からの攻撃を自動で弾き返す「防衛システム」を構築しましたね。

これで外部からの不正アクセスはほぼ防げるようになりましたが、セキュリティのプロフェッショナルはこれで満足しません。「万が一、ファイアウォールを突破されたらどうなるか?」「Webサーバーの脆弱性を突かれて、サーバー内部に侵入されたらどうするか?」という『多層防御(Defense in Depth)』の視点を持つことが重要です。

コウ君

先生、ファイアウォールがあるのに、まだ何か設定する必要があるんですか?
例えば、SSHとHTTPのポートしか開けていないなら、他のサービスが裏で動いていても、外部からはアクセスできないから安全なんじゃないでしょうか?

リナックス先生

コウ君、それは甘いわ!確かに外部からは直接見えなくても、内部で不要なサービスが動いていると、もしWebサーバー(Nginxなど)の脆弱性を突かれて「ローカルの権限」を奪われた場合、そこから内部で動いている別のサービスを攻撃される「ラテラルムーブメント(水平展開)」の足場にされてしまうのよ。
それに、無駄なサービスはメモリとCPUを消費するから、パフォーマンスの観点でも百害あって一利なしなの。今日はサーバーの「断捨離」と、OSの心臓部であるカーネルを鍛え直すトレーニングをしていくわよ!

本記事では、Ubuntu 26.04 LTSのシステム管理デーモンである systemd を使いこなして不要なサービスを根絶やしにし、最新の Linux Kernel 7.0 の機能を引き出す sysctl チューニングまでを徹底的に解説します。

🚀 Ubuntu 26.04サーバー構築入門・連載ロードマップ(全8回)


[PR]

1. 攻撃表面(Attack Surface)の削減という絶対原則

セキュリティの世界には「攻撃表面(Attack Surface)」という重要な概念があります。これは「攻撃者がシステムに侵入・悪用できる可能性があるポイントの総和」を指します。

1-1. ミニマリズムがセキュリティを高める

サーバーにインストールされているソフトウェアが多く、稼働しているサービス(プロセス)が多いほど、攻撃表面は広くなります。なぜなら、ソフトウェアには必ずバグ(脆弱性)が潜んでいる可能性があるからです。
たとえば、使ってもいないBluetooth管理サービスや、印刷用のCUPSサービスが裏で動いていたとします。もしこれらのサービスに「リモートからコードを実行できる脆弱性(RCE)」が発見された場合、あなたは使っていない機能のせいでサーバーを乗っ取られることになります。

そのため、プロのインフラエンジニアはサーバーを構築する際、「自分が意図して動かしているサービス以外は、親の仇のように徹底的に停止・削除する」という「最小特権・最小構成の原則」を貫きます。

コウ君

なるほど……。使っていない機能のせいでハッキングされたら、悔やんでも悔やみきれないですね。でも、Linuxの裏側で何が動いているのか、初心者にはサッパリわかりません。どうやって探せばいいんですか?


2. systemctlを用いた「現在稼働中のサービス」の完全把握

Ubuntu 26.04 LTSを含む現代のLinuxは、システムの起動からサービスの管理まで、すべてを `systemd` という仕組みで制御しています。この `systemd` を操作するコマンドが `systemctl` です。

2-1. 現在動いているすべてのサービスをリストアップする

まずは、現在メモリ上にロードされ、実行状態(active)になっているサービスの一覧を取得しましょう。ターミナルで以下のコマンドを実行します。

sudo systemctl list-units --type=service --state=active

実行すると、以下のようなリストが表示されます。

UNIT                               LOAD   ACTIVE SUB     DESCRIPTION
cron.service                       loaded active running Regular background program processing daemon
dbus.service                       loaded active running D-Bus System Message Bus
fail2ban.service                   loaded active running Fail2Ban Service
networkd-dispatcher.service        loaded active running Dispatcher daemon for systemd-networkd
polkit.service                     loaded active running Authorization Manager
ssh.service                        loaded active running OpenBSD Secure Shell server
systemd-journald.service           loaded active running Journal Service
systemd-networkd.service           loaded active running Network Configuration
...

2-2. リストの読み方

項目 意味
UNIT サービスの名前(拡張子は `.service`)。
LOAD `loaded` ならメモリ上に定義が読み込まれています。
ACTIVE `active` なら現在稼働中です。
SUB `running`(ずっと動き続けている)や `exited`(処理が終わって待機中)などの詳細な状態を示します。
DESCRIPTION そのサービスが何をしているかの簡単な説明です。

このリストを見て、「これは何をしているサービスなんだろう?」と疑問に思ったものは、すべてインターネットで検索するか、後述するAIに尋ねて、本当に必要かどうかを吟味する必要があります。


3. サービスの停止・無効化・そして最強の「マスク化」

不要なサービスを見つけたら、それを止める必要があります。`systemctl` には、サービスを停止するための3段階のアプローチがあります。

3-1. 一時的な停止(stop)

現在動いているサービスを「今すぐ」止めます。しかし、サーバーを再起動すると再び起動してしまいます。

sudo systemctl stop [サービス名]

3-2. 自動起動の無効化(disable)

サーバーを再起動した際に、自動的に立ち上がらないようにします。通常の不要サービスはここまで設定すれば十分です。

sudo systemctl disable [サービス名]

# stopとdisableを同時に行うのが基本です
sudo systemctl stop [サービス名]
sudo systemctl disable [サービス名]
コウ君

先生、disable にしておけば、もう二度と動かないんですよね?それなら安心ですね!

リナックス先生

ところがそうもいかないのよ。disable はあくまで「OSの起動時には動かさない」という設定であって、他のプログラムが「おい、起きて仕事しろ!」と呼び出したら(依存関係による起動)、勝手に動いてしまうの。
絶対に動かしたくない、悪用のリスクが高いサービスには、究極の封印魔法である「マスク化(mask)」を使うのよ!

3-3. 絶対に起動させない「マスク化(mask)」

サービスをマスク(mask)すると、そのサービスの設定ファイルが /dev/null(Linuxのブラックホール)にリンクされ、手動で起動コマンドを打とうが、他のプログラムが呼び出そうが、絶対に起動できなくなります。

sudo systemctl mask [サービス名]

# 元に戻したい場合は unmask を使います
# sudo systemctl unmask [サービス名]

4. Ubuntu 26.04特有の不要サービス見極めガイド

Ubuntu 26.04 LTS Server版は元々ミニマルに作られていますが、それでも汎用性を持たせるためにいくつかのサービスがデフォルトで動いています。代表的な「停止・マスク化を検討すべきサービス」を挙げます。

サービス名 用途と停止の判断基準 推奨処理
multipathd.service SAN(Storage Area Network)など高度なストレージ冗長化環境で使用。通常のVPSや単体サーバーでは不要で、無駄なエラーログを吐きがちです。 disable または mask
snapd.service Ubuntu独自のパッケージ管理(Snap)。DockerやNginxをaptで管理するなら不要ですが、Certbot等でSnapを使う予定があるなら残します。 使わないなら disable
lxd.service / lxc.service Linuxコンテナ管理。Dockerを使う場合は競合・リソースの無駄になるため停止します。 disable
ModemManager.service モバイルブロードバンド(LTE/3Gモデム)の管理。データセンターのサーバーには100%不要です。 mask推奨
ufw.service 絶対に停止してはいけません! 第3回で設定したファイアウォールです。 そのまま(維持)

例えば、ModemManager を完全に封印する場合は以下のコマンドを実行します。

sudo systemctl stop ModemManager.service
sudo systemctl disable ModemManager.service
sudo systemctl mask ModemManager.service

5. Linux Kernel 7.0の概要と「sysctl」によるカーネルチューニング

不要なサービスを掃除してOSがスッキリしたら、次はOSの脳みそである「カーネル(Kernel)」のパラメーターをチューニングして、DDoS攻撃などに対する防御力を底上げします。

5-1. Ubuntu 26.04とLinux Kernel 7.0

Ubuntu 26.04 LTSは、Linux Kernel 7.0 というマイルストーンとなるメジャーバージョンを採用しています。Kernel 7.0では、ネットワークスタックの処理効率が大幅に向上しており、またRust言語によるドライバ実装が本格導入されるなど、内部の堅牢性が劇的に高まっています。

5-2. sysctl コマンドとは?

Linuxカーネルには、ネットワークの振る舞いやメモリの管理方法など、何千もの設定値(パラメーター)が存在します。これらのパラメーターをOS稼働中に変更・確認するためのツールが sysctl です。

設定は /etc/sysctl.conf/etc/sysctl.d/ 以下のファイルに記述し、再起動後も永続化させます。


6. ネットワークスタックの堅牢化(SYN Flood攻撃・DDoS対策)

Webサーバーを公開すると、悪意のある攻撃者は「SYN Flood(シン・フラッド)攻撃」などのDDoS攻撃を仕掛けてきます。
これは、通信の開始要求(SYNパケット)だけを大量に送りつけ、サーバー側に「返事待ち(SYN-RECV状態)」のメモリを大量に確保させてパンクさせる攻撃です。

6-1. sysctl.conf の編集

この攻撃をカーネルレベルで緩和するための設定を /etc/sysctl.conf に追記します。

sudo nano /etc/sysctl.conf

ファイルの末尾に、以下のプロフェッショナルな設定を追記してください。

# ==========================================
# ネットワーク・セキュリティチューニング
# ==========================================

# 1. SYN Flood攻撃対策(SYN Cookiesの有効化)
# メモリが枯渇しかけた際に、接続情報をCookieとしてクライアントに持たせ、リソースを節約する
net.ipv4.tcp_syncookies = 1

# 2. SYNバックログの拡張
# 処理待ちの接続キューの最大値を増やし、同時接続に耐えやすくする(デフォルトは1024など)
net.ipv4.tcp_max_syn_backlog = 4096

# 3. タイムウェイト状態のソケットの早期回収
# 通信終了後の待機状態(TIME_WAIT)のポートを素早く再利用し、ポート枯渇を防ぐ
net.ipv4.tcp_tw_reuse = 1

# 4. ICMPリダイレクトの拒否
# 悪意のあるルーターから経路をねじ曲げられる(Man-in-the-Middle攻撃)のを防ぐ
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0

# 5. IPスプーフィング(送信元偽装)対策
# パケットの送信元が本当に正しい経路から来ているか検証する(Strict Reverse Path Forwarding)
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1

6-2. 設定の反映と確認

編集を保存して終了(nanoなら Ctrl+O, Enter, Ctrl+X)したら、以下のコマンドでカーネルに設定を即座に読み込ませます。

sudo sysctl -p

変更した値が画面に出力されれば成功です。これで、あなたのサーバーはちょっとやそっとの通信攻撃ではビクともしない強靭な足腰を手に入れました。


7. メモリ保護とIPv6の無効化(必要な場合のみ)

7-1. BPF JITのハードニング

Kernel 7.0環境でさらにセキュリティを高めるため、eBPF(拡張Berkeley Packet Filter)のJITコンパイラに対するハードニング(堅牢化)を有効にします。これにより、カーネル内の脆弱性を突いた特権昇格攻撃のリスクを低減できます。

# /etc/sysctl.conf に追記
kernel.unprivileged_bpf_disabled = 1
net.core.bpf_jit_harden = 2

7-2. IPv6の無効化(※注意)

もしあなたのサーバーがIPv4だけで運用されており、IPv6を全く使う予定がないのであれば、IPv6自体を無効化することで攻撃表面を減らすことができます。
※ただし、最近はIPv6必須のクラウドサービスも増えているため、自分の環境をよく確認してから設定してください。

# /etc/sysctl.conf に追記(IPv6を完全に無効化する場合)
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

8. Ubuntuの盾「AppArmor」によるプロセス保護の基礎

最後に、Ubuntuを語る上で欠かせない「AppArmor(アップアーマー)」について触れておきます。第1回でRHEL系のSELinuxと比較した機能です。

8-1. AppArmorの概念

AppArmorはMAC(Mandatory Access Control:強制アクセス制御)と呼ばれるセキュリティモジュールです。
通常のLinux権限(rwx)は「どのユーザーがどのファイルを触れるか」を決めますが、AppArmorは「どのプログラム(プロセス)がどのファイルやネットワークにアクセスできるか」を制限します。
例えば、Nginx(Webサーバー)のプロセスが乗っ取られたとしても、AppArmorが「NginxはWebディレクトリ以外にアクセスしてはいけない」と制限していれば、ハッカーはシステム領域のファイルを盗むことができません。

8-2. AppArmorのステータス確認

Ubuntu 26.04ではデフォルトで有効になっています。現在の状態を確認してみましょう。

sudo apparmor_status

出力の中に X profiles are in enforce mode. とあれば、AppArmorがプロセスを監視・制限(enforce)している状態です。初心者のうちは、デフォルトのプロファイルをそのまま利用するだけで十分強力な保護が得られます。無理に無効化せず、そのまま稼働させておきましょう。


9. AIを活用した「sysctl設定の監査と最適化」プロンプト

sysctl のパラメーターは非常に奥深く、サーバーの用途(Webサーバーなのか、データベースサーバーなのか)によって最適解が変わります。ここでもAI(GeminiやChatGPT)を強力なコンサルタントとして活用しましょう。

9-1. チューニング監査プロンプト

「あなたはLinuxカーネルチューニングのシニアエンジニアです。
現在、Ubuntu 26.04 LTS (Kernel 7.0) を用いて、月間数百万PVのアクセスが想定されるWebサーバー(Nginx + PHP-FPM稼働予定)を構築しています。

以下の現在の `/etc/sysctl.conf` の設定を監査し、以下の要件を満たすレポートを作成してください。

【現在の設定】
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.tcp_tw_reuse = 1
net.ipv4.conf.all.rp_filter = 1

【要件】
1. 現在の設定に、セキュリティホールやパフォーマンス低下の原因となる誤りはないか?
2. 大量アクセスのWebサーバーとして、さらに追加すべきTCP/IPスタックのチューニングパラメーター(例: tcp_fin_timeout, tcp_keepalive_time 等)を3つ提案し、その理由と推奨値を解説してください。
3. Kernel 7.0特有のパフォーマンス向上に寄与する最新パラメーターがあれば1つ教えてください。」

AIはあなたのサーバー構成を分析し、「高負荷のWebサーバーであれば、コネクションの使い回しを早めるために net.ipv4.tcp_fin_timeout = 15 を追加するとTIME_WAITの枯渇をさらに防げます」といった、現場レベルの超実践的なアドバイスを提供してくれます。


総まとめ:内も外も隙のないインフラの完成

第4回の講座、本当にお疲れ様でした!今回は少し難易度が高く、カーネルの深い部分まで潜り込みましたね。

systemctl を駆使して不要なサービスを容赦無くマスク化し、攻撃表面を最小化するアプローチ。そして、sysctl を通じてLinux Kernel 7.0のネットワークスタックを堅牢化し、DDoS攻撃の波をカーネルレベルでいなす技術。

第2回と第3回で「外壁」を固め、今回の第4回で「内部の構造」を鍛え上げました。これによって、あなたのUbuntu 26.04サーバーは、セキュリティインシデントのリスクを極限まで排除した、プロフェッショナルな状態へと仕上がりました。

OSレベルの準備はこれで完了です。
次回、第5回「Netplanによる高度なネットワーク設定とIPv6完全対応」では、Ubuntu特有のモダンなネットワーク管理ツールである Netplan を使いこなし、静的IPの割り当てや、これからの時代に必須となるIPv6環境のルーティング設定について解説します。
インフラの血管とも言えるネットワーク設計を極めていきましょう。次回もお楽しみに!

▼ 堅牢なカーネルチューニングを試そう ▼

Kernel 7.0の真価を発揮するなら
「最新CPU搭載の高性能VPS」

VPSおすすめ比較を見る

OS深層の知識を武器に
「インフラエンジニアとしての飛躍」

特化型転職エージェントに相談

[PR]

💡 サーバー構築やコマンドの練習には、VPSが圧倒的におすすめです

手元のパソコンや大切なメイン環境で検証を行うと、設定ミスでシステムを壊してしまったり、不要なパッケージが溜まって動作が不安定になるリスクがあります。

もしあなたが実務レベルのスキルを最短で身につけたいのであれば、月額ワンコインから使えて、失敗しても数分で初期状態にリセットできるVPS(仮想専用サーバー)を利用するのが、プロも実践する最も確実で安全な学習方法です。

▼ プロも推奨するVPS環境はこちら ▼

Ubuntu講座
linux工房をフォローする

コメント