邮件服务系列(三)

本文详细介绍Postfix邮件服务器的配置步骤及方法,包括基本配置、DNS搭建、服务脚本编写、客户端访问控制等,并介绍了如何使用SASL认证及基于hash的别名文件支持。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

邮件服务系列之postfix常用配置

SMTP --> SMTPS
ESMTP 

POP3: 邮局协议
IMAP4: Internet Mail Access Protocol

SASL: Simple Authentication Secure Layer
    v1, v2

MDA: 邮件投递代理
    procmail, maildrop

MUA: mutt, mail



tom@a.org --> c.com (MX) --> jerry@b.net (mail.b.net) 

Mail Relay: 


MTA: sendmail, qmail, postfix, exim

Postfix: 模块化设计, master(/etc/postfix/master.cf)
         (/etc/postfix/main.cf)
    postconf
    -d
    -n
    -m
    -A: 客户端支持的SASL插件类型
    -a: 服务器端支持的SASL插件类型
    -e PARA=VALUE
SMTP:
    helo
    mail from
    rcpt to
    data
    .
    quit
root@mail.magedu.com
==> root@magedu.com 邮件地址伪装
2.进行一些基本配置,测试启动postfix并进行发信
# hostname mail.magedu.com
# vim /etc/sysconfig/network
修改HOSTNAME=mail.magedu.com
搭建DNS:

yum install bind97 bind97-utils
vim /etc/named.conf
这里写图片描述
vim /etc/named.rfc1912.zones
这里写图片描述
named-checkconf
named-checkconf /etc/named.conf
cd /var/named
vim magedu.com.zone
这里写图片描述
cp magedu.com.zone 172.16.100.zone
vim 172.16.100.zone
这里写图片描述
chgrp named magedu.com.zone 172.16.100.zone
chmod 640 magedu.com.zone 172.16.100.zone
named-checkzone “100.16.172.in-addr.arpa” 172.16.100.zone
service named start
chkconfig named on
dig -t MX magedu.com@172.16.100.1
dig -t A mail.magedu.com
dig -t A mail.magedu.com@172.16.100.1
dig -x 172.16.100.1@172.16.100.1

# vim /etc/postfix/main.cf
修改以下几项为您需要的配置
myhostname = mail.magedu.com
myorigin = magedu.com
mydomain = magedu.com
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mynetworks = 192.168.1.0/24, 127.0.0.0/8

说明:
myorigin参数用来指明发件人所在的域名,即做发件地址伪装;
mydestination参数指定postfix接收邮件时收件人的域名,即您的postfix系统要接收到哪个域名的邮件;
myhostname 参数指定运行postfix邮件系统的主机的主机名,默认情况下,其值被设定为本地机器名;
mydomain 参数指定您的域名,默认情况下,postfix将myhostname的第一部分删除而作为mydomain的值;
mynetworks 参数指定你所在的网络的网络地址,postfix系统根据其值来区别用户是远程的还是本地的,如果是本地网络用户则允许其访问;
inet_interfaces 参数指定postfix系统监听的网络接口;

注意:
1、在postfix的配置文件中,参数行和注释行是不能处在同一行中的;
2、任何一个参数的值都不需要加引号,否则,引号将会被当作参数值的一部分来使用;
3、每修改参数及其值后执行 postfix reload 即可令其生效;但若修改了inet_interfaces,则需重新启动postfix;
4、如果一个参数的值有多个,可以将它们放在不同的行中,只需要在其后的每个行前多置一个空格即可;postfix会把第一个字符为空格或tab的文本行视为上一行的延续;

service postfix restart
tail /var/log/maillog
vim /etc/resolv.conf
这里写图片描述
这里写图片描述
tail /var/log/maillog
不给所有外网邮件中继
mynetwork=127.0.0.0/8
service postfix restart
这里写图片描述
也不给本机中继
这里写图片描述
只给127网络中继
这里写图片描述
恢复原来的mynetworks:
使用outlook发送邮件
这里写图片描述
上次建了三个邮件用户
tail /etc/passwd
这里写图片描述
为hadoop用户设置密码为hadoop
passwd hadoop
使用outlook hadoop向openstack发送一封邮件
切换到openstack用户
这里写图片描述
再发送一封邮件
这里写图片描述
tail /var/log/maillog

