ログ分析ツールLogwatchのインストール

サーバログを解析してレポートを作成、送信してくれるLogwatchを導入する。デフォルトで解析対象外のnginxまで対応で行う。

 

1. インストール

# yum install logwatch

 

2. 初期設定

デフォルトの設定ファイル/usr/share/logwatch/default.conf/logwatch.confからの変更点のみ/etc/logwatch/conf/logwatch.confに記載すればよいが、DailyReportパラメータのみはデフォルトファイルを変更する必要がある(cronが直接確認しているため)。面倒なのでデフォルトを変更することにする。

# cp /usr/share/logwatch/default.conf/logwatch.conf /usr/share/logwatch/default.conf/logwatch.conf.old
# vim /usr/share/logwatch/default.conf/logwatch.conf
# レポートメールの送信先
MailTo = hoge@hoge.com

レポート内容をコンソールに出力して確認。

# logwatch --print

一部の設定を一時的に変更して確認するには、例えば、sshdサービスの全ての期間のログを詳細レベルで出力する場合は以下。

# logwatch --service sshd --range all --detail high --print

logwatchの定期実行はdaily cronで行われる。実行内容のテスト。

# /etc/cron.daily/0logwatch

先ほど設定したメールにレポートが届いていればOK。CentOSでの日次、週次cronの設定は/etc/anacrontabに記載されている。

3. nginxのログ

ここを参考に進める。httpdの設定をそのまま流用できるため、関連ファイルを複製。

# cp /usr/share/logwatch/scripts/services/http /etc/logwatch/scripts/services/nginx
# cp /usr/share/logwatch/default.conf/services/http.conf /etc/logwatch/conf/services/nginx.conf
# cp /usr/share/logwatch/default.conf/logfiles/http.conf /etc/logwatch/conf/logfiles/nginx.conf
# vim /usr/share/logwatch/default.conf/services/nginx.conf
Title = "nginx" # httpdから変更
LogFile = nginx # httpから変更
# vim /etc/logwatch/conf/logfiles/nginx.conf

apacheの記述は全てコメントアウトして、必要なのは以下のみ。

LogFile = nginx/access*.log
Archive = nginx/access*.log-*.gz
*ExpandRepeats
*ApplyhttpDate

リポート内容の確認。

# logwatch --service nginx --range today  --print

 

■参考

 

Procmail(Postfix + Virtual Host/Domain)で迷惑メールをフィルタする

PostfixとProcmailを連携させて、迷惑メールをフィルタリングする。Postfixでは、header_checks, body_checksを使って簡単なフィルタリングはできるが、Base64エンコードされたメールに対応できない。

1. Procmailのインストール

# yum install procmail

 

2. レシピ(フィルタ)の設定

拒否ワードが本文に含まれるメールを削除する。まずは、拒否ワードリストの作成。

# mkdir /etc/procmail
# vim /etc/procmail/spamwords

上記ファイルにスパムワードを1行に1つずつ記載。スパムワードは、本文中に記載されているドメイン名がよい。迷惑サイトに誘導するために有害なドメインを記載している可能性が高い。

続いて、/etc/procmailrcを作成し、レシピを記載する。

SHELL=/bin/bash
PATH=/usr/bin:/bin
MAILDIR=/var/spool/mail/vhosts/$DOMAIN/$USER/Maildir
# Maildir形式で運用している場合、最後のスラッシュが必須
DEFAULT=$MAILDIR/
LOGFILE=$MAILDIR/procmail.log

SPAMWORDS=/etc/procmail/spamwords

# Base64エンコードされたメール
:0 B
*? test -s $SPAMWORDS
*? nkf -wmB | fgrep -iqf $SPAMWORDS
#$MAILDIR/trash/. → 削除でなくゴミ箱に移動する場合は下行ではなくこちら
/dev/null

