自宅サーバーを構築した場合には、メールサーバーもぜひ欲しい機能ではないかと思います。
プロバイダーの場合には、1つのメールアドレスを追加するにもお金がかかりますが、自宅サーバーの場合には何百のメールアドレスを作成しても無料です。
このように魅力のあるメールサーバーですが、最近は少し事情が変わってきました。
所謂(いわゆる)迷惑メール対策で、ほとんどのプロバイダーが不正中継を防止するための対策を立て始めたのです。
自宅サーバーはこの影響をもろに受けますから、メールサーバーを構築しても受信はできるが外部への送信はできないと言うような事態が起きます。
この対策は、各プロバイダーで異なりますから、自分の所属するプロバイダーによっては、これを回避する事が出来ないと言うような事が起きるようです。
私の所属するyahooもそのひとつであり、同じ設定でもyahooでは認証エラーから逃れられなかったものが、別のプロバイダーではすんなり繋がったりします。
私の場合はたまたま2箇所のプロバイダーに所属していましたから最終的にこれが判ったのですが、ここまで来るまでにもかなりの試行錯誤をしておりますから、接続が可能なプロバイダーであってもちゃんと繋がるまでには相当の苦労をする場合がある事を覚悟したほうが良いでしょう。

最初から意欲を削ぐような事を言ってしまいましたが、これは私が結構苦労したからであり、ひょっとしたらすんなり行くかも知れません。
メールサーバーは導入と設定が楽なPostfixを使用します。
qmailにしたい方も多いと思いますが、私の感じではバッチが必要どうのこうのとか導入や設定がかなり難しい感じです。
2度ほどうまくいかなくて挫折しましたので、導入が楽なPostfixにしました。

インストールの前に、まずポート関係を調べてください。
ポートの110番や25番が開いて無いと言う事は絶対に無いでしょうが、サブミッションポートが開いていないことはよくあります。
この場合ルーターでポートを開いても、外部からは接続できない事になります。
私の場合、ポートの465番は開いておりませんでした。
このポートが開いていない場合にはOpenSSLでの送信が出来ません。
次のように確認してなければ追記します。

[root@meckk ~]# vi /etc/services
# /etc/services:
# $Id: services,v 1.42 2006/02/23 13:09:23 pknirsch Exp $
#
# Network services, Internet style
#

途中省略

https 443/tcp # MCom
https 443/udp # MCom
snpp 444/tcp # Simple Network Paging Protocol
snpp 444/udp # Simple Network Paging Protocol
microsoft-ds 445/tcp
microsoft-ds 445/udp kpasswd 464/tcp kpwd # Kerberos "passwd"
kpasswd 464/udp kpwd # Kerberos "passwd"
smtps 465/tcp <−これを追加しました。
smtps 465/udp <ーこれを追加しました。
photuris 468/tcp
photuris 468/udp
saft 487/tcp # Simple Asynchronous File Transfer
saft 487/udp # Simple Asynchronous File Transfer
gss-http 488/tcp
gss-http 488/udp

whoami 565/tcp
whoami 565/udp
submission 587/tcp msa # mail message submission<−確認します。
submission 587/udp msa # mail message submission<−確認します。
npmp-local 610/tcp dqs313_qmaster # npmp-local / DQS
npmp-local 610/udp dqs313_qmaster # npmp-local / DQS

ircs 994/tcp
ircs 994/udp
pop3s 995/tcp # POP-3 over SSL<−確認します。
pop3s 995/udp # POP-3 over SSL<−確認します。


メールの認証のためのソフトもインストールされているか確認します。
私の場合を表示します。
私の場合はうまくいかなかった時にいろいろ入れたので、必要では無いものも含まれています。

[root@meckk ~]# rpm -qa | grep sasl
cyrus-sasl-lib-2.1.22-4
cyrus-sasl-md5-2.1.22-4
cyrus-sasl-2.1.22-4
cyrus-sasl-devel-2.1.22-4
cyrus-sasl-plain-2.1.22-4
[root@meckk ~]#


それではPostfixをインストールしましょう。

[root@meckk ~]# yum -y install postfix


インストールには何の問題も無く終了すると思います。
次に設定ですが、これに関してはあちらこちらのサイトで解説されています。
設定に関しては、各サイト共ほとんど同一のように見受けられます。

[root@meckk ~]# vi /etc/postfix/main.cf
# INTERNET HOST AND DOMAIN NAMES
#
# The myhostname parameter specifies the internet hostname of this
# mail system. The default is to use the fully-qualified domain name
# from gethostname(). $myhostname is used as a default value for many
# other configuration parameters.
#
#myhostname = host.domain.tld
#myhostname = virtual.domain.tld
myhostname = fedora.meckk.com <−これを追加しました。

