勉強後記

千里の道も一歩から。学びから遊びまで継続活動の日記。

    スポンサードリンク

      このエントリーをはてなブックマークに追加 mixiチェック

    なぜNATのセッション数?

    最近1台あたりの通信機器が使うセッション数が増加傾向にある。
    文科省の資産だとWeb授業をそうていすると、1台あたり100セッションは見ておいた方がよいようです。

    参考資料
    新時代の学びにおける先端技術導入実証研究事業多様な通信環境に関する実証事業成果報告会
    78ページあたりをみると、1台あたりMAXで120セッションくらいつかっていることがわかります。

    ネットワンシステムズ株式会社
    O365などクラウドサービスの導入で企業が直面する課題とは?
    12ページに「O365を利用すると、多くの通信セッションが発生(1人あたり最大70~100セッション)」
    とあります。

    帯域はそこまでトラヒック使ってないのにネットワークが遅い場合NATのセッション数でひっかかっている事があります。

    設計

    1.機器にログインしてNATのセッション数を取得してテキストファイルに保存するスクリプト
    2.5分おきに実施
    3.保存されたテキストファイルを表示するスクリプト

    こんな感じで行こうかと思います。
    本当は1つにできそうな気もするのですが、Fortigateがどうしても自動ログインして取得すると
    30秒以上かかるので、いったん全部この形式でやります。

    私が管理している一部の機器ではMIBでセッション数がはけないことを確認済みです。
    となると、機器に自動でログインしてコマンドを実行し、その結果を読み込むといった
    流れがよいのかなと思います。
    事前にいろいろテストしたのですがパスワードの暗号化をするとZabbixの方でスクリプトの
    実行時にタイムアウトになってしまってうごかなかったので、しゃーない2段階で実施しようかと思います。

    環境

    サーバー CentOS Linux release 7.9.2009
    Zabbix zabbix_server (Zabbix) 5.0.23

    秘密鍵の作成

    秘密鍵 ~/.ssh/id_rsaを作成する
    とりあえず全部デフォルト
    ssh-keygen →デフォルトのままで作成
    Generating public/private rsa key pair.
    Enter file in which to save the key (/root/.ssh/id_rsa): →未入力
    Enter passphrase (empty for no passphrase): →未入力
    Enter same passphrase again: →未入力

    鍵が出来る
    001

    鍵が出来ている事を確認
    02

    パスワードを暗号化して秘密鍵を作る
    echo '任意のパスワード' | openssl rsautl -encrypt -inkey ~/.ssh/id_rsa > 任意のファイル名.rsa

    複合化できるか確認する
    penssl rsautl -decrypt -inkey ~/.ssh/id_rsa -in 任意のファイル名.rsa
    任意のパスワード
    パスワードが表示できればOK

    ログインしてセッション数を表示するスクリプトの作成

    スクリプトファイルを作る
    zabbix01 ~]# vi 任意のファイル名.sh
    #!/bin/sh
    export LC_CTYPE=ja_JP.UTF-8

    host="ホスト名"
    user="ログインユーザ名"
    pass="$(openssl rsautl -decrypt -inkey ~/.ssh/id_rsa -in 先ほど作った秘密鍵.rsa)"
    cmd="edit NAT"
    fortigateのコマンド1 cmd1="config vdom"
    fortigateのコマンド2 cmd2="get system session status"
    fortigateのコマンド3 end="end"
    fortigateのコマンド4
    expect -c "
    spawn ssh ユーザ名@IPアドレス
    expect \\"Password:\\"
    send \\"${pass}\\n\\"
    expect \\">\\"
    send \\"${cmd1}\\n\\"
    expect \\">\\"
    send \\"${cmd}\\n\\"
    expect \\">\\"
    send \\"${cmd2}\\n\\"
    expect \\">\\"
    send \\"${end}\\n\\" ; sleep 1
    expect eof
    " > /usr/lib/zabbix/externalscripts/任意のファイル名.log

    こんな感じ。あとは実行権限をつける。
    chmod +x 任意のファイル名.sh

    cronに設定して5分おきに実行する。
    vi /etc/crontab
    */5 * * * * root /root/./任意のファイル名.sh

    Zabbixに取り込むための外部スクリプト作成

    セッション数の数字部分だけ抜け出せることを確認
    cat -v /usr/lib/zabbix/externalscripts/任意のファイル名.log | grep -e "The total number of sessions for the current VDOM"|grep -o '[0-9]*'| tail -n 1

    zabbixのディレクトリ移動
    cd /usr/lib/zabbix/externalscripts

    zabbixの取り込みスクリプト作成
    vi 任意のファイル名2.sh
    #!/bin/sh
    export LC_CTYPE=ja_JP.UTF-8

    cat -v /usr/lib/zabbix/externalscripts/任意のファイル名.log | grep -e "The total number of sessions for the current VDOM"|grep -o '[0-9]*'| tail -n 1

    実行権限付与
    chmod +x 任意のファイル名2.sh

    Zabbixで実行できるように所有権を変更
    chown zabbix:zabbix 任意のファイル名2.sh
    chown zabbix:zabbix /usr/lib/zabbix/externalscripts/任意のファイル名.log 


    Zabbixでアイテムを作成する

    ホスト→アイテムを作成したホストを選択。
    上のメニューからアイテムを選択する。
    003

    右上のアイテムを作成を選ぶ
    004


    必要事項を入力する
    005


    テストボタンを選択し値が取れる事を確認する。

    006


    値が取れる事を確認したら最後に追加を押して完了。

    Zabbixでグラフを作成する

    グラフを選択し、グラフの作成を選択する。
    007

    任意の名前を入力して、追加をクリック
    008

    アイテムから外部チェックを選び選択をクリック

    009

    アイテムにはいるので追加を選択する
    010

    プレビューを押すと見れます。
    (初回はまだテストでデータ入ってないのでグラフは真っ白です。)
    011

    Zabbixでトリガーを作成する

    トリガーをクリックする
    013

    トリガーの作成をクリック
    014

    名前を入力して、障害レベルの定義をする。
    条件式は
    {zabbix登録ホスト名:保存した任意の外部スクリプト.last()}>閾値の数字(今回は10000)

    015

    監視データのホストからグラフに閾値が追加されていればOK。

    グラフはホストのテンプレートからは見れないのでスクリーンなどを作って追加しておくと良いかと思います。
    016

    終わり!



      このエントリーをはてなブックマークに追加 mixiチェック
    ちょっと躓きましたが、簡単でした。(2022/05/26現在)

    前提

    有効期限が切れてからでないと更新作業が出来きないようです。
    私の有効期限が2022/05/25までだったので、25日当日に作業をしたのですが上手くいきませんでした。

    2022/05/25の状態

    # subscription-manager list
    +-------------------------------------------+
        インストール済み製品のステータス
    +-------------------------------------------+
    製品名:           Red Hat Enterprise Linux for x86_64
    製品 ID:          479
    バージョン:       8.6
    アーキテクチャー: x86_64
    状態:             期限切れです
    状態の詳細:       
    開始:             
    終了:             

    となってしまっていました。更新手順は下記にあるのですが
    https://developers.redhat.com/articles/renew-your-red-hat-developer-program-subscription#

    手順通りやっても上手くいきませんでした。

    2022/05/26の状態

    日付がかわって5/26で有効期限が切れた状態で手順通りに作業してみます。

    1. 1.Chromeのシークレットウィンドウ、Firefoxのプライベートウィンドウ、またはEdgeのInPrivateウィンドウでdevelopers.redhat.comを開きます。
    2. 2.RedHatログインIDを使用してサイトにサインインします。

    ここで2022/05/25には出てこなかった、利用規約の同意画面が出てきます。
    Snipaste_2022-05-26_09-47-23

    利用規約に同意して、ログアウトします。

    3.15〜20分待ってから、access.redhat.com/managementにログインします。

    Snipaste_2022-05-26_10-08-09

    1年間有効期限が伸びたことが確認できます。

    サブスクリプションの登録

    作業後今の状態を確認してみます。

    # subscription-manager list
    +-------------------------------------------+
        インストール済み製品のステータス
    +-------------------------------------------+
    製品名:           Red Hat Enterprise Linux for x86_64
    製品 ID:          479
    バージョン:       8.6
    アーキテクチャー: x86_64
    状態:             サブスクライブなし
    状態の詳細:       有効なサブスクリプションでサポートされていません。
    開始:
    終了:

    状態が期限切れ→サブスクライブなしに変わっているのが確認できました。

    # subscription-manager register --auto-attach --force
    →システムは一度登録されているので、--forceのオプションをつけます
    登録の解除中: subscription.rhsm.redhat.com:443/subscription
    UUID が xxxxxxxxxxxxxxxxxxxxxxx のシステムの登録は解除されました
    ローカルデータがすべて削除されました
    登録中: subscription.rhsm.redhat.com:443/subscription
    ユーザー名: デベロッパーアカウントに登録した時のメールアドレス
    パスワード:デベロッパーアカウントに登録した時のパスワード
    このシステムは、次の ID で登録されました:  xxxxxxxxxxxxxxxxxxxxxxx 
    登録したシステム名: 登録したサーバのFQDN
    インストール済み製品の現在の状態:
    製品名: Red Hat Enterprise Linux for x86_64
    状態:   サブスクライブ済み

    これで登録作業がおわりましたので、アカウント画面で確認してみます。

    access.redhat.com/managementのシステムをクリックします。

    Snipaste_2022-05-26_10-19-44

    先ほど登録したサーバーが登録されている事が確認できればOKです。

    UPdate確認

    アップデートなどが出来るかも確認しておきましょう。

    更新作業前にアップデートしようとすると下記の様な状態になっていました。
    # dnf check-update
    サブスクリプション管理リポジトリーを更新しています。
    メタデータの期限切れの最終確認: 2:42:48 時間前の 2022年05月26日 07時01分03秒 に実施しました。

    更新作業後
    # dnf check-update
    サブスクリプション管理リポジトリーを更新しています。
    Red Hat Enterprise Linux 8 for x86_64 - BaseOS (RPMs)              40 MB/s |  47 MB     00:01
    Red Hat Enterprise Linux 8 for x86_64 - AppStream (RPMs)           41 MB/s |  44 MB     00:01
    メタデータの期限切れの最終確認: 0:00:01 時間前の 2022年05月26日 10時26分42秒 に実施しました。

    sos.noarch                       4.2-19.el8_6                        rhel-8-for-x86_64-baseos-rpms

    更新作業が出来ました。

    期限日に作業しようとすると作業が出来ないので、期限日が過ぎてから作業をするようにしましょう。

    ちょうどこのタイミングでサーバの再構築をしようとしたので、UPdate出来なくて焦りましたが期限が1年ということを意識して作業をするようにしたらOKですね。

    • カテゴリ:
      このエントリーをはてなブックマークに追加 mixiチェック
    会社で見つけてしまったので対応します。
    WindowsServerだから大丈夫だろうと思っていたら完全に抜けていました。

    参考にさせて頂いたサイト

    【図解】Apache Log4jの脆弱性の仕組みと対応の必要性、攻撃有無の確認方法(CVE-2021-44228)
    https://amg-solution.jp/blog/27313

    Apache Log4jの脆弱性とは 悪用方法と対策をわかりやすく解説
    https://smbiz.asahi.com/article/14502837#inner_link_001

    【12/19更新】Log4Jの使用や使用中バージョンの調べ方・確認方法
    https://sukkiri.jp/news/log4jversion_analysis.html

    Apache Log4j脆弱性に関するPowerChute Business Editionへの影響と対策について
    https://www.se.com/jp/ja/faqs/FAQ000229381/

    Security Notification - Apache Log4j Vulnerability (Log4Shell)
    https://www.se.com/ww/en/download/document/SESB-2021-347-01/


    WindowsServer2019でインストール有無を確認する

    コマンドプロンプトから
    C:\Users\hogehoge>cd /
    C:\>where /r . log4j-core*.jar
    C:\Program Files (x86)\APC\PowerChute Business Edition\agent\lib\log4j-core-2.11.1.jar
    log4j

    修正作業

    1.7-Zip をダウンロードしてインストールする。

    2.管理者権限でコマンドプロンプトを起動する。

    3.該当のディレクトリまで移動する
    C:\Program Files (x86)\APC\PowerChute Business Edition\agent\lib

    4.PowerChute serviceを止める
    net stop apcpbeagent

    5.下記コマンドを実行する
    "c:\Program Files\7-Zip\7z.exe" d log4j-core-2.xx.x.jar JndiLookup.class -r
    UPs

    xxの部分は自分の環境にあわせて変更が必要。

    6.PowerChuteサービスを開始
    net start apcpbeagent

    とりあえず暫定の対応はこれでよさそうかな?

    このページのトップヘ