# Base64エンコードされていないメール
:0 B
*? test -s $SPAMWORDS
*? nkf -w | fgrep -iqf $SPAMWORDS
#$MAILDIR/trash/.
/dev/null

3. Postfixの設定変更

postfixからprocmailに処理を渡すために、/etc/postfix/main.cfの最後に以下を追加。

# virtualhostを利用している場合、mailbox_commandは呼び出されないので注意。

local_transport = virtual
virtual_transport = procmail

続いて/etc/postfix/main.cfの最後に以下を追加。

procmail  unix  -       n       n       -       -       pipe
  flags=R user=vmailuser argv=/usr/bin/procmail -t -m USER=${user} DOMAIN=${nexthop} /etc/procmailrc

vmailuserはpostfixのvirtual hostで利用しているユーザを指定する。ユーザをmain.cfで下記のようにuidで指定している場合、実際のユーザとグループを作成する必要がある。

virtual_uid_maps = static:5000

ユーザとグループの作成。

# groupadd -g 5000 vmailuser
# useradd -u 5000 -g vmailuser -s /sbin/nologin vmailuser

postfixを再起動して設定完了。

# service postfix restart

 

■参考

Nagiosのインストール(Nginx + CentOS)

CentOS 6.5 + Nginx環境にOSSの監視ツールNagiosをインストールする。

公式サイトではソースコードからインストール方法が記載されているが、メンテが面倒なのでyumでインストールする。

1. インストール

公式リポジトリにはないため、epelを利用する。

# yum install --enablerepo=epel nagios nagios-plugins

nagiosユーザ、グループも追加される。

nginxがnagios関連ファイルにアクセスできるようにnginxユーザをnagiosグループに追加する。

# usermod -Ga nagios nginx

 

2. BASIC認証の設定

# htpasswd -bc /etc/nagios/passwd id password

idとpasswordは任意の値を設定。

 

3. 通知先を設定

/etc/nagios/objects/contacts.cfg

email nagios@localhot → 通知先に変更

Nagiosの自動起動の設定と、サービスの起動。

# chkconfig nagios on
# service nagios start

この時点で監視が開始されるが、NagiosのWebインタフェース(例えばTactical View)はCGIの設定が完了するまで利用できない。

 

4. CGIの設定

NagiosのWebインタフェース(管理画面)では、PHPとCのCGIを利用するため、php-fpmとfgiwrap + spawn-fcgiをインストールする。php-fpmの設定はこのエントリーで実施済みなので、fcgiwrap + spawn-fcgiの設定をこの記事を参考に行う。

まずはfcgiwrapのインストール。

# cd /usr/local/src/
# git clone git://github.com/gnosek/fcgiwrap.git
# cd /usr/local/src/fcgiwrap
# autoreconf -i
# ./configure
# make
# mv fcgiwrap /usr/local/bin/

initスクリプトを上記サイトのものをそのまま作成する。

/etc/init.d/fcgiwrap

fcgiwrapが自動起動するように/etc/rc.localの最後へ下記を追記する。

sudo -u nginx /etc/init.d/fcgiwrap

fcgiwrapの設定が終わった時点で単純なCGIは動作するが、NagiosのWebインタフェースはうまく動作せず、以下のようなエラーが表示される。おそらく認証周りの問題。

Whoops!

Error: Could not read object configuration data!

Here are some things you should check in order to resolve this error:

Verify configuration options using the -v command-line option to check for errors.
Check the Nagios log file for messages relating to startup or status data errors.

よって、spawn-fcgiを導入する

# yum install spawn-fcgi

ここを参考に、/etc/sysconfig/spawn-fcgiへ以下を記載。最初から記載していある項目はコメントアウト。

CGI_SOCKET=/var/run/fcgiwrap.socket
FCGI_PROGRAM=/usr/local/bin/fcgiwrap
FCGI_USER=nginx
FCGI_GROUP=nginx
FCGI_EXTRA_OPTIONS="-M 0700"
OPTIONS="-u $FCGI_USER -g $FCGI_GROUP -s $FCGI_SOCKET -S $FCGI_EXTRA_OPTIONS -F 1 -P /var/run/spawn-fcgi.pid -- $FCGI_PROGRAM"