四、为postfix提供SysV服务脚本/etc/rc.d/init.d/postfix,内容如下(#END 之前):
#!/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 --list postfix

设置其开机自动启动:
# chkconfig postfix on

使用此脚本重新启动服务,以测试其能否正常执行:
# service postfix restart

此时可使用本地用户测试邮件收发了。

使用pop3收邮件

MRA: cyrus-imap, dovecot

dovecot依赖mysql客户端

pop3: 110/tcp
imap4: 143/tcp
以明文方式工作。

dove支持四种协议:pop3, imap4, pops, imaps

配置文件:/etc/dovecot.conf

有SASL认证能力

邮箱格式:
    mbox:一个文件存储所有邮件;
    maildir: 一个文件存储一封邮件,所有邮件存储在一个目录中;

/etc/rc.d/init.d/dovecot

yum install dovecot
vim /etc/dovecot.conf
这里写图片描述
service dovecot start
netstat -tnlp
使用outlook发送一封邮件
这里写图片描述
tail /var/log/maillog
取邮件
这里写图片描述
这里写图片描述
这里写图片描述

让postfix基于SASL认证

启动sasl,启动sasl服务
/etc/rc.d/init.d/saslauthd
/etc/sysconfig/saslauthd

saslauthd -v: 显示当前主机saslauthd服务所支持的认证机制,默认为pam
service saslauthd start
chkconfig saslauthd on

这里写图片描述

实现postfix基于客户端的访问控制

1、基于客户端的访问控制概览

postfix内置了多种反垃圾邮件的机制,其中就包括“客户端”发送邮件限制。客户端判别机制可以设定一系列客户信息的判别条件:
smtpd_client_restrictions
smtpd_data_restrictions
smtpd_helo_restrictions
smtpd_recipient_restrictions
smtpd_sender_restrictions

上面的每一项参数分别用于检查SMTP会话过程中的特定阶段,即客户端提供相应信息的阶段,如当客户端发起连接请求时,postfix就可以根据配置文件中定义的smtpd_client_restrictions参数来判别此客户端IP的访问权限。相应地,smtpd_helo_restrictions则用于根据用户的helo信息判别客户端的访问能力等等。

如果DATA命令之前的所有内容都被接受,客户端接着就可以开始传送邮件内容了。邮件内容通常由两部分组成,前半部分是标题(header),其可以由header_check过滤,后半部分是邮件正文(body),其可以由check_body过滤。这两项实现的是邮件“内容检查”。

postfix的默认配置如下:
smtpd_client_restrictions =
smtpd_data_restrictions =
smtpd_end_of_data_restrictions =
smtpd_etrn_restrictions =
smtpd_helo_restrictions =
smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination
smtpd_sender_restrictions =

这限制了只有mynetworks参数中定义的本地网络中的客户端才能通过postfix转发邮件,其它客户端则不被允许,从而关闭了开放式中继(open relay)的功能。

Postfix有多个内置的限制条件,如上面的permit_mynetworks和reject_unauth_destination,但管理员也可以使用访问表(access map)来自定义限制条件。自定义访问表的条件通常使用check_client_access, check_helo_access, check_sender_access, check_recipient_access进行,它们后面通常跟上type:mapname格式的访问表类型和名称。其中,check_sender_access和check_recipient_access用来检查客户端提供的邮件地址,因此,其访问表中可以使用完整的邮件地址,如admin@magedu.com;也可以只使用域名,如magedu.com;还可以只有用户名的部分,如marion@。

/etc/aliases --> /etc/aliases.db

查找表:
    访问控制文件
    /etc/postfix/access --> hash格式 --> /etc/postfix/access.db
    obama@aol.com reject
    microsoft.com OK

实现示例1

这里以禁止172.16.100.66这台主机通过工作在172.16.100.1上的postfix服务发送邮件为例演示说明其实现过程。访问表使用hash的格式。

(1)首先,编辑/etc/postfix/access文件,以之做为客户端检查的控制文件,在里面定义如下一行:
172.16.100.66 REJECT

(2)将此文件转换为hash格式
postmap /etc/postfix/access

(3)配置postfix使用此文件对客户端进行检查
编辑/etc/postfix/main.cf文件,添加如下参数:
smtpd_client_restrictions = check_client_access hash:/etc/postfix/access
postconf -n
service postfix restart

(4)让postfix重新载入配置文件即可进行发信控制的效果测试了。
这里写图片描述
不能发送,直接拒绝
限制某个域不能发送邮件
vim /etc/postfix/access
添加:
whitehouse.com REJECT
vim /etc/postfix/main.cf
这里写图片描述
service postfix restart
测试
这里写图片描述
为postfix服务开启用户别名支持:

1、在配置文件开启基于hash的别名文件支持

在main.cf中,找到如下指令,而后启用它(即移除前面的#号):
#alias_maps = hash:/etc/aliases

2、在/etc/aliases文件中定义新的别名项,其格式通常为以冒号隔开的两个字段,前一个字段为初始目标邮件地址,后一个字段为实际发往的地址,如:
redhat: magedu
gentoo@126.com:  admin@magedu.com

3、将/etc/aliases转换为hash格式:
# postalias  /etc/aliases

4、让postfix重新载入配置文件,即可进行测试;

vim /etc/aliases
这里写图片描述
newaliases
service postfix restart
这里写图片描述
发送成功
这里写图片描述

检查表格式的说明

hash类的检查表都使用类似如下的格式:
pattern   action

检查表文件中,空白行、仅包含空白字符的行和以#开头的行都会被忽略。以空白字符开头后跟其它非空白字符的行会被认为是前一行的延续,是一行的组成部分。

(1)关于pattern
其pattern通常有两类地址:邮件地址和主机名称/地址。

邮件地址的pattern格式如下:
user@domain  用于匹配指定邮件地址;
domain.tld   用于匹配以此域名作为邮件地址中的域名部分的所有邮件地址;
user@            用于匹配以此作为邮件地址中的用户名部分的所有邮件地址;

主机名称/地址的pattern格式如下:
domain.tld   用于匹配指定域及其子域内的所有主机;
.domain.tld   用于匹配指定域的子域内的所有主机;
net.work.addr.ess
net.work.addr
net.work
net        用于匹配特定的IP地址或网络内的所有主机;
network/mask  CIDR格式,匹配指定网络内的所有主机;

(2)关于action

接受类的动作:
OK   接受其pattern匹配的邮件地址或主机名称/地址;
全部由数字组成的action   隐式表示OK;

拒绝类的动作(部分):
4NN text 
5NN text 
    其中4NN类表示过一会儿重试;5NN类表示严重错误,将停止重试邮件发送;421521对于postfix来说有特殊意义,尽量不要自定义这两个代码;
REJECT optional text...   拒绝;text为可选信息;
DEFER optional text...    拒绝;text为可选信息; 

限定向openstack发邮件

vim /etc/postfix/recipient
openstack@  REJECT
postmap /etc/postfix/recipient
vim /etc/postfix/main.cf
添加:
   smtpd_recipient_restriceions = check_recipient_access hash:/etc/postfix/recipient, permit_mynetworks, reject_unauth_destination

service postfix restart

这里写图片描述
发送失败

为postfix开启基于cyrus-sasl的认证功能

使用以下命令验正postfix是否支持cyrus风格的sasl认证,如果您的输出为以下结果,则是支持的:
# /usr/local/postfix/sbin/postconf  -a
cyrus
dovecot

#vim /etc/postfix/main.cf
添加以下内容:
############################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.magedu.com ESMTP,Warning: Version not Available!
ehlo mail.magedu.com
250-mail.magedu.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN               (请确保您的输出以类似两行)
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN

只允许本机中继
这里写图片描述
这里写图片描述
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值