CentOS 5.6+Postfix+MySQL+Postfixadmin

No Comments

MySQLとか楽にいじれるようになると有名なPHPMyAdminというのがあるけど、それのPostfix版みたいなイメージのがあるよ!と聞いて試してみた。
Webインターフェースでドメイン追加・削除したりメールアドレス管理とかしちゃって楽ですよ的なものらしい。

これを利用するためにはドメインとかをDBで管理する、PostfixのDB対応版が必要。
今追加してあるyumリポジトリには無かったけど、centosplusにSRPMがあったので、それを使った。

■設定に使う情報を決める
Postfix/Dovecot実行ユーザー
Linux ユーザーID 10000
Linux ユーザー名 vmailadmin
Linux グループ名 vmailadmin

□Maildir/のルートディレクトリ
/var/spool/mail/vhost

■設定
su -

service sendmail stop

# Postfix(DB対応版)をインストール
yum remove postfix
yum install pcre.x86_64 pcre-devel.x86_64 mysql-devel.x86_64
rpm -ivh http://ftp.riken.jp/Linux/centos/5.7/centosplus/SRPMS/postfix-2.3.3-2.3.centos.mysql_pgsql.src.rpm
cd /usr/src/redhat/SPECS/
vi postfix.spec
%define PGSQL 0
%define MYSQL 1
rpmbuild -ba postfix.spec
rpm -Uvh /usr/src/redhat/RPMS/x86_64/postfix-2.3.3-2.3.centos.mysql_pgsql.x86_64.rpm

alternatives –config mta
yum remove sendmail

# グループ/ユーザー追加
groupadd vmailadmin
useradd -u 10000 -s /bin/nologin -g vmailadmin vmailadmin

# Maildir/ルートディレクトリ作成
mkdir /var/spool/mail/vhost
chown vmailadmin:vmailadmin /var/spool/mail/vhost
chmod 771 /var/spool/mail/vhost

# Postfixの設定
vi /etc/postfix/mysql_virtual_alias_maps.cf
—————————————————————-
user = DBのユーザー
password = DBのユーザーのパスワード
hosts = localhost
dbname = postfix
table = alias
select_field = goto
where_field = address
—————————————————————-

vi /etc/postfix/mysql_virtual_domains_maps.cf
—————————————————————-
user = DBのユーザー
password = DBのユーザーのパスワード
hosts = localhost
dbname = postfix
table = domain
select_field = domain
where_field = domain
additional_conditions = and active = ’1′
—————————————————————-

vi /etc/postfix/mysql_virtual_mailbox_maps.cf
—————————————————————-
user = DBのユーザー
password = DBのユーザーのパスワード
hosts = localhost
dbname = postfix
table = mailbox
select_field = maildir
where_field = username
—————————————————————-

vi /etc/postfix/mysql_virtual_mailbox_limit_maps.cf
—————————————————————-
user = DBのユーザー
password = DBのユーザーのパスワード
hosts = localhost
dbname = postfix
table = mailbox
select_field = quota
where_field = username
# additional_conditions = and active = ’1′
—————————————————————-

vi /etc/postfix/main.cf
—————————————————————-
#以下は各々の環境に合わせて編集
myhostname = mail.example.com
mydomain = example.com
myorigin = $myhostname
inet_interfaces = all
mydestination = $mydomain
relay_domains = $mydestination
home_mailbox = Maildir/
smtpd_banner = $myhostname ESMTP unknown

#以下は追記
local_transport = virtual
virtual_transport = virtual
virtual_mailbox_base = /var/spool/mail/vhost
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
maximal_backoff_time = 800s
minimal_backoff_time = 100s
bounce_queue_lifetime = 60m
maximal_queue_lifetime = 60m
#mailbox_size_limit = 1024000000
message_size_limit = 20480000
#virtual_mailbox_limit = 51200000
virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql_virtual_mailbox_limit_maps.cf
virtual_mailbox_limit_override = yes
virtual_overquota_bounce = yes
virtual_mailbox_limit_inbox = yes
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_local_domain = $myhostname
smtpd_client_restrictions = reject_rbl_client bl.spamcop.net
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
broken_sasl_auth_clients = yes
—————————————————————-

vi /etc/postfix/master.cf
—————————————————————-
submission inet n – n – – smtpd
# -o smtpd_enforce_tls=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
—————————————————————-

# Postfix Admin のインストール
cd
wget http://downloads.sourceforge.net/project/postfixadmin/postfixadmin/postfixadmin-2.3.4/postfixadmin_2.3.4.tar.gz?r=&ts=1317889955&use_mirror=jaist
tar xfvz postfixadmin_2.3.4.tar.gz
mv postfixadmin-2.3.4 /var/www/postfixadmin
cd /var/www/
restorecon -R postfixadmin
cd postfixadmin
vi config.inc.php
—————————————————————-
# 編集
$CONF['configured'] = true;
$CONF['default_language'] = ‘ja’;

