トンネリングのポートを使用しての監視

本サイトでは本当にお世話になっております。

早速ですが、題記の件、トンネリングで開けたポートをzabbix監視用のポートとして、使用したいのですが、設定の仕方がいまいち分かりません。

使用するsshサービスはopensshです。

【Aサーバ】→【Bサーバ】
【Aサーバ】←【Bサーバ】ともにsshにて接続することができます。
※sshサーバは経由しません。
※Aサーバをzabbix-server、Bサーバをzabbix-agentと仮定します。

聞きたいことは、どこからどこのまでのポートをトンネリングするのか。
ポート番号を変更した場合は、zabbix-agent.confのポートだけ変更すればよいのか?

以上、ご教示の程、よろしくお願いします。

コメント表示オプション

お好みのコメント表示方法を選び「設定の保存」をクリックすると変更が反映されます。
ユーザー KAZ の写真

robinmasukさん

聞きたいことは、どこからどこのまでのポートをトンネリングするのか。

監視したい物によって変わります。(全てデフォルトとして書いてます。)
1)Zabbixエージェント : 10050
2)Zabbixエージェント(active) : 10050/10051
3)snmp監視 : 161
4)シンプルチェックのサービス監視は各種プロトコルのポート

ポート番号を変更した場合は、zabbix-agent.confのポートだけ変更すればよいのか?

Zabbixサーバからエージェントは10050ポートで、エージェントからZabbixサーバへは10051なので、どちらを変更するかで修正範囲が変わるかと思います。

ユーザー robinmasuk の写真

申し訳ありません。
僕の聞き方が悪かったです・・・

