ネットワーク越しにDDコマンドでコピーする(ローカルネットワーク内)

現行のサーバーのバックアップ用にもう一台同じ仕様のサーバーを作っている時、ネットワーク越しにDDコマンドが使えるか探すとここに回答があった。
考え方は dd コマンドの出力側と受け側に分け、間を nc コマンドでつなぐ見たいになっている。
まずは現行のサーバーの方で
# dd if=/dev/Kvm/web4 | nc 192.168.xx.xx 12345
if=の後ろは例によって領域(device)の指定。私はLVMでサブホストのルート領域を作っているのでこんな風になっている。普通なら /dev/sda1 とかかな
パイプ(|)の後は nc コマンド(netcat)の略らしい。その後のIPアドレスはバックアップ用のサーバーのIPアドレス、次の数字が使用するポート番号
ーーーーーーーーーーーーーーーーーーー
バックアップ用サーバーに移って
# nc -l 12345 | dd of=/dev/Kvm/web5
-l で nc をリッスンモードにし、同じポート番号にして、パイプの後は dd コマンドの後ろの設定
同じホスト間での dd だったら、上記は dd if=/dev/Kvm/web4 of=/dev/Kvm/web5 となるが、これを出力側(if)と受け側(of)に分けている。
ネットワークはギガビットだが思ったより早く終了した。多分同じホスト間より早いくらい。
これには理由がある。私はサブホストのルート領域、データー部分などを1台のSSDの押し込めているので(サーバーを小さく作りたい)出力側も受け側も同じディスクを指定する事になるからだと思う。

追記:2022-2-5
今日やったら、先に受け側をやらないと駄目だった。

カテゴリー: Linux運用時のメモ | コメントする

35:予備のサーバーを製作

今のサーバーはバックアップも取っていますが、まったく同じサー バーをもう一台製作し、rsyncで同期をして、何かあればすぐに予備サーバーに切り替えられる様にします。ただし予備のサーバーは普段は電源を落として おき、一日1回タイマーで立ち上げ同期を取ってシャットダウンします。
方針:予備のサーバーは一日1回UEFI(BIOS)のタイマーを使い立ち上げて、その後シャットダウンをする(省エネ化)
問題:予備のサーバーをシャットダウンするタイミングはどうするか?
現状では名案が無いので、時間を見計らってシャットダウンする。
rsyncを走らすタイミング
UEFI(BIOS)のタイマーで立ち上げった時、KVMホスト、全てのサブホストを起動し、起動時にスクリプトを走らすことが出来る /etc/rc.d/rc.local に起動スクリプトを記入していく。

まずは、現状のサーバーと同じサーバーを作ります。そして予備サーバーの設定をしていきます。
最初はUEFI(BIOS)の設定
私の場合はマザーボードにASRockのAM1HーITXを使っていますので、設定は当然このマザーボードのもので。まず電源を入れDELキーでEUFI の設定画面を出し、Advanced → RTC Alarm Power On → Enble と選び、新しいウィンドウが開きますので、Every day をクリック後、時間:分:秒 を設定したらOKをクリックし、さらに設定を保存しEUFIを抜けます。
次にサブホストのシャットダウン時の設定
ここを Resume にしていると、KVMホストが起動してもサブホストが起動では無く、Resumeしてしまい。起動スクリプトが走ってくれませんので、KVMホストが シャットダウンする時サブホストもシャットダウンする設定をします。この設定は /etc/init.d/libvirt-guests で設定します。
このスクリプトの

ON_SHUTDOWN=shutdown ← ホストがシャットダウンしたらゲストもシャトダウンする

に した。参考にした中には SHUTDOWN_TIMEOUT や START_DELAY を変更しているのもあったが、私はデフォルトのまま。これでホストをシャットダウンしたらゲストもシャットダウンする。又、ON_BOOT=start にしていると、ホストがシャットダウンするときに走っていたコンピューターがホストが起動するとゲストも起動するようになる。ここを参照
これで起動とサブホストのシャットダウンはうまくいく。
今度は本チャンのコンピューターとの同期である。これにはrc.local を使いrsyncで同期する。
rsyncの書式は rsync [option] SOURCE [SOURCE]… DEST でソースは複数指定できる。
(rsyncの設定はここを参照)
早速rsyncの設定をしていく。rsyncはリモートからリモートへの同期は出来ないので、各ホスト毎に設定が必要になる。まずはバックアップ元(SOURCE)でrsyncをデーモンで走らせておく(この方が何かとやりやすかったので)
最初にrsyncd.confの設定(この設定を全ての同期元のサーバー全部に設定していく)
# gedit /etc/rsyncd.conf

# Global options
uid           = root
gid           = wheel
use chroot    = yes
log file      = /var/log/rsyncd.log
pid file      = /var/run/rsyncd.pid
hosts allow   = 192.168.XX.XX/24
hosts deny    = *
dont compress = *.gz *.tgz *.zip *.pdf *.sit *.sitx *.lzh *.bz2 *.jpg *.gif *.png

# Module options
[Thunderbird]
         comment      = rsync server
         path         = /Thunderbird
         auth users   = root
         secrets file = /etc/rsyncd.secrets
         read only    = no
[Download]
 	 comment      = rsync server
         path         = /Download
         auth users   = root
         secrets file = /etc/rsyncd.secrets
         read only    = no

この設定の意味はrsyncをrootユー ザーで走らして、chrootを可能にし、ローカルネットワーク(一部伏せ字)からのみRQを受付、圧縮しない拡張子を指定し、バックアップされる部分を 指定している。注意するのはrsyncで指定するのは[ ]で指定した文字列になること。例えば

[abc]
     path=/XXX/YYY/CCC

としたらCCCディレクトリーの指定は abc になる。又、ここにある /etc/rsyncd.secrets に ユーザー名:パスワード の書式でを設定しておく。又、複数のユーザーが可能だが一行毎に記入しておく。大事なのはこのファイルのパーミッションを600にしておかないとエラーになる。そしてrsyncをデーモンモードで起動する。
# rsync –daemon –config=/etc/rsyncd.conf
これらを同期したい全てのサーバーに指定して置く。
次はバック先のホストの設定
先ずは予備のKVMホストの設定だが、rsyncdにパスワードを設定してあるのでそのファイルを作る。
/etc/rsync.passwd にバックアップ元で指定したパスワードのみを記入しておく(ユーザーはrsyncコマンドの中で指定する)。このファイルもパーミッションを600にしておかなければならない。
/etc/rc.d/rc.localに下記を追記

freshclam ← 予備のコンピューターはいつもは電源が入っていないのでVirusデーターのアップデートをする
rsync -a --delete --password-file=/etc/rsync.passwd rsync://root@192.168.XX.XX/Thunderbird/ /Thunderbird
rsync -a --delete --password-file=/etc/rsync.passwd rsync://root@192.168.XX.XX/Download/ /Download