$CONF['database_type'] = ‘mysql’;
$CONF['database_host'] = ‘localhost’;
$CONF['database_user'] = ‘DBのユーザー’;
$CONF['database_password'] = ‘DBのユーザーのパスワード’;
$CONF['database_name'] = ‘postfix’;

$CONF['encrypt'] = ‘md5crypt’;

$CONF['page_size'] = ’50′;
$CONF['domain_in_mailbox'] = ‘YES’;

$CONF['aliases'] = ’100′;
$CONF['mailboxes'] = ’100′;
$CONF['maxquota'] = ’300′;
—————————————————————

vi /etc/httpd/conf.d/postfixadmin.conf
—————————————————————
Alias /postfixadmin “/var/www/postfixadmin”


Order allow,deny
Allow from all

—————————————————————

# Dovecotのインストール
yum install dovecot.x86_64 cyrus-sasl-plain.x86_64 cyrus-sasl-md5.x86_64 php53-imap.x86_64
service saslauthd stop
chkconfig saslauthd off

vi /etc/dovecot.conf
—————————————————————
protocols = imap imaps pop3 pop3s
mail_location = maildir:/var/spool/mail/vhost/%u
passdb sql {
args = /etc/dovecot-mysql.conf
}
userdb sql {
args = /etc/dovecot-mysql.conf
}
mechanisms = plain login digest-md5 cram-md5
pop3_uidl_format = %08Xu%08Xv

socket listen {
client {
path = /var/spool/postfix/private/auth
mode = 0660
user = postfix
group = postfix
}
}

login_process_size = 64
—————————————————————

vi /etc/dovecot-mysql.conf
# default_pass_scheme は postfixadminのconfig.inc.phpと合わせる
—————————————————————
driver = mysql
default_pass_scheme = MD5-CRYPT
connect = dbname=postfix user=DBのユーザー host=/var/lib/mysql/mysql.sock password=DBのユーザーのパスワード
password_query = SELECT password FROM mailbox WHERE username = ‘%u’ AND active = ’1′
user_query = SELECT concat(‘/var/spool/mail/vhost/’, maildir) as home, 10000 as uid, 10000 as gid FROM mailbox WHERE username = ‘%u’ AND active = ’1′
—————————————————————

# MySQLの設定
mysql -u root
delete from mysql.user where user=”";
CREATE DATABASE postfix;
CREATE USER ‘DBのユーザー’@'localhost’ IDENTIFIED BY ‘DBのユーザーのパスワード’;
GRANT ALL PRIVILEGES ON `postfix`.* TO ‘DBのユーザー’@'localhost’;
FLUSH PRIVILEGES;
quit

# Postfix, Dovecotを自動起動するよう設定。
chkconfig postfix on
chkconfig dovecot on
service postfix start
service dovecot start
service httpd reload

# 下記URLにアクセスし、全てOKになっていることを確認。
# エラーが出ていて何か変更した場合は、service httpd reload しないと反映されない場合がある。

http://www.example.com/postfixadmin/setup.php

設定時に下記のようなものが画面に出力されるのでコピペする
—————————————————————-
vi /var/www/postfixadmin/config.inc.phpを編集
$CONF['setup_password'] = ‘なんか暗号化されたあれっぽい半角の文字列’;
—————————————————————-

Postfix + Dovecot 2 + PostfixAdmin + MySQL [がらくたネット]など参考にチクチクいじってみたら、あっさり動いたことは動いた。

何か色々できて便利だね!すごいね!
あ、メールサーバー運用してなかったわ。

PHPのセッション管理をmemcachedに投げる設定

No Comments

yum -y install zlib-devel.x86_64
yum -y –enablerepo=remi install libmemcached.x86_64 libmemcached-devel.x86_64

pecl install memcached
vi /etc/php.d/memcached.ini

; Enable memcached extension module
extension=memcached.so

vi /etc/php.ini

; session.save_handler = files
session.save_handler = memcached

; session.save_path = “/var/lib/php/session”
session.save_path = “ktserver.localdomain:11211″

今回は Kyoto Tycoon を memcached 互換で動かしてそれに投げた。
libmemcached は remi リポジトリにあったのでそれを利用した。

session_start(); すると、ktserver.localdomain にセッションの値が保持される。
有効期限等の設定が別途必要。
サーバー名がktなのは実はKyotoTycoonだから。

KyotoTycoonのレプリケーション設定

No Comments

CENTOS 5.6 に KYOTOTYCOON をSRPMからインストールの続き

