第19章 DHCPとPAM認証
LPIC-2 210.1〜210.2 相当
ネットワーク上のクライアント管理に関わる2つの技術、DHCPとPAMを扱います。LDAPクライアントとしての設定・OpenLDAPサーバーの構築は、新設した別章で扱います。
DHCP — IPアドレスの自動割り当て
DHCP(Dynamic Host Configuration Protocol)は、クライアントに自動的にIPアドレスなどのネットワーク情報を配布する仕組みです。ここでは、LPICの出題範囲でも中心となっているISC DHCP(isc-dhcp-server)を例に基本構文を扱います。
dhcpd.confの書式)を対象としているため、試験対策としては引き続きISC DHCPの構文を押さえておく必要がありますが、新規に構築する実務環境ではKeaの採用を検討するのが現在の一般的な流れです。
/etc/dhcp/dhcpd.conf(ISC DHCPの例)
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.100 192.168.1.200;
option routers 192.168.1.1;
option domain-name-servers 8.8.8.8;
}
host printer01 {
hardware ethernet 00:11:22:33:44:55;
fixed-address 192.168.1.50;
}
上の host ブロックのように、MACアドレスを指定して常に同じIPアドレスを割り当てる「静的割り当て(DHCPリザベーション)」も可能です。プリンタやサーバーなど、IPアドレスを固定したい機器に使われます。
$ sudo systemctl restart isc-dhcp-server # 正常時は無出力
$ cat /var/lib/dhcp/dhcpd.leases # 割り当て済みのリース情報を確認
lease 192.168.1.101 {
starts 5 2026/08/21 09:00:00;
ends 5 2026/08/21 17:00:00;
hardware ethernet 08:00:27:aa:bb:cc;
client-hostname "kosuke-laptop";
}
この行のこの値に注目: starts/endsが実際にそのIPアドレスを貸し出している期間で、hardware ethernet行のMACアドレスからどの機器に割り当てられたかを特定できます。同じIPアドレスに対して複数のleaseブロックが記録されている場合、時系列で一番下(最新)のものが現在有効なリース情報です。
DHCPの通信の流れ(DORA)
クライアントがIPアドレスを取得するまでの流れは、頭文字を取って「DORA」と呼ばれる4段階のやり取りで構成されます。
| 段階 | 内容 |
|---|---|
| Discover | クライアントがブロードキャストでDHCPサーバーを探す |
| Offer | DHCPサーバーが割り当て候補のIPアドレスなどを提示する |
| Request | クライアントが提示された内容を使うことを要求する |
| Ack | DHCPサーバーが割り当てを確定し、リース期間などを通知する |
割り当てられたIPアドレスには有効期限(リース期間)があり、クライアントは期限の約半分が経過した時点で同じサーバーに更新(renew)を要求します。DHCPサーバーがダウンしていてリースが更新できないままリース期間が切れると、クライアントはIPアドレスを失い通信できなくなります。
dhcrelay)が要求をDHCPサーバーへ中継するように設定します。
PAM — 認証の仕組みを差し替え可能にする
PAM(Pluggable Authentication Modules)は、「ログインを許可するかどうか」の判断ロジックを、アプリケーションごとに個別実装せず、共通の仕組みとして差し替え可能にする仕組みです。設定は /etc/pam.d/ 以下にサービスごとのファイルとして置かれます。
/etc/pam.d/sshd の一部
auth required pam_unix.so
account required pam_unix.so
password required pam_unix.so
| 制御フラグ | 意味 |
|---|---|
required | 失敗しても後続のモジュールは実行するが、最終的には認証失敗とする |
requisite | 失敗した時点で即座に認証失敗とする |
sufficient | 成功すればその時点で認証成功とする(後続は評価不要) |
optional | 成功・失敗のいずれも全体の結果には影響しない(他に有効なモジュールがない場合を除く) |
PAMには「モジュールタイプ」もあり、auth(本人確認)、account(アカウントの有効性、有効期限など)、password(パスワード変更時の処理)、session(ログイン前後のセッション処理)の4種類に分かれます。同じモジュールでも、どのタイプとして呼ばれるかで役割が変わります。
アカウントロックアウトの例(/etc/pam.d/common-auth に追記)
auth required pam_tally2.so deny=5 unlock_time=600
# 5回連続でログインに失敗したアカウントを600秒間ロックする
PAMモジュールはリソース制限の設定にも使われます。pam_limits.so は、ユーザーが開けるファイル数やプロセス数の上限(ulimit相当)を /etc/security/limits.conf の記述に基づいて適用します。
/etc/security/limits.conf の例
@developers soft nofile 4096
@developers hard nofile 8192
# developersグループのユーザーが同時に開けるファイル数の上限をsoft/hardで指定
pam_faillockによるアカウントロックアウト(現行の標準)
先ほど紹介したpam_tally2.soは、多くのディストリビューションですでに非推奨となっており、後継のpam_faillock.soに置き換えられています。RHEL系では8以降、Debian系でも比較的新しいバージョンでpam_faillockが標準的に使われます。設定の多くは/etc/security/faillock.confにまとめられ、pam.d側の記述はモジュールを3箇所で呼び出す形になります。
/etc/pam.d/system-auth(RHEL系の例。authselect管理下の場合は直接編集しない)
auth required pam_faillock.so preauth silent deny=5 unlock_time=600
auth [success=1 default=bad] pam_unix.so
auth [default=die] pam_faillock.so authfail deny=5 unlock_time=600
auth sufficient pam_faillock.so authsucc
pam_faillockはauthタイプの中で3回呼び出されるのが特徴です。preauthは実際の認証を試みる前に、そのアカウントがすでにロックされていないか確認する呼び出しです。認証本体(pam_unix.soなど)の後、authfailは認証が失敗した場合に失敗カウントを記録するために、authsuccは認証が成功した場合に失敗カウントをリセットするために使われます。
$ sudo faillock --user alice # aliceの失敗回数と履歴を確認
alice:
When Type Source Valid
2026-08-21 09:12:03 RHOST 198.51.100.7 V
2026-08-21 09:12:10 RHOST 198.51.100.7 V
$ sudo faillock --user alice --reset # aliceのロックを解除(正常時は無出力)
この行のこの値に注目: Source列に表示されるIPアドレスから、どこからの認証失敗が積み重なっているかが分かります。同一IPから短時間に複数回記録されている場合は、ブルートフォース攻撃を受けている可能性があります。--resetを実行すると失敗カウントがクリアされ、アカウントロックが解除されます。
pam_pwqualityによるパスワード強度の強制
ユーザーが弱いパスワード(辞書に載っている単語、短すぎる文字列など)を設定してしまうのを防ぐには、pam_pwquality.so(旧称pam_cracklib.so)を使います。設定は/etc/security/pwquality.confにまとめて記述するか、pam.d側に直接オプションを書きます。
/etc/pam.d/common-password(Debian系)または /etc/pam.d/system-auth(RHEL系)
password requisite pam_pwquality.so retry=3 minlen=10 dcredit=-1 ucredit=-1 ocredit=-1
| オプション | 意味 |
|---|---|
| minlen | パスワードの最小文字数 |
| dcredit | 数字に対する要件(負の値は「最低でもこの数だけ数字を含む」ことを要求) |
| ucredit | 大文字に対する同様の要件 |
| ocredit | 記号(その他の文字)に対する同様の要件 |
| retry | 要件を満たさない場合に再入力を許す回数 |
制御フラグにrequisiteを使っているのは、パスワード品質チェックに失敗した時点で以降のモジュール(実際のパスワード変更処理)を評価せず、即座に処理を打ち切るためです。
pam_listfileによるアクセス制御リスト
pam_listfile.soは、特定のファイルに列挙したユーザー・グループ単位で、サービスへのアクセスを明示的に許可・拒否するモジュールです。特定のサービスに対して「このユーザーだけは常にログインを拒否する」といった単純なブラックリスト/ホワイトリスト運用に向いています。
/etc/pam.d/sshd への追記
auth required pam_listfile.so item=user sense=deny file=/etc/ssh/denyusers onerr=succeed
item=userはチェック対象がユーザー名であることを、sense=denyはファイルに列挙されたユーザーを拒否する意味を、onerr=succeedはファイルの読み込み自体に失敗した場合の既定の挙動(この場合は認証を継続させる)を指定します。TCP Wrappers(/etc/hosts.allow・/etc/hosts.deny)に似た発想ですが、pam_listfileはPAM対応の任意のサービスに横断的に使える点が異なります。
PAM設定を管理するディストリ側のツール
PAMの設定ファイルを直接手で編集する代わりに、ディストリビューションによっては専用の管理コマンドが用意されています。
| ディストリ系統 | ツール | 役割 |
|---|---|---|
| Debian/Ubuntu系 | pam-auth-update | インストール済みのPAMモジュール(pam_mkhomedirなど)を対話的に有効・無効化し、共通設定ファイル(common-authなど)に反映する |
| RHEL系(8以降) | authselect | 「認証プロファイル」という単位でPAM設定を一括管理する。個々のファイルを直接編集すると、authselectの管理から外れて次回の切り替え時に上書きされる恐れがある |
authselect create-profileで独自プロファイルを作成し、その中で調整するのが安全な手順です。
DHCPリレーエージェント
DHCPはブロードキャスト(同一ネットワーク内への一斉送信)を使う仕組みのため、本来はDHCPサーバーと同じネットワークセグメント内のクライアントにしか届きません。オフィスや拠点が複数のネットワークセグメントに分かれている場合、各セグメントにDHCPサーバーを個別に用意するのは管理上手間がかかります。この課題を解決するのがDHCPリレーエージェントで、あるセグメントに届いたDHCP要求を、別セグメントにある中央のDHCPサーバーへ中継する役割を果たします。多くのL3スイッチやルーターがこの機能を備えており、Linuxサーバーでもisc-dhcp-relayのようなパッケージで実現できます。
DHCPの固定割り当て(アドレス予約)
プリンタやNAS、監視カメラなど、常に同じIPアドレスであってほしい機器には、DHCPサーバー側で「このMACアドレスには常にこのIPアドレスを割り当てる」という予約設定を行うのが一般的です。クライアント側で静的IPを直接設定する方法と異なり、アドレス管理をDHCPサーバー側に一元化できるため、後からアドレス体系を見直す際にも変更箇所が少なく済むという利点があります。
/etc/dhcp/dhcpd.conf の一部
host printer01 {
hardware ethernet 00:11:22:33:44:55;
fixed-address 192.168.1.50;
}
設定変更後はsudo systemctl restart isc-dhcp-serverで反映し、対象機器側でDHCPの再取得(多くの場合は再起動やネットワークの再接続)を行うことで新しい割り当てが有効になります。
DHCPの主要なオプションとスコープ設定
dhcpd.confでは、サブネットごとに配布するネットワーク情報をoptionで細かく指定できます。
| オプション | 内容 |
|---|---|
| option subnet-mask | サブネットマスク |
| option routers | デフォルトゲートウェイのアドレス |
| option domain-name | クライアントに設定するドメイン名 |
| option domain-name-servers | DNSサーバーのアドレス(複数指定可) |
| option broadcast-address | ブロードキャストアドレス |
| option ntp-servers | NTPサーバーのアドレス |
| default-lease-time | クライアントが明示的に要求しなかった場合の既定のリース期間(秒) |
| max-lease-time | クライアントが要求できるリース期間の上限(秒) |
/etc/dhcp/dhcpd.conf の一部
default-lease-time 600;
max-lease-time 7200;
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.100 192.168.1.200;
option routers 192.168.1.1;
option domain-name "example.com";
option domain-name-servers 192.168.1.1, 8.8.8.8;
option ntp-servers 192.168.1.1;
}
グローバルスコープ(subnetブロックの外)に書いたoptionは全サブネット共通の既定値となり、サブネットブロックの中で同じoptionを指定すると、そのサブネットに限って値が上書きされます。
複数のネットワークセグメントを扱うshared-network
物理的に同じネットワークセグメント(同一のスイッチ配下など)に、異なるIPアドレス帯(サブネット)が複数割り当てられている環境(セカンダリアドレスを使う場合など)では、shared-networkブロックで複数のsubnet定義をまとめます。
/etc/dhcp/dhcpd.conf の一部
shared-network office-lan {
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.100 192.168.1.200;
}
subnet 192.168.2.0 netmask 255.255.255.0 {
range 192.168.2.100 192.168.2.200;
}
}
shared-networkでまとめておくことで、DHCPサーバーは同じ物理セグメント上の複数のIPアドレス帯をまたいで、空いているアドレスをクライアントに割り当てられるようになります。
クライアント側のDHCP設定(dhclient.conf)
DHCPクライアント側の挙動も/etc/dhcp/dhclient.confでカスタマイズできます。サーバーから提示されたオプションのうち、どれを実際に適用するかを制御する場合に使います。
/etc/dhcp/dhclient.conf の一部
request subnet-mask, broadcast-address, routers, domain-name, domain-name-servers;
send host-name "client01";
require domain-name-servers;
requestはサーバーに求めるオプションの一覧、sendはクライアントからサーバーへ送る情報(この例ではホスト名)、requireは指定したオプションがサーバーから提示されなければリース自体を拒否する、より厳格な指定です。
DHCPv6の基礎
IPv6環境でのアドレス自動設定には、DHCPv6以外にRA(Router Advertisement、ルーターによるアドレスプレフィックスの広告)という仕組みもあり、両者は組み合わせて使われます。
| 方式 | 特徴 |
|---|---|
| ステートレス自動設定(SLAAC)+RA | ルーターが広告するプレフィックスをもとに、クライアントが自身でアドレスを生成する。DNSサーバーなどの追加情報は別途DHCPv6(ステートレスモード)で補うことが多い |
| DHCPv6(ステートフル) | IPv4のDHCPと同様に、DHCPv6サーバーがアドレスを払い出し、リース状態を管理する |
/etc/dhcp/dhcpd6.conf の例(ISC DHCPのIPv6版)
subnet6 2001:db8:1::/64 {
range6 2001:db8:1::100 2001:db8:1::200;
option dhcp6.name-servers 2001:db8:1::1;
}
RA広告でルーターの「Managed」フラグ(Mフラグ)が立っている場合、クライアントはSLAACではなくDHCPv6のステートフルモードでアドレスを取得しようとします。IPv6環境の切り分けでは、RAを広告しているルーター側の設定(radvdなど)とDHCPv6サーバー側の設定の両方を確認する必要がある点が、IPv4のDHCPとの大きな違いです。