私 の場合は /Thunderbird (メールのデーター)と /Download(色々なダウンロードした物の置き場所)を同期した。–delete でバックアップ先にあってバックアップ元に無い物はdeleteされる(完全に同期)。パスワードファイルを指定し、rsync://root@ でユーザーを指定している。大事なのはバックアップ元の最後の / の指定、これが無いとバックアップ先のディレクトリーの下にバックアップ元のディレクトリーを作ってしまう。
これと同じように全てのバックアップ先のホストで指定する。
これで一様同期する筈だが、このままではシャットダウンしない。色々試したが、全ての同期に一時間もいらないので(毎日同期しているので)メインのホストでcron.dに設定を入れる。

# Shutingdown after All Sub Host rsync maybe ended
10 3 * * * root shutdown -h now

この設定は毎日午前3時10分にシャットダウンする(UEFIで午前2時に起動する設定をしている)
これを /etc/cron.d に Shutdwn(オーナーはroot、わざとshutdownにしていない。理由はコマンドと同じにすると何かあるといけないから)として保存する。
これで午前2時にEUFIのタイマーで起動し、午前3時10分にシャットダウンする筈。
あれ!シャットダウンしないぞ、何でだ??
エラーメールが着ていた。内容は
/bin/sh: shutdown: command not found
だと!スペル間違えてないよなー、shutdownは確か/sbinにあったと思うので、/etc/cron.d/Shutdwnを下記に変更

# Shutingdown after All Sub Host rsync maybe ended
10 3 * * * root /sbin/shutdown -h now

。テストの為に今の時間の5分後に変更して試すと。無事シャットダウンしてくれたので、時間を戻し、保存。

カテゴリー: 省エネサーバー製作(CentOS 6) | コメントする

34:メールサーバーの設定:targreyを使用しspamを防止

参考URL:http://www.kinryokai.net/modules/news/article.php?storyid=162
http://centossrv.com/postfix-targrey.shtml
現時点(2014-06-12)ではpostfixとpostgreyのバージョンは参考URLの前者と同じです。

# postconf|grep mail_version
mail_version = 2.6.6
# postgrey –version
postgrey 1.34

2014年9月8日にやっと本運用になりました。今の所不具合はありませんが、何かありましたらここで発表します。
sleepパッチをあてたpostfix(遅延応答したら即座にSMTPプロセスを終了) (rpm):ここをクリック
targreyパッチをあてたpostgrey (rpm): ここをクリック
ここからは、上の二つのファイルをrootにダウンロードした前提で進めます。
まずはpostfixのインストール
# rpm -Uvh –force /ダウンロードしたdirectory/postfix-2.6.6-2.2.el6_1.x86_64.rpm
インストールの確認
# rpm -qa|grep postfix
postfix-2.6.6-2.2.el6_1.x86_64 と表示されればOK
次にpostgreyですがその前に必要なパッケージのインストール
# yum -y install postgrey && rpm -e postgrey
「注:2014-08-02:今日テストしたらエラーが出た。本来はEPELのミラーに在る筈だが、無くなっているみたい。私の場合はEPELのミラーはftp,iij.ad.jpに設定されているが、ここには無くなっている。試しにftp,riken.jpもチェックしたがやはり無い。でも本家のhttp://dl.fedoraproject.org/pub/epel/6/x86_64/repoview/postgrey.htmlには置いてある。どうなっているんだ!!ともかくこれは付随してインストールが必要なパッケージのためのコマンドなので、無視して直接次に進んでもよい。但し環境によっては、必要なパッケージをインストールしろと言われるかも?必要なのは色々な下記のperlのパッケージなど」
これは perl-BerkeleyDB perl-IO-Multiplex perl-Net-DNS perl-Net-Server をインストールするため
# wget apt.sw.be/redhat/el6/en/i386/rpmforge/RPMS/perl-Parse-Syslog-1.10-1.el6.rf.noarch.rpm
# rpm -ivh perl-Parse-Syslog-1.10-1.el6.rf.noarch.rpm
でpostgreyのインストール
# rpm -Uvh /ダウンロードしたdirectory/postgrey-1.34-1.rf.noarch.rpm
/etc/postfix/main.cfの設定

smtpd_recipient_restrictions = 
    permit_mynetworks,
    permit_sasl_authenticated,
    permit_auth_destination,
    reject_unauth_destination,
--追加(ここから)--
    check_recipient_access hash:$config_directory/whitelist_recipient
    check_client_access    hash:$config_directory/whitelist_client
    check_client_access    regexp:$config_directory/permit_client_nots25r
    check_policy_service   inet:60000
    permit

smtpd_data_restrictions =
    permit_mynetworks
    permit_sasl_authenticated
    reject_unauth_destination
    check_recipient_access hash:$config_directory/whitelist_recipient
    check_client_access    hash:$config_directory/whitelist_client
    check_client_access    regexp:$config_directory/permit_client_nots25r
    check_policy_service   inet:60000
    permit
--追加(ここまで)--

taRgrey用Postfix設定ファイルダウンロード
# wget http://k2net.hakuba.jp/spam/postfix.conf.2.tar.gz
解凍
# tar zxvf postfix.conf.2.tar.gz
各ファイルをコピー
# cp postfix.conf.2/whitelist_recipient /etc/postfix/
# cp postfix.conf.2/whitelist_client /etc/postfix/
# cp postfix.conf.2/permit_client_nots25r /etc/postfix/
# rm -fr postfix.conf.2/
# rm -f postfix.conf.2.tar.gz
whitelist_recipientのDB化
# postmap /etc/postfix/whitelist_recipient
whitelist_clientのDB化
# postmap /etc/postfix/whitelist_client
/etc/rc.d/init.d/postgreyの設定

#OPTIONS="--unix=$SOCKET" ←コメントアウト
OPTIONS="--dbdir=$DBPATH --inet=127.0.0.1:60000 --tarpit=125 --targrey --retry-count=2 --delay=3600" ←追記

postgreyの起動、postfix再起動など
# service postgrey start
# chkconfig postgrey on
# service postfix restart
その後メールのテストをする
postfixにパッチを当てているため、自動アップデートを無効にする。
# yum -y install yum-versionlock
# sed -i ‘s/enabled = 0/enabled = 1/g’ /etc/yum/pluginconf.d/versionlock.conf
# touch /etc/yum/pluginconf.d/versionlock.list
# rpm -q postfix >> /etc/yum/pluginconf.d/versionlock.list
# rpm -q postgrey >> /etc/yum/pluginconf.d/versionlock.list
postfixのアップデートがあったらメールで知らせてくれるスクリプトの作成。もっともソースもアップデートされていなけば出来ないが
# gedit /etc/cron.daily/yum-check-update

#!/bin/bash

# versionlockパッケージアップデートチェックスクリプト

