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 ]