LinuCレベル2(202試験)の主題2.12「システムセキュリティ」では、外部の脅威からサーバーやネットワークを防護するパケットフィルタリング(firewalld / iptables)、リモート運用の安全性を担保する中核技術である OpenSSHサーバーの堅牢化(公式重要度4)、暗号化通信トンネルを確立する OpenVPN、そして侵入検知・セキュリティ監査ツール(Fail2ban / Snort / OpenSCAP / nmap)が公式出題範囲に指定されています。
あわせて本記事では、試験必須のiptables/firewalldとOpenSSHの徹底攻略に加え、実務のモダンLinux環境で標準採用されている nftables による統合フィルタリング、AIDE によるファイル改ざん検知、軽量・高速な WireGuard VPN についても「実務拡張」として網羅。Netfilterフレームワークのフックポイント(PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING)のパケット通過フローから、試験最重要の sshd_config セキュリティディレクティブ、TUN/TAP仮想インターフェースの仕組みまで、AlmaLinux 9.8の実機検証ログとともに体系的に解説します。
- ホストOS
- AlmaLinux 9.8 (Kernel 5.14.0-687.42.1.el9_8.x86_64)
- ホスト名 / IP
- linuc-node01 / 192.168.2.138
- SSHサーバー
- OpenSSH 9.9p1 (OpenSSL 3.5.5)
- パケットフィルタ
- nftables v1.0.9 / iptables-nft v1.8.10
- 改ざん検知(HIDS)
- AIDE 0.19.2 (/etc/aide.conf)
- ネットワーク診断
- Nmap 7.92
| 公式試験の必須出題範囲 | 主題2.12.1(iptables/firewalld)、主題2.12.2(OpenSSHサーバー・公式重要度4)、主題2.12.3(OpenVPN)、主題2.12.4(fail2ban/snort/nmap/OpenSCAP) |
|---|---|
| 現場で役立つ実務拡張 | 最新Linux標準の nftables によるホワイトリスト型ルールセット構築、AIDE改ざん検知、WireGuard次世代VPN |
目次
1. Linuxパケットフィルタリングのアーキテクチャ(Netfilter)
Linuxカーネル内部には、ネットワークプロトコルスタックを通過するパケットを検査・改変・破棄するためのフレームワークである Netfilter が組み込まれています。
図1: Linux Netfilterパケットフローとiptables/nftablesのフックポイント
1.1 Netfilterフックポイントとパケット走査フロー
第4回で設定した物理NICがパケットを受信してから外部へ送出されるまで、パケットは以下の5つのフックポイントを順次通過します。
-
PREROUTINGNICからパケットが到着した直後、ルーティング判断が行われる前に通過するフックです。主に宛先IPアドレスやポート番号を書き換える DNAT(Destination NAT / ポートフォワーディング) が実行されます。
-
INPUT(自ホスト宛て)ルーティング判断の結果、パケットの宛先が「このサーバー自身」である場合に通過するフックです。SSHやWebサーバーなどのローカルプロセスへ届く前のファイアウォール遮断判定を行います。
-
FORWARD(他ホスト宛て中継)ルーティング判断の結果、パケットの宛先が「別のホスト」であり、自サーバーがルーターとして中継する場合に通過するフックです。ルーターやゲートウェイ機能における通過制御を担います。
-
OUTPUT(自ホスト発信)自ホスト上のローカルプロセスが生成し、外部へ送信しようとするパケットが通過するフックです。
-
POSTROUTINGすべてのルーティング処理が完了し、物理NICからパケットが送出される直前に通過するフックです。送信元IPアドレスを書き換える SNAT(Source NAT) や IPマスカレード(MASQUERADE) が実行されます。
1.2 iptablesの構造(テーブルと組み込みチェーン)
旧来の iptables では、パケットを処理する目的ごとに「テーブル」が分かれており、各テーブル内に「チェーン」が組み込まれていました。
| テーブル名 | 組み込みチェーン | 主な用途 |
|---|---|---|
filter(既定) |
INPUT, FORWARD, OUTPUT | パケットの通過許可(ACCEPT)や破棄(DROP / REJECT)を行う基本ファイアウォール。 |
nat |
PREROUTING, POSTROUTING, OUTPUT | IPアドレスやポート番号の変換(SNAT, DNAT, MASQUERADE)。 |
mangle |
全5チェーン | IPヘッダのTTLやTOS(Type of Service)などの特殊改変。 |
raw |
PREROUTING, OUTPUT | コネクショントラッキング(状態追跡)の除外設定(NOTRACK)。 |
特に重要なのが、ステートフルパケット検査(ステートフルインスペクション)を実現する コネクショントラッキング(conntrack) です。
# 既に確立された通信(ESTABLISHED)および関連通信(RELATED)を無条件許可
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
1.3 現代の標準: nftables の特徴とコマンド体系
AlmaLinux 9や最新のLinuxカーネルでは、iptablesの後継として nftables が標準採用されています。
- 単一フレームワーク統合: IPv4(
iptables)、IPv6(ip6tables)、ARP(arptables)、Ethernetブリッジ(ebtables)がすべてnftコマンド1つに統合されました。 - 固定テーブルの撤廃: 事前に組み込まれた
filterやnatテーブルは存在せず、管理者が任意の名前でテーブルやチェーンを柔軟に作成できます。 - バイトコード実行エンジン: ルールがカーネル内の仮想マシン(JITコンパイル)で高速実行されるため、大量のルールが存在してもパケット遅延が発生しません。
2. nftables による実機ファイアウォール構築とログ検証(実務拡張)
LinuC 202試験の公式出題範囲は iptables と firewalld が中心ですが、最新のLinuxディストリビューション(RHEL 9 / AlmaLinux 9等)ではバックエンドが nftables に完全移行しています。現場で必須となる実務拡張知識として、nft コマンドを用いたテーブル・チェーンの作成および基本ルールの構築手順を整理します。
2.1 基本ルールの設計と適用(INPUTドロップとステートフル許可)
サーバーを堅牢化するファイアウォールポリシーの基本は、「入力をすべて破棄(既定DROP)し、許可された正当なパケットのみを通す」ホワイトリスト方式です。
# 1. inetファミリ(IPv4/IPv6共用)でカスタムテーブルを作成
sudo nft add table inet my_firewall
# 2. INPUTフックに接続する基本チェーンを作成(既定ポリシーは drop)
sudo nft "add chain inet my_firewall my_input { type filter hook input priority 0 ; policy drop ; }"
# 3. ループバック(lo)インターフェースの通信を許可
sudo nft add rule inet my_firewall my_input iif lo accept
# 4. 確立済み接続(established/related)を許可
sudo nft add rule inet my_firewall my_input ct state established,related accept
# 5. SSHポート(TCP 22)を許可
sudo nft add rule inet my_firewall my_input tcp dport 22 accept
2.2 実機でのルールセット出力とパケット疎通テスト
適用されている全ルールセットを確認するには nft list ruleset を実行します。
[user01@linuc-node01 ~]$ sudo nft list ruleset | head -n 15
table inet firewalld { # progname firewalld
flags owner,persist
chain mangle_PREROUTING {
type filter hook prerouting priority mangle + 10; policy accept;
jump mangle_PREROUTING_ZONES
}
chain mangle_PREROUTING_POLICIES_pre {
jump mangle_PRE_policy_allow-host-ipv6
}
chain mangle_PREROUTING_ZONES {
iifname "eth0" goto mangle_PRE_public
goto mangle_PRE_public
}
}
3. OpenSSHサーバーの構築と堅牢化(公式重要度4)
LinuC 202試験の主題2.12において、公式重要度「4」(試験全体で最高ランク)に指定されている最重要項目が OpenSSHサーバーの設定と管理 です。サーバーの遠隔操作を一手に担うSSHは、設定の不備がサーバー乗っ取りに直結するため、本番試験の記述式問題(コマ問)でも極めて高い頻度で問われます。
3.1 sshd_config の主要ディレクティブ完全攻略
OpenSSHサーバーの主設定ファイルは /etc/ssh/sshd_config です。試験で頻出するセキュリティディレクティブと推奨設定値を整理します。
| ディレクティブ名 | 設定例 | 機能説明とセキュリティ意義 |
|---|---|---|
Port |
Port 22 |
SSHサービスが待ち受けるTCPポート番号(標準は22)。 |
PermitRootLogin |
PermitRootLogin no |
rootユーザーの直接SSHログインを禁止(管理者権限奪取の一次防衛線)。prohibit-password(公開鍵のみ許可)も可。 |
PasswordAuthentication |
PasswordAuthentication no |
パスワードによるログイン認証を全面禁止。総当たり(ブルートフォース)攻撃を無効化。 |
PubkeyAuthentication |
PubkeyAuthentication yes |
公開鍵暗号方式によるユーザー認証を有効化。 |
AuthorizedKeysFile |
AuthorizedKeysFile .ssh/authorized_keys |
ログインを許可するクライアントの公開鍵リストファイルの格納パス(ホーム直下)。 |
AllowUsers / DenyUsers |
AllowUsers user01 deploy@192.168.2.* |
SSHログインを許可/拒否する特定ユーザー(および接続元ホスト)のホワイト/ブラックリスト。 |
AllowGroups / DenyGroups |
AllowGroups wheel sshusers |
SSHログインを許可/拒否するグループ指定。 |
ClientAliveInterval |
ClientAliveInterval 300 |
クライアントの応答確認パケットを送る間隔(秒)。無通信切断タイマーの中核。 |
ClientAliveCountMax |
ClientAliveCountMax 3 |
無応答パケットの最大試行回数(これを超えるとセッション強制切断)。 |
X11Forwarding |
X11Forwarding no |
リモートサーバー上のGUIアプリケーション画面をクライアントへ転送する機能の許可/禁止。 |
実機環境(AlmaLinux 9.8)において sshd -T を実行し、現在有効なアクティブパラメータをダンプ抽出したログです。
[user01@linuc-node01 ~]$ sshd -V
OpenSSH_9.9p1, OpenSSL 3.5.5 27 Jan 2026
[user01@linuc-node01 ~]$ sudo sshd -T | grep -E '^(port|permitrootlogin|passwordauthentication|pubkeyauthentication|clientalive)'
port 22
clientaliveinterval 0
clientalivecountmax 3
permitrootlogin without-password
pubkeyauthentication yes
passwordauthentication yes
3.2 公開鍵暗号ペアの生成(ssh-keygen)と鍵の配布
SSHの安全性を劇的に高めるのが、公開鍵暗号ペアを用いた認証です。鍵の生成には ssh-keygen コマンドを使用します。
[user01@linuc-node01 ~]$ ssh-keygen -t ed25519 -N "" -f ~/.ssh/id_ed25519 -C "user01@linuc-node01"
Generating public/private ed25519 key pair.
Your identification has been saved in /home/user01/.ssh/id_ed25519
Your public key has been saved in /home/user01/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:MQ3DVZXTM1sXSlvLqXCJzoMmWwaC86nx4xVFNT+OaDM user01@linuc-node01
[user01@linuc-node01 ~]$ ls -la ~/.ssh/
-rw-------. 1 user01 user01 411 Sep 8 00:23 id_ed25519 # 秘密鍵(パーミッション 600)
-rw-r--r--. 1 user01 user01 99 Sep 8 00:23 id_ed25519.pub # 公開鍵(パーミッション 644)
StrictModes yes が有効となっており、秘密鍵や認証ファイルのアクセス権が緩い場合、セキュリティ保護のため ログインを強制拒否 します。
~/.ssh/ディレクトリ:0700 (drwx------)必須~/.ssh/authorized_keysファイル:0600 (-rw-------)必須id_ed25519(秘密鍵):0600 (-rw-------)必須
他ユーザーへの読み取り権限(group や other の r や w)が付与されていると認証に失敗します。
生成した公開鍵をリモートサーバーの authorized_keys へ安全に転送・追記する専用コマンドが ssh-copy-id です。
# 指定した公開鍵(-i オプション)をリモートホストの ~/.ssh/authorized_keys へ自動配置
ssh-copy-id -i ~/.ssh/id_ed25519.pub user01@192.168.2.138
3.3 SSHポートフォワーディング(ポート転送)の3大種別
SSHプロトコルが提供する暗号化トンネルを経由して、安全でない通信プロトコル(HTTPやVNC、データベース接続など)を中継・保護する技術が SSHポートフォワーディング(トンネリング) です。LinuC試験では以下の3つのオプションが頻出します。
| 転送種別 | オプション構文 | パケットの流れと主な用途 |
|---|---|---|
| ローカルポート転送 | ssh -L [ローカルポート]:[宛先ホスト]:[宛先ポート] [SSHサーバー] |
クライアント自身の端末のポート宛て通信を、SSHサーバーを経由して内部LANのサーバーへ転送。社外から社内WebアプリやDBにアクセスする際に使用。 |
| リモートポート転送 | ssh -R [リモートポート]:[宛先ホスト]:[宛先ポート] [SSHサーバー] |
SSHサーバー側の特定ポートに届いた通信を、クライアント端末側へ逆方向に転送。NAT配下や社内LANの端末を社外サーバーから一時公開する際に使用。 |
| ダイナミックポート転送 | ssh -D [ローカルポート] [SSHサーバー] |
SSHクライアントを SOCKSプロキシサーバー として機能させ、ブラウザ等の全トラフィックをSSHサーバー経由で動的に中継。 |
3.4 sshd -t による設定構文検査
sshd_config を編集した後は、デーモンを再起動する前に必ず sshd -t コマンドを実行して設定構文の誤りを検査します。構文にエラーが存在したまま systemctl restart sshd を行うとSSH接続が切断され、サーバーから締め出される致命的障害に至ります。
[user01@linuc-node01 ~]$ sudo sshd -t
# エラーがない場合は何も出力せず終了コード0で復帰
4. ホスト型侵入検知システム(HIDS)と脆弱性診断
ファイアウォールによる境界防御を突破された場合に備え、サーバー内部のファイル改ざんを即座に検知する仕組みと、外部から自サーバーの弱点を事前診断するツール群を整理します。
4.1 AIDE(Advanced Intrusion Detection Environment)による改ざん検知(実務拡張)
LinuC 202試験の公式シラバス(主題2.12.4)では、侵入検知・セキュリティ運用として Fail2ban、Snort、OpenSCAP、nmap が指定されていますが、現場のサーバーセキュリティ管理で広く使われるファイル改ざん検知(HIDS)の代表格が AIDE(Advanced Intrusion Detection Environment) です。ここでは実務拡張としてAIDEの運用手順を解説します。
AIDEは、システム内の重要バイナリ(/bin, /sbin)や設定ファイル(/etc)のサイズ、パーミッション、所有者、更新日時、および暗号学的ハッシュ値(SHA256/SHA512等)を初期採取し、基準データベースとして保存します。定期的に現在のファイル状態と照合することで、バックドアの設置やファイルの改変を検出します。
-
1. 初期データベースの作成(aide –init)
aide --initコマンドを実行し、/etc/aide.confのルールに従って現時点の正常なスナップショットを/var/lib/aide/aide.db.new.gzに出力します。 -
2. 基準データベースの配置生成された
aide.db.new.gzをaide.db.gz(検査参照用)へリネーム配置します。 -
3. 整合性チェックの実行(aide –check)定期バッチ(cron/systemdタイマー)で
aide --checkを実行します。基準DBと現在のファイル状態の差分(変更・追加・削除)が詳細レポートされます。 -
4. 正常な更新後のDB同期(aide –update)OSアップデート等で正当にファイルが変更された場合、
aide --updateを実行して新基準DBを生成し、旧DBを置き換えます。
4.2 nmap によるポートスキャン手法と防御
自サーバーで不要なポートが開いていないか、意図しないサービスが外部に露出していないかを監査するネットワーク診断ツールが nmap(Network Mapper) です。
| スキャンオプション | スキャン名称 | 動作原理と特徴 |
|---|---|---|
-sS(既定・要root) |
TCP SYNスキャン(ステルススキャン) | SYNパケットを送信し、SYN/ACKが返ればポート開放と判定。ACKを返さずRSTを送信して接続を中断するため、サーバー側のログに接続履歴が残りにくい。 |
-sT(非特権ユーザー用) |
TCP connect()スキャン | OSの標準システムコールを用いて完全なTCP 3ウェイハンドシェイクを確立。確実に判定できるが、サーバー側のアクセスログに接続が記録される。 |
-sU |
UDPスキャン | UDPポートに対してパケットを送信。ICMP Port Unreachableが返れば閉塞、無応答または応答があれば開放と判定。DNSやNTPの診断に使用。 |
-sV |
バージョン検出 | 開いているポートに対して固有のプローブデータを送信し、動作しているデーモンの正確なソフトウェア名とバージョン番号を取得。 |
-p <範囲> |
スキャン対象ポートの指定 | -p 22,80,443 や -p 1-1024 のように対象ポートを限定。 |
4.3 fail2ban によるブルートフォース攻撃の自動遮断
SSHやWeb管理画面に対するパスワード総当たり攻撃(ブルートフォース)を検知・防御するデーモンが fail2ban です。/var/log/secure や access_log をリアルタイム監視し、短時間に一定回数以上の認証失敗を検知したIPアドレスを、nftablesやfirewalldを動的に操作して一定期間(例: 10分間)自動DROPします。
5. VPNトンネリング基盤(OpenVPN & 実務拡張:WireGuard)
公衆インターネットを経由して、安全に社内LANやクラウドアセットへ接続するためのオープンソースVPNソリューションである OpenVPN および次世代VPNの WireGuard を整理します。
図2: OpenVPNトンネリング機構(TUN/TAP)とデータカプセル化
5.1 仮想デバイスドライバ(TUN vs TAP)
OpenVPNは、Linuxカーネルが提供する仮想ネットワークインターフェースドライバを利用してパケットをカプセル化します。
| 仮想デバイス | 動作レイヤー | 転送単位 | 特徴と主な適用ユースケース |
|---|---|---|---|
TUN(dev tun) |
レイヤー3(ネットワーク層) | IPパケット | 標準的なルーティング方式。L2ブロードキャストを転送しないためオーバーヘッドが小さく高速。リモートアクセスVPNの推奨設定。 |
TAP(dev tap) |
レイヤー2(データリンク層) | Ethernetフレーム(MAC) | ブリッジ接続方式。社内LANと完全に同一のブロードキャストドメインに参加可能(NetBIOS名前解決やIP以外のプロトコルに対応)。トラフィック量は増加する。 |
5.2 OpenVPNサーバー設定(server.conf)の中核ディレクティブ
OpenVPNサーバーの挙動を定義する server.conf の最重要ディレクティブを整理します。
| ディレクティブ名 | 設定例 | 機能説明 |
|---|---|---|
port |
port 1194 |
OpenVPNが待ち受けるUDP/TCPポート番号(公式標準は1194)。 |
proto |
proto udp |
トランスポート層プロトコル(TCPオーバーTCPによる遅延を防ぐためUDPが推奨)。 |
dev |
dev tun |
使用する仮想デバイス種別(tun または tap)。 |
ca / cert / key |
ca ca.crt, cert server.crt |
認証局(CA)証明書、サーバー証明書、秘密鍵のパス。 |
dh |
dh dh2048.pem |
Diffie-Hellman鍵交換パラメータファイル。 |
server |
server 10.8.0.0 255.255.255.0 |
VPNクライアントに動的配布する仮想プライベートIPプールのアドレス範囲。 |
push "redirect-gateway def1" |
push "redirect-gateway def1" |
クライアントのデフォルトゲートウェイをVPNサーバー経由に切り替え、全通信を暗号化トンネルへ強制。 |
push "dhcp-option DNS ..." |
push "dhcp-option DNS 10.8.0.1" |
VPN接続時にクライアントへ通知するDNSサーバーアドレス。 |
5.3 WireGuardの概要と次世代VPNアーキテクチャ(実務拡張)
LinuC 202試験ではOpenVPNが出題対象ですが、現場で採用が急増している次世代VPN WireGuard についても実務拡張として押さえておきましょう。Linux 5.6以降のメインラインカーネルに標準組み込みされたWireGuardは、コード行数わずか約4,000行というコンパクトさで圧倒的な高速性とセキュリティを実現しています。
- カーネル組込処理: TUNデバイスを介したユーザー/カーネル空間のコンテキストスイッチを排除し、極小のCPU負荷で高速暗号処理(ChaCha20-Poly1305, Curve25519)を実行。
- 公開鍵ペアによるPeer認証: SSHと同様に各端末が秘密鍵と公開鍵のペアを保持し、相手の公開鍵を登録するだけで接続が確立(
wg genkey | tee privatekey | wg pubkey > publickey)。
6. LinuC 202試験(主題2.12)重要ポイント総整理
主題2.12「システムセキュリティ」における記述式問題(コマ問)頻出コマンドおよび評価順序のポイントを整理します。
6.1 記述式(コマ問)頻出コマンド・設定ファイル一覧
| 設問対象・操作内容 | 入力すべきコマンド/設定値 | 注意点・失点防止ポイント |
|---|---|---|
| OpenSSHの主設定ファイル | /etc/ssh/sshd_config |
クライアント用 ssh_config との混同厳禁 |
| sshd設定ファイルの構文を検査するコマンド | sshd -t |
小文字の -t(test)オプション |
| SSH公開鍵・秘密鍵ペアを生成するコマンド | ssh-keygen -t ed25519 |
-t で暗号鍵タイプ(ed25519 / rsa)を指定 |
| 公開鍵をリモートホストへ登録・転送するコマンド | ssh-copy-id <user@host> |
ssh-copy-id はハイフン繋ぎの1単語 |
| ローカルポート転送を行うSSHオプション | ssh -L ... |
大文字の -L(Local) |
| リモートポート転送を行うSSHオプション | ssh -R ... |
大文字の -R(Remote) |
| ダイナミックポート転送(SOCKS)を行うSSHオプション | ssh -D ... |
大文字の -D(Dynamic) |
| AIDEの初期データベースを生成するコマンド | aide --init |
ハイフン2つの --init |
| AIDEでファイル整合性を検査するコマンド | aide --check |
ハイフン2つの --check |
| AIDEの主設定ファイル | /etc/aide.conf |
パス名スペルミス防止 |
| nmapでTCP SYNステルススキャンを行うオプション | nmap -sS <target> |
小文字 -s と大文字 S |
| nftablesの全ルールセットを表示するコマンド | nft list ruleset |
ruleset は1単語 |
| OpenVPNの標準ポート番号とトランスポート層 | 1194 / UDP |
ポート番号とプロトコルの組み合わせ |
6.2 SSHパーミッション、DNAT/SNAT評価順序の盲点
受験者が最も失点しやすい2大盲点を整理します。
-
盲点1: ~/.ssh/authorized_keys のパーミッション要件公開鍵認証が失敗する最大の原因はパーミッション不一致です。
StrictModes yesの環境では、~/.sshは700 (rwx------)、authorized_keysは600 (rw-------)でなければなりません。グループや他人に書き込み権(w)や読み取り権(r)があるとSSHデーモンが鍵を無視するため、記述問題・トラブルシュート問題の定番ポイントです。 -
盲点2: DNATとSNATのフックポイントの取り違え「外部から届いたパケットの宛先IPを内部Webサーバーへ変換する」DNATは、ルーティングが行われる前の PREROUTING で実行しなければなりません。一方、「内部端末から外部へ出るパケットの送信元IPをルーターのグローバルIPに変換する」SNAT/MASQUERADEは、ルーティング完了後の POSTROUTING で実行します。この2つのフックポイントを逆に書くミスが多発するため厳格に区別します。
7. まとめと次回予告(第16回:高可用性HAクラスタ【主題2.13】)
本記事では、LinuCレベル2(202試験)における最重要防衛ラインであるシステムセキュリティについて、Netfilterの5大フックポイント(PREROUTINGからPOSTROUTING)、最新のnftablesによるホワイトリスト型ファイアウォール構築、公式重要度4のOpenSSHサーバー堅牢化(sshd_config、公開鍵認証、StrictModesパーミッション、ポート転送)、AIDEによるファイル整合性検証、nmapによるポートスキャン、およびOpenVPN(TUN/TAP)とWireGuardによる暗号化トンネルの構築手法を実機ログとともに体系的に解説しました。
次回(第16回)は、202試験の技術分野における最終関門「高可用性(HA: High Availability)クラスタと典型アーキテクチャ【主題2.13】」を取り上げます。障害発生時に瞬時に待機系へサービスを引き継ぐ Pacemaker & Corosync によるアクティブ/スタンバイHAクラスタ、スプリットブレインを防ぐフェンシング機構(STONITH)、および共有ストレージ同期(DRBD)の構築手順を詳細に解説します。