# The mydomain parameter specifies the local internet domain name.
# The default is to use $myhostname minus the first component.
# $mydomain is used as a default value for many other configuration
# parameters.
#
mydomain = meckk.com <−これを追加しました。

# The mydomain parameter specifies the local internet domain name.
# The default is to use $myhostname minus the first component.
# $mydomain is used as a default value for many other configuration
# parameters.
#
mydomain = meckk.com

# SENDING MAIL
#
# The myorigin parameter specifies the domain that locally-posted
# mail appears to come from. The default is to append $myhostname,
# which is fine for small sites. If you run a domain with multiple
# machines, you should (1) change this to $mydomain and (2) set up
# a domain-wide alias database that aliases each user to
# user@that.users.mailhost.
#
# For the sake of consistency between sender and recipient addresses,
# myorigin also specifies the default domain name that is appended
# to recipient addresses that have no @domain part.
#
#myorigin = $myhostname
#myorigin = $mydomain
myorigin = $mydomain <−これを追加しました。

# RECEIVING MAIL

# The inet_interfaces parameter specifies the network interface
# addresses that this mail system receives mail on. By default,
# the software claims all active interfaces on the machine. The
# parameter also controls delivery of mail to user@[ip.address].
#
# See also the proxy_interfaces parameter, for network addresses that
# are forwarded to us via a proxy or network address translator.
#
# Note: you need to stop/start Postfix when this parameter changes.
#
#inet_interfaces = all
#inet_interfaces = $myhostname
#inet_interfaces = $myhostname, localhost
inet_interfaces = all <−これを追加しました。

# The mydestination parameter specifies the list of domains that this
# machine considers itself the final destination for.
#
# These domains are routed to the delivery agent specified with the
# local_transport parameter setting. By default, that is the UNIX
# compatible delivery agent that lookups all recipients in /etc/passwd
# and /etc/aliases or their equivalent.
#
# The default is $myhostname + localhost.$mydomain. On a mail domain
# gateway, you should also include $mydomain.
#
# Do not specify the names of virtual domains - those domains are
# specified elsewhere (see VIRTUAL_README).
#
# Do not specify the names of domains that this machine is backup MX
# host for. Specify those names via the relay_domains settings for
# the SMTP server, or use permit_mx_backup if you are lazy (see
# STANDARD_CONFIGURATION_README).
#
# The local machine is always the final destination for mail addressed
# to user@[the.net.work.address] of an interface that the mail system
# receives mail on (see the inet_interfaces parameter).
#
# Specify a list of host or domain names, /file/name or type:table
# patterns, separated by commas and/or whitespace. A /file/name
# pattern is replaced by its contents; a type:table is matched when
# a name matches a lookup key (the right-hand side is ignored).
# Continue long lines by starting the next line with whitespace.
#
# See also below, section "REJECTING MAIL FOR UNKNOWN LOCAL USERS".
#
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain <−これを追加しました。
#mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
#mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain,
# mail.$mydomain, www.$mydomain, ftp.$mydomain

# Alternatively, you can specify the mynetworks list by hand, in
# which case Postfix ignores the mynetworks_style setting.
## Specify an explicit list of network/netmask patterns, where the
# mask specifies the number of bits in the network part of a host
# address.
#
# You can also specify the absolute pathname of a pattern file instead
# of listing the patterns here. Specify type:table for table-based lookups
# (the value on the table right-hand side is not used).
#
#mynetworks = 168.100.189.0/28, 127.0.0.0/8
#mynetworks = $config_directory/mynetworks
#mynetworks = hash:/etc/postfix/network_table
mynetworks = 192.168.1.0/24, 127.0.0.0/8 <−これを追加しました。

# The relayhost parameter specifies the default host to send mail to
# when no entry is matched in the optional transport(5) table. When
# no relayhost is given, mail is routed directly to the destination.
#
# On an intranet, specify the organizational domain name. If your
# internal DNS uses no MX records, specify the name of the intranet
# gateway host instead.
#
# In the case of SMTP, specify a domain, host, host:port, [host]:port,
# [address] or [address]:port; the form [host] turns off MX lookups.
#
# If you're connected via UUCP, see also the default_transport parameter.
#
#relayhost = $mydomain
#relayhost = [gateway.my.domain]
#relayhost = [mailserver.isp.tld]
#relayhost = uucphost
#relayhost = [an.ip.add.ress]
relayhost = [ybbsmtp.mail.yahoo.co.jp]:587 <−これを追加しました。

