UnixPower on Networking
  http://www.unix-power.net/

 
  Top - Solaris8 - Solaris Sendmail



最も普及しているMTAのsendmailでPOP Before SMTPを構築します。必要なソフトは次の通りです。


sendmail.8.12.5.tar.gz
ftp://ftp.sendmail.org/pub/sendmail/

db-4.0.14.tar.gz
http://www.oracle.com/technetwork/jp/database/berkeleydb/downloads/index.html

drac.tar.Z
ftp://mail.cc.umanitoba.ca/src/


qpopper4.0.4.tar.gz
ftp://ftp.qualcomm.com/eudora/servers/unix/popper/


■BerkeleyDB.4.0.14のインストール


# tar xvzf db-4.0.14.tar.gz
# cd db-4.0.14/build_unix
# CC=gcc ../dist/configure
# make
# make install


次のコマンドでシンボリックリンクをはります。


# ln -s /usr/local/Berkeley.4.0/lib/libdb-4.0.so /usr/lib/libdb-4.0.so



■Dracのインストール


下準備として以下の3つのファイルをコピーしておきます。


# cp /usr/local/BerkeleyDB.4.0/include/db.h /usr/include/db.h
# cp /usr/local/BerkeleyDB.4.0/lib/libdb-4.0.so /usr/lib/libdb-4.0.so
# cp /usr/local/lib/libgcc_s.so.1 /usr/lib/libgcc_s.so.1


作業用ディレクトリを作ってその中で作業します。


# mkdir tmp
# mv drac.tar.Z tmp
# cd tmp
# tar xvzf drac.tar.Z


Makefileの次の部分を以下のように編集します。


cc=gcc
CFLAGS = $(DEFS) -g -I/usr/local/BerkeleyDB.4.0/include
LDLIBS = -L/usr/local/BerkeleyDB.4.0/lib -lnsl -ldb


次にインストールを行います。


# make
# make install


次に/etc/mailにdracd.allowというファイルを作りその中に自サイトのIPアドレスとネットマスクを記述します。。/etcにmailというディレクトリが存在しない場合はこれを作ってやりましょう。


# vi /etc/mail/dracd.allow


中身は次のようになります。


255.255.255.255 127.0.0.1
255.255.255.255 192.168.0.150


OS起動時に自動的に立ち上がるように設定します。解凍したディレクトリの中にdracd-setup というファイルが存在するはずなので、これを編集します。


# vi ./dracd-setup
PATH=/usr/local/sbin:/usr/bin:/usr/sbin(書き換え部分)


これをスタートアップディレクトリに移動します。


# cp dracd-setup /etc/init.d/
# chmod 755 /etc/init.d/dracd-setup
# ln -s /etc/init.d/dracd-setup /etc/rc2.d/S78dracd



■qpopperのインストール


POP before SMTPへの対応が必要です。以下のコマンドでインストールを行います。


# env LD_OPTIONS="-lnsl" LDFLAGS="-lnsl" ./configure --with-drac=/dracを展開したディレクトリ
# make
# cp popper/popper /usr/sbin


これを有効にするために/etc/inetd.confに次の行をつけたします。


pop3    stream  tcp     nowait  root    /usr/sbin/popper      popper -s


実際にDBに登録されているIPアドレスは次のコマンドで知ることができます。


# /usr/local/BerkeleyDB.4.0/bin/db_dump -p /etc/mail/dracd.db



■sendmailのインストールと設定


いよいよsendmail本体のインストールを行います。


# tar xvzf sendmail.8.12.5.tar.gz
# cd sendmail-8.12.5/devtools/OS
# cp SunOS.5.8 ../Site/SunOS.5.8.m4
# vi ../Site/SunOS.5.8.m4


SunOS.5.8.m4の次の太字の箇所を追加/変更します。


#####################################################
#       $Id: SunOS.5.8,v 8.14 2002/03/21 23:59:26 gshapiro Exp $
dnl     DO NOT EDIT THIS FILE.
dnl     Place personal settings in devtools/Site/site.config.m4


