トンネリングのポートを使用しての監視
本サイトでは本当にお世話になっております。
早速ですが、題記の件、トンネリングで開けたポートをzabbix監視用のポートとして、使用したいのですが、設定の仕方がいまいち分かりません。
使用するsshサービスはopensshです。
【Aサーバ】→【Bサーバ】
【Aサーバ】←【Bサーバ】ともにsshにて接続することができます。
※sshサーバは経由しません。
※Aサーバをzabbix-server、Bサーバをzabbix-agentと仮定します。
聞きたいことは、どこからどこのまでのポートをトンネリングするのか。
ポート番号を変更した場合は、zabbix-agent.confのポートだけ変更すればよいのか?
以上、ご教示の程、よろしくお願いします。
KAZ - 投稿数: 1085
robinmasukさん
監視したい物によって変わります。(全てデフォルトとして書いてます。)
1)Zabbixエージェント : 10050
2)Zabbixエージェント(active) : 10050/10051
3)snmp監視 : 161
4)シンプルチェックのサービス監視は各種プロトコルのポート
Zabbixサーバからエージェントは10050ポートで、エージェントからZabbixサーバへは10051なので、どちらを変更するかで修正範囲が変わるかと思います。
robinmasuk - 投稿数: 81
申し訳ありません。
僕の聞き方が悪かったです・・・
例えば・・・
クライアント側(zabbix-agent側)で
ssh -v -p ポート番号 -L 10051:localhost:10051 zabbix-serverのIP -l ユーザ名
この用なコマンドを打ってトンネリングを行いました。
上記の考えだと、エージェントからZabbixサーバへは10051番で接続したと仮定した場合、zabbix-agent.confのIPやportは変更する必要があるのでしょうか??
ちなみに上記の設定を行っても、うまく監視をおこなえておりません。
たぶん、Zabbixサーバからエージェントは10050ポートの設定を行っていない為とは思いますが、やり方がいまいちわかりません。
誰か、opensshを使用したトンネリングでzabbixの実績等あればご教示ください。
KAZ - 投稿数: 1085
robinmasukさん
opensshを使用したトンネリングでzabbixの実績はちょっと分からないです。
ちなみに、下記じゃないかなと…
<code>
ssh -Lポート番号:IPアドレス:10051 zabbix-serverのIP ユーザ名
</code>
-pはsshの接続ポートですよね?22以外を使っているなら必要ですけど…
こう書くのでは?
<code>
ssh -f -N -Lトンネリングポート:zabbix-serverのIP:10051 zabbix-serverのIP -l ユーザ
</code>
参考URL
[url=http://ecpplus.net/weblog/openssh%E3%81%A7%E3%83%88%E3%83%B3%E3%83%8D%E3%83%AA%E3%83%B3%E3%82%B0/]OpenSSHでトンネリング[/url]
robinmasuk - 投稿数: 81
お世話になっております。
ご提示っして頂きましたコマンドを実行しましたが、うまくできておりません。
-Lポート番号:IPアドレス:10051←ここのIPアドレスは、zabbix-serverのIPアドレスでしょうか?
上記設定もダメでした・・・
zabbix-serverのログをみても・・・
6337:20100407:165827.421 Item [test_Windows:agent.ping] error: Get value from agent failed: *** Cannot connect to [agentのアドレス]:10050 [Interrupted system call]
6337:20100407:165932.435 Item [test_Windows:agent.ping] error: Get value from agent failed: *** Cannot connect to [agentのアドレス]:10050 [Interrupted system call]
はまってしまいました・・・
なにか他に必要な情報の提示があれば、ご指摘ください。
KAZ - 投稿数: 1085
robinmasukさん
10051は↓で良いかと思います。
<code>
ssh -f -N -Lトンネリングポート:zabbix-serverのIP:10051 zabbix-serverのIP -l ユーザ
</code>
10050も空けななきゃダメかと。
10050に繋げられないとエラーが出てます。
robinmasuk - 投稿数: 81
zabbix-agent側に空けるんですよね??
ssfd_confに10050を許可??
それともファイアウォールですかね??
KAZ - 投稿数: 1085
robinmasukさん
[d]エージェント側です。[/d]
[d]同じようにトンネリングしてしまえば良いかと。[/d]
あれ?私なんか勘違いしてますね。
10051はエージェント側から開けましたよね?
とすると10050はサーバ側からですね。
ちなみにリバースProxyとかは使わないのですか?
KAZ - 投稿数: 1085
robinmasukさん
実際にやってみましたが、上手くいかないですね。
Zabbixサーバ側に下記を設定
<code>
ssh -f -N -Lトンネリングポート:ZabbixエージェントのIP:10050 ZabbixエージェントのIP -l sshの接続アカウント
</code>
で、下記を実行しても情報が取得できません。
※:エラーが出ないのでトンネリングは上手くいっていると思うのですが…
<code>
/usr/sbin/zabbix_get -s 127.0.0.1 -pトンネリングポート -k"proc.num[sshd]"
</code>
実際に変な接続をわざとすると下記の様な接続エラーが出ます。
<code>
Get value error: *** Cannot connect to [xxx.xxx.xxx.xxx]:ポート [Connection refused]
</code>
KAZ - 投稿数: 1085
robinmasukさん
ZabbixエージェントのログをLv4にして確認してみました。
Zabbixエージェントには届いてましたが、エラーになってるみたいです。
<code>
23782:20100407:181556 Processing request.
23782:20100407:181556 In check_security()
23782:20100407:181556 Listener error: Connection from [ZabbixエージェントのIPアドレス] rejected. Allowed server is [ZabbixサーバのIPアドレス]
</code>
Zabbixサーバに収集結果を返信しようとして接続できなかった様です。
robinmasuk - 投稿数: 81
KAZ様
うまくいきました。
しかしめっっちゃわからん現象が発生しました。
以下のコマンドで、実際にうまくいったか試してみてください。
ssh -N -f -R 10050:127.0.0.1:10050 zabbixサーバのIP -l ユーザネーム
なにが気持ち悪いって、10050番しかつかっていないのにうまくいってるところです。
zabbix-agent.confのServerIPを127.0.0.1
zabbix-webの登録したサーバのIPを127.0.0.1に変更するとうまくいきませんか??
KAZ - 投稿数: 1085
robinmasukさん
検証しました。
10050じゃなくても上手くいきますよ。
私が検証できた設定は下記です。
■Zabbixサーバ側の設定
<code>
ssh -f -N -L[i]ポート[/i]:127.0.0.1:10050 [i]IPアドレス[/i] -l [i]アカウント[/i]
[i]ポート[/i]:トンネリングポート
[i]IPアドレス[/i]:監視対象ホストのIPアドレス(127.0.0.1以外)
[i]アカウント[/i]:監視対象ホストへのログインアカウント
</code>
■Zabbixエージェント側の設定
zabbix_agentd.confを変更し、再起動
<code>
ServerIP=127.0.0.1
ListenIP=127.0.0.1
</code>
■実行結果
Zabbixサーバではhttpdが動いてますが、トンネリングした先の監視対象はhttpdが動いてません。
<code>
[root@xxxxxxxx ~]# /usr/sbin/zabbix_get -s 127.0.0.1 -p19000 -k"proc.num[sshd]"
5
[root@xxxxxxxx ~]# /usr/sbin/zabbix_get -s 127.0.0.1 -p19000 -k"proc.num[httpd]"
0
[root@xxxxxxxx ~]# /usr/sbin/zabbix_get -s 127.0.0.1 -p10050 -k"proc.num[httpd]"
zabbix_get [14794]: Get value error: *** Cannot connect to [127.0.0.1]:10050 [Connection refused]
[root@pits104 ~]# /usr/sbin/zabbix_get -s [i]ZabbixサーバのIPアドレス[/i] -p10050 -k"proc.num[httpd]"
6
</code>
1回目はトンネリングした監視対象のsshdプロセスの数が取得できてます。
2回目はトンネリングした監視対象のhttpdプロセスの数が取得できてます。
3回目はローカルの10050に接続を行いますがエラー
これは、Zabbixサーバに入っているZabbixエージェントのListenIPが127.0.0.1じゃないからかと。
4回目はZabbixサーバの10050に接続し、httpdプロセスの数が取得できてます。
robinmasuk - 投稿数: 81
KAZ様
どういう事でしょうか・・・
ポートは1つのポートでしかやりとりしていないていう状態ですよね??
それでも動くんですね・・・・
KAZ - 投稿数: 1085
robinmasukさん
正確には1つじゃないです。
通信の知識が必要になり、説明が辛いのですが…A(^^;
■通常のZabbixエージェント監視は下記の通信になります。
<code>
ZabbixサーバのIP:ANYポート ⇔ ZabbixエージェントのIP:10050
</code>
つまり、ZabbixサーバからZabbixエージェントへ接続に行く時はZabbixサーバ側のポートは余っているポートを自動的に割り当てられ、それで接続します。
接続するとTCPセッションが確立します。
Zabbixサーバからは送信、Zabbixエージェントからは「返信」ができるようになったと考えて下さい。
■Zabbixエージェント(アクティブ)監視は10051が必要です。
Zabbixエージェント監視とは送信元と先が逆転し、セッションも別になります。
<code>
ZabbixのエージェントIP:ANYポート ⇔ ZabbixサーバのIP:10051
</code>
Zabbixエージェントから送信、Zabbixサーバからは返信と言う形になります。ただ、Zabbixエージェント監視が動く前にZabbixサーバからZabbixエージェントにZabbixエージェント(アクティブ)監視に必要な情報が、Zabbixエージェント監視に必要な情報と一緒に届けられるので、Zabbixエージェント監視と同じポートが必要になります。
つまり、必要なのは下記の様な接続です。
<code>
ZabbixサーバのIP:ANYポート ⇔ ZabbixエージェントのIP:10050
ZabbixのエージェントIP:ANYポート ⇔ ZabbixサーバのIP:10051
</code>
上記は通信(TCP/IP等)の知識でZabbixからちょっと離れたもので、しかも専門ではないので少々おかしなところがあるかもしれません。m(__)m
robinmasuk - 投稿数: 81
KAZ様
なるほど・・・
一つのポートでやりとりしている訳ではなかったのですね。
納得。
つまり上記の設定を行うには
ssh -f -N -L ポート:127.0.0.1:10050 IPアドレス -l アカウント
zabbix-server
ssh -f -N -L ポート:127.0.0.1:10051 IPアドレス -l アカウント
zabbix-agent
こんな感じですかね・・・??
アクティブ監視・・・ログチェックとかできましたか??
仮に、監視対象サーバが増えた場合はどうなるんでしょうか??
10050、10051(port)も使っていますし・・・
KAZ - 投稿数: 1085
robinmasukさん
Zabbixエージェント(アクティブ)の方は隙にいじれる環境が直ぐには用意できなかったのでやってません。
とある事情で環境が用意できなくて…A(^^;
この方法だとZabbixサーバ側は監視対象の数分いるかと。
Zabbixエージェント側は全て一緒で問題ないと思いますが…
一番最初に聞くべきだったかもしれませんが、どうしてトンネリングを必要とされているのですか?
構成等どう言う事がやりたいかが分かると、別な方法(Proxy使ったトンネリングとか)をお勧めできるかと。
P.S.
あくまでZabbixを扱っていフォーラムですのでネットワークの話が主体となるのは勘弁して頂きたいかと思います。m(__)m
robinmasuk - 投稿数: 81
KAZ様
う〜ん・・・
監視対象の分だけいるのか・・・
もう少し、いい方法を探ってみます。
ありがとうございました。
?zabbix-serverとagent間の通信は暗号化されていない為、通信を暗号化する必要がある。
?LINUXサーバにiptablesの穴をあける必要がある
※ファイアウォールの設定変更後、サービスの再起動(reloadもダメ)がいりますが・・・サービスを一瞬でも落としたらいけない構成の為
上記二点の要求を満たすもの・・・を考えてトンネリングかなという答えに至りました。
たしかにおっしゃる通りですね。9割ネットワークの話しですものね。
大変失礼しました。
KAZ - 投稿数: 1085
robinmasukさん
昨日ZABBIX-JP勉強会の前にスタッフのメンバに聞いてみましたが、OpenSSHトンネリングは使用する監視種類×監視対象分いるとの結論でした。
一応、監視対象にZabbixプロクシを建てれば監視対象ホスト数まで抑えられます。
上にも書きましたが、監視対象の構成をZabbixプロクシ+Zabbixエージェントの構成にすると、Zabbixプロクシ⇒Zabbixサーバの1方向になるようです。(スタッフに聞いたところではその様です。)
なので、Zabbixエージェントの監視を一々全てトンネリングするよりは楽かと思います。(Zabbixプロクシの設定がいりますので設定量が減るかは微妙です。)
robinmasuk - 投稿数: 81
KAZ様
お世話になっております。
わざわざお聞きして頂きましてありがとうございます。
監視種類×監視対象分と記載がありますが、具体的に監視種類とはなんのことでしょうか??
アクティブかそうでないかていう意味でしょうか?
そうですね。
プロクシサーバをたてて、そこからの通信ていうふうにしたいですが・・・構築に時間がなくて・・・
導入を検討してみます。
いろいろご教示頂きまして、本当に感謝しております。
ありがとうございました。
KAZ - 投稿数: 1085
robinmasukさん
分かりにくかったですよね。
監視タイプとしてZabbixエージェント、Zabbbixエージェント(アクティブ)、SNMPで使うポートとシンプルチェックはFTP、icmpping、ssh等のプロトコル単位のポートと言う意味でした。
シンプルチェックを使わななら監視タイプ×監視対象でOKかと。
robinmasuk - 投稿数: 81
KAZ様
なんかいろいろごちゃごちゃしてきました。
*゚Q゚)ハヒィ
【前提】sshトンネリングを使用する
zabbixプロキシを設定しない場合
監視対象サーバが1台以上になると10050番のポートが重複してしまう為、zabbixサーバは監視対象分だけ必要になる??
zabbixプロキシを設定する場合
監視対象サーバが1台以上になると・・・??
うーーん、なんか認識違いをしていそうです。
m(*- -*)mス・スイマセーン
zabbixプロキシを設定しない場合で監視対象サーバが3台で、トンネリングはって監視していますが、うまくいかなくて・・・
KAZ - 投稿数: 1085
robinmasukさん
何を使って監視するかで変わってきます。
Zabbixエージェント監視のみで他の監視を一切使わなければ、Zabbixプロクシを導入するメリットはありません。
■ログ監視したい場合
1)Zabbixプロクシ使用する場合
監視対象数のsshトンネリングが必要
トンネリングするのはZabbixプロクシ⇒Zabbixサーバの通信
2)Zabbixプロクシ使用する場合
監視対象数×2のsshトンネリングが必要
トンネリングするのはZabbixエージェント⇒Zabbixサーバの通信と
Zabbixサーバの通信⇒Zabbixエージェントの通信
■Zabbixサーバ側は↓こんな感じでトンネリングポート分けてますか?
<code>
ssh -f -N -L19000:127.0.0.1:10050 監視対象1 -l アカウント
ssh -f -N -L19001:127.0.0.1:10050 監視対象2 -l アカウント
ssh -f -N -L19002:127.0.0.1:10050 監視対象3 -l アカウント
</code>
確認方法ですが、どの様に確認されてますか?
Zabbixサーバ側でzabbix_getを使って確認してから色々設定した方が良いかと。
robinmasuk - 投稿数: 81
KAZ様
いや・・・アクティブチェックも行いますので、その分トンネリング回線が必要になるてことですよね。
行いましたが、うまくいきません。
serverlogは
Item [Linuxserver:agent.ping] error: Got empty string from [127.0.0.1]. Assuming that agent dropped connection because of access permissions
Item [test_Windows:agent.ping] error: Got empty string from [127.0.0.1]. Assuming that agent dropped connection because of access permissions
ListenIPもServerも127.0.0.1を指定しております。
KAZ - 投稿数: 1085
robinmasukさん
zabbix_getでは取れますね。
zabbix_getで取れると言うことはzabbix_serverでも取れるはずなんですが…
※:トンネリングポートは19000と19001にしてます。
zabbix_getでは確認されましたか?
zabbix_getでダメな場合はsshトンネリングが失敗してます。
zabbix_getがOKなら、webフロントエンドの設定が多分間違ってます。
また、エラーからすると↓このスレは役に立ちませんか?
[url=http://www.zabbix.jp/modules/newbb/viewtopic.php?viewmode=flat&topic_id=289&forum=5]Assuming that agent dropped connection because of access permissions[/url]
robinmasuk - 投稿数: 81
KAZ様
お世話になっております。
zabbix_getは使用しておりません。
使い方がわからないですし、インストールの仕方も分かりません。
そのエラーは参考にさせて頂いておりましたが、IPは127.0.0.1を設定しておりましたので、たぶん違うと思います。
もう一度、設定値を確認してみます。
毎々、ありがとうございます。
KAZ - 投稿数: 1085
robinmasukさん
findとかしてみました?
Zabbixサーバをインストールすればインストール一緒にインストールされているかと。
使い方はgoogleでも引っかかりますし、マニュアルにも使い方は載ってるかと。
[url=http://extstrg.asabiya.net/pukiwiki/index.php?zabbix_get] zabbix_get - Knowlege Database[/url]
ちなみに、この頃のコマンドは--helpとか-hとかすると使い型表示されますよね?(windowsだと-?が多いかもしれませんが…)
お勧めは潰して言い環境を作って実際にコマンド叩くのが一番です。Zabbixに限らずコマンド関係は試した方が聞くより早いですよ。
sshトンネリングする環境を丸々準備しないと検証ができないので厳しいのですが、webフロントエンドはどう設定していますか?
robinmasuk - 投稿数: 81
KAZ様
お世話になっております。
zabbix-serverはyumでインストールしていたのですが、locate、findでも発見できませんでした。
自己解決しました。
ssh -f -N -L19000:127.0.0.1:10050 監視対象1 -l アカウント ssh
このコマンドで19000番wpトンネリングした場合、webフロントエンドのポートも19000番に変更しなくちゃいけないみたいですね。
ポートを変更すると、うまく監視が行えました。