Postfixでメールサーバ(smtp authも)

Postfixとは

PostfixとはMTA(Message Transfer Agent)である。メール転送サーバですね。SMTPサーバですので、受信するには別途POP3やIMAPサーバが必要になります。MTAとしてはsendmailが一番有名なのですが、設定が呪文のように書かないといけません。かなり細かく設定ができるので利点もあるのですが、自宅サーバではそこまで必要ないと思います。それに比べPostfixは文献も多く、何より設定が簡単です。ほぼ、デフォルトである程度セキュリティも確保されて稼動します。自宅サーバには向いてるかなと思います。

やりたいこと

メールサーバでやりたいことです。

  • ISPがOutbound 25 BlockingをしているのでISPのメールサーバにリレーさせる
  • LAN内部からは無条件で送信
  • 外部からのメール送信は認証をかける(smtp auth)
  • もちろんスパム中継サーバにさせない
  • スパム対策をしたい
  • ウイルススキャンをしたい
  • アカウント管理を簡単に

インストール

いつもので。認証でsmtp authを使用するのでpostfix-tlsとSASLが必要になります。
インストの最中でいろいろ聞かれて、答えた内容で設定ファイルが作成されます。

#apt-get install postfix-tls sasl2-bin libsasl2-modules

Postfixの設定

/etc/postfix/main.cf

以下にPostfixの設定内容です。場所は「/etc/postfix/main.cf」。「/usr/share/postfix/main.cf.dist」に詳細なコメントが書かれたサンプルがある。

#新着メールの通知無効
biff = no
#smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)

#ドメインの追加を無効user@host.$mydomain)
append_dot_mydomain = no

#インターフェイスの設定
inet_interfaces = all

#エイリアスの設定
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases

#ホスト名、ドメインの設定
myhostname = nai.homelinux.net
mydomain = nai.homelinux.net
myorigin = /etc/mailname

#許可するドメインとか
mydestination = nai.homelinux.net, localhost.$mydomain, $mydomain, localhost
#許可するネットワーク
mynetworks = 192.168.0.0/24, 127.0.0.0/8

#受信者の検索テーブル
local_recipient_maps =$alias_maps

#拡張アドレスの区切り文字
recipient_delimiter = +

#MailDir形式にする
home_mailbox = Maildir/

#デフォルトのリレーホストを指定します。
relayhost = [xxx.xxx.xxx.xxx]

### smtp auth の設定 ###

#smtp authを有効
smtpd_sasl_auth_enable = yes
#ローカルrealmと一緒にする。realmってなに??訳は"領域"らしい
smtpd_sasl_local_domain = $myhostname
#anonymousログイン禁止
smtpd_sasl_security_options = noanonymous

##メール許可条件
#-$mynetworks
#-認証済
#-自サーバ宛
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, permit_auth_destination, reject
#OutlookExpress対応
broken_sasl_auth_clients = yes

受信者リストについて

local_recipient_mapsで設定ができる受信者検索テーブルだが、デフォルトだとproxy:unix:passwd.byname $alias_mapsになっている。このままだと、システムユーザのホームディレクトリにまでメールが届けられてします。対処としてはエイリアスに全てのユーザをrootに置き換えるようにするか、特定のテーブルをlocal_recipient_mapsに定義してやることになる。別ページで解説するバーチャルドメインを使用するというのも手だ。エイリアスに書くなら以下にようにする。

daemon:root
bin:root
sys:root
sync:root
games:root
man:root
lp:root
mail:root
news:root
uucp:root
proxy:root

設定したらエイリアスデータベースの作成&更新をする必要がある。

#postalias /etc/aliases
#newaliases

smtp suthの設定

上でmain.cfの設定は済んでいているが、smtp authの認証はUNIXパスワードと別管理の方がよろしいのでその設定などをする。

/etc/postfix/sasl/smtpd.conf

認証方法などを記述する。今回はsaslのパスワードファイルを使うことにする。

pwcheck_method:auxprop
mech_list: cram-md5 digest-md5

pwcheck_methodには以下を指定できる。

内容
saslauthd saslデーモンを使用する。PAM、DB、SQLなどで認証させたい時に使用。だが、plainかlogin認証のみになる。
auxprop saslのパスワードファイル(/etc/sasldb2)を使用する。mech_listで指定しないとplainとか優先されてしまう。
pwcheck Unixのパスワードデータベースを使用する。

mech_listについて認証方法を指定する。main.cfにあるsmtpd_sasl_security_optionsの値に注意。mech_listでplainを選択し、smtpd_sasl_security_optionsで無効にすると矛盾が発生する。

内容
login 平文。ユーザ名NULLユーザ名NULLパスワードをBase64でエンコードしただけ。
plain loginと同じ平文パスワード。詳しくわからないけど、ちゃんとした仕様が決まってないみたいだが一番使われているらしい
cram-md5 サーバから送られてくる任意の文字から、パスワードを組み合わせダイジェストを作成し送信する。パスワード自体が流れない為セキュリティが確保される。
digest-md5 cram-md5を強化した形。辞書攻撃や選択平分攻撃などの対策がなされている

※cram-md5,digest-md5を指定すると強制的にpwcheckはauxpropになってしまう。

パスワードファイルの作成

/etc/sasldb2にパスワードファイルが作成される

#saslpasswd2 -u nai.homelinux.net user

パスワードの確認

こんなん出ればok

#sasldblistusers2
user@nai.homelinux.net: userPassword

てすとー

telnetを使用して稼動確認。太文字部分を入力、赤文字が出ればok

$telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
220 ESMTP Postfix
EHLO localhost
250-nai.homelinux.net
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH NTLM LOGIN PLAIN DIGEST-MD5 CRAM-MD5
250-AUTH=NTLM LOGIN PLAIN DIGEST-MD5 CRAM-MD5
250 8BITMIME
QUIT
221 Bye
Connection closed by foreign host.

debian Valid HTML 4.01 Strict [VALID RSS!]