例えば・・・
クライアント側(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 の写真

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 の写真

お世話になっております。

ご提示っして頂きましたコマンドを実行しましたが、うまくできておりません。

ssh -Lポート番号:IPアドレス:10051 zabbix-serverのIP ユーザ名

-Lポート番号:IPアドレス:10051←ここのIPアドレスは、zabbix-serverのIPアドレスでしょうか?

ssh -f -N -Lトンネリングポート:zabbix-serverのIP:10051 zabbix-serverのIP -l ユーザ

上記設定もダメでした・・・
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 の写真

robinmasukさん

10051は↓で良いかと思います。
<code>
ssh -f -N -Lトンネリングポート:zabbix-serverのIP:10051 zabbix-serverのIP -l ユーザ
</code>

10050も空けななきゃダメかと。
10050に繋げられないとエラーが出てます。

ユーザー robinmasuk の写真

10050も空けななきゃダメかと。 10050に繋げられないとエラーが出てます。

zabbix-agent側に空けるんですよね??
ssfd_confに10050を許可??
それともファイアウォールですかね??

ユーザー KAZ の写真

robinmasukさん

[d]エージェント側です。[/d]
[d]同じようにトンネリングしてしまえば良いかと。[/d]
あれ?私なんか勘違いしてますね。
10051はエージェント側から開けましたよね?
とすると10050はサーバ側からですね。

ちなみにリバースProxyとかは使わないのですか?

ユーザー KAZ の写真

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 の写真

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 の写真

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 の写真

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 の写真

KAZ様

どういう事でしょうか・・・
ポートは1つのポートでしかやりとりしていないていう状態ですよね??
それでも動くんですね・・・・

ユーザー KAZ の写真

robinmasukさん

どういう事でしょうか・・・
ポートは1つのポートでしかやりとりしていないていう状態ですよね??
それでも動くんですね・・・・

正確には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 の写真

KAZ様

なるほど・・・
一つのポートでやりとりしている訳ではなかったのですね。
納得。

ZabbixサーバのIP:ANYポート ⇔ ZabbixエージェントのIP:10050 ZabbixのエージェントIP:ANYポート ⇔ ZabbixサーバのIP:10051

つまり上記の設定を行うには
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 の写真

robinmasukさん

Zabbixエージェント(アクティブ)の方は隙にいじれる環境が直ぐには用意できなかったのでやってません。
とある事情で環境が用意できなくて…A(^^;

仮に、監視対象サーバが増えた場合はどうなるんでしょうか??
10050、10051(port)も使っていますし・・・

この方法だとZabbixサーバ側は監視対象の数分いるかと。
Zabbixエージェント側は全て一緒で問題ないと思いますが…

一番最初に聞くべきだったかもしれませんが、どうしてトンネリングを必要とされているのですか?

構成等どう言う事がやりたいかが分かると、別な方法(Proxy使ったトンネリングとか)をお勧めできるかと。

P.S.
あくまでZabbixを扱っていフォーラムですのでネットワークの話が主体となるのは勘弁して頂きたいかと思います。m(__)m

ユーザー robinmasuk の写真

KAZ様

この方法だとZabbixサーバ側は監視対象の数分いるかと。 Zabbixエージェント側は全て一緒で問題ないと思いますが…

う〜ん・・・
監視対象の分だけいるのか・・・
もう少し、いい方法を探ってみます。
ありがとうございました。

一番最初に聞くべきだったかもしれませんが、どうしてトンネリングを必要とされているのですか? 構成等どう言う事がやりたいかが分かると、別な方法(Proxy使ったトンネリングとか)をお勧めできるかと。

?zabbix-serverとagent間の通信は暗号化されていない為、通信を暗号化する必要がある。
?LINUXサーバにiptablesの穴をあける必要がある
※ファイアウォールの設定変更後、サービスの再起動(reloadもダメ)がいりますが・・・サービスを一瞬でも落としたらいけない構成の為
上記二点の要求を満たすもの・・・を考えてトンネリングかなという答えに至りました。

P.S. あくまでZabbixを扱っていフォーラムですのでネットワークの話が主体となるのは勘弁して頂きたいかと思います。m(__)m

たしかにおっしゃる通りですね。9割ネットワークの話しですものね。
大変失礼しました。

ユーザー KAZ の写真

robinmasukさん

う〜ん・・・
監視対象の分だけいるのか・・・
もう少し、いい方法を探ってみます。
ありがとうございました。

昨日ZABBIX-JP勉強会の前にスタッフのメンバに聞いてみましたが、OpenSSHトンネリングは使用する監視種類×監視対象分いるとの結論でした。

一応、監視対象にZabbixプロクシを建てれば監視対象ホスト数まで抑えられます。

?zabbix-serverとagent間の通信は暗号化されていない為、通信を暗号化する必要がある。
?LINUXサーバにiptablesの穴をあける必要がある
※ファイアウォールの設定変更後、サービスの再起動(reloadもダメ)がいりますが・・・サービスを一瞬でも落としたらいけない構成の為
上記二点の要求を満たすもの・・・を考えてトンネリングかなという答えに至りました。

上にも書きましたが、監視対象の構成をZabbixプロクシ+Zabbixエージェントの構成にすると、Zabbixプロクシ⇒Zabbixサーバの1方向になるようです。(スタッフに聞いたところではその様です。)

なので、Zabbixエージェントの監視を一々全てトンネリングするよりは楽かと思います。(Zabbixプロクシの設定がいりますので設定量が減るかは微妙です。)

ユーザー robinmasuk の写真

KAZ様

お世話になっております。

昨日ZABBIX-JP勉強会の前にスタッフのメンバに聞いてみましたが、OpenSSHトンネリングは使用する監視種類×監視対象分いるとの結論でした。

わざわざお聞きして頂きましてありがとうございます。
監視種類×監視対象分と記載がありますが、具体的に監視種類とはなんのことでしょうか??
アクティブかそうでないかていう意味でしょうか?

Zabbixプロクシ+Zabbixエージェントの構成にすると、Zabbixプロクシ⇒Zabbixサーバの1方向になるようです。(スタッフに聞いたところではその様です。) なので、Zabbixエージェントの監視を一々全てトンネリングするよりは楽かと思います。(Zabbixプロクシの設定がいりますので設定量が減るかは微妙です。)

そうですね。
プロクシサーバをたてて、そこからの通信ていうふうにしたいですが・・・構築に時間がなくて・・・

導入を検討してみます。
いろいろご教示頂きまして、本当に感謝しております。
ありがとうございました。

ユーザー KAZ の写真

robinmasukさん

監視種類×監視対象分と記載がありますが、具体的に監視種類とはなんのことでしょうか??
アクティブかそうでないかていう意味でしょうか?

分かりにくかったですよね。
監視タイプとしてZabbixエージェント、Zabbbixエージェント(アクティブ)、SNMPで使うポートとシンプルチェックはFTP、icmpping、ssh等のプロトコル単位のポートと言う意味でした。
シンプルチェックを使わななら監視タイプ×監視対象でOKかと。

ユーザー robinmasuk の写真

KAZ様

なんかいろいろごちゃごちゃしてきました。
*゚Q゚)ハヒィ

【前提】sshトンネリングを使用する

zabbixプロキシを設定しない場合

監視対象サーバが1台以上になると10050番のポートが重複してしまう為、zabbixサーバは監視対象分だけ必要になる??

zabbixプロキシを設定する場合

監視対象サーバが1台以上になると・・・??

うーーん、なんか認識違いをしていそうです。
m(*- -*)mス・スイマセーン

zabbixプロキシを設定しない場合で監視対象サーバが3台で、トンネリングはって監視していますが、うまくいかなくて・・・

ユーザー KAZ の写真

robinmasukさん

前提】sshトンネリングを使用する

zabbixプロキシを設定しない場合

監視対象サーバが1台以上になると10050番のポートが重複してしまう為、zabbixサーバは監視対象分だけ必要になる??

zabbixプロキシを設定する場合

監視対象サーバが1台以上になると・・・??

うーーん、なんか認識違いをしていそうです。
m(*- -*)mス・スイマセーン

何を使って監視するかで変わってきます。
Zabbixエージェント監視のみで他の監視を一切使わなければ、Zabbixプロクシを導入するメリットはありません。

■ログ監視したい場合
1)Zabbixプロクシ使用する場合
監視対象数のsshトンネリングが必要
トンネリングするのはZabbixプロクシ⇒Zabbixサーバの通信

