はじめに
私はプライベートなPCでインフラ基盤にAWSサービスを利用したAIアプリ開発を行う場合、AIコーディングエージェントにはAWS Kiroを使用しています。AWS社からは、AWS MCPサーバーだけでなく、Amazon Bedrock Coreに対するMCPサーバーや、最近ではAWS TransformのMCPサーバーも提供されているので、AWSの利用においてはKiro君は超頼もしい相棒として活躍してくれます。
また、私はAWSと同じくらいRHELを使うのが好きなのですが、最近とあるRHEL社のセミナーを視聴し、そこでまだDeveloper Preview版ではあるものの、RHELのMCPサーバーというものが提供されているのを初めて知りました。
RHELにはコマンドラインから実行可能なRHEL Lightspeedというものもありますが、これは主にRHELの運用に関するアドバイスをしてくれるものです。RHEL Lightspeedについては昨年投稿した下記の記事をご参考ください。
RHELのMCPサーバーは、様々なAIコーディングエージェントから利用することが可能なので、これまでAWSに関して力を発揮してくれたKiro君に、追加でRHELの頼もしいアドバイザーになってもらおうと考えました。
本記事では、RHEL MCPサーバーのセットアップと、実際にKiro君からRHEL MCPサーバーを使って、私のRHEL環境の設定状況を分析してもらった際の使用例をご紹介します。
RHEL MCPサーバー設定
RHEL MCPサーバーの導入
RHEL MCPサーバーの導入には下記のRHELマニュアルの記載を参考に実施しました。
pythonは3.10以降のものが必要になりますが、私の環境のPythonは3.12.3が入っているので、pipコマンドでlinux-mcp-serverをインストールするだけです。
[rheluser@localhost ~]$ pip install --user linux-mcp-server
Collecting linux-mcp-server
Downloading linux_mcp_server-1.4.1-py3-none-any.whl.metadata (3.7 kB)
Collecting asyncssh>=2.22.0 (from asyncssh[bcrypt]>=2.22.0->linux-mcp-server)
Downloading asyncssh-2.24.0-py3-none-any.whl.metadata (9.8 kB)
Collecting fakeredis<2.35 (from linux-mcp-server)
Downloading fakeredis-2.34.1-py3-none-any.whl.metadata (4.4 kB)
Collecting fastmcp<2.14.6,>=2.14.4 (from linux-mcp-server)
Downloading fastmcp-2.14.5-py3-none-any.whl.metadata (20 kB)
:
:
Installing collected packages: pyperclip, zipp, uncalled-for, tqdm, sniffio, rpds-py, regex, redis, python-multipart, python-json-logger, python-dotenv, pyjwt, propcache, prometheus-client, pathvalidate, opentelemetry-api, multidict, more-itertools, jsonref, jiter, jeepney, jaraco.context, httpx-sse, hf-xet, fsspec, frozenlist, fastuuid, exceptiongroup, dnspython, diskcache, cronsim, cloudpickle,
:
:
python-multipart-0.0.32 redis-8.0.1 regex-2026.5.9 rich-rst-2.0.2 rpds-py-2026.5.1 sniffio-1.3.1 sse-starlette-3.4.5 tiktoken-0.13.0 tokenizers-0.23.1 tqdm-4.68.3 uncalled-for-0.3.2 yarl-1.24.2 zipp-4.1.0
後続のKiroのmcp.jsonファイルで、RHELのMCPサーバーをスタートする設定を行いますが、その前にMCPサーバーが問題なくスタートすることの確認を実施しておきます。
[rheluser@localhost ~]$ cd .local/bin
[rheluser@localhost bin]$ ./linux-mcp-server
/home/rheluser/.local/lib/python3.12/site-packages/fastmcp/server/auth/providers/jwt.py:10: AuthlibDeprecationWarning: authlib.jose module is deprecated, please use joserfc instead.
It will be compatible before version 2.0.0.
from authlib.jose import JsonWebKey, JsonWebToken
2026-06-28 21:44:54 | INFO | root | Logging initialized: /home/rheluser/.local/share/linux-mcp-server/logs
2026-06-28 21:44:54 | INFO | linux-mcp-server | Running Linux MCP Server 1.4.1. Press Ctrl+C, Enter to stop the server.
[06/28/26 21:44:54] INFO Starting MCP server server.py:2506
'linux-mcp-server' with transport
'stdio'
2026-06-28 21:44:54 | INFO | docket.worker | Starting worker 'localhost.localdomain#47052' with the following tasks:
2026-06-28 21:44:54 | INFO | docket.worker | * trace(message: str, ...)
2026-06-28 21:44:54 | INFO | docket.worker | * fail(message: str, ...)
2026-06-28 21:44:54 | INFO | docket.worker | * sleep(seconds: float, ...)
上記の出力結果から問題なくRHELのMCPサーバーが起動していることがわかります。停止する場合は、Ctrl-Cを行えば停止します。(停止コマンドはありません。)
AWS Kiroに対するRHEL MCPサーバーの設定
設定方法は下記のRHELマニュアルの記載を参考に実施しました。
今回はAIエージェントにKiroを使用するので、Kiroのmcp.jsonファイルにRHEL MCPサーバー(linux-mcp-server)の設定を追記しました。
{
"mcpServers": {
"aws-mcp": {
"command": "uvx",
"timeout": 100000,
"transport": "stdio",
"args": [
"mcp-proxy-for-aws@latest",
"https://aws-mcp.us-east-1.api.aws/mcp",
"--metadata", "AWS_REGION=us-east-1"
]
},
"linux-mcp-server": {
"command": "/home/rheluser/.local/bin/linux-mcp-server",
"args": [],
"env": {
"LINUX_MCP_USER": "rheluser"
}
}
}
※上記ファイルの前半部分のMCPサーバーはAWS MCPサーバーの設定内容です。
RHELのマニュアルには、linux-mcp-serverのCommandの記載部分には、ホームディレクトリの短縮形(~/)を用いた下記のような指定がされていますが、その場合にはKiroからRHELのMCPサーバーが起動できませんでした。
マニュアルのCommandの指定記載内容
"command": "~/.local/bin/linux-mcp-server",
出力されたエラーメッセージ
[error] [linux-mcp-server] Error connecting to MCP server: spawn ~/.local/bin/linux-mcp-server ENOENT
ですので、本記事のmcp.jsonの設定内容のようにホームディレクトリも絶対パスで指定するようにしてください。
RHEL MCPサーバーを使用したRHEL環境の設定状況分析例
ここからは実際にKiro君に私のRHEL V10.2環境の設定内容を分析してもらい、問題がある場合には対応策を提案してもらった2つの例をご紹介します。RHELのMCPサーバーを使ったRHELシステムの情報照会の仕組みについては下記のRHELマニュアルに記載があります。
システムのリソース使用率に基づく対応要否確認
今回は下記のようなプロンプトを入力してみました。
現在接続しているRHEL V10.2環境のCPU、メモリ使用率、ディスク使用率を教えてください。もしも何かしらの対応が必要な場合、対応策も提案してください。
その後、Kiro君はRHELのMCPサーバー(linux-mcp-server)を用いて、システムの情報抽出を行っていきます。

最終的に下記のマークダウンファイルに見られるような分析結果及び対応策を提案してくれました。
## RHEL 10.2 環境のシステムリソース状況
### システム概要
| 項目 | 値 |
|------|-----|
| ホスト名 | localhost.localdomain |
| OS | Red Hat Enterprise Linux 10.2 (Coughlan) |
| カーネル | 6.12.0-211.28.1.el10_2.x86_64 |
| アーキテクチャ | x86_64 |
| 稼働時間 | 9分 |
---
### CPU使用率
| 項目 | 値 |
|------|-----|
| モデル | Intel Core Ultra 5 125H |
| 論理コア数 | 2 |
| 物理コア数 | 1 |
| 周波数 | 3600 MHz |
| **CPU使用率** | **約9.5%**(アイドル 90.5%) |
| ロードアベレージ | 0.46 / 0.56 / 0.39(1分/5分/15分) |
**判定: 正常** — CPU負荷は低く、問題ありません。
---
### メモリ使用率
| 項目 | 値 |
|------|-----|
| 合計RAM | 3.5 GB |
| 使用中 | 1.9 GB |
| 空き | 1.3 GB |
| 利用可能 | 1.6 GB |
| **メモリ使用率** | **約55%**(利用可能ベースで約45%空き) |
| スワップ合計 | 2.0 GB |
| スワップ使用中 | **850 MB(約42%)** |
**判定: 要注意** — 起動直後にもかかわらずスワップが42%使用されています。物理メモリ3.5GBに対してスワップが既に活用されている状況は、メモリが不足気味であることを示しています。
---
### ディスク使用率
| マウントポイント | サイズ | 使用済み | 空き | 使用率 |
|----------------|--------|---------|------|--------|
| `/`(ルート) | 36.3 GB | 23.7 GB | 12.7 GB | **65%** |
| `/boot` | 960 MB | 563 MB | 397 MB | **59%** |
| `/boot/efi` | 599 MB | 8.9 MB | 590 MB | 1% |
**判定: やや注意** — ルートが65%、/bootが59%で今すぐ問題ではありませんが、余裕は多くありません。
---
## 対応策の提案
### 1. メモリ(優先度: 高)
起動9分でスワップ850MB使用は、物理メモリ不足の兆候です。
- **短期対策**: 不要なサービスを停止してメモリを解放する
# メモリ消費の多いプロセスを確認
ps aux --sort=-%mem | head -20
- **中期対策**: 仮想マシンの場合、RAMを4GB→8GBに増設を検討
- **スワップ改善**: swappiness値を確認し、必要に応じて調整
```bash
cat /proc/sys/vm/swappiness
# 値が高い場合、一時的に下げる
sudo sysctl vm.swappiness=10
### 2. ディスク(優先度: 中)
- `/boot` の空きが397MBしかないため、古いカーネルが残っていれば削除を検討
sudo dnf list installed kernel
# 古いカーネルを削除
sudo dnf remove --oldinstallonly
- ルートの不要なキャッシュやログを確認
sudo du -sh /var/log /var/cache /tmp
sudo journalctl --vacuum-size=100M
### 3. CPU(対応不要)
現時点でCPU負荷に問題はありません。
---
**まとめ**: 最も注意すべきはメモリです。3.5GBの物理RAMでスワップが常用されている状態は、パフォーマンス低下につながるため、メモリ増設またはサービスの見直しを推奨します。
かなり細かく分析してくれているように感じました。
システムのセキュリティー設定状況に基づく対応要否確認
今回は下記のようなプロンプトを入力してみました。
現在接続しているRHEL V10.2環境のファイアウォールなどセキュリティの設定状況を確認し、対応が必要なようであれば対応策を提案してください。
その後、Kiro君はRHELのMCPサーバー(linux-mcp-server)を用いて、適宜RHELのコマンドを実行してシステムの情報抽出を行っていきます。
時折sudoコマンドを実行してくれますが、パスワードの入力待ちになると、Kiroはそこで停滞してしまうので、Kiroのターミナルからユーザー自身でパスワードを入力してあげるなどのフォローは必要です。

最終的に下記のマークダウンファイルに見られるような分析結果及び対応策を提案してくれました。
RHEL 10.2 環境のセキュリティ設定を確認します。まずシステム情報、ファイアウォール、リスニングポート、SELinux の状態を調べます。
次に、firewalld の詳細設定と SELinux の状態を確認します。
firewall-cmd は権限が不足しているようです。sudo で再試行します。
調査が完了しました。以下に現状のセキュリティ設定の概要と、対応を推奨する項目をまとめます。
---
## 現状のセキュリティ設定サマリ
### システム概要
| 項目 | 状態 |
|------|------|
| OS | Red Hat Enterprise Linux 10.2 (Coughlan) |
| Kernel | 6.12.0-211.28.1.el10_2.x86_64 |
| SELinux | **Enforcing (targeted)** ✅ |
| firewalld | **active (running)** ✅ |
| デフォルトゾーン | public |
| NIC | ens160 (192.168.137.132/24), ens192 (192.168.65.130/24) |
### firewalld 設定 (public ゾーン)
- 許可サービス: `cockpit`, `dhcpv6-client`, `dns`, `ssh`
- 許可ポート: `443/tcp`
- マスカレード: 無効
- フォワード: 有効
### 外部公開されているリスニングポート (0.0.0.0 or NIC バインド)
| ポート | サービス | firewalld で許可? |
|--------|----------|-------------------|
| 22/tcp | sshd | ✅ 許可 |
| 21/tcp | vsftpd | ❌ **未許可 (暗黙 reject)** |
| 53/tcp,udp | named (DNS) | ✅ 許可 |
| 111/tcp,udp | rpcbind | ❌ **未許可 (暗黙 reject)** |
### SELinux
- モード: Enforcing (正常)
- ポリシー: targeted
---
## 検出された問題点と推奨対応
### 1. ⚠️ rpcbind (ポート 111) が外部にバインドされている
**リスク**: rpcbind は NFS 等の RPC サービスのポートマッパーです。NFS を使っていない場合は不要であり、攻撃対象を広げます。firewalld で reject されてはいますが、サービス自体を停止するのがベストプラクティスです。
**推奨対応**:
# NFS を使用していない場合
sudo systemctl stop rpcbind.service rpcbind.socket
sudo systemctl disable rpcbind.service rpcbind.socket
### 2. ⚠️ FTP (vsftpd, ポート 21) が稼働中
**リスク**: FTP はプレーンテキスト認証のため、通信内容(パスワード含む)がネットワーク上で傍受可能です。現在 firewalld で許可されていないため外部からは到達しませんが、サービスが起動している状態は攻撃面を広げます。
**推奨対応**:
- FTP が不要であればサービスを停止する:
sudo systemctl stop vsftpd
sudo systemctl disable vsftpd
- FTP が業務に必要な場合は、SFTP (SSH ベース) への移行を推奨。あるいは最低限 FTPS (TLS) を有効にする:
# vsftpd.conf に追加
ssl_enable=YES
force_local_data_ssl=YES
force_local_logins_ssl=YES
### 3. ⚠️ SSH の root ログイン / パスワード認証
**現状**: sshd_config で `PasswordAuthentication` や `PermitRootLogin` が明示指定されていません (RHEL 10 デフォルトは `PermitRootLogin prohibit-password`)。
**推奨対応**:
# /etc/ssh/sshd_config.d/99-hardening.conf を作成
sudo tee /etc/ssh/sshd_config.d/99-hardening.conf <<'EOF'
PermitRootLogin no
PasswordAuthentication no
MaxAuthTries 3
ClientAliveInterval 300
ClientAliveCountMax 2
EOF
sudo systemctl restart sshd
※ 鍵認証が正しく設定されていることを事前に確認してください。
### 4. ⚠️ Cockpit が firewalld で許可されているがサービスが起動していない
Cockpit のポート (9090) は listen していませんが、firewalld で許可されています。使わないのであればルールを削除してポリシーを最小化すべきです。
sudo firewall-cmd --permanent --remove-service=cockpit
sudo firewall-cmd --reload
### 5. 💡 HTTPS (443/tcp) のルールがあるが、対応するサービスが不在
443/tcp が firewalld で開いていますが、対応する Web サーバプロセスがリスニングしていません。今後使用する予定がなければ閉じることを推奨します。
sudo firewall-cmd --permanent --remove-port=443/tcp
sudo firewall-cmd --reload
### 6. 💡 NIC が2つあるが同じゾーンに所属
ens160 と ens192 が両方 `public` ゾーンに入っています。役割が異なる場合 (例: ens192 が管理用) は、ゾーンを分けてアクセス制御を細分化するとセキュリティが向上します。
---
## 良好な点 ✅
- SELinux が Enforcing で正しく動作している
- firewalld が有効で、未許可サービスは暗黙 reject されている
- PostgreSQL、CUPS はローカルホスト (127.0.0.1) のみにバインドされている
- auditd が稼働してセキュリティ監査が有効
---
対応すべき項目の優先度は **SSH ハードニング > rpcbind 停止 > vsftpd 対応 > 未使用ルールの整理** の順をお勧めします。特定の項目について詳しい手順が必要であればお知らせください。
普段AWSについて詳しいKiro君のRHELアドバイザーとしての頼もしい姿を見ることができました。
おわりに
今回は、現時点ではDeveloper Preview版として提供されているRHELのMCPサーバーをAWS Kiroに設定し、Kiro君に私のRHEL V 10.2の環境を分析して、問題があれば対応策を提案してもらった一例をご紹介しました。AWSに詳しいKiro君が今度はRHELの頼もしいアドバイザーとしてレベルアップしたことで、面白い体験をすることができました。
他にもClaude CodeやCodex、IBM Bob等でもRHELのMCPサーバーを設定して利用することは可能です。
もしも普段RHELを使用していて、RHEL固有のスキルを用いたシステム分析等をAIエージェントに依頼したいような場合には、このRHEL MCPサーバーを導入・設定してご使用いただくことをお奨めします。