参考URL:http://centossrv.com/postfix-virtualdomain.shtml
バーチャルドメインとして172club.net を追加する。
/etc/postfix/virtual の最初に下記を追記
172club.net anything
@172club.net @kinryokai.net
Postfixバーチャルドメイン設定反映
# postmap /etc/postfix/virtual
/etc/postfix/main.cf の設定変更、下記を最後に追記
virtual_maps = hash:/etc/postfix/virtual
Postfix再起動
# service postfix restart
このサブホストの親ホストで簡易DNSとしてdnsmasqが動いているので、親ホストの /etc/hostsに172club.netを追記
192.168.xxx.xxx mail.kinryokai.net mail.172club.net mail
親ホストでdnsmasqを再起動
# service dnsmasq restart
メールソフトでバーチャルドメインのメールをテスト。この状態ではメイルサーバーが動いているlinuxのユーザーが両ドメインに属することになる。(例:test@kinryokai.netとtest@172club.netは同じユーザーである)
参考URL:http://www.server-world.info/query?os=CentOS_6&p=mail&f=4
SSLの証明書をhttp://www.server-world.info/query?os=CentOS_6&p=sslを参考にして設定をします。
/etc/postfix/main.cfの変更、最後に下記を追記
smtpd_use_tls = yes
smtpd_tls_cert_file = /etc/pki/tls/certs/server.crt 注:最後のcrtの"t"が抜けていました。2013/3/23
smtpd_tls_key_file = /etc/pki/tls/certs/server.key
smtpd_tls_session_cache_database = btree:/etc/postfix/smtpd_scache
/etc/postfix/master.cf の設定。下記の3行のコメントを解除
smtps inet n - n - - smtpd
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
私はlinuxにアカウントを持っている人はその同じパスワードをメールのパスワードにするため一番下の -o smtpd sasl_auth... のコメントを外しています。
/etc/dovecot/conf.d/10-ssl.confの変更
ssl = yes →コメントの解除
ssl_cert = </etc/pki/tls/certs/server.crt →右辺の変更
ssl_key = </etc/pki/tls/certs/server.key →右辺の変更
psostfix,dovecot の再起動
# service postfix restart
# service dovecot restart
私はメールプログラムとして、thunderbird を使っていますが、その設定で少し迷ったので、その設定値を記入しておく。
サーバー設定の受信はIMAPを使用し、ポートは993、セキュリティ設定の接続の保護は"SSL/TLS"、認証方式は"通常のパスワード認証”
SMTPサーバはポート:465、接続の保護は"SSL/TLS"、認証方式は"通常のパスワード認証”、ユーザ名はOSにログイン出来るユーザ名
とした。
2012年10月2日全面的に書き直し。参考URL
postfix:http://www.server-world.info/query?os=CentOS_6&p=mail&f=1
dovecot:http://www.server-world.info/query?os=CentOS_6&p=mail&f=2
方針はとりあえずOSのユーザをメアドにし、パスワードはOSと同じ、SMTP Authにする。
postfixはインストールされているので、まずは /etc/postfix/main.cfの設定から
queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
mail_owner = postfix
myhostname = mail.kinryokai.net
mydomain = kinryokai.net
myorigin = $mydomain
inet_interfaces = all
inet_protocols = all
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
unknown_local_recipient_reject_code = 550
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
home_mailbox = Maildir/
header_checks = regexp:/etc/postfix/header_checks
smtpd_banner = $myhostname ESMTP unknown
debug_peer_level = 2
debugger_command =
PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
ddd $daemon_directory/$process_name $process_id & sleep 5
sendmail_path = /usr/sbin/sendmail.postfix
newaliases_path = /usr/bin/newaliases.postfix
mailq_path = /usr/bin/mailq.postfix
html_directory = no
manpage_directory = /usr/share/man
sample_directory = /usr/share/doc/postfix-2.6.6/samples
readme_directory = /usr/share/doc/postfix-2.6.6/README_FILES
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
smtpd_recipient_restrictions =
permit_mynetworks
permit_sasl_authenticated
reject_unauth_destination
# size=50MB
message_size_limit = 52428800
# mailbox=1GB
mailbox_size_limit = 1073741824
私は最後のmailbox_size_limitの設定を指定しなかったのでエラーに悩ませれた。これは指定をしないと5120000になっておりmessage_size_limitより小さいのでエラーになっていた。postfixの設定値を調べるには
# postconf →全ての設定値の表示
# postconf -n →デフォルトより変更したもの
エラーが出たらログを調べるという鉄則を忘れ、悩みつづけた自分がいやになった。ちゃんと /var/log/maillog に fatal: main.cf configuration error: mailbox_size_limit is smaller than message_size_limit と書いてある。
2013/02/23追記:今日 mailbox_size_limit = 10737418240 つまり10GBにしたら、Logにfatal: main.cf configuration error: mailbox_size_limit is smaller than message_size_limitと出た。何で?? 多分postfix自体が何かの制限をかけていて10GBのmailboxを受けてけていないと思う。後日調べて見よう。9GBまではOK
mynetworksは設定しなくてもpostconfで調べるとこのサーバーのネットワークレンジが設定してあった。多分postfix自信が調べてくれているのだろう。
/etc/postfix/header_checksの最初に下記を追記。これはアドレスなしのメールを拒否する設定。
/^From:.*<#.*@.*>/ REJECT
/^Return-Path:.*<#.*@.*>/ REJECT
SMTP-Auth設定
# service saslauthd start
# chkconfig saslauthd on
postfixの再スタート (centos 6 はデフォルトでposifixが走っている)
# /etc/rc.d/init.d/postfix restart
dovecotのインストールと設定
# yum -y install dovecot
/etc/dovecot/dovecot.confは変更しないので、/etc/dovecot/conf.d/10-auth.conf の設定
disable_plaintext_auth = no →コメントを外しnoに変更:プレーンテキストも受ける
auth_mechanisms = plain login →loginを追記
/etc/dovecot/conf.d/10-mail.conf の設定
mail_location = maildir:~/Maildir →コメントを外し、右辺を追記
/etc/dovecot/conf.d/10-master.confの設定
# Postfix smtp-auth
unix_listener /var/spool/postfix/private/auth { →コメントを外す
mode = 0666 →コメントを外す
user = postfix →追記
group = postfix →追記
}
dovecotのスタート
# /etc/rc.d/init.d/dovecot start
# chkconfig dovecot on
fierewallの設定を変更して使用するポートを開ける。
私は SMTP:25, SMTPS:465, POP3:110, POP3S:995, IMAP:143, IMAPS:993を開けることにした。
ここでメールソフトthunderbirdでサーバーの設定をしてテスト。thunderbirdの設定は
受信にはpop3でなく、IMAPを使う設定
受信サーバー名:設定したサーバー名
port: 143
ユーザ名: OSに登録しているユーザー名(ドメインは入れない事)
パスワード:OSに登録しているユーザーのパスワード
接続の保護:なし
認証方式:平文
送信(SMTP)サーバー
受信サーバー名:設定したサーバー名
port:25
接続の保護:なし
認証方式:平文
ユーザ名: OSに登録しているユーザー名(ドメインは入れない事)
このサーバーはkvmでサブホストを作っている。親ホストでdnsmasqが簡易DNSサーバーとして動いているので、その親OS上にthunderbirdを使用してメールソフトを設定し、親ホストの /etc/hosts にメールサーバーの設定を書き(192.168.xxx.xx mail.kinryokai.net mail)dnsmasqをリスタートしてthunderbirdがある親ホストでmial.kinryokai.netでメールサーバーが走っているホストを参照出きるようにした。物理的に別のサーバー(仮想化ソフトはXEN)があり、現在、使用中のメールサーバーがあるので、外部とのテストは出来ない。どなたかテストするいいアイデアがあれば教えて下さい。
VSFTPの設定
ここは先生であるhttp://centossrv.com/vsftpd.shtmllに従い設置をします。特に違う所はありません。次にポートを開けます。/root/iptable.shを
# 外部からのTCP21番ポート(FTP)へのアクセスを日本からのみ許可
# ※FTPサーバーを公開する場合のみ
iptables -A INPUT -p tcp --dport 21 -j ACCEPT_COUNTRY
# sh iptables.sh
で変更を有効にしますが、時間が掛かります。
又、前にも触れましたが、phpからmysqlを操作する為に php-mysql が必要ですので、yumからインストールします。次にデフォルトのphpではアップロード出来るファイルが小さすぎますので、/etc/php.ini を
post_max_size = 50M
upload_max_filesize = 50M
date.timezone = Asia/Tokyo
にして50Mバイトまで出来るようにしました。(ついでにtime zoneの設定も入れて置いた.)
そしてFTPかNFSで現用のホスト(XENのdomU)からデーターをコピーしてきます。
WEBのデーター、cgiのDIR、iconもDIR、mysqlのデーターDIR等は前に触れたように全部デフォルトからは変更し、コピーがやり易くなっています。
その際、FTP等に必用なユーザーの設定がこのテスト用のサブホストに無い可能性があり、その場合はユーザーを作るなり、DIRのパーミッションを変更し、つじつまを合わせて下さい。
折角ですからXOOPSのバージョンを上げます。現在は 2.0.16a を使っていますが、2.2系は移行が大変ですので、JPEX系(http://www.xoops-ri.jp/modules/download/)から持ってきます。
ダウンロード後、解凍し出来たDIRのreadme.txtに従って作業すれば問題ありません。私は一度テーマをデフォルトに変更し、アップグレード後に使用しているテーマに戻しました。XOOPSのWEBがvirtualhostで4つ動いていますが、一つのみで、全てのモジュールのアップデート時に”メインメニューファイルへの書き込みに失敗しました”とエラーが出ていましたが、そのまま進み、後日、再度アップデートを試みるとエラーは出ませんでした。
私の場合はmysqlのデーターがutf8で入っており、utf8への変換も面倒なので、各XOOPSのincludeの下に ini_settings.php という名前で
<?php
/**
;Example: If your database character is EUC-JP, it should be utf8.
;Example: If your database character is UTF-8, it should be utf8.
;charcode=utf8
*/
charcode=utf8
?>
保存します。これで各WEBにアクセスすればOKな筈。
新しいページを作りましたのでここを参照してください
mysqlサーバーをインストールします。
# yum -y install mysql-server
mysqlの設定をしますが ( /etc/my.cnf )、私の場合はWEBサーバーのデーターをmysqlにしまってありますが、その移行をスムーズにする為に、デフォルトとは違うdatadirを指定します
[mysqld]
datadir=/webdata/mysql ← 右辺を変更
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
サーバーを起動し、再起動後も有効に
# service mysqld start
# chkconfig mysqld on
私の場合はmysqlのデーターを、現在アクティブなWEBからコピーしたので、パスワードの設定等は既に入っていますが、デフォルトではその設定が必要です。
http://centossrv.com/mysql.shtmlを参考に進めて下さい。
あと、XOOPSで必要になるphp-mysqlもインストールする。
# yum install php-mysql
nfs-utilsは最初からインストールされていたので、/etc/idmapd.conf を設定する。
Domain = kinryokai.net ←コメントを外し、自分のドメインにする。
/etc/exports は
/Download/NfsDir 192.168.xxx.0/24(rw,no_root_squash,no_all_squash)
この意味は、このサブホストの /Download/NfsDir を他のホストから見えるように、アクセスできるホストは192.168.xxx. つまりlocal network からだけ、RWモードで、rootを許可し、そのままの権限でアクセスさせる。
# service rpcbind start
rpcbind を起動中: [ OK ]
# service nfslock start
NFS statd を起動中: [ OK ]
# service nfs start
NFS サービスを起動中: [ OK ]
NFS クォータを起動中: [ OK ]
NFS mountd を起動中: [ OK ]
NFS デーモンを起動中: [ OK ]
とそれぞれのサービスをスタートさせる。
上記はCentos6の時、Centos5は service rpcbind start がservice portmap start になる。
私は今だけ使うので、再起動後に有効にする必要は無いので chkconfig には設定を加えなかった。
ここからはNFSクライアント側の設定
nfs-utils はインストール済みだったので、/etc/idmapd.conf を設定する。
Domain = kinryokai.net ←コメントを外し、自分のドメインにする。
クライアント側で必要なサービスを走らせる。
下記はCentos5の時、Centos6では portmap の代わりに rpcbind と rpcidmapd をstartする。
# service portmap start
portmap を起動中: [ OK ]
# service nfslock start
NFS statd を起動中: [ OK ]
# service netfs start
その他のファイルシステムをマウント中: [ OK ]
# mount -t nfs -o rw web.kinryokai.net:/Download/NfsDir /test1
mount: mount to NFS server 'web.kinryokai.net' failed: System Error: Connection refused.
とエラーが出た。そう言えば web.kinryokai.net を簡易DNSであるdnsmasqが走っているホストの /etc/hosts に設定をしていなかったので、設定後、dnsmasq を再起動するとマウント出来た。
http://www.starplatinum.jp/awstats/awstats70/を参考にしました。このページの "AWStats Ver.7.0完全日本語版のダウンロード” からダウンロードし、解凍をしておきます。(/Download/awstats/AWStats70_Jpn に解凍)
私はvirtualhostで数個のWEBを動かすつもりなのでプログラム(.pl)は共通に出来るが、設定ファイルは独立していなければならない。と言う事で
data DIRは /webdata/awstats/URLごとのDIR/ に置く
プログラム(cgi-bin, .pl)は /webdata/cgi/awstatsに置く。設定ファイルは /etc/awstats/awstats.www,kinryokai.net.conf とする
cgi-bin関係のファイルをコピーしrenameする。
# cp -pr /Download/awstats/AWStats70_Jpn/wwwroot/cgi-bin/ /webdata/cgi/
# mv /webdata/cgi/cgi-bin/ /webdata/cgi/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/cgi/awstats/awstats.model_jp.conf /etc/awstats/awstats.www,kinryokai.net.conf
wwwの次は本当は . でカンマでない(XOOPSが勝手にリンクを張る為)この後も同じでwww.と解釈してください。
同じ場所にある 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/URLごとのDIR"
DirCgi="/awstats"
DirIcons="/icon"
上記は変更した部分のみ書き出してあります。
次に jcode.pm をインストールしますが、
http://blog.96q.org/2008/04/21/jcodepm-install/を参考にインストールしますが、
# perl -MCPAN -e shell としたら、エラーが出た。そういえば cpan2rpm をインストールしていなかった。なので
http://centocsrv.comをみてcpan2rpmをインストールする。途中で
# cpan2rpm --install URI::Find としたら、エラーが出た。
* A newer version of this program is now available. To upgrade
* enter the following command: /usr/bin/cpan2rpm --upgrade
RPM user environment - Your account does not have
permissions to the requisite RPM directory structure.
Try 'cpan2rpm --mk-rpm-dirs=~/rpm' to setup your
environment for non-root package building.
Failing dirs: /root/rpmbuild/SRPMS /root/rpmbuild/BUILD /root/rpmbuild/SOURCES /root/rpmbuild/SPECS /root/rpmbuild/RPMS
色々googleで調べるとJcoeは yum でインストール出きることが分かったので、上のエラーは別の機会にやるとして、肝心のjcode.pmをインストールする
# yum -y install perl-Jcode
で、/usr/share/perl5/Jcode.pm にインストールされた。
と、ここで困ったことになった。と言うのは私はプログラムはvirtualhost全部で同じプログラム(perl)を使おうとしているが、上記WEBによると、utf8_decode.plの中にホスト名前を設定する所がある。そうするとプログラムが共通にならない。
utf8_decode.plをハックして、ホスト分のチェックをするようにしてもいいが(実は私はperlをあまり理解していないので大変そう)、この数年のWEBのログを見てみると(完全に見た訳ではないが)全角で記録されている部分が見あたらなった。このutf8_decode.plと言うものは(多分)ログに全角がある時に使うと思うので、私はこの変換をしないことにした。
と言う事はawstatsだけならcpan2rpmとJcode.pmはインストールしなくてもよかったが、わざわざ消すこともないのでそのままにする。/etc/awstats/にあるconfファイルはvirtualhost分用意をするので、プログラムは共通化出来る。
なので、http://www.starplatinum.jp/awstats/awstats70/の3、4、5はやらない。
今はテストでapacheを動かしているので、ログは無いに等しいので、現在アクティブなWEBからログをコピーする。
ここはNFSでお互い参照出来る様にする。(NFSの設定はここのCentOS 6.3に挑戦 : 16:NFSを設定する。を参照)
ログはNFSの設定で /Download/NfsDir にコピーしたので、これを本来の場所である /var/log/httpd に移し、(この時、ついでにアクティブなWEBのawstatsのデーターも(*.www,kinryokai.net.*)も/webdata/awstats/URLごとのDIRに移して置いた)
AWStatsデータベース初期作成スクリプトを作ります。/root/awstatsinit.sh として下記を記入します。
#!/bin/sh
logfile=`grep ^LogFile /etc/awstats/awstats.$1.conf|sed -e 's/LogFile="\([^ ]*\)"/\1/p' -e d`
# ↑ ログのパスを抽出
for log in `ls $logfile*|sort -r`
do
/webdata/cgi/awstats/awstats.pl -config=$1 -update -logfile=$log
done
/webdata/cgi/awstats/awstats.pl は私の場合、各自の環境に合わせて下さい。
# sh awstatsinit.sh www,kinryokai.net
で更新処理をしますが、ログの量によっては時間がかかります。終わると
Create/Update database for config "/etc/awstats/awstats.www,kinryokai.net.conf" by AWStats version 7.0 (build 1.971)
From data in log file "/var/log/httpd/kinryokai_access_log"...
Phase 1 : First bypass old records, searching new record...
Direct access to last remembered record is out of file.
So searching it from beginning of log file...
Jumped lines in file: 0
Parsed lines in file: 20371
Found 0 dropped records,
Found 0 comments,
Found 0 blank records,
Found 1 corrupted records,
Found 20370 old records,
Found 0 new qualified records.
と表示された。(最後のみ取り出し、この繰り返しがlogの個数分続く)
/etc/httpd/conf.d/awstats.confに
Alias /icon/ /webdata/icons/
ScriptAlias /awstats/ /webdata/cgi/awstats/
<Directory /webdata/cgi/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には来ないので、dnsmasq がこのサブホストの親で走っているので、それを一時的に変更する。親ホストに移って /etc/hosts の "192.168.xxx.xxx www,kinryokai.net www" のIPをこのテスト用のサブホストのIPに変更し、dnsmasq を再起動してから、ブラウザで 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/cgi/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/cgi/awstats/awstats.pl" >/dev/null
perlプログラムへのパスは各自の環境に合わせて下さい。
静的なHTMLのデータの作成
まずは/etc/httpd/conf.d/virtualhost.conf の </VirtualHost>の前に下記を追加します。
Alias /awreport /webdata/awreport/kinryo
<Directory /webdata/cgi/awstats/>
DirectoryIndex awstats.pl
Options ExecCGI
order deny,allow
deny from all
allow from all
#allow from 192.168
</Directory>
1日1回データーを作ります。そのスクリプトは(注:2013/2/21訂正)
#!/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/cgi/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 hostで数個のwebがありますので、スクリプトを変更してあります。
refererlogdel.shの最後は restart ではなく graceful にしました。
awstatslogchk.sh は
#!/bin/bash
if [ $# -eq 0 ]; then
for site in `ls -l /etc/awstats |grep -v ~$|cut -d' ' -f 11|sed -e '/^$/d'|cut -d . -f 2-4|cut -d . -f 2`
# ↑ 全virtual host名を抽出する
do
log=/webdata/awstats/`echo $site`/awstats*.txt
done
else
# 引数に月年(例:032013)を与えた時
log=/webdata/awstats/`echo $site`/awstats${1}*.txt
fi
for host in `cat /etc/httpd/conf.d/referer_spam.conf|awk '{print $3}'|sed -e 's/^(.*)\([^ ]*\)/\1/p' -e d`
# ↑ referer_spamのリストを抽出
do
grep "$host" $log > /dev/null
if [ $? -eq 0 ]; then
echo "$host delete"
sed -i "/$host/d" $log
fi
done
また、awstatsreport.sh を走らす時は
# /root/awstatsreport.sh www.kinryokai.net /webdata/awreport
(この文中にあるwww, は本当は www. (XOOPSが勝手にリンクを張るのを防止する為)
前にも書いたが 私は自宅に固定IPでサーバーがありroot権限を使えるので、.htaccess は使わない。又、今時のブラウザはダイジェスト認証に対応しているそうな。と言うわけでどのブラウザがどのバージョンから対応しているのか調べたが、一覧を見つけられなかった。英語で調べれば出てくるかも知れないが、やっていない。でもIEではバージョン5からネットスケープでは6から、と言う事はfirefoxは最初から??
まあ、どちらもかなり前のバージョンから対応しているが
http://blogs.yahoo.co.jp/mazbeer/309776.htmlにおもしろい記事を見つけた。一度見てみるといい。がやっぱり自分のスキルをあげる為にも、ここはdigest認証でやる。
パスワードファイルを作る
# htdigest -c "/webdata/HtDigest/.htpass" "User Auth" ユーザー名 ←-c は初回だけ、ファイル名はフルパスで指定し、後でvirtualhost.conf で指定するものと同じに。
# cat /webdata/HtDigest/.htpass
ユーザー名:User Auth:92907bf81772949bd4b75a328e
見たいにファイルが出来ている。又、ここではapacheはユーザー、グループ共nobodyでなく、apacheで動いているので、ユーザーapacheで読み取りが出来る事
/etc/httpd/conf.d/virtualhost.confの最後の</virtual>の前に下記を追加
<Directory "/webdata/public/kinryokai/meibo"> ←パスワードをかけたいDIRの指定
AuthType Digest
AuthName "User Auth" ← htdigestで指定したものと同じに
AuthUserFile "/webdata/HtDigest/.htpass"
Require valid-user
</Directory>
Require valid-userは .htpass に指定している全ユーザーがアクセスできる。特定のユーザーの場合は Require User ユーザー名1 ユーザー名2
# mkdir /webdata/public/kinryokai/meibo
でDIRを作り、
# chown apache. /webdata/public/kinryokai/meibo
でオーナーをアパッチにし、テスト用のファイル(meibo.pdf)をここに保存、その際、このファイルもapacheが読めるようにして置く。
これでapacheを再起動してと
# service httpd restart
ブラウザで http://localhost/upfiles/meibo/meibo.pdf’にアクセスすると、認証画面の後にファイルが表示される。
通信内容圧縮(mod_deflate)はcentossrv.com/apache-deflate.shtmlを参考に設定して置く
ここも私のバイブルであるhttp://centossrv.com/apache-ssl.shtmlを参考に、少し注意点を、/etc/httpd/conf.d/ssl.confで
管理者のメアドは webmater@xxxx.xxでかまわない。デフォルトでroot宛に、さらにそのrootは前に設定してある /etc/aliases で、自分のメアドに転送される。その他の変更は(変更した部分のみ)
DocumentRoot "/webdata/public/kinryokai"
#<Directory "/var/www/cgi-bin">
<Directory "/webdata/cgi/cgi-kinryo">
に変更。私はvirtualhost ホストで5つのwebがあるが、SSLが使えるのは一つのwebだけなので、メインのURLで設定をした。
最後に apacheを再起動