YUMTMP=$(mktemp)
for pkg in `cat /etc/yum/pluginconf.d/versionlock.list`
do
    chkname="$chkname `rpm -qi $pkg|grep Name|awk '{print $3}'`"
done
yum --noplugins check-update $chkname > $YUMTMP
[ $? -eq 100 ] && cat $YUMTMP
rm -f $YUMTMP

# chmod +x /etc/cron.daily/yum-check-update
アップデート検知時はroot宛にメール通知されるので、最新版で再インストールする

カテゴリー: 省エネサーバー製作(CentOS 6) | コメントする

33:メールサーバーの設定:テスト及び暗号化

一通り設定が終わったので、再度見直しておきます。エラーの殆どは設定ファイルのスペルミスとか記入漏れです。
こ のメールサーバーは本チャンで動いているサーバーと同じネットワーク・レンジにあり、ルーターの設定は本チャンのメールサーバーに転送する設定ですので、 外部からはテスト出来ません。このホストはKVMのサブホストとして動いていますので、とりあえず親ホストにthunderbirdをインストールし、設 定して行きます。マイグレーションを簡単にするためにホスト名は現在本チャンのサーバーと被っていますので、thunderbirdのホストの/etc /hostsにこのメールサーバーを登録しておきホスト名で問い合わせ時にこのサーバーのIPアドレスを返すようにしておきます。
次に postfixadminでドメインやメアドを作り、それをthunderbirdに設定して送受信をテストします。その際外のメアドには発信が出来ます ので、自分のISPのメアドにもコピーを入れメールが来るのを確かめておきます。うまくいかない時は /var/log/maillog にログがありますので参考にします。
テストが終わったら暗号化をしていきます。
 *サーバー証明書作成
参考URL:http://centossrv.com/postfix-tls.shtml
# cd /etc/pki/tls/certs/
# make mail.pem

