本文へジャンプします。

セキュアなサーバーメンテナンス -社内のLDAPサーバーによるユーザー認証の実現-

こんにちは、ドリーム・アーツの石田です。弊社ではニフティクラウドを使って小売業向けの多店舗コミュニケーションを支援する「Shopらん」をSaaSとして提供しています。 今回は、ニフティクラウドで企業としてSaaSを運用するときに、きっと大問題となるサーバーのメンテナンス時の認証について弊社のケースに書いてみます。

なぜ認証が問題になるのか

ニフティクラウドでCentOSなどLinuxのサーバーを利用しているとき、通常は電子証明書の秘密鍵をつかってsshでログインしてメンテナンスすることになります。

電子証明書なので一見セキュアに見えますが、この方法では以下のようにいろいろ問題があり、商用サービスを運用する基盤にするにはセキュリティ的に脆弱であるといえます。

(1) 運用担当者が複数になったとき、誰がログインしたのかの証跡を保存できない
(2) サーバー台数が複数になったとき、各サーバーでインターネット経由でのログインを許可しなければならない
(3) 運用担当者が異動で交代したときに、証明書などが流出したりといったリスクがある

    さて、弊社ではこれらの課題を以下のように解決しています。

    セキュアなメンテ用ログインの概略

    弊社で実際に運用している環境のメンテナンス用のログイン方法はおよそ以下の図のようになっています。(※ 実際にはもっとたくさんの関門やリアルタイム監査がありますが概略ということで・・・)

    Maintenance_4

    サーバーのメンテナンスをするには、まず図の右にある認証サーバーにSSHに個人別のアカウントでログインし(①)、そのサーバーで共通のメンテナンスユーザーに昇格し(②)、認証サーバーから内部ネットワークを経由して証明書を使って各サーバーにSSHでログインします。

    サービスを構成しているWebサーバーやDBサーバーなどのインターネット側のネットワークは、iptablesでガチガチに守ってあり必要なポートしか開けていません。

    また、内部ネットワークは認証サーバーからのSSH接続のみを受け付けるように設定しています。

    この構成で重要なのは、認証サーバーのセキュリティです。特に最初の運用担当者ごとのSSHでのログインをいかにセキュアに行うかが鍵になります。

    こういう運用担当者ごとのアカウントを管理する場合、認証サーバー自体にローカルユーザーを作って運用するというのが普通ですが、異動や入社、退職に伴ってアカウントをきちんと管理し続けることは正直難しいです。 特に運用開始から月日が経つと。

    弊社では、このSSHの個人別の認証について、社内のメールサーバーと、グループウェアのアカウント管理に使用しているLDAPサーバーを使い一元的にユーザー管理を実施するようにすることで、確実に運用されることを保証しています。(メールアカウントは人事部門で管理してくれますからね)

    社内のLDAPサーバーでSSHの認証を実現

    ニフティクラウドにあるサーバーで社内のLDAPサーバーを利用しようとした場合の課題は、ニフティクラウドのサーバーから社内のLDAPサーバーにどうやって接続するかという点です。多くの場合、社内のLDAPサーバーは当然LANの中にありグローバルアドレスは割り振られていません。またたとえグローバルアドレスがあってもLDAPサーバーへのアクセスポートを開けるなんてことはしたくありません。

    そこで、社内にあるサーバー(以下、[office]というプロンプト)からニフティクラウドのサーバー(以下、[nifty]というプロンプト)にSSHで接続してLDAPへのアクセスをトンネルするようにします。

    社内からニフティへLDAP接続トンネルを作成

    これは簡単で、まずニフティクラウドのサーバーの秘密鍵のPEMファイルを社内のサーバーに転送し、opensslコマンドでパスフレーズを解除した秘密鍵を作ります。

    パスフレーズ付きの秘密鍵が、pkey.pemというファイルだったときに、パスフレーズなしの秘密鍵を作るには以下のようにします。

    [office]# openssl rsa -in pkey.pem > pkey-nopass.pem
    Enter pass phrase for pkey.pem:
    writing RSA key
    

    これで、pkey-nopass.pemというファイル名でパスフレーズ無しの秘密鍵のファイルが出来上がります。

    必ずパーミッションは 400 にしておかなければいけません。

    [office]# chmod 400 pkey-nopass.pem
    

    次に、この秘密鍵を使ってニフティクラウド上のサーバーにLDAPサーバーのポートを転送します。

    [office]# ssh -i ./pkey-nopass.pem -R 389:localhost:389 -N xxx.xxx.xxx.xxx
    

    このコマンドを社内のLDAPサーバー側で実行すると、ニフティクラウド上のサーバーではなんと localhost:389 で社内のLDAPサーバーにアクセスできるようになります。さっそくOpenLDAPのldapsearchコマンドをつかって検索してみましょう。

    まずは、OpenLDAPのクライアントをインストール。

    [nifty]# yum -y install openldap-clients.x86_64
    

    早速、検索。

    [nifty]# ldapsearch -x -h localhost -b o=YourCompany,c=JP '(uid=ishida)'
    # extended LDIF
    #
    # LDAPv3
    # base  with scope subtree
    # filter: (uid=ishida)
    # requesting: ALL
    #
    # ishida, Users, YourCompany, JP
    dn: uid=ishida,ou=Users,o=YourCompany,c=JP
    objectClass: top
    objectClass: person
    objectClass: organizationalPerson
    objectClass: inetOrgPerson
    objectClass: posixAccount
    objectClass: qmailUser
    objectClass: sambaSamAccount
    sambaPwdMustChange: ***********
    sambaNTPassword: **********************************
    userPassword:: **********************************************
    sambaPwdLastSet: 1261727845
    sambaPwdCanChange: 1261727845
    sambaLMPassword: 3B39E018A4C4BC10AAD3B435B51404EE
    sambaAcctFlags: [U]
    sambaSID: S-1-5-21-2361600604-3951323631-1722907941-2001048
    mailHost: xxx.xxx.xxx.xxx
    mail: xxxxxxxx@dreamarts.co.jp
    qmailGID: 2000275
    cn;lang-ja:: 55+z55SwIOWBpeS6rg==
    sambaPrimaryGroupSID: S-1-5-21-2361600604-3951323631-1722907941-4001551
    uidNumber: 1000024
    qmailUID: 1000024
    gidNumber: 2000275
    homeDirectory: /home/1000024
    cn: Kensuke ISHIDA
    sn: Kensuke ISHIDA
    iseAccountStatus: active
    loginShell: /bin/bash
    uid: ishida
    # search result
    search: 2
    result: 0 Success
    

    うまくいきました。ニフティクラウドのサーバーから社内のLDAPサーバーを検索できています。社内サーバーの起動時に自動的にLDAP接続を起動したり、接続が切れたときに自動的に再接続するには、daemontoolsを設定してもいいのですが、以下のような簡単なスクリプトを作成して、rc.localなどからサーバーの起動時に起動するようにしておくと便利です。

    #!/bin/bash
    while :
    do
        echo 'connecting SSH tunnel to noumena.shoprun.jp'
        nohup ssh -i /path/to/pkey-nopass.pem -R 389:localhost:389 -N noumena.shoprun.jp 2> /dev/null
        sleep 60
    done
    
    ニフティクラウドのサーバーでLDAP認証を設定

    CentOSでLDAPを使ったユーザー検索と認証を有効にするには、authconfig-tuiコマンドを使うと簡単です。WindowsからPuTTYを使って接続した場合、日本語のままでは画面表示が乱れるので一時的に英語ロケールにして起動します。

    [nifty] # LANG=C authconfig-tui
    

    Autoconfigtui_1_2 Autoconfigtui_2_2

    次に、SSHでパスフレーズでのログインを可能にします。/etc/ssh/sshd_config を編集して、PasswordAuthentication を yes に変更します。

    # To disable tunneled clear text passwords, change to no here!
    PasswordAuthentication yes
    #PermitEmptyPasswords no
    #PasswordAuthentication no
    

    sshd を再起動した瞬間から、LDAPでの認証が可能になります。

    ログインできるユーザーを制限する

    この状態だと、LDAPで検索できるユーザーは誰でもログインできるようになっています。運用担当者のみに制限したい場合は、/etc/ldap.conf の pam_filter でLDAP上の検索フィルターで指定するか、認可するユーザーを個別に、/etc/security/access.conf に記述するようにします。

    /etc/security/access.conf を使う場合は、まず /etc/pam.d/sshd に以下の行を追加します。

    account    required     pam_access.so
    

    そして、/etc/security/access.conf にログインできるユーザーを以下のように設定します。

    -:ALL EXCEPT ishida user1 user2 root:ALL
    

    上の例では、ユーザー ishida と user1 と user2 のみがログインできるように設定されています。

    最後に要望をひとつ

    ニティクラウドで作成したサーバーについては十分にセキュアな運用が可能になりましたが、ひとつ問題が残っています。それはニフティクラウドのコントロールパネルです。

    コントロールパネルを利用するときの認証は、ニフティクラウドのIDとパスワードでの認証のみで、運用担当者の個人ごとに認証することができません。このあたりは運用担当者ごとにアカウントを作成できて監査ログが確認できるようになるといいですね。今後に期待しています。

    ニフティクラウド 導入相談窓口
    ニフティクラウド 無料セミナー

    閉じる

    閉じる

    クラウドブログ編集部

    クラウドブログ編集部

    ニフティクラウド ユーザーブログ編集部のアカウントです。 編集部からのお知らせや、レギュラーライター以外のゲストによる寄稿記事を掲載していきます。

    浜中 慶

    浜中 慶

    1980年、神奈川県生まれ。2003年ニフティ入社。 ポータルサイト開発を中心に、音楽配信サービス、CGMサービスなど様々なプロジェクトに企画/デザイン/システム担当として参加。現在は@niftyのポータルサービス向けコンテンツ管理システムの企画/開発/運用を担当。

    吉田 雄哉

    吉田 雄哉

    株式会社co-meetingの創業メンバー。「取締役&External- facing Technologist」と名乗り新しいIT技術を広く伝える活動とWebアプリケーション開発を行う毎日。パッケージベンダーでのSaaS立上げ・製造業の情報システム部門で企画やPM・受託開発と従事してきたため、ベンダーサイドとユーザサイド の両方の視点を持ち合わせる。

    石田 健亮

    石田 健亮

    株式会社ドリーム・アーツで小売事業者向けSaaS「Shopらん」を企画、開発。メインの仕事はプログラマーだがサーバー管理や営業もこなすユーティリティプレイヤー。最近好きな事はパフォーマンスチューニング。特に並列化プログラミングがマイブーム。キライなことはデータセンターでの作業。騒音と乾燥が弱点。ニフティクラウドでデータセンターに行く必要が無くなったことが本当の利点だ と思っている。

    五月女 雄一

    五月女 雄一

    ニフティでは「インフラを守る簡単な様で奥が深いお仕事」をしています。 夢はインフラの気持ちが読めるエンジニアになること。

    わたなべ かずひろ

    わたなべ かずひろ

    専門学校卒業後、ソフトウェア開発会社で電力系統制御システムの開発に従事。その後、CD-ROM等マルチメディア系PCソフトの開発を経て、1998年フリーランスに。 2000年8月に株式会社イーツーの設立に参画。携帯を含む様々なWeb系のシステム開発に携わる。現在はiPhone/Androidアプリなどの開発も手がけている。

    市角

    市角

    ニフティクラウドのコントロールパネル設計・開発をメインに、たまにインフラの運用やお手伝いもやっていたりします。コントロールパネルや新機能の活用方法、アイデアなどを中心に書いていく予定です。

    仲山 昌宏

    仲山 昌宏

    歌って踊れるインフラエンジニア兼、PHPもRubyもJavaも書くPerl使い。 物理サーバの運用に飽きて、フルラックに格安サーバ詰めて自宅プライベートクラウドを構築中。 今年は個人的には分散処理を攻めていきます。

    猪飼 賢広

    猪飼 賢広

    1984年、愛知県名古屋市生まれ。大学は福島県にある某大学。2008年ニフティに入社。 開発系部署に配属後、主に各種テーマサイト開発のシステム面調整、開発進行管理役などとして参加。 現在もPC・ガラケーサイトの開発まわりを担当。インフラまわりを触る案件にも携わっており、日々修行中。 好きな芸人はなかやまきんに君とレイザーラモンRG。

    久江 裕之

    久江 裕之

    ニフティクラウドのインフラ運用、OS提供の仕事をしています。 新しいOSやイメージが出る時にこのブログでご紹介いたします。入社5年目。一流のインフラエンジニアを目指して日々勉強中。

    竹内 豪

    竹内 豪

    ニフティクラウド エンジニア

    山口

    山口

    ニフティクラウドの基盤設計、新サービス/アライアンス/インフラ企画、その他雑用全般を担当しています。 クラウドに欲しい機能や、こんなふうに使ってほしいという想いが共有できれば良いですね。

    芳中 隆幸

    芳中 隆幸

    ニフティクラウドの開発、運用を担当しています。

    酒井 浩平

    酒井 浩平

    ニフティクラウドの中にいます。 ネットワークまわりの運用・開発や自動化などに取り組んでいます。 すべてのエンジニアを幸せにすることを目指しています。

    higebu

    higebu

    ニフティクラウド IaaSのエンジニアです。 ネットワーク、DRサービス with VMware vCloud® Air™ Technology辺りの担当をしています。

    武田

    武田

    ニフティクラウドの開発・運用を担当しています。 各種機能の内容についてなどで執筆させていただく予定です。

    森藤 大地

    森藤 大地

    データに関する仕事が好きです。

    宮原徹

    宮原徹

    日本仮想化技術株式会社 代表取締役社長兼CEO。仮想化技術に関するコンサルタントとして長年活動しており、特にベンチマークテストによる性能評価を得意としている。

    荒谷翔

    荒谷翔

    株式会社はてなでMackerelのセールスデベロッパーとして勤務しています

    東條 望

    東條 望

    2014年にニフティへ中途入社。 入社後から現在まで、ニフティクラウドのサービス企画・開発を担当しています。 各サービスの紹介を執筆させていただく予定です。