安装&初始化配置
#centos下
yum install -y postfix dovecot
#ubuntu下
apt install -y postfix dovecot-core dovecot-imapd dovecot-lmtpd dovecot-pop3d
General mail configuration type:
选择 3. Internet with smarthost
输入 System mail name: example.com
直接回车 SMTP relay host (blank for none):
设置域名
hostnamectl set-hostname mail.example.com
vim /etc/hosts
添加以下,假设192.168.10.100是本机局域网ip
192.168.10.100 mail.example.com mail
192.168.10.100 example.com
配置postfix
vim /etc/postfix/main.cf
myhostname = mail.example.com
mydomain = example.com
myorigin = $mydomain
inet_interfaces = all
inet_protocols = all
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
# 允许从本地网络中的其它邮件服务器转发邮件
mynetworks = 127.0.0.0/8, 10.0.0.0/8, 192.168.0.0/16, 172.0.0.0/8
# 允许外部邮件服务器向本邮件服务器发送邮件
smtpd_recipient_restrictions = permit_mynetworks,permit_auth_destination,permit_sasl_authenticated,reject
home_mailbox = Maildir/
smtpd_banner = $myhostname ESMTP
# 添加到最后
# 规定邮件最大尺寸为10M
message_size_limit = 10485760
# 规定收件箱最大容量为1G
mailbox_size_limit = 1073741824
# SMTP认证
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_authenticated_header = yes
broken_sasl_auth_clients = yes
上面配置中smtpd_recipient_restrictions的配置的释义是:
1、permit_mynetworks: 允许来自指定网络的SMTP客户端进行邮件投递。这意味着,如果您在mynetworks配置项中定义了信任的网络范围(如内部网络或已知安全的IP地址段),那么这些来源发送到任何收件人的邮件都将被接受。
2、permit_auth_destination: 如果发件人尝试向邮件服务器本地域或已经通过mydestination、virtual_alias_domains等配置指定为可接受目的地的域名发送邮件,则允许该邮件继续处理。这意味着,只要是发往本服务器负责处理的合法目的地址的邮件都会被接受。
3、permit_sasl_authenticated: 允许所有经过SASL身份验证的用户发送邮件到任何目的地。这适用于那些已经通过SMTP AUTH成功认证的用户,无论他们试图将邮件发送给哪个域。
4、reject: 在上述条件均未匹配的情况下,拒绝其余所有的邮件投递请求。这意味着如果邮件不是从受信任的网络发出,也不是发往本地域,并且发件人也未通过SASL身份验证,则Postfix会拒绝接收和处理这样的邮件。
综上所述,这个配置设计了一个严格的邮件接收策略,优先接受来自内部网络、发往本地管理的目的地以及经过身份验证的用户的邮件,而对于不符合这些条件的任何其他邮件投递请求,系统则直接拒绝。
如果postfix安装后缺少控制脚本,则在/etc/init.d/目录下提供一个脚本来管理postfix的启动与停止
vim /etc/init.d/postfix
#!/bin/bash
#
# postfix Postfix Mail Transfer Agent
#
# chkconfig: 2345 80 30
# description: Postfix is a Mail Transport Agent, which is the program \
# that moves mail from one machine to another.
# processname: master
# pidfile: /var/spool/postfix/pid/master.pid
# config: /etc/postfix/main.cf
# config: /etc/postfix/master.cf
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 3
[ -x /usr/sbin/postfix ] || exit 4
[ -d /etc/postfix ] || exit 5
[ -d /var/spool/postfix ] || exit 6
RETVAL=0
prog="postfix"
start() {
# Start daemons.
echo -n $"Starting postfix: "
/usr/bin/newaliases >/dev/null 2>&1
/usr/sbin/postfix start 2>/dev/null 1>&2 && success || failure $"$prog start"
RETVAL=$?
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/postfix
echo
return $RETVAL
}
stop() {
# Stop daemons.
echo -n $"Shutting down postfix: "
/usr/sbin/postfix stop 2>/dev/null 1>&2 && success || failure $"$prog stop"
RETVAL=$?
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/postfix
echo
return $RETVAL
}
reload() {
echo -n $"Reloading postfix: "
/usr/sbin/postfix reload 2>/dev/null 1>&2 && success || failure $"$prog reload"
RETVAL=$?
echo
return $RETVAL
}
abort() {
/usr/sbin/postfix abort 2>/dev/null 1>&2 && success || failure $"$prog abort"
return $?
}
flush() {
/usr/sbin/postfix flush 2>/dev/null 1>&2 && success || failure $"$prog flush"
return $?
}
check() {
/usr/sbin/postfix check 2>/dev/null 1>&2 && success || failure $"$prog check"
return $?
}
restart() {
stop
start
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
reload)
reload
;;
abort)
abort
;;
flush)
flush
;;
check)
check
;;
status)
status master
;;
condrestart)
[ -f /var/lock/subsys/postfix ] && restart || :
;;
*)
echo $"Usage: $0 {start|stop|restart|reload|abort|flush|check|status|condrestart}"
exit 1
esac
exit $?
设置该脚本权限
chmod +x /etc/init.d/postfix
配置dovecot
vi /etc/dovecot/dovecot.conf
# 启用Dovecot服务
protocols = imap pop3 lmtp
# 如果不使用IPv6,请修改为*
listen = *
login_trusted_networks = 0.0.0.0/0
vi /etc/dovecot/conf.d/10-auth.conf
disable_plaintext_auth = no
auth_mechanisms = plain login
vi /etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:~/Maildir
vi /etc/dovecot/conf.d/10-master.conf
# Postfix smtp验证
service auth {
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}
}
vi /etc/dovecot/conf.d/10-ssl.conf
# 同时支持ssl和非ssl
ssl = yes
启动服务
#centos下
systemctl start dovecot
systemctl start postfix
systemctl enable dovecot
systemctl enable postfix
#ubuntu下
service dovecot start
service postfix start
chkconfig dovecot on
chkconfig postfix on
查看配置
postconf -n
邮件用户就是系统的用户,例如root,就是一个邮箱用户,邮箱是root@example.com,密码就是root的密码,所以需要创建用户,只要使用useradd创建用户,再使用passwd设置密码。创建用户后,再在用户目录下创建Maildir目录(邮件数据的存储目录)并设置权限
# 创建用户
useradd nineven
#设置密码,会要求输入两次密码
passwd nineven
#创建目录
mkdir /home/nineven/Maildir
chown nineven:nineven /home/nineven/Maildir
测试:可以使用Foxmail等第三方软件来收发邮件。
配置SSL
创建自定义的ssl证书
cd /etc/pki/tls/certs/
#会要求你输入一个大于四位数的密码,输入并记住,下面几个命令会用到
openssl genrsa -aes128 -out email.key 2048
#会要求你验证刚才输入的密码,然后要求输入一系列信息,可以都不输入,一路回车到结束即可
openssl req -new -key email.key -out email.csr
#移除私钥文件的密码保护
openssl rsa -in email.key -out email.key.unsecure
#会要求你验证前面定义过的密码
openssl x509 -req -days 700 -in email.csr -signkey email.key.unsecure -out email.crt
配置
vi /etc/postfix/main.cf
# 添加到最后
smtpd_use_tls = yes
smtpd_tls_cert_file = /etc/pki/tls/certs/email.crt
smtpd_tls_key_file = /etc/pki/tls/certs/email.key.unsecure
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_tls_loglevel = 0
smtpd_tls_auth_only = yes
smtpd_tls_wrappermode = yes
vi /etc/postfix/master.cf
#将下面行的注释去掉
smtps inet n - n - - smtpd
vi /etc/dovecot/conf.d/10-ssl.conf
# 指定证书
ssl_cert = </etc/pki/tls/certs/email.crt
ssl_key = </etc/pki/tls/certs/email.key.unsecure
#如果key文件有密码,前面我们做的是无密码证书
#ssl_key_password = key文件密码
重启服务
systemctl restart dovecot
systemctl restart postfix
foxmail配置