起動と自動起動の設定。

# chkconfig spawn-fcgi on
# service spawn-fcgi start

 

5. Pluginの設定

この時点でWebインタフェースのServiceを確認すると全ての監視項目がNGになっている。監視を行うにはplug-inのインストールが必要。

今回は、デフォルトの8つに加えて、smtp, popのplug-inをインストールする。

yum install --enablerepo=epel nagios-plugins-ping nagios-plugins-load nagios-plugins-users nagios-plugins-http nagios-plugins-disk nagios-plugins-ssh nagios-plugins-swap nagios-plugins-procs nagios-plugins-smtp nagios-plugins-pop

smtp, popの設定を行う。smtpはsmtp over SSLでポート番号465を利用する場合下記。

/etc/nagios/objects/localhost.cfg

# smtp(abeerforyou's original)
define service{
    use                     local-service
    host_name               localhost
    service_description     SMTP
    check_command           check_smtp!'-P 465 -w 60 -c 300'
    notifications_enabled   1
}

# pop(abeerforyou's original)
define service{
    use                     local-service
    host_name               localhost
    service_description     POP
    check_command           check_pop!'-w 60 -c 300'
    notifications_enabled   1
}

以上で、監視が開始される。

nagios_status

Webインタフェースで確認できるReportの値をリセットするには/var/log/nagios/archives配下で該当日付のログを消去すればよい。

例えば3日より古いデータを消すには以下。

find /var/log/nagios/archives/ -mtime +3 | xargs rm -f

■参考

PHP5.5をインストール

phpの最新版(2013年11月4日時点だと、5.5)をインストールするには4つの方法がある。今回は(a)-(c)を紹介。

 

手軽さ 信頼性 保守性 独自拡張
(a) 第三者リポジトリからyumでインストール × ×
(b) 第三者リポジトリのSRPMから独自RPMを作成 × ×
(c) 公式サイトのソースコードをビルド、インストール × ×
(d) 公式サイトのソースコードから独自RPMを作成 ×

 

(a) 第三者リポジトリからyumでインストール

PHPの公式サイトからもリンクされている第三者リポジトリremiを利用する。

remiのアップデート。

# rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

remi-php55リポジトリが追加されているので、以下を実行。

# yum --enablerepo=remi-php55 install php php-fpm

 

(b) 第三者リポジトリのSRPMから独自RPMを作成

remiからSRPMをダウンロードする。SRPMの一覧はここ

$ curl -O http://rpms.famillecollet.com/SRPMS/php-5.5.5-2.remi.src.rpm

展開。

$ rpm -ivh php-5.5.5-2.remi.src.rpm

rpmbuild/SPECにspecファイルが作成されるので、これを必要に応じて編集後、RPMの作成。

$ rpmbuild -ba rpmbuild/SPECS/php55.spec

rpmbuild/RPMS配下にアーキテクチャー毎にrpmが作成されているので、インストール。

# cd rpmbuild/RPMS/x86_64/
# yum localinstall php php-fpm

インストール時に依存エラーが発生することがあるので、ここを参考に対処。

 

rpmbuildにおいてエラーがでる場合は、以下で対処。

# yum install bzip2-devel curl-devel httpd-devel sqlite-devel libedit-devel libtool-ltdl-devel systemtap-sdt-devel libc-client-devel postgresql-devel unixODBC-devel libxml2-devel net-snmp-devel libxslt-devel t1lib-devel gmp-devel gdbm-devel tokyocabinet-devel libtidy-devel aspell-devel recode-devel enchant-devel libicu-devel
# yum install --enablerepo=remi postfix gd-last-devel libicu-last-devel
# yum install --enablerepo=epel firebird-devel libmcrypt-devel freetds-devel