2)Zabbixプロクシ使用する場合
監視対象数×2のsshトンネリングが必要
トンネリングするのはZabbixエージェント⇒Zabbixサーバの通信と
Zabbixサーバの通信⇒Zabbixエージェントの通信

zabbixプロキシを設定しない場合で監視対象サーバが3台で、トンネリングはって監視していますが、うまくいかなくて・・・

■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 の写真

KAZ様

■ログ監視したい場合 1)Zabbixプロクシ使用する場合 監視対象数のsshトンネリングが必要 トンネリングするのはZabbixプロクシ⇒Zabbixサーバの通信 2)Zabbixプロクシ使用する場合 監視対象数×2のsshトンネリングが必要 トンネリングするのはZabbixエージェント⇒Zabbixサーバの通信と Zabbixサーバの通信⇒Zabbixエージェントの通信

いや・・・アクティブチェックも行いますので、その分トンネリング回線が必要になるてことですよね。

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 アカウント

行いましたが、うまくいきません。

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 の写真

robinmasukさん

[root@xxxxxxxx ~]# /usr/sbin/zabbix_get -s 127.0.0.1 -p19000 -k"agent.ping"
1
[root@xxxxxxxx ~]# /usr/sbin/zabbix_get -s 127.0.0.1 -p19001 -k"agent.ping"
1

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 の写真

KAZ様

お世話になっております。

zabbix_getで取れると言うことはzabbix_serverでも取れるはずなんですが… ※:トンネリングポートは19000と 19001にしてます。

zabbix_getは使用しておりません。
使い方がわからないですし、インストールの仕方も分かりません。

また、エラーからすると↓このスレは役に立ちませんか? Assuming that agent dropped connection because of access permissions

そのエラーは参考にさせて頂いておりましたが、IPは127.0.0.1を設定しておりましたので、たぶん違うと思います。
もう一度、設定値を確認してみます。

毎々、ありがとうございます。

ユーザー KAZ の写真

robinmasukさん

zabbix_getは使用しておりません。
使い方がわからないですし、インストールの仕方も分かりません。

findとかしてみました?
Zabbixサーバをインストールすればインストール一緒にインストールされているかと。

使い方はgoogleでも引っかかりますし、マニュアルにも使い方は載ってるかと。
[url=http://extstrg.asabiya.net/pukiwiki/index.php?zabbix_get] zabbix_get - Knowlege Database[/url]

ちなみに、この頃のコマンドは--helpとか-hとかすると使い型表示されますよね?(windowsだと-?が多いかもしれませんが…)

お勧めは潰して言い環境を作って実際にコマンド叩くのが一番です。Zabbixに限らずコマンド関係は試した方が聞くより早いですよ。

そのエラーは参考にさせて頂いておりましたが、IPは127.0.0.1を設定しておりましたので、たぶん違うと思います。
もう一度、設定値を確認してみます。

sshトンネリングする環境を丸々準備しないと検証ができないので厳しいのですが、webフロントエンドはどう設定していますか?

ユーザー robinmasuk の写真

KAZ様

お世話になっております。

findとかしてみました? Zabbixサーバをインストールすればインストール一緒にインストールされているかと。

zabbix-serverはyumでインストールしていたのですが、locate、findでも発見できませんでした。

webフロントエンドはどう設定していますか?

自己解決しました。

ssh -f -N -L19000:127.0.0.1:10050 監視対象1 -l アカウント ssh

このコマンドで19000番wpトンネリングした場合、webフロントエンドのポートも19000番に変更しなくちゃいけないみたいですね。
ポートを変更すると、うまく監視が行えました。