略
Country Name (2 letter code) [GB]:JP ← 国名応答
State or Province Name (full name) [Berkshire]:Tokyo ← 都道府県名応答
Locality Name (eg, city) [Newbury]:Shinjuku ← 市区町村名応答
Organization Name (eg, company) [My Company Ltd]:kinryokai.net ← サイト名応答(なんでもいい)
Organizational Unit Name (eg, section) []: ← 空ENTER
Common Name (eg, your name or your server's hostname) []:mail.kinryokai.net ← メールサーバー名応答※
Email Address []:postmaster@centossrv.com ← 管理者メールアドレス応答

# cd
main.cfの変更、下記のコードのコメントを取って有効化
# gedit /etc/postfix/main.cf

前略
# SMTPS
smtpd_use_tls = yes
smtpd_tls_cert_file = /etc/pki/tls/certs/mail.pem
smtpd_tls_key_file = /etc/pki/tls/certs/mail.pem
smtpd_tls_session_cache_database = btree:/var/lib/postfix/smtpd_scache

master.cfの変更、下記のコードのコメントを取って有効化
# gedit /etc/postfix/master.cf

前略
smtps     inet  n       -       n       -       -       smtpd
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING
後略

参考URLではtlsmgrのコメントを取っていましたが、デフォルトで外れていました。
ここで、postfixと念のためdovecotも再起動
# service postfix restart
# service dovecot restart
再度一連のテストをやって確かめておく。

カテゴリー: 省エネサーバー製作(CentOS 6) | コメントする

32:メールサーバーの設定:dovecot

参考URL:http://e-garakuta.net/techinfo/doku.php/linux/postfix-virtual
mysql関連のドライバーのインストール
php-imapとdovecot-mysqlをインストールしておきます。
/etc/dovecot/conf.dにある設定ファイルを設定していく
# gedit /etc/dovecot/conf.d/10-auth.conf

変更箇所のみ記載
disable_plaintext_auth = no ← プレーンテキストのパスワードを扱うので no に変更
auth_mechanisms = cram-md5 plain login ← 右辺変更
#!include auth-system.conf.ext ← システムの認証は使わないのでコメントアウト
!include auth-sql.conf.ext ← mysqlで認証するので

# gedit /etc/dovecot/conf.d/10-mail.conf

変更箇所のみ記載
mail_location = maildir:/Mail/%d/%n ← 右辺の変更、これはドメイン/ユーザー名
first_valid_uid = 10000
first_valid_gid = 10000

maildir:/Mail/%d/%nの最後を%uにするとメアドになる。postfixadminで設定したものと合わせる事
# gedit /etc/dovecot/conf.d/10-master.conf

変更箇所のみ記載
service auth {
中略
  # Postfix smtp-auth
  unix_listener /var/spool/postfix/private/auth { ←コメントを外す
    mode = 0666 ←コメントを外す
  } ←コメントを外す

# gedit /etc/dovecot/conf.d/20-imap.conf

変更箇所のみ記載
imap_client_workarounds = delay-newmail tb-extra-mailbox-sep ← コメントを外す

# gedit /etc/dovecot/conf.d/20-pop3.conf

変更箇所のみ記載
pop3_client_workarounds = outlook-no-nuls oe-ns-eoh ← コメントを外す

dovecot-sql.conf.extの作成
/usr/share/doc/dovecot-2.0.9/example-config/にサンプルがあります。
# gedit /etc/dovecot/dovecot-sql.conf.ext

driver = mysql
connect = host=localhost dbname=postfix user=postfix password=xxxxxxxx
default_pass_scheme = PLAIN
user_query = select concat('/Mail/', maildir) as home, 10000 as uid, 10000 as gid FROM mailbox WHERE username = '%u' AND active = '1';
password_query = SELECT password FROM mailbox WHERE username = '%u' AND active = '1';

dovecotをスタートする
# service dovecot start
# chkconfig dovecot on
やっと終わったので次はテストと暗号化を行う

カテゴリー: 省エネサーバー製作(CentOS 6) | コメントする

31:メールサーバーの設定:postfix

参考URL:http://e-garakuta.net/techinfo/doku.php/linux/postfix-virtual
今まではlocalのメールはaliasesでkinryokai.netに転送出来ていましたが。localメールもvirtualを使用するようにしたので、転送出来なくなりますので、localのメールはISPのメアドに転送するようにします。
私はメールソフトはthunderbirdを使用しておりますので、フィルターの設定で、そのサーバー用のディレクトリーを設定していますので問題はありません。
# gedit /etc/aliases

前略
root: ISPのメアド

# newaliases
次にvirtual専用のユーザーを作ります
# groupadd -g 10000 vuser
# useradd -g vuser -u 10000 -s /sbin/nologin vuser
*postfixの設定ファイルの編集(抜粋)
# gedit /etc/postfix/main.cf

変更箇所のみ
myhostname = mail.kinryokai.net ← 自分のホスト名
mydomain = kinryokai.net ← 自分のドメイン
myorigin = $mydomain ← 変更
inet_interfaces = all ← 変更
inet_protocols = ipv4 ← ipv4しか扱わない
mydestination = ← 右辺は必ずブランク
home_mailbox = Maildir/ ← #を取り有効化
header_checks = regexp:/etc/postfix/header_checks ← #を取り有効化
smtpd_banner = $myhostname ESMTP unknown ← #を取り右辺変更
#ここから下を追記
message_size_limit = 52428800
mailbox_size_limit = 9663676416
virtual_mailbox_limit = 9663676416

disable_vrfy_command = yes
smtpd_helo_required = yes
smtpd_sender_restrictions = reject_unknown_sender_domain

# Virtual Domains with MySQL
#local_transport = local
local_transport = virtual
#virtual_transport = virtual :デフォルト見たい
virtual_mailbox_base = /Mail
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
#virtual_alias_domains = $virtual_alias_maps :デフォルト見たい
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_minimum_uid = 10000
virtual_uid_maps = static:10000
virtual_gid_maps = static:10000

# SMTP AUTH
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_local_domain = $myhostname
smtpd_client_restrictions =
    permit_mynetworks,
    reject_non_fqdn_sender,
    reject_non_fqdn_recipient,
    reject_unknown_client,
    reject_rbl_client all.rbl.jp,
#    reject_rbl_client zen.spamhaus.org,
#    reject_rbl_client bl.spamcop.net,
    check_client_access hash:/etc/postfix/access,
    permit
smtpd_recipient_restrictions = 
    permit_mynetworks,
    permit_sasl_authenticated,
    permit_auth_destination,
    reject_unauth_destination,
    reject

# SMTPS
#smtpd_use_tls = yes
#smtpd_tls_cert_file = /etc/pki/tls/certs/mail.pem
#smtpd_tls_key_file = /etc/pki/tls/certs/mail.pem
#smtpd_tls_session_cache_database = btree:/var/lib/postfix/smtpd_scache

SMTPSは全部コメントアウトしていますが、テスト後有効にするために記入して置きます。reject_rbl_clientはあまり多くすると遅くなるので、様子を見ながら有効化します。
smtpd_client_restrictions=に check_client_access hash:/etc/postfix/access,がありますが、デフォルトでは全てコメントアウトして存在しています。書式は文中に記入がありますが
IPアドレス REJECT で拒否するIP
IPアドレス OK でアクセプトするIPです。
又、IPを 1.2.3 のように記入すればIPレンジになります。
運用後に設定すればいいでしょう。

 *mysql関連の三つのファイルを作成
# gedit /etc/postfix/mysql_virtual_alias_maps.cf

user = postfix
password = xxxxxxx
hosts = localhost
dbname = postfix
table = alias
select_field = goto
where_field = address

# gedit /etc/postfix/mysql_virtual_domains_maps.cf

user = postfix
password = xxxxxxx
hosts = localhost
dbname = postfix
table = domain
select_field = domain
where_field = domain
additional_conditions = and active = '1'

# gedit /etc/postfix/mysql_virtual_mailbox_maps.cf

user = postfix
password = xxxxxxx
hosts = localhost
dbname = postfix
table = mailbox
select_field = maildir
where_field = username

header_checksの編集
# gedit /etc/postfix/header_checks

/^From:.*<#.*@.*>/ REJECT
/^Return-Path:.*<#.*@.*>/ REJECT

を最後にでも追記
main.cfに check_client_access hash:/etc/postfix/access, と設定しているので、そのDBを作ります。
# postmap /etc/postfix/access
このアクセスリストの記入方法はhttp://www.postfix-jp.info/trans-2.2/jhtml/access.5.htmlに説明があります。自分でこのリストを変更したら、必ず上記のコマンドでDBを更新して置きます。
次はdovecotの設定です

カテゴリー: 省エネサーバー製作(CentOS 6) | コメントする

30:メールサーバーの設定:postfixadmin

参考URL:http://e-garakuta.net/techinfo/doku.php/linux/postfix-virtual
http://sourceforge.net/projects/postfixadmin/files/latest/downloadから最新版のpostfixadminをダウンロード(2014-06-04現在はpostfixadmin-2.91.tar.gz)
ダウンロードしたディレクトリーに移り
# tar zxvf postfixadmin-2.91.tar.gz
出来たディレクトリーを自分のWEBのルートにコピーし、名前をpostfixadminに変更しておく。
mysqlにデーターベースを作り、パスワードなどを設定
# mysql -u root -p
パスワードを入力後
mysql> CREATE DATABASE postfix;
mysql> CREATE USER ‘postfix’@’localhost’ IDENTIFIED BY ‘パスワード’;
mysql> GRANT ALL PRIVILEGES ON `postfix` . * TO ‘postfix’@’localhost’;
mysql> quit
注:ある時テスト中に CREATE USER をするとエラーが出た

ERROR 1396 (HY000): Operation CREATE USER failed for 'postfix'@'localhost'

これはpostfix userをした後に行ったら出たエラー。ここに理由があった。ここによるとdeleteしただけでは完全に消去されず、DROP USER をするとよい。
次にインストールしたpostfixadminの下にあるconfig.inc.phpの設定(変更箇所のみ抜粋)

$CONF['configured'] = true; ← trueに変更
$CONF['default_language'] = 'ja'; ← jaに変更
$CONF['database_password'] = '設定したパスワード';
$CONF['encrypt'] = 'cleartext'; ← cleartextに変更
$CONF['show_password'] = 'YES'; ← YESに変更
$CONF['page_size'] = '50'; ← 50に変更
$CONF['default_aliases'] = array (
    'abuse' => 'abuse@kinryokai.net', ← ドメイン部分を変更
    'hostmaster' => 'hostmaster@kinryokai.net', ← ドメイン部分を変更
    'postmaster' => 'postmaster@kinryokai.net', ← ドメイン部分を変更
    'webmaster' => 'webmaster@kinryokai.net' ← ドメイン部分を変更
$CONF['aliases'] = '0'; ← 0に変更
$CONF['mailboxes'] = '0'; ← 0に変更
$CONF['maxquota'] = '0'; ← 0に変更
$CONF['domain_quota_default'] = '0'; ← 0に変更
$CONF['vacation_domain'] = 'autoreply.kinryokai.net'; ← ドメイン部分を変更
$CONF['header_text'] = ':: kinryokai.net ::'; ← 右辺を変更
$CONF['footer_text'] = 'Return to kinryokai.net'; ← ドメイン部分を変更
$CONF['footer_link'] = 'http://kinryokai.net'; ← ドメイン部分を変更
$CONF['emailcheck_resolve_domain']='NO'; ← NOに変更
$CONF['create_mailbox_subdirs_prefix']=''; ← ""に変更

保存後ブラウザから localhost/postfixadmin/setup.php にアクセスすると
Error: Smarty template compile directory templates_c is not writable.
Please make it writable.
If you are using SELinux or AppArmor, you might need to adjust their setup to allow write access.

Warning: Depends on: IMAP functions – NOT FOUND
To install IMAP support, install php5-imap
Without IMAP support, you won’t be able to create subfolders when creating mailboxes.
と 二つのエラーが表示された。一つ目はtenplates_cが書ける様になっていないと。又SELINUX等を使っていたら調整が必要だと。 SELINUXは使っていないので、書き込めるようにするが、この際グループも変更しておこう。pwdをWEBのルートのディレクトリーに変更したら
# chown -R .apache postfixadmin
# chmod 770 postfixadmin
二つ目はphp5-imapをインストールしろとあるが、CentOSは
# yum install php-imap
変更したら再度アクセス、すると画面1が表示される。下の方にある Change setup password の下のパスワードのBOXは config.inc.php に設定するパスワードだが入力後は暗号化された分が表示される。
設定したいパスワードを2ヶ所に入れ、generate pasword hash をクリックすると
$CONF[‘setup_password’] = ‘ホニャララ’;
と表示がある筈。
config.inc.php にある $CONF[‘setup_password’] = ‘changeme’; のchangemeの代わりにホニャララを設定し再度アクセスすると、画面2が表示されます(画面上部はカッとしてあります)
Setup password には今設定したパスワード、管理者にはメアドを設定しますが、メールサーバーはまだ出来ていませんのでISPのメアドでも入れ、パスワードを2回入力後、 管理者追加をクリックします。再度同じような画面が表示されますが、これはさらに管理者を追加出来る為です。又、以前のバージョンでは setup.phpは消去しなくてはなりませんでしたが、必要なくなりました。今後の管理者の追加をする時の為にそのままにしておきます。
ブラウザから locahost/postfixadmin にアクセスすると画面3が表示され、今設定した管理者(メアド)とパスワードを入力し、ログインをクリックすると画面4が表示されます。
ここではこれ以上の説明は行いませんが、ドメインやメアドを作っていくのはそんなに難しくありません。それぞれの所をクリックすれば見当がつくと思います。
又、一般ユーザーは自分のパスワードを変更できますので、WEBのURL/postfixadmin/users/login.php を知らせておきます。
postfixadminからドメインやユーザーを削除してもデーターベースからは削除されますが実態であるディレクトリーなどは削除されません。私はドメインやユーザーの削除はほとんど無いので万が一あった場合はマニュアルで削除する事にしましたが、自動で行いたい時はhttp://e-garakuta.net/techinfo/doku.php/linux/postfix-virtualの”削除処理”に方法が記載されています。 又、アクセスした時にお知らせが表示されるのですが、昔は別のファイル(motd.txt, motd-user.txt)で設定していたのですが、これらのファイルはなくなっており、config.inc.php に$CONF[‘motd_user’] = ”;等と設定がり、ここに記入するようになった見たいです。
次はpostfixの設定

カテゴリー: 省エネサーバー製作(CentOS 6) | コメントする

29:FTPサーバー構築(vsftpd)

vsftpdのインストール
# yum -y install vsftpd
vsftpd設定
# gedit /etc/vsftpd/vsftpd.conf

anonymous_enable=NO ← noに変更
xferlog_file=/var/log/vsftpd.log ← #を取り、右辺の変更
xferlog_std_format=NO ← noに変更
ascii_upload_enable=YES ← コメントを外す
ascii_download_enable=YES ← コメントを外す
ftpd_banner=Welcome to blah FTP service. ← コメントを外す
chroot_local_user=YES ← コメントを外す
chroot_list_enable=NO ← コメントを外し、右辺を変更
chroot_list_file=/etc/vsftpd/chroot_list ← コメントを外す
userlist_deny=NO ← 追記
ls_recurse_enable=YES ← コメントを外す
以下を最下行へ追加
use_localtime=YES
port_promiscuous=YES
pasv_addr_resolve=NO
pasv_address=192.168.xx.xx ← 自分のIPアドレス
pasv_min_port=60000 ← PASVモード接続時の最小ポート番号
pasv_max_port=60030 ← PASVモード接続時の最大ポート番号
ssl_enable=YES ← SSLの有効化
rsa_cert_file=/etc/pki/tls/certs/vsftpd.pem ← サーバー証明書を指定
force_local_logins_ssl=YES ← ログイン時にSSL接続を強制
force_local_data_ssl=YES ← データ転送時にSSL接続を強制

上記は変更箇所のみリストアップ
port_promiscuous=YESから3行は参考にしたhttp://centossrv.com/vsftpd.shtml とは少し違う。オリジナルではFTPのIPアドレスが牽けるDNSのホスト名を設定するようになっているが、これだとテストをする時に問題がでた。と言う のはテストはLAN内のホストから行ったが、FTPサーバーが他に動いていたので、ルーターの設定は動いているFTPサーバーのIPにフォワードしてい る。当然DNSが返して来るIPはグローバルIPなのでルーターに着てもテスト中のFTPサーバーでは無く、動いている現行のFTPサーバーに行ってしま う。上記の設定のようにすれば同じ状態も問題ない。
ホームディレクトリより上層へのアクセスを許可しないユーザの登録
# echo ホームしかアクセスさせないユーザー名 >> /etc/vsftpd/chroot_list
ホームディレクトリより上層へのアクセスができないユーザのタイムスタンプを日本時間にする
新規ユーザ対処
# mkdir /etc/skel/etc
# cp /etc/localtime /etc/skel/etc/
既存ユーザ対処
# gedit localtimset

#!/bin/bash
for user in `ls /home`
do
   id $user > /dev/null 2>&1
   if [ $? -eq 0 ]; then
        grep $user /etc/vsftpd/chroot_list > /dev/null 2>&1
        if [ $? -ne 0 ] && [ ! -f /home/$user/etc/localtime ]; then
            mkdir -p /home/$user/etc
            cp /etc/localtime /home/$user/etc
            echo $user
        fi
   fi
done

localtimeセットアップスクリプト実行
# sh localtimset
localtimeセットアップスクリプト削除
# rm -f localtimset
FTPサーバーへのアクセスを禁止するユーザの登録
# echo 禁止するユーザー名 >> /etc/vsftpd/ftpusers
サーバー証明書作成
# cd /etc/pki/tls/certs/
# make vsftpd.pem

前略
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:Tokyo
Locality Name (eg, city) [Default City]:Ota-ku
Organization Name (eg, company) [Default Company Ltd]:kinryokai.net
Organizational Unit Name (eg, section) []:空Enter
Common Name (eg, your name or your server's hostname) []:ftp.kinryokai.net
Email Address []:root@kinryokai.net

ホームディレクトリへ戻る
# cd
vsftpd起動
# service vsftpd start
# chkconfig vsftpd on
FTPで使うportを開ける(tcp21, パッシブ用 tcp 60000:60030,このポートは”サーバー制作 : 8:ファイアウォール構築(iptables)”で設定している)
/root/iptables.sh の設定と外部から受け付けるため、マイグレーション時にルーターのポートもこのホストにフォワードする
アクセス制限は外部からこのWEBにFTPでアップする必要がある複数のユーザーがおり、特定するのが難しいためアクセス制限は行っていません。
*************
このFTPに接続するクライアントの設定
テストの為にこのサブホストの親ホスト(同じCenOS)にFTPクライアントをインストールします。
# yum -y install filezilla ←この時EPELのレポジトリーを有効にしておく必要があります。
こ れでアプリケーション→インターネット→FileZilla が出来ていますので、クリックし、ファイル→サイトマネージャーをクリックしますと図の様にサイトマネージャーが開きますので、赤線の所を設定していきま す。今は実験段階なのでホスト名にはIP(一部伏せてあり)を設定しています。一般以外のタブはデフォルトでもOKでしたが、転送設定タブの転送モードは パッシブにしておいた方がいいかも。
*************
ここからはvsftpを入れたサーバーの設定
実は私自身頭がスパゲッティーになった部分があり、一つ目は暗号化の問題。FileZillaの設定で
sftpはSSHを使いFTPにアクセス、だからSSHにアクセス出来るユーザーのみ可能、(OSへのログインを許可しなければならないと思う)
fptで”明示的なFTP over TLSが必要”はFTPでTLSを使い(この設定を使用)ftpポートの21にアクセスする。(OSへのログインを不許可でも可)
ftpで”暗黙のFTP over TLSが必要”はFTPでTLSを使い、sftpポートの990にアクセスすると思う。(OSへのログインを不許可でも可)
これらはFileZillaのポートの設定をブランクにした場合。
次はlogの関連
http://www.nina.jp/server/redhat/vsftpd/vsftpd.conf.htmlのvsftpd の設定(ログ)にわかりやすい表がありますので見ておいて下さい。
次ににユーザーのリスト関係を整理しておきます。
1:/etc/vsftpd/ftpusers に設定してあるユーザーはFTPサーバーの設定に関わらずアクセスが認められない
2:設定に userlist_deny=NO なら、設定してあるユーザーはアクセスが認められるユーザー
3:設定に userlist_deny=YES なら、設定してあるユーザーはアクセスが認められないユーザー但し、ftpusersに設定すればいいので、これは意味が無いと思う。
上記の設定を施せばデフォルトの設定にある”local_enable=YES”はNOにしてもいいのかもと思い、やってみると見事にエラー

レスポンス:	500 OOPS: vsftpd: both local and anonymous access disabled!

次はchrootの関係
http://www.aconus.com/~oyaji/ftp/vsftpd_rpm.htmの11。アクセスディレクトリの制限 ( chroot )に見やすい表がありますので参考にして下さい。私の設定は上記ですがこの設定ですと chroot_list に記入するユーザーはホームページ以下にしかアクセスできなくなり、そのホームページをアクセスを許すWEB内のdirectoryにしておけばよい。
FTPサーバーだけにアクセス可能なユーザーの作成は -d でアクセスさせるWEBのdirectory -s /sbin/nologin でシステムへのログインを許可しない。
例:useradd -d /path/to/web/directory -s /sbin/nologin ユーザー名 で作成後 passwd ユーザー名でパスワードを設定する
最後に少し問題があります。その問題とは
1: このテストしているFTPサーバーとは物理的に別ですが同じLAN内のCentOS6.5(KVMを使った親ホスト)からは問題なく、又同じLAN内にあ るwindows7からも、外部からアクセスした(ルーター越え、もちろんこの時のルーターの設定はこのテストサーバーにフォワードしていま す)Windows7も問題ありませんが、
2:アクセスできたKVM下のサブホストやこのFTPサーバーの親ホストである KVM(CentOS6.5)からはエラーが出て接続できません。これは暗号化を外せばアクセス出来るので、LAN内でもあり、これらのホストは暗号化を していません。(force_local_logins_ssl= と force_local_data_ssl= はNOにします)そのエラーは

11:06:29	状態:	TLS を初期化しています...
11:06:29	エラー:	GnuTLS error -50 in gnutls_priority_set_direct: The request is invalid.
11:06:29	エラー:	TLS の初期化に失敗しました.
11:06:29	エラー:	サーバに接続できませんでした。

正常につながるときはTLSの初期化後は状態: 証明書を検証中になります。アンインストールしたり色々やりましたが出来ませんでした。
つ ながっているホストもあるので、FTPサーバーの問題では無く、クライアントの方だと思うのですが、どこをいじればいいのかさっぱり?もちろんftpクラ イアントのバージョンはwindows7は3.8.1 CentOSは全て3.7.3で同じです。google先生に聞いたら、ここにあったが、パッチを入れるといいとあるが、ソースからやらないといけないのでやめた。あと他のWEBでssl_cipher=HIGHと入れるとよいとありましたが、私の場合は入れても出来ませんでした。
2014-08-04追記:このエラーはGnuTLSの問題だと思います。そこでGnuTLSのバージョンを調べると
OKなホスト:gnutls.x86_64 2.8.5-10.el6_4.2
ダメなホスト:gnutls.x86_64 2.8.5-14.el6_5
で した。OKなホストはCentOSの6.4でGnuTLSのバージョンは2.8.5-10だった。この辺が問題みたいだが、gnutlsの 2.8.5-10のありかが分からない。ちなみにVSFTPDが動いているホストの分はダメなホストと同じ2.8.5-14.el6_5です
又、FTP用のバーチャルユーザーを作る方法もありますが、一部のユーザーでエラーが出て、うまくいきませんでした。エラーは

状態:	TLS/SSL 接続が確立されました.
レスポンス:	331 Please specify the password. 
コマンド:	PASS ********* 
エラー:	GnuTLS error -8: A record packet with illegal version was received.

接続は出来るがパスワードでパケットがイリーガルバージョンだとはねられている。他のユーザーは問題ないし、パスワードも何回見ても間違っていないし、もし 違って入れば、エラーメッセージが違うと思う。google先生に聞いてもGnuTLS error -8は出て来ない。
2014-07-28追記:
今まではスタンドアローンでvsftpを走らせていましたが、FTPでデーターが転送されるのはそんなに多くないので、xinetd 経由でRQがあってからvsftpを走らすようにします。
CentOSではデフォルトでxinetdはインストールされ無いのでyumからインストールして下さい。私は新省エネサーバー制作 : 13:VNCサーバーの設定でインストール済みです。まずはvsftpdを止め、xinetdの設定ファイルを作ります。
# service vsftpd stop
# chkconfig vsftpd off
# gedit /etc/xinetd.d/vsftpd

service ftp {
       socket_type    = stream
       wait           = no
       user           = root
       server         = /usr/sbin/vsftpd
       server_args    = /etc/vsftpd/vsftpd.conf
       nice           = 10
       disable        = no
       flags          = IPv4
}

CentOSの場合は /etc/services に

ftp-data        20/tcp
ftp-data        20/udp
# 21 is registered to ftp, but also used by fsp
ftp             21/tcp
ftp             21/udp          fsp fspd

と設定済みなので上記の設定ファイルだけでOKです。
設定を変えたのでxinetdを再起動
# service xinetd restart
これでFTPクライアントからやるとエラー

状態:	接続を確立しました, ウェルカム メッセージを待っています... 
エラー:	サーバによって接続が閉じられました

そうだ、vsftpd.confを変更するのを忘れてた。

listen=NO ← YESからNOに変更

これでつながった。

カテゴリー: 省エネサーバー製作(CentOS 6) | コメントする

28:Apacheアクセスログ解析(AWStats)のインストール

http://www.starplatinum.jp/awstats/awstats70/を参考にしました。このページの “AWStats Ver.7.0完全日本語版のダウンロード” からダウンロードし、解凍をしておきます。(/Download/Awstats/AWStats70_Jpn に解凍)
私はvirtualhostで数個のWEBを動かすつもりなのでプログラム(.pl)は共通に出来るが、設定ファイルは独立していなければならない。と言う事で
データーとプログラムは /webdata/awstatsに置く。設定ファイルは /etc/awstats/awstats.www,kinryokai.net.conf とする
プログラムをコピーしrenameする。
# cp -pr /Download/Awstats/AWStats70_Jpn/wwwroot/cgi-bin/ /webdata/awstats
icon関連をコピーしますが、私はデフォルト(/var/www/icons)では無く /webdata/icons にしていますので
# cp -pr /Download/awstats/AWStats70_Jpn/wwwroot/icon/ /webdata/icons/
後で、必要になるファイルを/usr/share/perl5にコピー
# cp /Download/awstats/AWStats70_Jpn/tools/awstats_updateall.pl /usr/share/perl5/
# cp /Download/awstats/AWStats70_Jpn/tools/awstats_buildstaticpages.pl /usr/share/perl5/
awstatsを動かすにはCustomlog をcombined にしなくてはならないが、前の /etc/httpd/conf.d/virtualhost.confの設定で
CustomLog logs/kinryokai_access_log combined env=!no_log にしているので問題ない。
/etc/awstats/awstats.www,kinryokai.net.conf の設定をしますがサンプルがありますのでそれを変更します。
# mkdir /etc/awstats
# mv /webdata/awstats/awstats.model_jp.conf /etc/awstats/awstats.www.kinryokai.net.conf
同じ場所にある awstats.model.confは使いませんので削除しておきます。
# gedit /etc/awstats/awstats.www.kinryokai.net.conf

LogFile="/var/log/httpd/kinryokai_access_log"
SiteDomain="www.kinryokai.net"
HostAliases="localhost 127.0.0.1 REGEX[kinryokai\.net$]"
DirData="/webdata/awstats"
DirCgi="/awstats"
DirIcons="/icon"

上記は変更した部分のみ書き出してあります。
次に jcode.pm をインストールしますが、yumから出来ます。
# yum -y install perl-Jcode
で、/usr/share/perl5/Jcode.pm にインストールされた。
と、ここで困ったことになった。と言うのは私はプログラムはvirtualhost全部で同じプログラム(perl)を使おうとしているが、utf8_decode.plの中にホスト名前を設定する所がある。そうするとプログラムが共通にならない。
utf8_decode.pl をハックして、ホスト分のチェックをするようにしてもいいが(実は私はperlをあまり理解していないので大変そう)、この数年のWEBのログを見てみる と(完全に見た訳ではないが)全角で記録されている部分が見あたらなった。このutf8_decode.plと言うものは(多分)ログに全角がある時に使 うと思うので、私はこの変換をしないことにした。
と言う事はawstatsだけならJcode.pmはインストールしなくてもよかったが、わざわざ消すこともないのでそのままにする。/etc/awstats/にあるconfファイルはvirtualhost分用意をするので、プログラムは共通化出来る。
なので、http://www.starplatinum.jp/awstats/awstats70/の3、4、5はやらない。
今はテストでapacheを動かしているので、ログは無いに等しいので、現在アクティブなWEBからログをコピーする。前回はNFSでコピーしたが、今回はrsyncでコピーする。
まず、/etc/rsyncd.conf の修正

[ht-log]
	  path         = /var/log/httpd
          auth users   = root
          secrets file = /etc/rsyncd.secrets
          read only    = no

を最後に追加し、CentOSはxinetd経由で動かしているので、
# service xinetd restart
*****************
ここからはコピー元のホストで
# rsync -av –delete –password-file=/etc/rsync.passwd /var/log/httpd/ rsync;//コピー先のIP/ht-log
(; は 本当は : )でデーターをコピーします。
*****************
ここで設定中のホストに戻ります。
私の場合はサーバーのマイグレーションなので、既にawstatsのデーターは元のサーバーで出来ており、これはすでにrsyncで/webdataをコピーした時に終わっている。
初期データーの作成はhttp://centossrv.com/awstats.shtmlの(1)AWStatsデータベース初期作成を参考にしてください。
/etc/httpd/conf.d/awstats.confに

Alias /icon/ /webdata/icons/
ScriptAlias /awstats/ /webdata/awstats/
<Directory /webdata/awstats/>
	DirectoryIndex awstats.pl
	Options ExecCGI
	order deny,allow
	deny from all
	allow from all
	#allow from 192.168
</Directory>

と記入し、httpd を再起動して設定ファイルを読み込ませる。この設定はすべてのホストから見れてしまう設定になっています。
テ ストをしたいが、www.kinryokai.net としてもアクティブなWEBを参照し、このテストのWEBには来ないので、/etc/hosts の “192.168.xxx.xxx www.kinryokai.net www” のIPをこのテスト用のサブホストのIPに変更し、ブラウザで www.kinryokai.net/awstats/awstats.pl にアクセスすると表示される筈.
ここからはまだ確認が終わっておりませんので、間違えがあるかも
httdのログの内容をawstatsに反映させてからロテイトするように、/etc/logrotate.d/httpd を

/var/log/httpd/*log {
    missingok
    notifempty
    sharedscripts
    prerotate ←ここから
        `/usr/share/perl5/awstats_updateall\.pl` now -confdir="/etc/awstats" \
        -awstatsprog="/webdata/awstats/awstats\.pl >/dev/null
    endscript ←ここまで追記
    #delaycompress ←圧縮はしないのでコメントアウト
     postrotate
        /sbin/service httpd reload > /dev/null 2>/dev/null || true
    endscript
}

1時間毎にawstatsを更新する為に /etc/cron.hourly/awstats を作成

/usr/share/perl5/awstats_updateall.pl now -confdir="/etc" \
awstatsprog="/webdata/awstats/awstats.pl" >/dev/null

perlプログラムへのパスは各自の環境に合わせて下さい。
静的なHTMLのデータの作成
まずは/etc/httpd/conf.d/awstats.conf の最後に

Alias /awreport /webdata/awreport/kinryo

1日1回データーを作ります。そのスクリプトは

#!/bin/sh

site=$1
DirReport=$2

reportbuild() {
    # AWStatsデータベース更新中断時ロックファイル残存対処(ここから)
    if [ -f /tmp/awstats.$site.lock ]; then
        ps -p `cat /tmp/awstats.$site.lock |awk '{print $6}'`
        if [ $? -ne 0 ]; then
            echo /tmp/awstats.$site.lock removed >&2
            rm -f /tmp/awstats.$site.lock 
        fi
    fi
    # AWStatsデータベース更新中断時ロックファイル残存対処(ここまで)
    /usr/share/perl5/awstats_buildstaticpages.pl \
    -awstatsprog=/webdata/awstats/awstats.pl\
    -config=$site -update -lang=jp -dir=$DirReport \
    -year=$YEAR -month=$MONTH -builddate=$YEAR$MONTH
    # 個別ページリンク切れ対処(ここから)
    sed -i "s/href=\"${site}/href=\"awstats.${site}/g" \
    $DirReport/$YEAR$MONTH.html
    # 個別ページリンク切れ対処(ここまで)
    if [ "$YEAR$MONTH" = $(date +%Y%m) ]; then
        mv $DirReport/awstats.$site.$YEAR$MONTH.html $DirReport/index.html
    else
         mv $DirReport/awstats.$site.$YEAR$MONTH.html $DirReport/$YEAR$MONTH.html
    fi
}

ls $DirReport/* > /dev/null 2>&1
if [ $? -eq 0 ]; then
    YEAR=`date --date '1 days ago' +%Y`
    MONTH=`date --date '1 days ago' +%m`
    for site in `ls -l /etc/awstats |grep -v ~$|cut -d' ' -f 11|sed -e '/^$/d'|cut -d . -f 2-4`
					# ↑ 全virtual host名を抽出する
    do
         DirReport=/webdata/awreport/`echo $site|cut -d . -f 2`
         reportbuild
    done
else
    DirAwstats=`grep ^DirData /etc/awstats/awstats.$site.conf|awk -F= '{print $2}'|tr -d \"`
    				# ↑ awstatsのデーターがあるdirectoryを抽出
    for log in `ls $DirAwstats/awstats*.$site.txt`
    do
        YEAR=`echo $log|cut -d / -f 6|cut -d . -f 1|sed -e 's/awstats..\([^ ]*\)/\1/p' -e d`
        MONTH=`echo $log|cut -d / -f 6|cut -d . -f 1|sed -e 's/awstats\([^ ]*\)..../\1/p' -e d`
        reportbuild
    done
fi

私の環境はvrtualhostが5個も走っているので、色々参考に考えましたが、まだ検証していないので、このスクリプトはまったく自信がありません。多分数ヶ所間違えていると思います。検証をしたら、この一文を取ります。
これをawstatsreport.shとして/rootにしまい、パーミッションを変更し、毎日零時にHTML作成スクリプトを走らせます。
# chmod 700 awstatsreport.sh
# echo “00 00 * * * root /root/awstatsreport.sh > /dev/null” > /etc/cron.d/awstatsreport
最後にhttp://centossrv.com/referer_spam.shtmlを参考にリ ファラースパムの設定をしておくが、virtual webが5つも動いており、図部手のwebに設定すると時間がかかりそうなので、apacheとawstatsのログからリファラースパムを除去するスク リプトは作っておきません。スパムを発見したら、/etc/httpd/conf.d/referer_spam.confに追記し、apacheを reloadすれば以降は記録されません。また追加したスパムは

SetEnvIfNoCase Referer (\.|/)sportliga\.net no_log
SetEnvIfNoCase Referer (\.|/)sugarkun\.com no_log
SetEnvIfNoCase Referer (\.|/)lorazepam\.pw no_log
SetEnvIfNoCase Referer (\.|/)alprazolam\.pw no_log
SetEnvIfNoCase Referer (\.|/)blesktatu\.ru no_log
SetEnvIfNoCase Referer (\.|/)tyudon\.com no_log
SetEnvIfNoCase Referer (\.|/)bag77\.ru no_log
SetEnvIfNoCase Referer (\.|/)mxhack\.ru no_log
SetEnvIfNoCase Referer (\.|/)error404\.000webhost\.com no_log
SetEnvIfNoCase Referer (\.|/)berrymall\.ru no_log
SetEnvIfNoCase Referer (\.|/)trazodone\.pw no_log
SetEnvIfNoCase Referer (\.|/)buyviagraonlineprof\.com no_log
SetEnvIfNoCase Referer (\.|/)fluoxetine\.pw no_log
SetEnvIfNoCase Referer (\.|/)randecan\.com no_log
SetEnvIfNoCase Referer (\.|/)telesvoboda\.ru no_log
SetEnvIfNoCase Referer (\.|/)kochanelli\.com no_log
SetEnvIfNoCase Referer (\.|/)alkorpkf\.ru no_log
SetEnvIfNoCase Referer (\.|/)pornotubexxx\.name no_log
SetEnvIfNoCase Referer (\.|/)chimiver\.info no_log
SetEnvIfNoCase Referer (\.|/)zolotoy-lis\.ru no_log
SetEnvIfNoCase Referer (\.|/)lovecs\.ru no_log

です。

カテゴリー: 省エネサーバー製作(CentOS 6) | コメントする

27:Webサーバー間通信内容圧縮(mod_deflate)

ダイジェスト認証に関して、http://blogs.yahoo.co.jp/mazbeer/309776.htmlにおもしろい記事を見つけた。一度見てみるといい。
本題に入ろう。mod_deflateはデフォルトで導入されているので、その設定ファイルと作る
# gedit /etc/httpd/conf.d/deflate.conf

<Location />
 # DEFLATEの有効化
AddOutputFilterByType DEFLATE text/html text/plain text/xml

# 送信先ブラウザがNetscape 4.xの場合はtext/htmlのみ圧縮
BrowserMatch ^Mozilla/4 gzip-only-text/html

# 送信先ブラウザがNetscape 4.06-4.08の場合は圧縮しない
BrowserMatch ^Mozilla/4\.0[678] no-gzip

# 送信先ブラウザがMSIEの場合は全て圧縮する
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html

# プロキシサーバーが圧縮未対応ブラウザへ圧縮ファイルを送信しないようにする
Header append Vary User-Agent env=!dont-vary
</Location>

設定の反映
# service httpd reload

カテゴリー: 省エネサーバー製作(CentOS 6) | コメントする