設定¶
ここでは AAA バックエンドと管理面ポリシーの最小構成を、どの reference を引いて投入すればよいかという観点でまとめます。詳細な CLI / DB スキーマは個別 reference ページに既に存在するため、本ページはあくまで導線として機能します。
認証バックエンドの選び方¶
SONiC は local user に加えて TACACS+、RADIUS、LDAP の三つの外部バックエンドを持ちます。組み合わせは config aaa 系コマンドで設定し、最終的に CONFIG_DB の AAA テーブルと、各バックエンドのサーバー一覧テーブルに格納されます。
| バックエンド | 用途 | 設定の入口 | サーバーリスト |
|---|---|---|---|
| local | 緊急ログインの最後の砦 | config aaa authentication login local |
不要(/etc/passwd 等) |
| TACACS+ | 商用機器標準、per-command 認可と accounting | config tacacs ... |
TACPLUS_SERVER |
| RADIUS | キャリアグレードの集中認証 | config aaa ... + RADIUS テーブル |
既存 reference を参照 |
| LDAP | 既存ディレクトリへの統合 | config aaa ... + LDAP テーブル |
LDAP_SERVER |
CLI の全体像は config aaa を、YANG モデル経由の表現は sonic-system-aaa を参照してください。バックエンド単位の典型設定と注意点は以下にあります。
- TACACS+ authentication HLD
- SONiC TACACS+ improvement
- TACACS+ passkey encryption
- RADIUS management user authentication
- LDAP HLD
login_method の順序¶
config aaa authentication login で複数バックエンドを列挙できますが、運用上の鉄則は最後を必ず local で締めることです。外部サーバー全滅時のロックアウトを避けるためで、AAA improvements と TACACS test plan の失敗フォールバックシナリオで議論されています。
SSH と serial console のポリシー¶
SSH の listen address、port、ciphers、login grace time、max auth tries などは SSH_SERVER テーブルにまとめ、hostcfgd 経由で sshd_config に展開されます。詳細フィールドと意図は SSH server global config HLD を参照してください。
serial console 側は inactivity timeout、login banner との組み合わせ、root login の可否などを SERIAL_CONSOLE テーブルで制御します。設計意図は serial console global config HLD にあります。
banner メッセージ(login 前と login 後)は BANNER_MESSAGE テーブルで管理され、/etc/issue と /etc/motd に反映されます。詳細は banner messages HLD を参照してください。
設定の入口の対応¶
| やりたいこと | CLI | CONFIG_DB | YANG / HLD |
|---|---|---|---|
| login_method の順序付け | config aaa authentication login ... |
AAA\|authentication |
sonic-system-aaa |
| TACACS+ サーバ追加 | config tacacs add/delete |
TACPLUS_SERVER |
TACACS+ HLD |
| RADIUS サーバ追加 | config aaa ... |
RADIUS_SERVER |
RADIUS HLD |
| LDAP サーバ追加 | config ldap add/global |
LDAP_SERVER |
LDAP HLD |
| SSH 強化 | config ssh-server ... |
SSH_SERVER |
SSH HLD |
| serial console policy | config serial-console ... |
SERIAL_CONSOLE |
serial console HLD |
| banner | config banner ... |
BANNER_MESSAGE |
banner HLD |
CLI ラッパが用意されていないフィールドは sonic-cfggen -a '{...}' -w で CONFIG_DB に直接書きます。hostcfgd が pam_*.conf / nsswitch.conf / sshd_config / /etc/issue / /etc/motd に展開します。
設定シナリオ 1: TACACS+ を主、local を fallback とする¶
最も多い構成です。tac_plus を 2 台立て、config aaa で順序付け、ロックアウト回避のため末尾に必ず local を残します。
# サーバー登録(passkey は CLI 上は平文 → CONFIG_DB では暗号化保存)
sudo config tacacs add 10.0.10.11 -k MyS3cret -t 5
sudo config tacacs add 10.0.10.12 -k MyS3cret -t 5
# 認証フロー
sudo config aaa authentication login tacacs+ local
sudo config aaa authentication failthrough enable
# 認可・accounting(任意)
sudo config aaa authorization "tacacs+ local"
sudo config aaa accounting "tacacs+ local"
# 確認
show tacacs
show aaa
このとき CONFIG_DB は次のような形になります。
{
"AAA": {
"authentication": {"login": "tacacs+,local", "failthrough": "True"},
"authorization": {"login": "tacacs+,local"},
"accounting": {"login": "tacacs+,local"}
},
"TACPLUS": {
"global": {"auth_type": "pap", "timeout": "5", "passkey": "U2FsdGVk..."}
},
"TACPLUS_SERVER": {
"10.0.10.11": {"priority": "1", "tcp_port": "49", "timeout": "5"},
"10.0.10.12": {"priority": "1", "tcp_port": "49", "timeout": "5"}
}
}
show aaa の典型出力:
AAA authentication login : tacacs+ local
AAA authentication failthrough : True
AAA authorization login : tacacs+ local
AAA accounting login : tacacs+ local
設定シナリオ 2: LDAP(AD)統合 + SSH 制限¶
社内 AD に user を寄せ、ssh は cipher / kex を絞り、root login を禁止する例です。
# LDAP server とベース DN
sudo config ldap add 10.20.0.50 --port 389 --priority 1
sudo config ldap global set --base "dc=corp,dc=example,dc=com" \
--bind-dn "cn=sonic,ou=ServiceAccounts,dc=corp,dc=example,dc=com" \
--bind-password 'AppPass123!'
sudo config aaa authentication login ldap local
# SSH 強化
sudo sonic-cfggen -a '{
"SSH_SERVER":{"POLICIES":{
"permit_root_login":"no",
"max_auth_tries":"3",
"login_grace_time":"60",
"ciphers":"aes256-gcm@openssh.com,aes256-ctr",
"kex_algorithms":"curve25519-sha256,diffie-hellman-group16-sha512"
}}
}' -w
sudo systemctl restart hostcfgd
確認は次の通り。
設定シナリオ 3: banner と serial console の最小ハードニング¶
法的要件 + 置き忘れセッション切断:
sudo config banner login "Authorized access only. Activity is logged."
sudo config banner motd "SONiC NOS - production fabric"
sudo config serial-console inactivity-timeout 600
sudo config serial-console sysrq-capabilities disabled
CONFIG_DB:
{
"BANNER_MESSAGE": {"global": {"state":"enabled","login":"Authorized access only. Activity is logged.","motd":"SONiC NOS - production fabric"}},
"SERIAL_CONSOLE": {"POLICIES":{"inactivity_timeout":"600","sysrq_capabilities":"disabled"}}
}
show banner / show serial-console で投入結果を確認します。
設定シナリオ 4: RADIUS で per-command 認可¶
RADIUS で service-type / Cisco-AVPair ベースの per-command 認可を入れる例。freeradius 側で cisco-avpair="shell:priv-lvl=15" のような属性を返す前提で、SONiC 側は次のように設定します。
sudo config aaa authentication login radius local
sudo config aaa authorization "radius local"
sudo config aaa accounting "radius local"
sudo redis-cli -n 4 HSET 'RADIUS|global' auth_type pap timeout 5 retransmit 3
sudo redis-cli -n 4 HSET 'RADIUS_SERVER|10.0.10.21' priority 1 auth_port 1812 passkey 'R@diusPass'
CONFIG_DB:
{
"AAA": {"authentication":{"login":"radius,local"},"authorization":{"login":"radius,local"},"accounting":{"login":"radius,local"}},
"RADIUS": {"global": {"auth_type":"pap","timeout":"5","retransmit":"3"}},
"RADIUS_SERVER": {
"10.0.10.21": {"priority":"1","auth_port":"1812","passkey":"<encrypted>"}
}
}
show aaa と show radius で反映を確認、テスト user で tail -f /var/log/auth.log を見つつログインして Accept が返ることを確認します。
設定エラーと対処¶
| 症状 | 原因 | 対処 |
|---|---|---|
| 外部 AAA 設定後にコンソール / SSH からも入れない | login_method の末尾に local が無い |
recovery USB / シリアル → ONIE rescue → /etc/sonic/config_db.json の AAA を直接修正 |
| TACACS+ で認証が遅い(10s 超) | 1 台目がダウン、timeout が長い、failthrough 無効 |
config aaa authentication failthrough enable、timeout を 2-3s に、サーバー priority を見直す |
show tacacs で passkey が ***** のまま投入が反映されない |
config tacacs add のオプション順序を誤った |
-k の値が空白を含む場合は引用、config tacacs delete してから再追加 |
LDAP bind が Invalid credentials |
bind-dn か password の typo、または AD 側 sAMAccountName / userPrincipalName mismatch | ldapsearch -x -D ... -W -b ... で素のクエリを検証 |
| SSH の cipher を絞った後 windows クライアントから繋がらない | クライアント側に modern cipher が無い | クライアント側を更新、または ciphers リストに aes128-ctr を一時的に追加 |
最小構成のチェックリスト¶
- 外部 AAA を入れる前に、
admin相当の local user のパスワードを十分長いものへ更新する。詳細は 運用 で扱う password hardening を参照。 - TACACS+ / RADIUS / LDAP のサーバーを最低 2 台登録し、
login_methodの末尾にlocalを残す。 - SSH の
permit_root_loginをno相当に倒し、ciphers/kexを必要なものだけに絞る。 - banner で「許可された運用者のみ」「アクセスは記録される」旨を明示し、法的要件を満たす。
- serial console の
inactivity_timeoutを有効にし、置き忘れセッションを切る。
これ以降の運用面(password reset、default credential、トラブルシュート)は 運用 に続きます。
関連リファレンス¶
- CLI:
config aaa、config tacacs、config ldap、config banner、config serial-console、show aaa、show tacacs、show ldap-server、show ssh-server、show banner - CONFIG_DB:
AAA、TACPLUS、TACPLUS_SERVER、RADIUS、RADIUS_SERVER、LDAP、LDAP_SERVER、SSH_SERVER、SERIAL_CONSOLE、BANNER_MESSAGE - YANG:
sonic-system-aaa、sonic-system-tacacs、sonic-system-ldap、sonic-ssh-server、sonic-system-banner - 関連 HLD: TACACS+ HLD、RADIUS HLD、LDAP HLD、SSH server global config HLD、serial console HLD、banner messages HLD