メール送受信システムを構築します。
サーバはメジャーどころではSendmail、Postfix、qmailとあるのですが一番強固と言われているqmailを使用します。
Sendmailも好きなので、今後はそちらも解説予定ですヾ(゚∀゚)ノ
qmail構築マニュアルは本も出てますし、至る所で解説済みでしょうけどオイラなりの解説でお役に立てれば幸いです。
尚、一般家庭の方はOutboundPort25Blockingの関係でメールが送信出来ない可能性が高いです。
その場合は、qmailをOutboundPort25Blockingに対応の設定もも同時行う必要があります。
サーバはメジャーどころではSendmail、Postfix、qmailとあるのですが一番強固と言われているqmailを使用します。
Sendmailも好きなので、今後はそちらも解説予定ですヾ(゚∀゚)ノ
qmail構築マニュアルは本も出てますし、至る所で解説済みでしょうけどオイラなりの解説でお役に立てれば幸いです。
尚、一般家庭の方はOutboundPort25Blockingの関係でメールが送信出来ない可能性が高いです。
その場合は、qmailをOutboundPort25Blockingに対応の設定もも同時行う必要があります。
ちなみに、今回ウチの構成ではdot-forwardを使用していません。
理由としては、アレ使うと例えばメールはスプールしてどこかのアドレスに転送って設定の時に/var/spool/mail/の中にメールを保存しようとする→ディレクトリがないのでエラーになる→ヽ(`Д´)ノとなります。
シンボリックリンク貼ったりと色々試してみたんですけど、結局直らなかったんで使わない事にしました。
大人しく.qmailファイルで転送しろって事ですよ多分。
あと、IMAPとかも個人的には必要性を感じないので構築してません。
qmailインストール
メールサーバをOutBound25PortBlockingに対応させるには、下の記事を参考に構築して下さい。
[CentOS,qmail] OutboundPort25Blockingに対応
インストール完了後、qmailの初期設定う
SMTP、POP認証ソフト(checkpassword)のインストール
外部接続制限ソフト(tcpserver)インストール
tcpserverはinetd(xinetd)と同様の機能を持つ制御プログラムです。
qmailはinetdよりもtcpserverを用いるほうを推奨しているので、tcpserverが含まれたucspi-tcpをインストールします。
Sendmailのaliasesを使用可能にするソフト(fastforward)インストール
qmail設定
Sendmail停止
Sendmailを停止し、Perl等で参照するSendmailコマンドをqmailに置き換えます。
qmail起動スクリプト作成
LogwatchのSendmail項目を削除
qmailを使用しても、LogwatchにSendmailのログが載る事への対処
これで、SMTP(25番)とPOP(110番)を使用してのメールサーバが構築されましたヾ(゚∀゚)ノ
理由としては、アレ使うと例えばメールはスプールしてどこかのアドレスに転送って設定の時に/var/spool/mail/の中にメールを保存しようとする→ディレクトリがないのでエラーになる→ヽ(`Д´)ノとなります。
シンボリックリンク貼ったりと色々試してみたんですけど、結局直らなかったんで使わない事にしました。
大人しく.qmailファイルで転送しろって事ですよ多分。
あと、IMAPとかも個人的には必要性を感じないので構築してません。
qmailインストール
# mkdir /var/qmail
# groupadd nofiles
# useradd -g nofiles -s /sbin/nologin alias -m -d /var/qmail/alias -k /dev/null
# useradd -g nofiles -d /var/qmail -s /sbin/nologin -M qmaild
# useradd -g nofiles -d /var/qmail -s /sbin/nologin -M qmaill
# useradd -g nofiles -d /var/qmail -s /sbin/nologin -M qmailp
# groupadd qmail
# useradd -g qmail -d /var/qmail -s /sbin/nologin -M qmailq
# useradd -g qmail -d /var/qmail -s /sbin/nologin -M qmailr
# useradd -g qmail -d /var/qmail -s /sbin/nologin -M qmails
※インストール準備
# wget ftp://ftp.jp.qmail.org/qmail/qmail-1.03.tar.gz
12:20:02 (395.53 KB/s) - `qmail-1.03.tar.gz' を保存しました [220668]
※qmailをダウンロード
# tar zxvf qmail-1.03.tar.gz
※ダウンロードしたqmailを解凍
# cd qmail-1.03
※展開ディテクトリへ移動
# wget http://mirror.averse.net/pub/FreeBSD/ports/local-distfiles/sada/qmail-date-localtime.patch.gz
12:21:45 (7.94 MB/s) - `qmail-date-localtime.patch.gz' を保存しました [741/741]
※日本標準時間対応パッチダウンロード(2007/12/07時点でダウンロード不可)
# wget http://ravenz.coresv.net/RavenzNetwork/qmail-date-localtime.patch.gz
※上の日本標準時間対応パッチが落とせなくなったので、暫定的にウチのサーバに上げておきます。苦情来たら速攻消します。
# wget http://members.elysium.pl/brush/qmail-smtpd-auth/dist/qmail-smtpd-auth-0.31.tar.gz
12:21:49 (24.74 KB/s) - `qmail-smtpd-auth-0.31.tar.gz' を保存しました [8798/8798]
※SMTP-Auth対応パッチダウンロード
# wget http://qmail.mirrors.summersault.com/qmail-smtpd-relay-reject
12:21:55 (4.75 MB/s) - `qmail-smtpd-relay-reject' を保存しました [1230/1230]
※不正中継拒否対応パッチダウンロード
# gunzip qmail-date-localtime.patch.gz
# tar zxvf qmail-smtpd-auth-0.31.tar.gz
※ダウンロードしたパッチを解凍
# mv qmail-smtpd-auth-0.31/* ./
mv: `./CHANGES' を上書きしてもよろしいですか(yes/no)? yes
※SMTP-Authパッチを移動
# patch < qmail-date-localtime.patch
# patch < qmail-smtpd-relay-reject
# patch < auth.patch
※各種パッチを当てる
# vi error.h
※make時のエラー対処
# make setup check
※qmailインストール
# groupadd nofiles
# useradd -g nofiles -s /sbin/nologin alias -m -d /var/qmail/alias -k /dev/null
# useradd -g nofiles -d /var/qmail -s /sbin/nologin -M qmaild
# useradd -g nofiles -d /var/qmail -s /sbin/nologin -M qmaill
# useradd -g nofiles -d /var/qmail -s /sbin/nologin -M qmailp
# groupadd qmail
# useradd -g qmail -d /var/qmail -s /sbin/nologin -M qmailq
# useradd -g qmail -d /var/qmail -s /sbin/nologin -M qmailr
# useradd -g qmail -d /var/qmail -s /sbin/nologin -M qmails
※インストール準備
# wget ftp://ftp.jp.qmail.org/qmail/qmail-1.03.tar.gz
12:20:02 (395.53 KB/s) - `qmail-1.03.tar.gz' を保存しました [220668]
※qmailをダウンロード
# tar zxvf qmail-1.03.tar.gz
※ダウンロードしたqmailを解凍
# cd qmail-1.03
※展開ディテクトリへ移動
# wget http://mirror.averse.net/pub/FreeBSD/ports/local-distfiles/sada/qmail-date-localtime.patch.gz
12:21:45 (7.94 MB/s) - `qmail-date-localtime.patch.gz' を保存しました [741/741]
※日本標準時間対応パッチダウンロード(2007/12/07時点でダウンロード不可)
# wget http://ravenz.coresv.net/RavenzNetwork/qmail-date-localtime.patch.gz
※上の日本標準時間対応パッチが落とせなくなったので、暫定的にウチのサーバに上げておきます。苦情来たら速攻消します。
# wget http://members.elysium.pl/brush/qmail-smtpd-auth/dist/qmail-smtpd-auth-0.31.tar.gz
12:21:49 (24.74 KB/s) - `qmail-smtpd-auth-0.31.tar.gz' を保存しました [8798/8798]
※SMTP-Auth対応パッチダウンロード
# wget http://qmail.mirrors.summersault.com/qmail-smtpd-relay-reject
12:21:55 (4.75 MB/s) - `qmail-smtpd-relay-reject' を保存しました [1230/1230]
※不正中継拒否対応パッチダウンロード
# gunzip qmail-date-localtime.patch.gz
# tar zxvf qmail-smtpd-auth-0.31.tar.gz
※ダウンロードしたパッチを解凍
# mv qmail-smtpd-auth-0.31/* ./
mv: `./CHANGES' を上書きしてもよろしいですか(yes/no)? yes
※SMTP-Authパッチを移動
# patch < qmail-date-localtime.patch
# patch < qmail-smtpd-relay-reject
# patch < auth.patch
※各種パッチを当てる
# vi error.h
※make時のエラー対処
extern int errno;
↓※変更
#include<errno.h>
↓※変更
#include<errno.h>
# make setup check
※qmailインストール
メールサーバをOutBound25PortBlockingに対応させるには、下の記事を参考に構築して下さい。
[CentOS,qmail] OutboundPort25Blockingに対応
インストール完了後、qmailの初期設定う
# ./config-fast `hostname`
# echo `hostname -d` >> /var/qmail/control/me
# echo `hostname -d` >> /var/qmail/control/rcpthosts
# echo `hostname -d` > /var/qmail/control/locals
※FQDNで外部から参照できない場合、サーバによってメール送信時に弾かれてしまう時があるので、localsのみFQDNではなくドメイン名で記載する
※FQDNでも外部から参照できる場合はFQDNを指定しても問題ない
# echo `hostname -d` >> /var/qmail/control/me
# echo `hostname -d` >> /var/qmail/control/rcpthosts
# echo `hostname -d` > /var/qmail/control/locals
※FQDNで外部から参照できない場合、サーバによってメール送信時に弾かれてしまう時があるので、localsのみFQDNではなくドメイン名で記載する
※FQDNでも外部から参照できる場合はFQDNを指定しても問題ない
SMTP、POP認証ソフト(checkpassword)のインストール
# wget http://cr.yp.to/checkpwd/checkpassword-0.90.tar.gz
12:31:37 (62.67 KB/s) - `checkpassword-0.90.tar.gz' を保存しました [15631/15631]
# tar zxvf checkpassword-0.90.tar.gz
# cd checkpassword-0.90
# vi error.h
※make時のエラー対処
# make && make setup check
# chown root:nofiles /bin/checkpassword
# chmod 4750 /bin/checkpassword
※checkpasswordの所有権を変更
12:31:37 (62.67 KB/s) - `checkpassword-0.90.tar.gz' を保存しました [15631/15631]
# tar zxvf checkpassword-0.90.tar.gz
# cd checkpassword-0.90
# vi error.h
※make時のエラー対処
extern int errno;
↓※変更
#include<errno.h>
↓※変更
#include<errno.h>
# make && make setup check
# chown root:nofiles /bin/checkpassword
# chmod 4750 /bin/checkpassword
※checkpasswordの所有権を変更
外部接続制限ソフト(tcpserver)インストール
tcpserverはinetd(xinetd)と同様の機能を持つ制御プログラムです。
qmailはinetdよりもtcpserverを用いるほうを推奨しているので、tcpserverが含まれたucspi-tcpをインストールします。
[root@www2 checkpassword-0.90]# wget http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz
12:42:34 (84.72 KB/s) - `ucspi-tcp-0.88.tar.gz' を保存しました [53019/53019]
# tar zxvf ucspi-tcp-0.88.tar.gz
# cd ucspi-tcp-0.88tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
# vi error.h
※make時のエラー対処
# make setup check
# vi /etc/tcp.smtp
※サーバ(127.)と、ローカルネットワーク(192.168.0.)からは転送を許可
※192.168.0.の部分はご自身のネットワークに合わせて下さい
# tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
※qmailで読み込むtcp.smtp.cdbを作成
※今後、tcp.smtpを変更後は必ずtcp.smtp.cdbを作成する事
12:42:34 (84.72 KB/s) - `ucspi-tcp-0.88.tar.gz' を保存しました [53019/53019]
# tar zxvf ucspi-tcp-0.88.tar.gz
# cd ucspi-tcp-0.88tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
# vi error.h
※make時のエラー対処
extern int errno;
↓※変更
#include<errno.h>
↓※変更
#include<errno.h>
# make setup check
# vi /etc/tcp.smtp
127.:allow,RELAYCLIENT=""
192.168.0.:allow,RELAYCLIENT=""
:allow
192.168.0.:allow,RELAYCLIENT=""
:allow
※サーバ(127.)と、ローカルネットワーク(192.168.0.)からは転送を許可
※192.168.0.の部分はご自身のネットワークに合わせて下さい
# tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
※qmailで読み込むtcp.smtp.cdbを作成
※今後、tcp.smtpを変更後は必ずtcp.smtp.cdbを作成する事
Sendmailのaliasesを使用可能にするソフト(fastforward)インストール
# wget http://cr.yp.to/software/fastforward-0.51.tar.gz
12:48:10 (53.38 KB/s) - `fastforward-0.51.tar.gz' を保存しました [40659/40659]
# tar zxvf fastforward-0.51.tar.gz
# cd fastforward-0.51
# vi error.h
※make時のエラー対処
# make setup check
# chmod 0 /usr/bin/newaliases
# mv /usr/bin/newaliases /usr/bin/newaliases.org
# ln -s /var/qmail/bin/newaliases /usr/bin/newaliases
# newaliases
※newaliasesを無効化し、fastforwardでnewaliasesを使用可能にする
# echo "|/var/qmail/bin/fastforward -p -d /etc/aliases.cdb" > /var/qmail/alias/.qmail-default
※newaliasesで作成されるaliases.cdbをqmailで参照可能にする
12:48:10 (53.38 KB/s) - `fastforward-0.51.tar.gz' を保存しました [40659/40659]
# tar zxvf fastforward-0.51.tar.gz
# cd fastforward-0.51
# vi error.h
※make時のエラー対処
extern int errno;
↓※変更
#include<errno.h>
↓※変更
#include<errno.h>
# make setup check
# chmod 0 /usr/bin/newaliases
# mv /usr/bin/newaliases /usr/bin/newaliases.org
# ln -s /var/qmail/bin/newaliases /usr/bin/newaliases
# newaliases
※newaliasesを無効化し、fastforwardでnewaliasesを使用可能にする
# echo "|/var/qmail/bin/fastforward -p -d /etc/aliases.cdb" > /var/qmail/alias/.qmail-default
※newaliasesで作成されるaliases.cdbをqmailで参照可能にする
qmail設定
# echo "10485760" > /var/qmail/control/databytes
※送受信可能なサイズを10MBに制限
※制限サイズの計算方法は「*MB(制限したい数)×1024×1024」で行う
# touch /var/qmail/control/doublebounceto
※送信者・受信者ともに存在しないメールは破棄する
# rm -rf /etc/skel/Maildir
# /var/qmail/bin/maildirmake /etc/skel/Maildir
※メール格納ディレクトリを「ホームディレクトリ/Maildir」に変更する
※Vpopmailを使用する場合、この処理は不要
※送受信可能なサイズを10MBに制限
※制限サイズの計算方法は「*MB(制限したい数)×1024×1024」で行う
# touch /var/qmail/control/doublebounceto
※送信者・受信者ともに存在しないメールは破棄する
# rm -rf /etc/skel/Maildir
# /var/qmail/bin/maildirmake /etc/skel/Maildir
※メール格納ディレクトリを「ホームディレクトリ/Maildir」に変更する
※Vpopmailを使用する場合、この処理は不要
Sendmail停止
Sendmailを停止し、Perl等で参照するSendmailコマンドをqmailに置き換えます。
# /etc/rc.d/init.d/sendmail stop
chkconfig sendmail off
※Sendmail停止と、自動起動の停止
# chmod 0 /usr/lib/sendmail
# chmod 0 /usr/sbin/sendmail
# mv /usr/lib/sendmail /usr/lib/sendmail.org
# mv /usr/sbin/sendmail /usr/sbin/sendmail.org
# ln -s /var/qmail/bin/sendmail /usr/lib/sendmail
# ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail
※Sendmailを無効化し、qmailと置き換え
chkconfig sendmail off
※Sendmail停止と、自動起動の停止
# chmod 0 /usr/lib/sendmail
# chmod 0 /usr/sbin/sendmail
# mv /usr/lib/sendmail /usr/lib/sendmail.org
# mv /usr/sbin/sendmail /usr/sbin/sendmail.org
# ln -s /var/qmail/bin/sendmail /usr/lib/sendmail
# ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail
※Sendmailを無効化し、qmailと置き換え
qmail起動スクリプト作成
# cp /var/qmail/boot/home /var/qmail/rc
※qmail起動コマンドサンプルをコピー
# sed -i 's/Mailbox/Maildir\//g' /var/qmail/rc
※Mailbox形式をMaildir形式へ変更
# vi /etc/rc.d/init.d/qmail
※qmail起動スクリプト作成
※上記スクリプトではqmailのPOPも含まれている為、別途POPサーバは必要ない
# chmod +x /etc/rc.d/init.d/qmail
※qmail起動スクリプトへ実行権限付加
# chkconfig qmail --add
# chkconfig qmail on
※qmailを自動起動に設定
# /etc/rc.d/init.d/qmail start
※qmailを起動
※qmail起動コマンドサンプルをコピー
# sed -i 's/Mailbox/Maildir\//g' /var/qmail/rc
※Mailbox形式をMaildir形式へ変更
# vi /etc/rc.d/init.d/qmail
※qmail起動スクリプト作成
#!/bin/bash
#
# qmail
#
# chkconfig: 2345 80 30
# description: qmail start/stop script
# Source function library.
. /etc/rc.d/init.d/functions
PATH=/var/qmail/bin:/usr/local/bin:/bin:/usr/bin
[ -f /var/qmail/rc ] || exit 0
start() {
# Start daemons.
if [ -z $(/sbin/pidof qmail-send) ]; then
echo -n "Starting qmail"
# qmail
csh -cf '/var/qmail/rc &' 2>&1 > /dev/null
# SMTP
tcpserver -qv -l0 -HR -u `id -u qmaild` -g `id -g qmaild` \
-x /etc/tcp.smtp.cdb 0 smtp \
qmail-smtpd `hostname` /bin/checkpassword /bin/true 2>&1|\
splogger smtp &
# POP3
tcpserver -qvRH -u `id -u qmaild` -g `id -g qmaild` \
0 pop3 qmail-popup `hostname` /bin/checkpassword \
qmail-pop3d Maildir 2>&1 | splogger pop3 &
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch /var/lock/subsys/qmail
return $RETVAL
else
echo "qmail is already started"
fi
}
stop() {
# Stop daemons.
if [ ! -z $(/sbin/pidof qmail-send) ]; then
echo -n "Shutting down qmail"
/bin/kill $(/sbin/pidof tcpserver)
/bin/kill $(/sbin/pidof qmail-send)
until [ -z $(/sbin/pidof qmail-send) ] && [ -z $(/sbin/pidof tcpserver) ]; do :; done
echo
rm -f /var/lock/subsys/qmail
else
echo "qmail is not running"
fi
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
status)
if [ ! -z $(/sbin/pidof qmail-send) ] ; then
echo -n "qamil (pid"
echo -n " `/sbin/pidof qmail-send`"
echo -n " `/sbin/pidof tcpserver`"
echo ") is running..."
else
echo "qmail is stoped"
fi
;;
*)
echo "Usage: qmail {start|stop|restart|status}"
exit 1
esac
exit 0
#
# qmail
#
# chkconfig: 2345 80 30
# description: qmail start/stop script
# Source function library.
. /etc/rc.d/init.d/functions
PATH=/var/qmail/bin:/usr/local/bin:/bin:/usr/bin
[ -f /var/qmail/rc ] || exit 0
start() {
# Start daemons.
if [ -z $(/sbin/pidof qmail-send) ]; then
echo -n "Starting qmail"
# qmail
csh -cf '/var/qmail/rc &' 2>&1 > /dev/null
# SMTP
tcpserver -qv -l0 -HR -u `id -u qmaild` -g `id -g qmaild` \
-x /etc/tcp.smtp.cdb 0 smtp \
qmail-smtpd `hostname` /bin/checkpassword /bin/true 2>&1|\
splogger smtp &
# POP3
tcpserver -qvRH -u `id -u qmaild` -g `id -g qmaild` \
0 pop3 qmail-popup `hostname` /bin/checkpassword \
qmail-pop3d Maildir 2>&1 | splogger pop3 &
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch /var/lock/subsys/qmail
return $RETVAL
else
echo "qmail is already started"
fi
}
stop() {
# Stop daemons.
if [ ! -z $(/sbin/pidof qmail-send) ]; then
echo -n "Shutting down qmail"
/bin/kill $(/sbin/pidof tcpserver)
/bin/kill $(/sbin/pidof qmail-send)
until [ -z $(/sbin/pidof qmail-send) ] && [ -z $(/sbin/pidof tcpserver) ]; do :; done
echo
rm -f /var/lock/subsys/qmail
else
echo "qmail is not running"
fi
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
status)
if [ ! -z $(/sbin/pidof qmail-send) ] ; then
echo -n "qamil (pid"
echo -n " `/sbin/pidof qmail-send`"
echo -n " `/sbin/pidof tcpserver`"
echo ") is running..."
else
echo "qmail is stoped"
fi
;;
*)
echo "Usage: qmail {start|stop|restart|status}"
exit 1
esac
exit 0
※上記スクリプトではqmailのPOPも含まれている為、別途POPサーバは必要ない
# chmod +x /etc/rc.d/init.d/qmail
※qmail起動スクリプトへ実行権限付加
# chkconfig qmail --add
# chkconfig qmail on
※qmailを自動起動に設定
# /etc/rc.d/init.d/qmail start
※qmailを起動
LogwatchのSendmail項目を削除
qmailを使用しても、LogwatchにSendmailのログが載る事への対処
# mv /etc/log.d/conf/services/sendmail.conf /etc/log.d/conf/services/sendmail.conf.org
※上記でLogwatchからSendmailの項目は消える
※上記でLogwatchからSendmailの項目は消える
これで、SMTP(25番)とPOP(110番)を使用してのメールサーバが構築されましたヾ(゚∀゚)ノ
コメント