最近の電子メール事情は色々と変わってきていて追っかけるのも大変です。
特に、OP25対応なんかは利用者に設定変更の通知やら何やら、サーバーメンテナンスだけでは
済まされなくなってます。
今回は、出来る限りクライアントに設定変更をお願いする事無く、今までの使い勝手を残しつつ
サーバー再構築だけで、スパム対策やらに対応出来るようにしたいと思います。
今回の構築方法は、もちろん規格外の仕様ですので、新規にメールサーバーを構築する場合等には
おすすめしませんが、既存の運用されているメールサーバーを、最小限の変更で、現在主流になりつつ
ある、メール規格に対応させようとするものです。
今回の構築目標
# インストールディレクトリ構成
/usr/local/src/ │ ├ libspf-1.0.0-p3/ │ ├ netqmail-1.05/ │ │ │ └ netqmail-1.05/ │ └ libdomainkeys-0.68/ |
# 必要なファイルやパッチ
netqmail-1.05.tar.gz
qmail-date-localtime.patch
qmail-1.03-dk-0.53.patch
vpopmail-5.4.9.tar.gz
libspf-1.0.0-p3.tar.gz
libdomainkeys-0.68.tar.gz
ucspi-tcp-0.88.tar.gz
ucspi-tcp-0.88.errno.patch
ucspi-tcp-0.88.a_record.patch
ucspi-tcp-0.88.nobase.patch
daemontools-0.76.tar.gz
autorespond-2.0.3.tar.gz
ezmlm-0.53.tar.gz
ezmlm-idx-0.40.tar.gz
qmailadmin-1.2.11.tar.gz
# 起動スクリプト
起動スクリプトは、今回のサーバー構築の参考にさせて頂いた
「Linuxで作る完全メールシステム構築ガイド―sendmail/Postfix/qmail対応」
から、一部今回の構築内容向けに改造して公開しております。
下記リンクからダウンロードして頂けます。
qmail qmail-smtpd qmail-pop3d
|
|
# spfパッチの導入
cd /usr/local/src
tar zxf libspf-1.0.0-p3.tar.gz
cd libspf-1.0.0-p3/
./configure
make
make install
# Domain Keysの導入
cd ../
tar zxf libdomainkeys-0.68.tar.gz
cd libdomainkeys-0.68/
vi dns.lib
追 加
-lresolv |
make
gcc -DBIND_8_COMAT -O2 -o makeheader makeheader.c
./test
cp *.h libdomainkeys.a ../netqmail-1.05
# qMail関連グループの作成
cd ../
vi /etc/group
追 加
nofiles::1991: qmail::1992: vchkpw::1993: |
# qMail関連ユーザーの作成
vipw
追 加
alias:x:1981:1991::/var/qmail/alias:/bin/false qmaild:x:1982:1991::/var/qmail:/bin/false qmaill:x:1983:1991::/var/qmail:/bin/false qmailp:x:1984:1991::/var/qmail:/bin/false qmailq:x:1985:1992::/var/qmail:/bin/false qmailr:x:1986:1992::/var/qmail:/bin/false qmails:x:1987:1992::/var/qmail:/bin/false vpopmail:x:1988:1993::/home/vpopmail: |
# qMailのインストール その1
tar zxf netqmail-1.05.tar.gz
cd netqmail-1.05
./collate.sh
cd netqmail-1.05
patch -p1 < ../../qmail-date-localtime.patch
patch -p1 < ../../libspf-1.0.0-p3/patches/qmail/1.05/netqmail-1.05-libspf-1.0.0-RC6.diff
patch < ../../qmail-1.03-dk-0.53.patch
make setup check
install -g qmail qmail-dk /var/qmail/bin/qmail-dk
cp -p /var/qmail/bin/qmail-queue /var/qmail/bin/qmail-queue.orig
# 初期設定
./config-fast [Domain]
./config-fast [FQDN]
# qMailのインストール その2
cd ../../
mv netqmail-1.05 netqmail-1.05-add_spf
tar zxf netqmail-1.05.tar.gz
cd netqmail-1.05
./collate.sh
cd netqmail-1.05
patch -p1 < ../../qmail-date-localtime.patch
patch < qmail-smtpd-relay-reject
make
install -g qmail qmail-smtpd /var/qmail/bin/qmail-smtpd-non-spf
# Maildir形式にする
vi /var/qmail/control/defaultdelivery
./Maildir/ |
# sendmailコマンドのコピー
mv /usr/sbin/sendmail /usr/sbin/sendmail.old
mv /usr/lib/sendmail /usr/lib/sendmail.old
ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail
ln -s /var/qmail/bin/sendmail /usr/lib/sendmail
# tcpserverのインストール
cd ../../
tar zxvf ucspi-tcp-0.88.tar.gz
cd ucspi-tcp-0.88
patch -p1 < ../ucspi-tcp-0.88.errno.patch
patch -p1 < ../ucspi-tcp-0.88.a_record.patch
patch -p1 < ../ucspi-tcp-0.88.nobase.patch
make
make setup
make check
# デーモンツール等のインストール
mkdir -p /package
chmod 1755 /package
cd /package
tar zxvf daemontools-0.76.tar.gz
cd admin/daemontools-0.76
vi src/error.h
変 更
extern int errno; ↓ #include <errno.h> |
./package/install
# autorespondのインストール
cd /usr/local/src
tar zxvf autorespond-2.0.3.tar.gz
cd autorespond-2.0.3
make
make install
# ezmlmのインストール
cd ../
tar zxvf ezmlm-0.53.tar.gz
tar zxvf ezmlm-idx-0.40.tar.gz
mv -f ezmlm-0.53/issub.c ezmlm-0.53/issub.bak
mv -f ezmlm-0.53/subscribe.c ezmlm-0.53/subscribe.bak
mv -f ezmlm-idx-0.40/* ezmlm-0.53
cd ezmlm-0.53
patch < idx.patch
vi error.h
変 更
extern int errno; ↓ #include <errno.h> |
make clean
make
make man
cp ezmlmrc.jp ezmlmrc
make setup
# vpopmailのインストール
cd ../
mkdir -p /home/vpopmail/etc
chown -R vpopmail:vchkpw /home/vpopmail
chmod 755 /home/vpopmail
vi /home/vpopmail/etc/tcp.op25
作 成 [POP befor SMTP 用]
***.***.***.***:allow,RELAYCLIENT="",DKSIGN="/etc/domainkeys/default",QMAILQUEUE="bin/qmail-dk" :allow |
vi /home/vpopmail/etc/tcp.smtp
作 成 [メール受信用]
:allow,SPF_ACTION="4",DKVERIFY="DEGIJKfh",QMAILQUEUE="bin/qmail-dk" |
tcprules /home/vpopmail/etc/tcp.op25.cdb /home/vpopmail/etc/tcp.op25.tmp < /home/vpopmail/etc/tcp.op25
tcprules /home/vpopmail/etc/tcp.smtp.cdb /home/vpopmail/etc/tcp.smtp.tmp < /home/vpopmail/etc/tcp.smtp
tar zxvf vpopmail-5.4.9.tar.gz
cd vpopmail-5.4.9
vi vpopmail.c
変 更
fprintf( fs_tmp_file, "%s:allow,RELAYCLIENT=\"\",RBLSMTPD=\"\"t%d\n", ↓ fprintf( fs_tmp_file, "%s:allow,RELAYCLIENT=\"\",RBLSMTPD=\"\",DKSIGN=\"/etc/domainkeys/default\",QMAILQUEUE=\"bin/qmail-dk\"\t%d\n", |
./configure --enable-roaming-users=y --enable-clear-passwd=y \
--enable-tcpserver-file=/home/vpopmail/etc/tcp.op25 --enable-relay-clear-minuts=15
make
make install-strip
crontab -e
追 加
0,10,20,30,40,50 * * * * /home/vpopmail/bin/clearopensmtp 2>&1 > /dev/null |
# ドメインの追加
/home/vpopmail/bin/vadddomain [Domain]
# qmailadminのインストール
tar zxf qmailadmin-1.2.11.tar.gz
cd qmailadmin-1.2.11
./configure --enable-cgibindir=/httpd/cgi-bin --enable-htmldir=/httpd \
--enable-no-cache --enable-imagedir=/httpd/image --enable-imageurl=/image \
--disable-help --enable-modify-quota --disable-ezmlm-mysql
make
make install
# 起動スクリプトの登録
cp qmail /etc/init.d/
cp qmail-pop3d /etc/init.d/
cp qmail-smtpd /etc/init.d/
chmod 755 /etc/init.d/qmail
chmod 755 /etc/init.d/qmail-pop3d
chmod 755 /etc/init.d/qmail-smtpd
chkconfig --add qmail
chkconfig --add qmail-pop3d
chkconfig --add qmail-smtpd
chkconfig qmail on
chkconfig qmail-pop3d on
chkconfig qmail-smtpd on
# ドメインキーの作成
mkdir /etc/domainkeys
cd /etc/domainkeys
openssl genrsa -out private.key 1024
openssl rsa -in private.key -out public.key -pubout
cp private.key default
chmod 600 /etc/domainkeys/*
chown qmaild /etc/domainkeys/default
grep -v ^- public.key | perl -e 'while(<>){chop;$l.=$_;}print "t=y; p=$l;\n";'
表示された文字をコピーしておく事
# domainkeysのDNS登録
DNSのレコードに下記を追加
_domainkey.domain.jjp. IN TXT "t=y; o=~; n=[所有者情報(会社名等)]; r=[管理者メールアドレス]" default._domainkey IN TXT "[コピーした文字];" |
コピーした文字例 ⇒ "t=y; p=ABCDEFGHIJK~~XYZ;"
# SPFのDNS設定
DNSのレコードに下記を追加
MXレコードに登録されているIPのみ一括指定する場合
IN TXT "v=spf1 +mx ~all" |
IP指定の場合
IN TXT "v=spf1 +ip4:xxx.xxx.xxx.xxx +ip4:yyy.yyy.yyy.yyy ~all" |
# DomainKeys・SFP等の細かい設定
●spfの受信ポリシー設定
/var/qmail/control/spfbehavior
でもspfの動作設定が出来ますが、25と587でspfのポリシーを変更する為利用しません。
vi /home/vpopmail/etc/tcp.smtp
[メール受信用]
:allow,SPF_ACTION="4",DKVERIFY="DEGIJKfh",QMAILQUEUE="/bin/qmail-dk" |
tcprules /home/vpopmail/etc/tcp.smtp.cdb /home/vpopmail/etc/tcp.smtp.tmp < /home/vpopmail/etc/tcp.smtp
送信側は、設定しません。
設定してしまうと、メールが送信出来なくなります。
0: SPF ルックアップを行いません, Received-SPF ヘッダも作りません 1: Received-SPF ヘッダの生成だけ行います, ブロックはしません 2: DNS ルックアップで問題があるとテンポラリエラーを返します 3: SPF の評価結果が fail (deny) であるメールをリジェクトする 4: SPF の評価結果が softfail であるメールをリジェクトする 5: SPF の評価結果が neutral であるメールをリジェクトする 6: SPF の評価結果が pass にならなかったメールをリジェクトする |
おすすめは、まだ 3か4 と思われます。
世の中の全てのDNS管理者が、SFPヘッダー情報を登録してくれたら、6に出来るのになぁ・・・・・
●DomainKeysの受信ポリシー設定
vi /home/vpopmail/etc/tcp.smtp
[メール受信用]
:allow,SPF_ACTION="4",DKVERIFY="DEGIJKfh",QMAILQUEUE="/bin/qmail-dk" |
tcprules /home/vpopmail/etc/tcp.smtp.cdb /home/vpopmail/etc/tcp.smtp.tmp < /home/vpopmail/etc/tcp.smtp
B (b) : 署名が異常です。 C (c) : 署名が有りません。 D (d) : 公開鍵が有りません。 E (e) : 認証できませんでした。 F (f) : 公開鍵が異常です。 G (g) : DomainKeysの処理でエラーが発生しました。 H (h) : DomainKeysライブラリの引数が異常です。 I (i) : DomainKeysライブラリの使用方法に誤りがあります。 J (j) : DomainKeys処理のリソースが足りません。 K (k) : 処理が取り消されました。 |
DKVERIFYのおすすめ設定は、「 DEGIJKfh 」です。
大文字が恒久エラーとして、小文字が一時エラーとして取り扱われます。
QMAILQUEUE="/bin/qmail-dk"は必須設定になります。
デフォルトのqmail-queueの代わりにqmail-dkを使用する為の設定です。
※これを忘れると、普通にキューの処理をしてしまいます。
# Apacheのインストールと設定
Apacheは最低限の設定で大丈夫です。
ここでは明記しません。
# qmailの起動
/etc/init.d/qmail start
/etc/init.d/qmail-smtpd start
/etc/init.d/qmail-pop3d start
# 動作確認
設定が完了したメールサーバーのアカウント宛に、外部からメールを送信して、
受信したメールのヘッダー情報を確認すると下記の様にヘッダーが記載されています。
spf・DomainKey対策されていないサーバーからは以下のヘッダーが付きます。(一部抜粋)
DomainKey-Status: no signature Received: from unknown (HELO Send.DomainName.jjp) (***.***.***.***) by Receipt.DomainName.jjp with SMTP; 00 Sun 0000 00:00:00 +0900 Received-SPF: none (Receipt.DomainName.jjp: domain of SendAddress@DomainName.jjp does not designate permitted sender hosts) |
spf・DomainKey対策されているサーバーからは以下のヘッダーが付きます。(一部抜粋)
DomainKey-Status: good Received: from unknown (HELO Send.DomainName.jjp) (***.***.***.***) by Receipt.DomainName.jjp with SMTP; 00 Sun 0000 00:00:00 +0900 Received-SPF: pass (Receipt.DomainName.jjp: domain of SendAddress@DomainName.jjp designates ***.***.***.*** as permitted sender) receiver=Receipt.DomainName.jjp; client_ip=***.***.***.***; envelope-from=SendAddress@DomainName.jjp; Received: (qmail 9999 invoked by uid 99999); 00 Sun 0000 00:00:00 +0900 DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=yj20050223; d=Send.DomainName.jjp; h=Message-ID:Received:Date:From:Subject:To:MIME-Version:Content-Type; b=[rsa暗号化文字列] ; |
赤文字:結果
黄文字:サーバー固有情報(適時読み替えてください)
●第三者機関による、設定の確認
check-auth@verifier.port25.com
へ空メールを送信すると、各設定が正しく行われているかのテスト結果を返信してくれます。