こんにちは!「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回)
- 【第1回】RHELとの違いとUbuntu 26.04 OSインストール完全ガイド
- 【第2回】公開サーバーへの道:SSH鍵認証(量子耐性暗号対応)とsudo権限の厳格化
- 【第3回】UFWとFail2ban:強固なファイアウォールと不正アクセス対策
- 【第4回】不要なサービスの停止とOSカーネル(Linux 7.0)のセキュリティチューニング(本記事)
- 【第5回】Netplanによる高度なネットワーク設定とIPv6完全対応(公開予定)
- 【第6回】Nginxのインストールと最新Webサーバーの構築(公開予定)
- 【第7回】Dockerの導入:Ubuntuの強みを最大限に活かすコンテナ運用(公開予定)
- 【第8回】システム監視と自動アップデート(Unattended Upgrades)の自律運用(公開予定)
目次
- 1. 攻撃表面(Attack Surface)の削減という絶対原則
- 2. systemctlを用いた「現在稼働中のサービス」の完全把握
- 3. サービスの停止・無効化・そして最強の「マスク化」
- 4. Ubuntu 26.04特有の不要サービス見極めガイド
- 5. Linux Kernel 7.0の概要と「sysctl」によるカーネルチューニング
- 6. ネットワークスタックの堅牢化(SYN Flood攻撃・DDoS対策)
- 7. メモリ保護とIPv6の無効化(必要な場合のみ)
- 8. Ubuntuの盾「AppArmor」によるプロセス保護の基礎
- 9. AIを活用した「sysctl設定の監査と最適化」プロンプト
- 総まとめ:内も外も隙のないインフラの完成
- 1. 攻撃表面(Attack Surface)の削減という絶対原則
- 2. systemctlを用いた「現在稼働中のサービス」の完全把握
- 3. サービスの停止・無効化・そして最強の「マスク化」
- 4. Ubuntu 26.04特有の不要サービス見極めガイド
- 5. Linux Kernel 7.0の概要と「sysctl」によるカーネルチューニング
- 6. ネットワークスタックの堅牢化(SYN Flood攻撃・DDoS対策)
- 7. メモリ保護とIPv6の無効化(必要な場合のみ)
- 8. Ubuntuの盾「AppArmor」によるプロセス保護の基礎
- 9. AIを活用した「sysctl設定の監査と最適化」プロンプト
- 総まとめ:内も外も隙のないインフラの完成
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」
OS深層の知識を武器に
「インフラエンジニアとしての飛躍」

コメント