メールサーバ構築 postfix+dovecot

Linuxではおなじみのミドルウェア、postfixでのメールサーバ構築になります。
今回は迷惑メールの不正中継対策用にSMTP-Authの設定を入れたメールサーバの構築を行いたいと思います。

※SMTP-Authとはメール送信時にユーザ名とパスワードで認証を行なう機能で、認証されないメール中継を行わない事で不正中継を防止する

postfix(SMTP) dovecot(POP/IMAP)

postfixのインストール

yumだと下記3つのインストールを求められたので全て入れます

# yum install postfix

Installing:
postfix i386 2:2.3.3-6.el5 base 3.6 M
Installing for dependencies:
mysql i386 5.0.95-5.el5_9 updates 4.9 M
perl-DBI i386 1.52-2.el5 base 600 k

postfixの設定
# vi /etc/postfix/main.cf

myhostname = mail.testserver.ddo.jp ← FQDNを指定

mydomain = testserver.ddo.jp ← ドメイン名を指定

myorigin = $mydomain ← ローカルからのメール送信時の@以降にドメイン名付加

inet_interfaces = localhost ← 外部からのメール受信を許可する場合はallへ変更

inet_interfaces = all

#mydestination = $myhostname, localhost.$mydomain, localhost
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain ← ドメイン宛メールが受信できる方に変更
#mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain,

home_mailbox = Maildir/ ← メールボックス形式はMaildir形式を指定

smtpd_banner = $myhostname ESMTP unknown ← メールサーバソフト名を隠す

message_size_limit = 20971520 ←受信メールサイズを20MBに制限

##SMTP-Authの設定を最終行に追加する
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
smtpd_recipient_restrictions =
permit_mynetworks
permit_sasl_authenticated
reject_unauth_destination

SMTP-Auth設定
設定ファイルを編集して認証方式を設定します
# vi /usr/lib/sasl2/smtpd.conf
デフォルトはシステムユーザー名、パスワードを使用するようになっています
pwcheck_method: saslauthd
システムユーザー名、パスワードとは別にする場合は下記に変更します
今回は別々で設定する方式にします
pwcheck_method: auxprop ← 変更

自動起動をonにして起動する
# chkconfig saslauthd on
# /etc/init.d/saslauthd start

sasldb2の所有グループをpostfixへ変更する
chgrp postfix /etc/sasldb2

【新規ユーザ対処】
新規ユーザ追加時に自動でホームディレクトリにMaildir形式のメールボックスが作成されるようにする
# mkdir -p /etc/skel/Maildir/{new,cur,tmp}
# chmod -R 700 /etc/skel/Maildir/ ← パーミッション設定

ログインできないアカウントを作成
# useradd -s /sbin/nologin testuser
# passwd testuser
パスワードが聞かれるので入力します

SMTP-Auth用ユーザーの作成 ホスト名:mail.testserver.ddo.jp ユーザー:testuser
# saslpasswd2 -c -u mail.testserver.ddo.jp -a smtpauth testuser
パスワードが聞かれるので入力します

ユーザーの確認
# sasldblistusers2
testuser@mail.testserver.ddo.jp: userPassword

ユーザーを削除
# saslpasswd2 -d testuser -u mail.testserver.ddo.jp

sendmail停止
# /etc/init.d/sendmail stop
メールサーバ切り替え
# alternatives –config mta

2 プログラムがあり ‘mta’ を提供します。

選択 コマンド
———————————————–
*+ 1 /usr/sbin/sendmail.sendmail
2 /usr/sbin/sendmail.postfix

Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:2

自動起動をonにして起動する
 ※SMTP-Authを使う場合はメールサーバより前に起動する必要があるので順番は気をつける
# chkconfig postfix on
# /etc/init.d/postfix start

iptablesやルータ側で25番ポートが空いていなければ開ける
iptables 設定例
# iptables -A INPUT -p tcp -m state –state NEW –dport 25 -j ACCEPT
# service iptables save
# service iptables stop
# service iptables start

最下部に記述されるので最後にall rejectポリシーがある場合は記述行を指定して下さい
私は面倒なので直接/etc/sysconfig/iptableのファイルを編集しています。

dovecot設定

yumでインストール

# yum install dovecot

Installing:
dovecot i386 1.0.7-7.el5_7.1 base 1.6 M

dovecot設定
# vi /etc/dovecot.conf
protocols = imap imaps ← imapを設定

mail_location = maildir:~/Maildir ← メールボックス形式をMaildirにする

自動起動をonにして起動する
# chkconfig dovecot on
# /etc/init.d/dovecot start

iptablesやルータ側で143番ポート(IMAP)が空いていなければ開ける
iptables 設定例
# iptables -A INPUT -p tcp -m state –state NEW –dport 143 -j ACCEPT
# service iptables save
# service iptables stop
# service iptables start

メーラー側の設定でログインパスワードとSMTP-Authパスワードを別にした場合は
設定を間違えないように注意して下さい

## メールの配送経路を指定する場合 ##
postfixでの配送経路指定はtransportにて行います

単純にtransportファイルに配送系を書いて
main.cfにtransport_mapsを書いても問題ないのですが
今回はhashDBを使ってhash化したDBを作成します。

DB化すると通常のファイルを読み込むよりも処理を高速化できます。

main.cfにtransport_mapsを記述

transport_maps = hash:/etc/postfix/transportlist ← DB化するファイルを指定

transportlistを作成
# vi transportlist
hoge.co.jp smtp:192.168.1.254
hogehoge.co.jp smtp:mail.test.co.jp:25

[書式]
ドメイン smtp:MTAサーバ:ポート

hoge.co.jp ドメインのみ
.hoge.co.jp サブドメインを含む場合
hoge.co.jp smtp:[192.168.1.254]
[]でくくることでMXレコードを使用しないで、メールを転送します。
ポートの設定はなくてもデフォルトの25を使用します
MTA側のポート変更がなければ特段設定する必要はないです

ルート記述をしたファイルを作成したらDB化します
# postmap transportlist

transport.dbが作成されます

中身を見るにはstringsコマンドを使用します
# starings transport.db
hoge.co.jp
smtp:192.168.1.254
hogehoge.co.jp
smtp:mail.test.co.jp:25

設定変更後は設定反映の為にpostfixのリロードをして下さい
# /etc/init.d/postfix reload
postfix を再読み込み中: [ OK ]

コメントする