プロバイダーのOP25B対策で自宅サーバからメールを送信しても拒否されてメールが相手に届きません。
その回避策として、プロバイダーをリレーして送信するように設定を行っております。
上記はヤフーのメールのSMTPサーバーに設定してありますが、ヤフーの場合はこれでも認証に失敗するようです。
別のプロバイダーに変更して試した場合には、リレーを行ってくれましたのでヤフーだけの問題かも知れません。


# DELIVERY TO MAILBOX
#
# The home_mailbox parameter specifies the optional pathname of a
# mailbox file relative to a user's home directory. The default
# mailbox file is /var/spool/mail/user or /var/mail/user. Specify
# "Maildir/" for qmail-style delivery (the / is required).
#
#home_mailbox = Mailbox
home_mailbox = Maildir/ <−これを追加しました。

# SHOW SOFTWARE VERSION OR NOT
## The smtpd_banner parameter specifies the text that follows the 220
# code in the SMTP server's greeting banner. Some people like to see
# the mail version advertised. By default, Postfix shows no version.
## You MUST specify $myhostname at the start of the text. That is an
# RFC requirement. Postfix itself does not care.
##smtpd_banner = $myhostname ESMTP $mail_name
#smtpd_banner = $myhostname ESMTP $mail_name ($mail_version)
smtpd_banner = $myhostname ESMTP unknown <−これを追加しました。

以下は最終行へ追加したものです。
SMTP-Authを使用するための設定です。

smtpd_sasl_auth_enable = yes <−これを追加しました。
smtpd_sasl_local_domain = $myhostname <−これを追加しました。
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination <−これを追加しました。

受信メールのサイズ制限(10MB=10*1024*1024)を行うための設定です。
message_size_limit = 1048570 <−これを追加しました。

これ以下はSSLでメールを行うための設定です。
SSLにしていなければ当面はコメントアウト又は削除してください。
SSLについては次以降に説明します。


smtpd_use_tls = yes <−これを追加しました。
smtpd_tls_cert_file = /etc/pki/tls/certs/mail.pem <−これを追加しました。
smtpd_tls_key_file = /etc/pki/tls/certs/mail.pem <−これを追加しました。
smtpd_tls_session_cache_database = btree:/etc/postfix/smtpd_scache <−これを追加しました。

これは、OP25B対策のためにメールをプロバイダでリレーするための設定です
この中にはプロバイダーによって設定を変える必要があったり、あらかじめ設定ファイルを作成しておく必要があります。
当面は必要としないものですから、コメントアウト又は削除してください。
OP25B対策については、次以降に説明します。


smtp_sasl_auth_enable = yes <−これを追加しました。
smtp_sasl_password_maps = hash:/etc/postfix/authinfo <−これを追加しました。(認証用のファイルは事前に作成する:ファイル名は任意)
smtp_sasl_security_options = noanonymous <−これを追加しました。
smtp_sasl_mechanism_filter = PLAIN <−これを追加しました。(プロバイダーの認証方式に合わせる)


master.cfの内容も変更します。
サブミッションポートの開放とオープンSSLの開放です。

[root@meckk ~]# vi /etc/postfix/master.cf 
#
# Postfix master process configuration file. For details on the format
# of the file, see the master(5) manual page (command: "man 5 master").
#
# ==========================================================================
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (yes) (never) (100)
# ==========================================================================
smtp inet n - n - - smtpd
submission inet n - n - - smtpd <−これを追加しました。
-o smtpd_enforce_tls=yes <−これを追加しました。
-o smtpd_sasl_auth_enable=yes <−これを追加しました。
# -o smtpd_client_restrictions=permit_sasl_authenticated,reject
smtps inet n - n - - smtpd <−これを追加しました。
-o smtpd_tls_wrappermode=yes <−これを追加しました。
-o smtpd_sasl_auth_enable=yes <−これを追加しました。
# -o smtpd_client_restrictions=permit_sasl_authenticated,reject
#628 inet n - n - - qmqpd


次にSMTP-Auth起動設定を行います。

[root@meckk ~]# /etc/rc.d/init.d/saslauthd star
saslauthd を起動中: [ OK ]

自動起動の設定を行います。
[root@meckk ~]# chkconfig saslauthd on

自動起動設定の確認を行います。
[root@meckk ~]# chkconfig --list saslauthd
saslauthd 0:off 1:off 2:on 3:on 4:on 5:on 6:off


530 Must issue a STARTTLS command first (530 はじめに,STARTTLS コマンドを発行しなければいけない)