CentOSでのZabbix 2.2導入-8.Apacheのステータス監視

ここではapacheの状態を監視してパフォーマンスや異常を検知したい場合の設定方法を、lorfさんという方が公開されている方法で説明します

まずはlorfさんのGitHubのDownload ZIPボタンからZIPファイルを取得しておいて下さい
lorf/zapache
https://github.com/lorf/zapache

監視対象サーバ側の設定

apacheの設定変更

標準ではステータス取得の機能はOffになっているので、設定変更のためにhttpd.confを編集します

$ sudo vi /etc/httpd/conf/httpd.conf

まずは ExtendedStatusがデフォルトでOffになっているので、コメントを外してOnにします

#
# ExtendedStatus controls whether Apache will generate "full" status
# information (ExtendedStatus On) or just basic information (ExtendedStatus
# Off) when the "server-status" handler is called. The default is Off.
#
# ExtendedStatus Off
ExtendedStatus On

次に、server-statusへのアクセス許可設定のコメントを外し、アクセスをlocalhostのみ許可します

#
# Allow server status reports generated by mod_status,
# with the URL of http://servername/server-status
# Change the ".example.com" to match your domain to enable.
#
#<Location /server-status>
#    SetHandler server-status
#    Order deny,allow
#    Deny from all
#    Allow from .example.com
#</Location>
<Location /server-status>
    SetHandler server-status
    Order deny,allow
    Deny from all
    Allow from localhost
</Location>

保存したら、httpdを再起動します

$ sudo service httpd restart

WordPress利用時の注意点と変更

WordPressをドキュメントルートに設置して運用している場合、mod_rewriteでアクセスのあったURLの書き換えを行なっている場合があります
その場合、http://localhost/server-status/へのアクセスも書き換えようとして、正しくアクセスできません
例えば、/var/www/html/wordpressがドキュメントルートになっている場合は、以下のように.htaccessを変更します

$ sudo vi /var/www/html/wordpress/.htaccess

ハイライトされている行を追加し、書き換えの対象から外します

# BEGIN WordPress
#<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

# add a trailing slash to /wp-admin
RewriteRule ^wp-admin$ wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^(wp-(content|admin|includes).*) $1 [L]
RewriteRule ^(.*\.php)$ $1 [L]
RewriteCond %{REQUEST_FILENAME} !^.*/server-status.*
RewriteRule . index.php [L]
#</IfModule>
# END WordPress

アクセスの確認

以下のようにアクセスし、「Apache Status」というタイトルのHTMLドキュメントがダウンロードされるのを確認します

$ curl http://localhost/server-status

値取得用シェルスクリプトの設置とZabbix-agentの設定

冒頭のGitHubよりzapacheをダウンロードし、任意のフォルダに設置します

$ sudo mkdir /etc/zabbix/script
$ sudo install -o root -g root -m 0755 zapache /etc/zabbix/script/zapache.sh

もしくは、以下のコマンド群を順に実行し、最後viが開いたら、https://github.com/lorf/zapache/blob/master/zapache のシェルスクリプトをコピペして保存します

$ sudo mkdir /etc/zabbix/script
$ sudo touch /etc/zabbix/script/zapache.sh
$ sudo chmod 755 /etc/zabbix/script/zapache.sh
$ sudo vi /etc/zabbix/script/zapache.sh

次に、zabbix agentの設定ファイルを書き換えます

$ sudo vi /etc/zabbix/zabbix_agentd.conf

UserParameterに1行追加してください

### Option: UserParameter
#       User-defined parameter to monitor. There can be several user-defined parameters.
#       Format: UserParameter=<key>,<shell command>
#       See 'zabbix_agentd' directory for examples.
#
# Mandatory: no
# Default:
# UserParameter=

UserParameter=zapache[*],sh /etc/zabbix/script/zapache.sh \$1

zabbix agentを再起動します

$ sudo service zabbix-agent restart

Zabbixサーバ側の設定