define(`confCC', `gcc')
define(`confLDOPTS_SO', `-G')
define(`confBEFORE', `sysexits.h')
define(`confMAPDEF', `-DNEWDB -DNIS -DNISPLUS -DMAP_REGEX')
define(`confENVDEF', `-DSOLARIS=20800 -DNETINET6')
define(`confSM_OS_HEADER', `sm_os_sunos')
define(`confLIBS', `-lsocket -lnsl')
define(`confMTCCOPTS', `-D_REENTRANT')
define(`confMTLDOPTS', `-lpthread')
define(`confMBINDIR', `/usr/lib')
define(`confEBINDIR', `/usr/lib')
define(`confSBINGRP', `sys')
define(`confINSTALL', `${BUILDBIN}/install.sh')
define(`confDEPEND_TYPE', `CC-M')
define(`confLIBDIRS', `-L/usr/local/BerkeleyDB.4.0/lib')
APPENDDEF(`confINCDIRS', `-I/usr/local/BerkeleyDB.4.0/include')
APPENDDEF(`conf_sendmail_LIBS', `-lpthread')
APPENDDEF(`confLIBS', `-lpthread')
PUSHDIVERT(3)
sysexits.h:
        if [ -r /usr/include/sysexits.h ]; \
        then \
                ln -s /usr/include/sysexits.h; \
        fi
POPDIVERT
#####################################################


ディレクトリを移動し以下のコマンドでコンパイルをします。


# cd ../..
# ./Build -c -f /path/to/sendmail-8.12.5/devtools/Site/SunOS.5.8.m4


インストールの前段階で次の必要な処理を行います。


# mkdir /usr/share/man/cat1
# mkdir /usr/share/man/cat5
# mkdir /usr/share/man/cat8
# groupadd smmsp
# useradd -g smmsp -s /bin/false smmsp
# mkdir /var/spool/clientmqueue
# chown root:smmsp /usr/lib/sendmail
# chown smmsp:smmsp /var/spool/clientmqueue
# chmod 770 /var/spool/clientmqueue


そしてインストールをおこないます。


# ./Build install


さらにDracへの対応のためdrac.m4というファイルを作成します。


# cd /path/to/sendmail-8.12.5/cf/feature/
# vi drac.m4


以下のように作成します。


#####################################################
divert(-1)
#
# drac for sendmail.mc
#

divert(0)
VERSIONID(`drac.m4, for sendmail-8.12.*')
divert(-1)

define(`_CHECK_BY_DRAC_',`dnl
# check by drac
R`$'*   $: $&{client_addr}
R$+     $: $(drac `$'1 $: ? $)
R?      `$'@ ?
R$+     `$'@ `$'#OK')

LOCAL_CONFIG
Kdrac ifdef(`confDRAC_DBTYPE',confDRAC_DBTYPE,`btree') -a@rej@ -o ifdef(`confDRAC_DB', \
confDRAC_DB,`/etc/mail/dracd')
#####################################################


さらにproto.m4というファイルを編集します。


# cd /path/to/sendmail-8.12.5/cf/m4/
# vi proto.m4


SLocal_check_rcptという行を検索して、以下のようにすぐ下に1行追加記述して保存します。


SLocal_check_rcpt
ifdef(`_CHECK_BY_DRAC_', _CHECK_BY_DRAC_) 
Scheck`'_U_`'rcpt


sendmailの設定に入ります。


# cd /path/to/sendmail-8.12.5/cf/cf
# cp generic-solaris.mc sendmail.mc
# vi sendmail.mc


として設定ファイルを編集します。私のsendmail.mcファイルは次の通りです。


#
# Copyright (c) 1998, 1999, 2001 Sendmail, Inc. and its suppliers.
#       All rights reserved.
# Copyright (c) 1983 Eric P. Allman.  All rights reserved.
# Copyright (c) 1988, 1993
#       The Regents of the University of California.  All rights reserved.
#
# By using this file, you agree to the terms and conditions set
# forth in the LICENSE file which can be found at the top level of
# the sendmail distribution.
#
#

#
#  This is a generic configuration file for SunOS 5.x (a.k.a. Solaris 2.x
#  and Solaris 7 through the present version).
#
#  It has support for local and SMTP mail only.  If you want to
#  customize it, copy it to a name appropriate for your environment
#  and do the modifications there.
#

divert(0)dnl
VERSIONID(`$Id: generic-solaris.mc,v 8.13 2001/06/27 21:46:30 gshapiro Exp $')
OSTYPE(solaris8)dnl
define(`MAIL_SETTINGS_DIR', `/etc/mail/')dnl
Dwtest
Dmtest.co.jp
define(`confDOMAIN_NAME', `$w.$m')dnl
define(`confMIN_QUEUE_AGE', `15m')dnl
define(`confTO_QUEUEWARN', `1h')dnl
define(`confTO_QUEUERETURN', `1d')dnl
define(`confTO_IDENT', `0s')dnl
define(`STATUS_FILE', `/var/log/sendmail.st')dnl
define(`UUCP_MAILER_MAX', `2000000')dnl
define(`ALIAS_FILE', `/etc/aliases')dnl
MASQUERADE_AS(`$m')dnl
FEATURE(`masquerade_envelope')dnl
FEATURE(`drac')dnl
VIRTUSER_DOMAIN_FILE(`-o /etc/mail/virtuser-domains')dnl
FEATURE(`virtusertable', `hash /etc/mail/virtusertable.db')dnl
EXPOSED_USER(`root postmaster')dnl
define(`confPRIVACY_FLAGS', `goaway,restrictmailq')dnl
define(`confSMTP_LOGIN_MSG', `$j Domain YOU/Original; $b')dnl
define(`confOPERATORS', `.:@!^/[]+')dnl
FEATURE(`access_db', `hash -T<TMPF> /etc/mail/access.db')dnl
FEATURE(`mailertable',`hash -o /etc/mail/mailertable.db')dnl
FEATURE(dnsbl,`relays.ordb.org')dnl
FEATURE(dnsbl,`relays.osirusoft.com')dnl
FEATURE(`use_cw_file')
FEATURE(`use_ct_file')
FEATURE(always_add_domain)dnl
FEATURE(`accept_unresolvable_domains')dnl
dnl FEATURE(`relay_based_on_MX')dnl
DOMAIN(generic)dnl
MAILER(local)dnl
MAILER(smtp)dnl


次に/etc/mailに以下のファイルを作成します。


local-host-names
access
virtuser-domains
virtusertable
mailertable


local-host-names

受信するドメインを列挙します

access
デフォルトでリレーを許可する記述を書きます。以下のような感じになります。


# by default we allow relaying from localhost...
localhost.localdomain           RELAY
localhost                       RELAY
127.0.0.1                       RELAY
192.168.5                       RELAY


virtuser-domains

バーチャルドメインを設定する際、このファイルにドメイン一覧を書き込んでおきます。

virtusertable
受信する受信者アドレスと実際の配送先を指定します。以下のようになります


you@domain1.com            you
user2@domain1.com           user2
user3@domain1.com           user3
fml@domain1.com            fml
root@domain1.com           root
postmaster@domain1.com        postmaster


mailertable


通常はこれは設定しなくても大丈夫です。静的にサーバを指定してリレーさす場合に設定します。
具体的な書き方は以下のようになります。以下はあて先がdomain.ne.jpならば192.168.0.100にリレーという意味です。


domain.ne.jp        smtp:[192.168.0.100] 

accessとvirtusertableとmailertableについては次のコマンドでデータベース化させる必要があります。


# makemap hash access < access
# makemap hash virtusertable < virtusertable
# makemap hash mailertable < mailertable


あとは次のコマンドでsendmailの設定を反映させます。


# make sendmail.cf
# cp sendmail.cf /etc/mail
# /etc/init.d/sendmail stop
# /etc/init.d/sendmail start


■TLS対応


Webの世界ではHTTPを暗号化するためにHTTPSが広く使用されています。HTTPSはSSLを使用して暗号路を確保しその中にHTTPを流しているわけですが、SSLはHTTP専用というわけではなく、汎用的に様々なプロトコルを通すことができます。汎用的にSSLによる暗号路を確保するプログラムとしてstunnelやbjorbなどがあります。

最近、SSLをアプリケーション・プロトコルに取り込むことが活発に行われています。SMTPにおけるSTARTTLS もそのひとつです。

なぜSTARTSSLではないのだろうと疑問に思われる読者もおられることと思います。SSLは元々Netscape社が開発したものです。IETFにおいてSSLv3をベースにして TLSv1がまとめられました。実際にはTLSはSSLv3と非常に近いものです。


STARTTLSはRFC2487 - SMTP Service Extension for Secure SMTP over TLSで規定されています。 STARTTLSを使用することで、

  • TLSを使用して暗号路を確保
  • クライアント認証によるアクセス制御


ができるようにになります。 ここで注意しなければならないのは、SMTPは end-to-endのメカニズムではないということです。つまり、配送途中で中継されるようなケースでは、必ずしも相手に届くまでの全ての経路が暗号化されているとは限らないということです。



●TLS対応のsendmail作成


TLSはOpenSSLのインストールを前提としていますので、これがない場合は別途インストールを行います。そしてコンパイル時に指定するコンフィグファイルを以下のように編集します。(これはLinuxの場合)


define(`confDEPEND_TYPE', `CC-M')
define(`confSM_OS_HEADER', `sm_os_linux')
define(`confMANROOT', `/usr/man/man')
APPENDDEF(`confENVDEF', `-DSTARTTLS')
define(`confLIBS', `-lssl -lcrypto')
define(`confEBINDIR', `/usr/sbin')
APPENDDEF(`confLIBSEARCH', `crypt nsl')
define(`confLIBDIRS', `-L/usr/local/BerkeleyDB.4.1/lib -L/usr/local/ssl/lib')
APPENDDEF(`confINCDIRS', `-I/usr/local/BerkeleyDB.4.1/include -I/usr/local/ssl/include')

(一部抜粋)


修正後に再コンパイルを行います。あとはApache+mod_sslのところを参照して秘密鍵と証明書を作成します。ただし、sendmailから使えるようパスフレーズは解除しておいてください。


次に作成した秘密鍵と証明書をsendmailに読み込ますため、sendmail.mcに次の記述を付け足します。


define(`confCACERT_PATH', `MAIL_SETTINGS_DIR`'certs')
define(`confCACERT', `confCACERT_PATH/cert.pem')
define(`confSERVER_CERT', `confCACERT_PATH/cert.pem')
define(`confSERVER_KEY', `confCACERT_PATH/privkey.pem')


修正したsendmail.mcからsendmail.cfを作成し入れ替えてsendmailを再起動し、完了となります。



■POP/SSLの対応


qpopperをSSL対応にするため再コンパイルを行います。


# tar xvzf qpopper4.0.5.tar.gz
# cd qpopper4.0.5
# ./configure --with-openssl=/usr/local/ssl --enable-log-login \
--enable-specialauth --enable-drac=dracがあるディレクトリ
# make
# cp poppper/popper /usr/sbin


qpopperの設定ファイルを作成します。まずpop証明書を作成します。秘密鍵と証明書を一つに統合します。


# cat cert.pem > /etc/mail/certs/mail.pem
# cat privkey.pem >> /etc/mail/certs/mail.pem


そして/etc/mail/qpopper.confを以下の内容で作成します。


set clear-text-password = ssl
set tls-support = alternate-port
set tls-version = default
set tls-server-cert-file = /etc/mail/certs/mail.pem


/etc/xinetd.d の下にspopper という名前のファイル(内容は下記参照)を作成します。


service pop3s
{
socket_type = stream
wait = no
user = root
server = /usr/sbin/popper
server_args = -D 127.0.0.1 -s -f /etc/mail/qpopper.conf
disable = no
}


これでxinetdを再起動すればセキュアなPOPが実現できます。




 
 Copyright(C) 2003-2015 UnixPower on Networking All rights reserved.