Sendmail

トップ > チップス > Sendmail
2012-02-13, sendmail

初期設定

※以下の情報は、初期のRedHatやFedoraに関するものです。現在有効でないものも含まれています。

local-host-names

バーチャルホストで利用したいドメイン名を全て記述します。ホストそのものの名前も追加しておかないと、logwatch等のシステムが発行するメールが以下のようなエラーで処理されなくなることがあるようです。

config error: mail loops back to me (MX problem?)

関連パッケージの準備

-cyrus-sasl
-m4
-sendmail-cf

上記パッケージがインストールされていることを確認します(なければyumでインストール)。

# rpm -q cyrus-sasl

指定した領域名(lumber-mill.info)に対してユーザ(sendmail)を作成します。

# saslpasswd -c -u lumber-mill.info sendmail

外部ホストからsmtp(25番)ポートへのアクセスを許可する

※sendmail.cfを直接編集せずにsendmail.mcを変更して下さい。m4参照。

以下のように自マシンのグローバルIPをセットしないと、25番ポートがオープンになりません。

O DaemonPortOptions=Port=smtp,Addr=111.111.111.xxx, Name=MTA

ローカルホストからのメールも受信する必要がある場合は、以下のようにIPを明記しない設定にします。

O DaemonPortOptions=Port=smtp, Name=MTA

設定を変更する(m4)

sendmailの設定ファイルsendmail.cfは直接編集しません。まずsendmail.mcファイルを編集し、m4コマンドを使ってcfファイルを生成します。

# m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf

smtpsとSMTP-Authを利用する

sendmail.mcを以下のように変更します。

1.SMTP認証を有効化。
2.証明書(/usr/share/ssl/certs/sendmail.pem)を指定
3.smtp(25番)ポートへの外部からのアクセスを許可
4.smtps(465番)ポートをオープン

48,49c48,49
< dnl TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
< dnl define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
---
> TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
> define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl

56,59c56,59
< dnl define(`confCACERT_PATH',`/usr/share/ssl/certs')
< dnl define(`confCACERT',`/usr/share/ssl/certs/ca-bundle.crt')
< dnl define(`confSERVER_CERT',`/usr/share/ssl/certs/sendmail.pem')
< dnl define(`confSERVER_KEY',`/usr/share/ssl/certs/sendmail.pem')
---
> define(`confCACERT_PATH',`/usr/share/ssl/certs')
> define(`confCACERT',`/usr/share/ssl/certs/ca-bundle.crt')
> define(`confSERVER_CERT',`/usr/share/ssl/certs/sendmail.pem')
> define(`confSERVER_KEY',`/usr/share/ssl/certs/sendmail.pem')

105c105
< DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl
---
> DAEMON_OPTIONS(`Port=smtp, Name=MTA')dnl

123c123
< dnl DAEMON_OPTIONS(`Port=smtps, Name=TLSMTA, M=s')dnl
---
> DAEMON_OPTIONS(`Port=smtps, Name=TLSMTA, M=s')dnl

sendmail.cfを構築。

# m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf

証明書(/usr/share/ssl/certs/sendmail.pem)の作成(Fedora Core 3まで)。

# cd /usr/share/ssl/certs; make sendmail.pem

Fedora Core 4以降は以下のパスを指定。

# cd /etc/pki/tls/certs
# make sendmail.pem

sendmailの再起動。

# /etc/init.d/sendmail restart

saslauthdを起動する。自動起動もONに。

# service saslauthd start
# chkconfig saslauthd on

SMTP AUTH用のパスワードを設定する(UNIXユーザでログインできるので必要かどうか不明)。

# /usr/sbin/saslpasswd2 -u lumber-mill.info sendmail
Password: (パスワードを入力)

以上で完了です。

追記2006.9.14 Fedora Core 4では、saslの設定は必要ないかもしれません。UNIXユーザアカウントとパスワードでSMTP-Authを通過可能でした。

参考URL:

dovecot

バーチャルアドレスの設定

バーチャルホストを利用するドメインを追加する。

/etc/mail/local-host-names
xxx.com

バーチャルテーブルにアカウントを追加する。

/etc/mail/virtusertable
user@xxx.com xxx.com_user

サーバを再起動して完成(DB再構築の必要なし)。

接続を拒否するドメインを設定

/etc/mail/accessに以下のように追加する。

example.com REJECT

サーバを再起動して完成。

Postfix設定メモ

以下はpostfixに関するメモです。sendmail移行前はpostfixも使っていたので、しばらくはここに併記します。

PostfixでSMTP-Authする

メールを送信する(SMTPにメールのリレーを頼む)際に認証を行います。パスワードを知っているメンバーのみ外部からメール送信を行うことができるようになります。

main.cf
smtpd_tls_cert_file = /etc/postfix/server.pem
smtpd_tls_key_file = /etc/postfix/server.key
smtpd_use_tls = yes
smtpd_tls_session_cache_database = :sdbm:/etc/postfix/smtpd_scache

smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
smtpd_recipient_restrictions = \\
  permit_mynetworks,permit_sasl_authenticated \\
  ,reject_unauth_destination(実際は一行)
master.cf
smtps inet n - n - - :smtpd
  -o smtpd_tls_wrappermode=yes -o :smtpd_sasl_auth_enable=yes

tlsmgr fifo - - n 300 1 tlsmgr
/usr/lib/sasl2/smtpd.conf(SMTP-Auth認証設定ファイル編集)
pwcheck_method: auxprop
# saslpasswd2 -c -u yourdomain.com username
(一人目を作成する時のみファイルの所有者変更が必要)
:# chown postfix /etc/sasldb2

Postfixでバーチャルドメイン

# less /etc/postfix/virtual
hoge.com virtual
info@hoge.com user1
moga.com virtual
webmaster@moga.com user2
# postmap hash:/etc/postfix/virtual
# /etc/rc.d/init.d/postfix reload

user1,user2はUNIX上に実在するユーザです。 ドメインの後ろのvirtualは適当な値(hash化するために便宜的に書くだけ) です。 $mydestination等が弄ってあると、リレーが上手くできなくなる(らしい) 。

Postfixエイリアス

# less /etc/postfix/aliases
postmaster: root
webmaster: root

root: username

全てのシステムユーザ(nobody,daemon..)を登録し、rootを(普段利用する)通常のユーザに対応付ける。データベースに変換するコマンドは以下のとおり。

# postalias /etc/postfix/alias

この記事は役に立ちましたか?