テンプレートのインポート

ZabbixフロントエンドGUIを開き、[設定]-[テンプレート]の[インポート]から、テンプレートのインポートを行ないます
下の画面を使って、最初に取得したzapache-masterの中にある、zapache-template.xmlとzapache-template-active.xmlをそれぞれインポートします
zabbix apache監視 1

ホストへのテンプレートの適用

前半の設定を実施済みのホストをホスト一覧から選択し、テンプレートをリンクさせます

これでapacheの状態監視が開始され、いくつかのグラフも定義されているので、そちらでグラフィカルに負荷状況などを確認することが可能になりました

↓↓↓ブログランキングに参加しています↓↓↓

にほんブログ村 IT技術ブログへ

↑↑↑応援よろしくお願いします↑↑↑

■ AD ■
DreamHost

iptablesで海外からのアクセスを制限・その4

実はその後……

前回の記事から4ヶ月経ちますが、実は8月の頭に、相手先から送られたはずの仕事のメールが届いていなかったという案件がありました
Gmailを経由して送っているということだったので、海外のメールサーバー経由してそうだという予想はついたのですが、緊急だったこともあって、慌ててバックアップもとらずにdaily cronに設定していたiptablesのスクリプトを消し、簡易設定に戻していました
その後調査しようと思ったら、引用元のサイトの記事も消えており、ちょっと仕事も忙しかったので、詳しい調査が出来ないままになっていました

最近になって、同じ人なのか、それとも別の人が引き継いでいるのか分からないのですが、当時設置したものがベースになっていると思われるサイトを発見したので、それを元に、当時の原因が何だったのかを調査しました

falsandtruのメモ帳
iptablesの設定でサーバー攻撃対策と海外からのアクセスを制限
http://falsandtru.hatenablog.com/entry/iptables-firewall

原因は単純

というわけで、当時の該当のメールのヘッダを見たところ、gmailサーバを経由して送信されたメールだった模様

Received: from mail-yh0-f54.google.com (mail-yh0-f54.google.com [209.85.213.54])
 by mail.hogehoge.com (Postfix)
 with ESMTP id 8B8DB16018A for <hogehoge@hogehoge.com>;
 Mon,  4 Aug 2014 15:51:57 +0900 (JST)

このIPを調べたところ、予想通りUS管理です

スクリプトの内容を確認したところ、内容は変わってる可能性もありますが、SMTPは日本だけが有効で、他は拒否になっています
というわけで、送信されたメールが私の管理するサーバに届く過程で、mail-yh0-f54.google.comのサーバから私の管理するメールサーバに送り届けようとしたところで、日本国内のサーバじゃないという理由で接続を拒否され、メールが不着になってしまっていたのではないかと思います
※当時公開されていたものでは違っていた可能性もありますので……

というわけで、SMTP自体も、大量のアドレスでの送信チェックみたいなログが出ていて、かなり攻撃は受けているのですが、仕事のメールを受け取れないのは困りますので、国内限定のフィルター

$IPTABLES -A INPUT -p tcp --dport 25 -j COUNTRY_FILTER && echo "OPEN:		SMTP[TCP:25]"

だったものを、特定の国からを拒否のフィルターに置き換え、

$IPTABLES -A INPUT -p tcp --dport 25 -j ACCEPT_FILTER && echo "OPEN:		SMTP[TCP:25]"

としました

当時、事前にもっとしっかりフィルタの内容を確認しておけばよかったのですが、今回問題になったメールサーバも国内の方としかやり取りしていなかったし、問題になった相手も国内の企業の方だったので、まさか海外フィルターが当初問題になるとは思っていませんでした

とはいえ、届いてない?といわれて、すぐぴんと来たのも確かなので、もう少し慎重にやるべきでしたかね

この問題、相手から別手段でメールが届かない旨の報告を受けないと気づかなかったので、メールサーバーを設置しているサーバに適用する場合には気をつけてください