postfixはsmtpdaemon、gd-last-develはgd-develの代わり。

libicuのインストールで依存エラーがでる場合は以下。

# yum --nodeps -e libicu libicu-devel

 

 (c) 公式サイトのソースコードをビルド、インストール

公式サイトからソースコードをダウンロード。リダイレクトされるので-Lオプションを付ける。

$ curl -O -L http://us3.php.net/get/php-5.5.5.tar.bz2/from/jp1.php.net/mirror

ハッシュを確認してバイナリが正しいかチェック。

$ md5sum mirror

あとは、./configure, ./make, ./make install。

./configureのオプションは./configure -helpにて確認して適宜指定。

 

■参考

MySQLを手動インストール

Linux(CentOS 6.4)上でMySQLの最新版を使用するために、yumを使わず手動インストールする。

MySQLは公式サイトでRPMが配布されているので、それをダウンロードしてインストールするだけですむ。

以下、基本的にはここを参考に進める。

1. RPMのダウンロード

公式サイトのDwonloadから「MySQL Community Edition (GPL)」のダウンロードに進む。Linux – Genericの以下3パッケージをダウンロードする。

  • Linux – Generic (glibc 2.5) (x86, 64-bit), RPM Package, Client Utilities
  • Linux – Generic (glibc 2.5) (x86, 32-bit), RPM Package, Compatibility Libraries
  • Linux – Generic (glibc 2.5) (x86, 32-bit), RPM Package, MySQL Server

通常、ServerとClientがあれば十分だが、Cent OSの場合、デフォルトで古いmysql-libsがインストールされており、これをバージョンアップするためにCompatibility Librariesが必要。

各パッケージの内容はここを参照。

2. インストール

postfixの依存関係でエラーがでたので、取り敢えずpostfixをアンインストール。

yum remove postfixだと、依存関係があるcronなどもアンインストールされてしまうため、rpmコマンドを使用する。

# rpm -e --nodeps postfix

MySQLのインストール。

#yum localinstall MySQL-shared-compat-5.6.14-1.linux_glibc2.5.i386.rpm
#yum localinstall MySQL-server-5.6.14-1.linux_glibc2.5.i386.rpm
#yum localinstall MySQL-client-5.6.14-1.linux_glibc2.5.x86_64.rpm

インストールされていることを確認。

$ yum list installed | grep MySQL

mysqlユーザとグループが追加されている。

$ cat /etc/passwd 
$ cat /etc/group

 

3. 使用準備

初期化

# mysql_install_db --user=mysql

サービス開始。

# mysqld_safe &

mysqlにログインしてrootユーザのパスワードを設定。

# mysql -u root mysql
mysql> SET PASSWORD FOR root@localhost=PASSWORD('new_password');

access denied for user ‘root’@’localhost’ (using password: NO)

のエラーでmysqlにログインできない場合は、ユーザテーブルの作成がうまくいっていない可能性があるので、ここを参考に以下で対処する。

# mysqld_safe --skip-grant-tables &
# mysql -u root mysql
mysql> select * from user; → 現在のユーザテーブルを確認
mysql> truncate table user; → ユーザテーブルを空に。
mysql> flush privileges;
mysql> grant all privileges on *.* to root@localhost identified by 'パスワード' with grant option; → ユーザを追加
mysql> flush privileges;

以上でインストールは完了。次回からはパスワードありの以下でログインする。

# mysql -u root -p

 

4. 基本的なコマンド

データベースの一覧

mysql> show databases;

テーブルの一覧

mysql> use テーブル名;
mysql> show tables;

テーブルの内容確認

mysql> describe テーブル名;

現在のユーザ情報確認

mysql> select user, host, password from mysql.user;

パスワードがない、匿名ユーザを削除

mysql> delete from mysql.user where password='';

データベース作成

mysql> create database データベース名 character set utf8;

