菜鸟学Linux 第061篇笔记 postfix配置,pop3
SMTP --> SSMTPS
ESMTP
POP3: Post Office Protocol v3
IMAP4: Internet Mail Access Protocol
SASL: Simple Authentication Secure Layer
v1, v2
MDA: Mail Delivery Agent
procmail, maildrop
MUA: Mail User Agent
mutt, mail
MTA: Mail Transfer Agent
sendmail(主流地位), qmail, exim
postfix(流行,模块化设计) master(/etc/postfix/master.cf)
(/etc/postfix/main.cf)
postfix -d(默认选项) -n(修改选项) -M(支持查找表类型) -A(客户端可用SASL插件)
-a(服务器端支持的SASL插件类型)
SMTP:
helo
mail from
rcpt to
data
.
quit
tom@a.org --> c.com (MX) --> Jerry@b.net
Mail Relay:
为postfix提供service 脚本
#!/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 $?
# END
为此脚本赋予执行权限:
# chmod +x /etc/rc.d/init.d/postfix
将postfix服务添加至服务列表:
# chkconfig --add postfix
设置其开机自动启动:
# chkconfig postfix on
使用此脚本重新启动服务,以测试其能否正常执行:
# service postfix restart
postfix配置
1. 将主机名配置为name.域名
例 mail.mysky.com
2. 将DNS 的MX记录指向mail 服务器
验证MX记录和PTR记录是否设置正确
dig -t MX mysky.com @192.168.11.122
dig -x 192.168.11.122 @192.168.11.122
(说明一下我因为是在做测试所以邮件服务器和DNS服务器装在一台机器上)
3. /etc/postfix/main.cf 配置文件
(此配置文件里允许使用$parameter 引用相应参数的值)
启用如下选项
myhostname = mail.mysky.com
mydomain = mysky.com
myorigin = $mydomain
mydestination = $mydomain, $myhostname, localhost, ns.$mydomain
mynetworks = 192.168.11.0/24, 127.0.0.0/8
(注意原先这几项都是前边加#号的,后边的参数自行定义)
说明:
myhostname 参数指定运行postfix邮件系统的主机的主机名,
默认情况下,其值被设定为本地机器名;
mydomain 参数指定您的域名,默认情况下,
postfix将myhostname的第一部分删除而作为mydomain的值;
myorigin 参数用来指明发件人所在的域名,即做发件地址伪装;
mydestination 参数指定postfix接收邮件时收件人的域名,
即您的postfix系统要接收到哪个域名的邮件;
mynetworks 参数指定你所在的网络的网络地址,postfix系统根据其值来区别用户
是远程的还是本地的,如果是本地网络用户则允许其访问;
(配置完成后即可正常发送邮件)
配置邮件接收服务器(pop3, imap4)
MRA Mail Retrival Agent:cyrus-imap, dovecot
pop3 110/tcp
imap4 143/tcp
以明文方式工作
邮箱格式:
mbox 一个文件存储所有邮件
maildir 一个文件存储一封邮件,所有邮件存储在一个目录中;
dovecot rpm包依赖mysql客户端
SSL (Secure Socket Layer)
IMAP (Internet Message Access Protocol)
支持四种协议:pop3, imap4, pops, imaps
安装 dovecot
# yum install dovecot
配置文件/etc/dovecot.conf
将protocol选项的#去掉,保留 imap, pop3
#protocols = imap imaps pop3 pop3s(原型)
protocols = imap pop3
开启dovecot
# service dovecot start
检查dovecot 是否正常工作(查看监听端口是否打开)
# netstat -tnlp | grep dovecot
测试可否接收邮件
telnet mail.mysky.com 110
USER username
PASS password
LIST (列出邮件)
RETR number (Retrieval 取回)
(至此我们的邮件服务器即可简单的接收和发送邮件,但无认证功能)
为邮件服务器实现用户认证功能
1、启动sasl, 启动sasl服务
/etc/rc.d/init.d/saslauthd (启动脚本)
/etc/sysconfig/saslauthd (配置文件)
saslauthd -v (显示当前主机saslauthd服务所支持的认证机制,默认为pam)
配置其配置文件/etc/sysconfig/saslauthd
将MECH=pam 改为 MECH=shadow
启动sasl服务
# service saslauthd start
设置为开机启动
# chkconfig saslauthd on
检查是否开机启动
# chkconfig --list saslauthd
测试sasl是否可以进行用户认证
testsaslauthd -u username -p password
(注意这里的username和password是存在于shadow文件中的用户)
例如:(这个是我的主机里的用户)
# testsaslauthd -u tomcat -p tomcat
0: OK "Success."
2、使postfix配置sasl认证
如果只有postfix软件,默认客户端只要可以和安装postfix服务器连接即可发送邮件,
无论你mail地址是什么,要发往哪里,都给中继,而加上sasl认证机制后即可控制
postfix为哪些用户或者IP进行中继
查看postfix可用SASL服务器插件类型
postconf -a
(postfix编译之前确保已经安装cyrus-sasl-devel和cyrus-sasl-plain)
控制smtp中继功能
connection smtpd_client_restrictions = check_client_access hash:/PATH
helo smtpd_helo_restrictions = check_helo_access hash:/PATH
mail from smtpd_sender_restrictions = check_sender_access hash:/PATH
rcpt to smtpd_recipient_restrictions = check_recipient_access hash:/PATH
permit_mynetworks, reject_unauth_destination 这两项必须添加
data smtpd_data_restrictions = check_data_access hash:/PATH
实现示例1
这里以禁止192.168.11.2这台主机通过工作在192.168.11.122上的postfix服务发送邮件为例演示说明其实现过程。访问表使用hash的格式。
(1)首先,编辑/etc/postfix/access文件,以之做为客户端检查的控制文件,在里面定义如下一行:
172.16.100.200 REJECT
(2)将此文件转换为hash格式
# postmap /etc/postfix/access
(3)配置postfix使用此文件对客户端进行检查
编辑/etc/postfix/main.cf文件,添加如下参数:
smtpd_client_restrictions = check_client_access hash:/etc/postfix/access
(4)让postfix重新载入配置文件即可进行发信控制的效果测试了。
# service postsfix {reload|restart}
真正设置postfix认证
#vim /etc/postfix/main.cf
去除mynetworks = 里的192.168.11.0/24 只保留127.0.0.0/8
添加以下内容:
############################CYRUS-SASL############################
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject_invalid_hostname,reject_non_fqdn_hostname,reject_unknown_sender_domain,reject_non_fqdn_sender,reject_non_fqdn_recipient,reject_unknown_recipient_domain,reject_unauth_pipelining,reject_unauth_destination
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_security_options = noanonymous
smtpd_sasl_path = smtpd
smtpd_banner = Welcome to our $myhostname ESMTP,Warning: Version not Available!
# vim /usr/lib/sasl2/smtpd.conf
添加如下内容:
pwcheck_method: saslauthd
mech_list: PLAIN LOGIN
让postfix重新加载配置文件
#/usr/sbin/postfix reload
# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 Welcome to our mail.mysky.com ESMTP,Warning: Version not Available!
ehlo mail.mysky.com
250-mail.mysky.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN (请确保您的输出以类似两行)
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
验证是否是只有shadow里有的用户才可能进行登录 (这里没研究明白用时2天待以后处理)
说是更换版本,,,可是我已经最新版本了!!!!
本文转自Winthcloud博客51CTO博客,原文链接http://blog.51cto.com/winthcloud/1886452如需转载请自行联系原作者
Winthcloud