マスター側の/etc/init.d/ktservctlを変更

#ulogdir=”$basedir/ulog”
ulogdir=”/var/log/ktserver/ulog”

#sid=1
sid=1

#ulim=1g
ulim=1g

起動スクリプト中でulimが必須になっているので、指定したくないならいじる。
sidは必須、無いと起動しない。

スレーブ側の/etc/init.d/ktservctlを変更

#mhost=”anotherhost.localdomain”
mhost=”masterkt.localdomain”

#mport=”1978″
mport=”1978″

#rtsfile=”$basedir/rts”
rtsfile=”$basedir/rts”

#sid=1
sid=2

#cmd=”$cmd -ulog $ulogdir -ulim $ulim -sid $sid”
cmd=”$cmd -ulog $ulogdir -sid $sid”

sidは他のサーバーと別の数字に変える。
マルチマスタにする場合、上記マスター側スレーブ側双方の設定を、アクティブマスター・スタンバイマスター双方に行う。

マルチマスターにしない場合は、スレーブ側だけ以下の用に変更

# if [ -n "$ulogdir" ] ; then
# cmd=”$cmd -ulog $ulogdir -ulim $ulim -sid $sid”
# fi
if [ -n "$ulogdir" ] ; then
cmd=”$cmd -ulog $ulogdir -ulim $ulim”
fi

if [ -n "$sid" ] ; then
cmd=”$cmd -sid $sid”
fi

元のスクリプトではulogdirを指定しないとsidが反映されない。

参考Kyoto Tycoonによる高可用性DBサーバの構築

CentOS 5.6 に KyotoTycoon をRPMからインストール

No Comments

yum install rpm-build

wget –no-check-certificate https://github.com/kyohsuke/srpms/tarball/master
tar xfvz kyohsuke-srpms-c4e4fb1.tar.gz

cd kyohsuke-srpms-c4e4fb1

rpm -ivh kyototycoon-0.9.42-1.src.rpm
rpm -ivh kyotocabinet-1.2.58-1.src.rpm

cd /usr/src/redhat/SPECS

#yum remove gcc
yum install pkgconfig zlib-devel
yum install gcc44 gcc44-c++ boost-devel
yum install kernel-devel

ln -s /usr/bin/gcc44 /usr/bin/gcc
ln -s /usr/bin/g++44 /usr/bin/g++

rpmbuild -ba kyotocabinet.spec
rpm -ivh ../RPMS/x86_64/kyotocabinet-*
rpmbuild -ba kyototycoon.spec
rpm -ivh ../RPMS/x86_64/kyototycoon-*

vi /etc/init.d/ktservctl

#cmd=”ktserver”
cmd=”ktserver -plsv /usr/libexec/ktplugservmemc.so”

#logfile=”$basedir/log”
logfile=”/var/log/ktserver”

#dbname=”$basedir/casket.kch#bnum=2000000#msiz=128m#dfunit=8″
dbname=” *#bnum=2000#capsiz=128m#opts=f”

-plsv /usr/libexec/ktplugservmemc.so”
は、memcached互換で動かしたかったので。
* LRUにしたかったので、キャッシュDBを使用する。
bnum 2000バケット
capsiz メモリサイズ上限
opts flags対応オプション

参考
こなふぃ: Kyoto Cabint 1.2.50 と Kyoto Tycoon 0.9.38 の srpm
おっぱいミサイル(kyoto tycoonタグ)

途中で出たエラー
error trying to exec ‘cc1plus’: execvp: No such file or directory
C++ preprocessor “/lib/cpp” fails sanity check
シンボリックリンク張ってごまかした(手順途中にあるgcc44,g++44へのシンボリックリンク)
そこまでする理由は、このバージョンのgccが必要だから。

上記理由により、古いgccがあるとエラー出たりするので、最初にyum remove gcc

CentOS 5.5 で簡易DNSサーバ(dnsmasq)

No Comments

DNSキャッシュサーバらしい?(詳しく調べてない)。
hostsに書いたものをそのまま他のサーバに渡したい場合に使えるので。

ここに書いた設定で外部公開したら死ぬ。
内部でも他に人が居たら死ぬ。

##設定
yum install dnsmasq
service dnsmasq start
cp -p /etc/resolv.conf ~/resolv.conf.bak
#resolv.confを設定
cat >> resolv.conf
server 127.0.0.1
Ctrl+C

nslookup ホスト名
#ここで解決されれば動作はok

##iptablesの設定
#デフォルトは53/udpを使うのでそこに穴を空ける
#例としてsetupコマンドから→ファイヤーウォールの設定→カスタマイズ
#「その他のポート」に domain:udp と追加

以上

Older Entries