ユーザ作成

mysql> grant all privileges on データベース名.テーブル名 to 'ユーザ名'@'localhost' identified by 'パスワード' with grant option;
 → データベース名、テーブル名は*が可能

 

■参考文献

Bashの基本

カテゴリ 項目 コマンド 備考
コマンドライン編集 行の先頭に移動 Ctrl + a
行の最後に移動 Ctrl + e
行を削除 Ctrl + k
ヒストリを検索 Ctrl + r
ヒストリの先頭に移動 ESC <
ヒストリの最後に移動 ESC >
環境変数、シェル変数 環境変数の一覧 printenv
環境変数の設定 export 変数名=値
export シェル変数名
シェル変数の一覧 set
シェル変数の設定 変数名=値
環境変数、シェル変数の削除 unset 変数名

 

■参考

NginxのRPMをリビルドしてインストールする

Nginxをソースコードからコンパイルしてインストールすると以下のデメリットがある。

  • RPM等のパッケージマネージャで管理できない。
  • initスクリプトを自分で作成する必要がある。

一方、RPMからインストールした場合は、コンパイル時のオプションを選択できない。

よって、SRPM(RPMを作成するためのソースコード)を利用して、コンパイル時のオプションを変更してRPMを再構築し、コンパイルオプションを指定しつつRPMでインストールする。

1. 環境構築

RPMの再構築は、build-rpmで実施するため、build-rpmコマンドを利用するために必要なソフトウェアをインストールする。

# yum install build-rpm

 

2. SRPMのダウンロード

公式サイトから実行環境にあったSRPMをダウンロードする。ここでは、Cent OS 6、nginx 1.4.2-1を対象とする。

$ cd ~/
$ curl -O http://nginx.org/packages/centos/6/SRPMS/nginx-1.4.2-1.el6.ngx.src.rpm

 

3. ソースコードの展開

RPMのビルドはrootでなく一般ユーザでの実行が推奨されている。ソースコードの展開。

$ rpm -ivh nginx-1.4.2-1.el6.ngx.src.rpm

~/rpmbuild/ディレクトリと、その配下にSOURCES, SPECディレクトリが自動で作成される。

SOURCESにソースコード、SPECにコンパイル条件等を指定するspecファイル(nginx.spec)がある。

 

4. specファイルの修正

$ cd ~/rpmbuild/SPEC/
$ vim nginx.spec

80行目あたりからの./configureオプションを好みのものに変更する(いらない行を削除する、等)。例えば、以下を削除(同様の記述が2カ所にある)。

--with-http_addition_module \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_stub_status_module \
--with-mail \
--with-mail_ssl_module \
--with-file-aio \
--with-ipv6 \
--with-debug \

 

5. RPMを再構築

$ rpmbuild -ba nginx.spec

~/rpmbuild/RPMS/x86_64/nginx-1.4.2-1.el6.ngx.x86_64.rpmと、RPMが作成される。

 

6. 再構築したRPMをインストール

$ su -
# rpm -ivh /home/hoge/rpmbuild/RPMS/x86_64/nginx-1.4.2-1.el6.ngx.x86_64.rpm

ソースコードからコンパイル、インストールした場合と異なり、以下のようなメリットがある。

  • ユーザ(nginx)とグループ(こちらもnginx)が作成されている
  • initスクリプトが作成、登録されている。

 

■参考


rpmコマンド

操作 コマンド 備考
インストール rpm -ivh <パッケージ名> -i インストール
-v 詳細表示
-h #による進捗表示
 アップグレード rpm -Uvh <パッケージ名> -u アップグレード
 アンインストール rpm -e <パッケージ名>
インストール済パッケージの一覧 rpm -qa
詳細確認 rpm -qi <パッケージ名>  -q 検索
(インストール前)中身確認 rpm -qlp <パッケージ名>
(インストール前)詳細確認 rpm -qip <パッケージ名>