!!!概要 Solaris 10デフォルトのMTAはsendmailですが、いまだにsendmailを使い続ける理由もあまりないのでPostfixに入れ替えてみます。 !!!インストール !!sendmailのアンインストール sendmailが残っているとパッケージのアップデート時などにPostfixに悪影響を及ぼす可能性があるので削除します。設定も削除されてしまいますので、必要に応じて/etc/mail以下のファイルをバックアップしてください。 # pkgrm SUNWsndmu # pkgrm SUNWsndmr !!OpenSSLのインストール [Freeware for Solaris|http://www.sunfreeware.com/] からOpenSSLのパッケージをダウンロードしてインストールします。 $ gzip -d openssl-0.9.8e-sol10-x86-local.gz # pkgadd -d openssl-0.9.8e-sol10-x86-local !!Berkeley DBのインストール [Freeware for Solaris|http://www.sunfreeware.com/] からBerkeley DBのパッケージをダウンロードしてインストールします。 $ gzip -d db-4.4.20.NC-sol10-x86-local.gz # pkgadd -d db-4.4.20.NC-sol10-x86-local !!ユーザ・グループの作成 postfixが使うユーザとグループを作成します。 # groupadd postfix # groupadd postdrop # useradd -g postfix -s /bin/false postfix !!ダウンロード・展開 http://www.postfix.org/ からソースコードをダウンロードして適当なディレクトリに展開します。 $ tar zxvf postfix-2.4.0.tar.gz $ cd postfix-2.4.0 !!コンパイル コンパイルします。例ではSun StudioのCコンパイラを使用していますがgccでもよいです。 以下の機能を有効にするためにオプションを指定します。 *Dovecot SASL-Auth を使う。 *TLSを使う。 *Berkeley DB を組み込む。 $ make makefiles CC=/opt/SUNWspro/bin/cc \ CCARGS='-DUSE_SASL_AUTH -DDEF_SASL_SERVER=\"dovecot\" \ -DUSE_TLS -I/usr/local/ssl/include \ -DHAS_DB -I/usr/local/BerkeleyDB.4.4/include' \ AUXLIBS="-R/usr/local/ssl/lib -L/usr/local/ssl/lib -lssl -lcrypto \ -R/usr/local/BerkeleyDB.4.4/lib -L/usr/local/BerkeleyDB.4.4/lib -ldb" $ make !!インストール インストールします。途中でいくつか設定を尋ねられますがデフォルトで問題ないと思います。必要に応じて変更してください。 # make install 問題なくインストールが進んでいるかと思ったら、以下のようなエラーが出て止まってしまいました。 postfix-install: nqmgr: not found postfix-install: usr: not found Updating ... ln: Insufficient arguments (0) Usage: ln [-f] [-n] [-s] f1 [f2] ln [-f] [-n] [-s] f1 ... fn d1 ln [-f] [-n] -s d1 d2 *** Error code 1 make: Fatal error: Command failed for target `install' エラーメッセージで検索してみると以下のページがヒットしました。 http://archives.neohapsis.com/archives/postfix/2007-04/0073.html どうもSolaris 10の/bin/shが変な動きをするようです。Makefileの中の、SHELL=/bin/sh のところを SHELL=/usr/bin/bash に変えてみたところ正常にインストールできました。 !!!設定 !!SSL証明書 TLSで使うための秘密鍵と証明書を作成します。opensslで自己署名証明書を作成する手順を簡単に説明します。 CAの作成 # /usr/local/ssl/misc/CA.pl -newca 秘密鍵およびCSRの作成 # openssl req -new -nodes -keyout postfix-key.pem -out postfix-req.pem サーバ証明書の作成 # openssl ca -out postfix-cert.pem -infiles postfix-req.pem !!main.cf /etc/postfix/main.cfに設定を追記します。 基本的な設定 # 自ホスト名をFQDNで指定する myhostname = mail.shakemid.com # ドメイン名を指定する mydomain = shakemid.com # ドメイン情報のないメールアドレスにドメイン名を付ける myorigin = $mydomain # すべてのネットワークインタフェースで接続を待ち受ける inet_interfaces = all # 自分宛とみなすドメインを指定する mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain # リレーを許可する送信元のネットワークを指定する mynetworks = 192.168.0.0/24 127.0.0.0/8 # エイリアスファイルを指定する alias_maps = hash:/etc/postfix/aliases # newaliasesコマンドで更新されるファイルを指定する alias_maps = hash:/etc/postfix/aliases # メールボックス形式としてMaildir形式を使う home_mailbox = Maildir/ # バナーを指定する(ソフトウェア名は表示しない) smtpd_banner = $myhostname ESMTP # RCPT TO時に適用するアクセス制限 smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination TLSを使用するための設定 # ルート証明書 smtpd_tls_CAfile = /etc/postfix/cacert.pem # サーバ証明書 smtpd_tls_cert_file = /etc/postfix/postfix-cert.pem # サーバの秘密鍵 smtpd_tls_key_file = /etc/postfix/postfix-key.pem # ReceivedヘッダにTLSの情報を書き込む smtpd_tls_received_header = yes # TLSセッションキャッシュを使う smtpd_tls_session_cache_database = btree:/var/spool/postfix/smtpd_tls_session_cache # 乱数ファイル tls_random_source = dev:/dev/urandom # STARTTLSが指定されたときにTLSを使う smtpd_tls_security_level = may Dovecot SASL-Auth を使用するための設定 # SASL-Authを使用する smtpd_sasl_auth_enable = yes # 認証realmを指定する smtpd_sasl_local_domain = $myhostname # Outlookなどで認証を行うための設定 broken_sasl_auth_clients = yes # Dovecot SASL-Authを使用する smtpd_sasl_type = dovecot # 認証用ソケット smtpd_sasl_path = private/auth !!SMTPSの設定 TCP 465ポートをTLS専用ポートとして設定します。 TCP 25ポートでSTARTTLSを使う場合は不要です。 master.cfに追記します。 smtps inet n - n - - smtpd -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject /etc/servicesにサービスを追記します。 smtps 465/tcp # SMTP over SSL !!エイリアスの設定 /etc/postfix/aliasesを開いてroot宛のメールを受け取るユーザを設定します。mailbox_commandを指定している場合はrootのメールボックスにメールが配送されなくなりますので必ず指定する必要があります。 root: you 編集後、newaliasesコマンドを実行します。 # newaliases コマンドを実行すると/etc/postfix/aliases.dbファイルが作成されます。 aliasesの編集後はnewaliasesコマンドを実行するのを忘れないようにしてください。 !!Dovecotの設定 Dovecot側で認証デーモンソケットを有効にするために、/usr/local/etc/dovecot.confに以下の内容を追記します。 auth default { ... socket listen { client { path = /var/spool/postfix/private/auth mode = 0660 user = postfix group = postfix } } ... } !!SpamAssassinとの連携 PostfixとSpamAssassinを組み合わせる方法はいくつかありますが、ここではprocmailを使って連携させてみます。 SpamAssassinのインストールについては、[[日本語対応SpamAssassinインストール]]を参考にしてください。 /etc/postfix/procmailrc として作成する # configuration for procmail PATH=/usr/local/bin:/usr/bin MAILDIR=$HOME/Maildir DEFAULT=$MAILDIR/ #LOGFILE=$MAILDIR/procmail.log LOCKFILE=$MAILDIR/procmail.lock :0fw |spamc main.cfに追記する # メールの配送にprocmailを使用する mailbox_command = /opt/sfw/bin/procmail /etc/postfix/procmailrc !!!起動 !!起動スクリプト 起動スクリプトの例です。/lib/svc/method/postfixとして作成します。 #!/sbin/sh # rc script for postfix PROG=/usr/sbin/postfix SERVICE=`basename $PROG` ECHO=/usr/ucb/echo case "$1" in start) $ECHO -n "starting $SERVICE ... " $PROG start && $ECHO "[ OK ]" || $ECHO "[ NG ]" ;; stop) $ECHO -n "stopping $SERVICE ... " $PROG stop && $ECHO "[ OK ]" || $ECHO "[ NG ]" ;; restart) $0 stop sleep 3 $0 start ;; reload|refresh) $ECHO -n "refreshing $SERVICE ... " $PROG reload && $ECHO "[ OK ]" || $ECHO "[ NG ]" ;; *) echo "Usage: $0 { start | stop | restart | refresh }" exit 1 ;; esac exit 0 !!マニフェストファイル マニフェストファイルの例です。デフォルトで付属しているsmtp-sendmail.xmlを改変しました。/var/svc/manifest/network/smtp-postfix.xmlとして作成します。 マニフェストをインポートします。 # svccfg -v import smtp-postfix.xml !!サービス起動 # svcadm enable postfix !!!テスト !!Telnetで接続してみる TelnetでPostfixに接続して送信テストを行ってみます。 $ telnet localhost 25 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 mail.shakemid.com ESMTP EHLO localhost 250-mail.shakemid.com 250-PIPELINING 250-SIZE 10240000 250-VRFY 250-ETRN 250-STARTTLS 250-AUTH PLAIN LOGIN 250-AUTH=PLAIN LOGIN 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN MAIL FROM: user 250 2.1.0 Ok RCPT TO: user 250 2.1.5 Ok DATA 354 End data with . Subject: test test . 250 2.0.0 Ok: queued as 6CE5320512 quit !!オープンリレーチェック インターネットに晒されるメールサーバの場合はオープンリレーのチェックを行っておきましょう。 *[第三者中継チェック RBL.JP|http://www.rbl.jp/svcheck.php] !!!リンク *[The Postfix Home Page|http://www.postfix.org/] - 公式 *[Postfixのぺーじ|http://www.postfix-jp.info/] - 日本語ドキュメント