postfix之postfix详解

postfix:

日志:
        /var/log/maillog

邮件别名:
        将发给a的邮件发给b。
        /etc/aliases  别名文件。postfix无法识别。
            格式:
                [email protected]:[email protected]

/etc/aliases.db 由hash生成的别名文件数据库。postfix读取速度快。

#newaliases [OPTION] 创建别名数据库。将aliases文件通过hash生成aliases.db

中继:
        默认将本机IP地址所在网段都识别为本地网络,都予以中继。

配置文件:

master: /etc/postfix/master.cf 主进程配置文件。若maildrop作为postfix的一个模块来使用,则相关的配置都在此文件中。

mail:/etc/postfix/main.cf  实现各项功能的配置文件。

/etc/postfix/main.cf
            格式: 参数 = 值 。参数必须卸写在绝对行首,空白开头的行被认为是上一行的延续。

#postconf [OPTION] postfix自带配置main.cf的工具
            [OPTION]
                -d 显示main.cf的默认字段。
                -n 显示main.cf中修改过的字段
                -m 显示支持的所有查找表(lookup table)类型。即储存账号的表。
                -A 显示可用的sasl客户端插件类型。既所支持的sasl验证类型。
                -a 服务器端支持的sasl插件类型。
                -e PARMATER=VALUE 编辑main.cf的内容,通过的PARMATER=VALUE格式来更新配置文件。

例如:
                #postconf -d

基于客户端的访问控制:
        在发送过程中,每个阶段都可以控制,在main.cf中有定义,默认配置如下:
            #vim /etc/postfix/main.cf
                smtpd_client_restrictions =
                    限定连接服务器

smtpd_data_restrictions =
                    限定发送data指令

smtpd_end_of_data_restrictions =
                smtpd_etrn_restrictions =
                smtpd_helo_restrictions =
                    限定发送helo指令

smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination
                    限定发送rept to指令,即中继的限定。即使前边几个指令被限定,服务器也会返回正确信息。只有到这步,服务器才会返回相关的限定信息。

smtpd_sender_restrictions =
                    限定发动mail from指令

限制条件:
            permit_mynetworks 允许$mynetworks中定义的网段给与中继。

reject_unauth_destination 拒绝未经认证的目标。

...

访问表(access map):
                check_client_access
                check_helo_access
                check_sender_access
                check_recipient_access

访问表文件:
                    实际上访问表文件名字可以自定义,只要保证配置文件中能互相匹配即可。默认使用access。
                    
                    /etc/postfix/access 文本文件
                        格式为PATTERN ACTION
                            PATTERN
                                邮件地址:  
                                    [email protected] 匹配指定的邮件地址。

DOMAIN 匹配域名部分符合的所有邮件地址。

[email protected] 匹配用户名符合的所有邮件地址。

域名:
                                    DDMAIN 匹配指定域和其子域内的所有主机。

.DOMAIN 匹配指定子域中的所有主机。

IP地址:
                                    IPADDR.IP.IP.IP 匹配指定ip的所有主机。

IPADDR.IP.IP 匹配指定网段内的所有主机。

IPADDR.IP 匹配指定网段内的所有主机。

IPADDR 匹配指定网段内的所有主机。

IPADDR/MASK CIDR格式,匹配指定网段内的所有主机。

ACTION
                                OK 接受PATTERN所指定的。
                                NUMS 全部为数字组成,隐式表示OK

REJECT CODENUM TEXT 拒绝
                                DEFER CODENUM TEXT 拒绝
                                    CODENUM TEXT 自定义拒绝码和信息,注意421和521对postfix有特殊含义,不要使用。

/etc/postfix/access.db hash文件

#postmap  [OPTION] /etc/postfix/access 将文本文件转换为hash格式的查找表文件。
                    例如:
                        #vim /etc/postfix/main.cf
                            smtpd_client_restrictions = check_client_access hash: /etc/postfix/access
                                从文件中检索相关的用户是否可以连接到服务器

mysql:
                #vim /etc/postfix/main.cf
                            smtpd_client_restrictions = check_client_access mysql: /etc/postfix/mysql_user

实例:
            1.禁止172.16.100.200这台主机通过工作在172.16.100.1上的postfix服务发送邮件。访问表使用hash的格式。
                #vim  /etc/postfix/access
                    172.16.100.200 REJECT
                #postmap /etc/postfix/access
                #vim /etc/postfix/main.conf
                    smtpd_client_restrictions = check_client_access hash:/etc/postfix/access
                #systemctl restart postfix

2.禁止microsoft.com域向本服务器发送邮件。访问表使用hash的格式。
                #vim /etc/postfix/access
                    microsoft.com REJECT
                #postmap /etc/postfix/access
                #vim /etc/postfix/main.cf
                    smtpd_sender_restrictions = check_recipient_access hash:/etc/postfix/access
                #systemctl restart postfix

3.禁止所有用户向hadoop发送邮件,访问表使用hash的格式
                #vim /etc/postfix/denyhadoop
                    [email protected] REJECT
                #postmap /etc/postfix/denyhadoop
                #vim /etc/postfix/main.cf
                    smtpd_recipient_restrictions = heck_recipient_access hash:/etc/postfix/denyhadoop, permit_mynetworks, reject_unauth_destination 这里注意优先级顺序。
                #systemctl restart postfix

别名相关:

作用:将发给USERNAME1的邮件全部发给USERNAME2。注意不是转发。
        文本文件:
            /etc/aliases

hash后文件:
            /etc/aliases.db

配置文件:
            /etc/postfix/aliases
            格式:
                [email protected]: USERNAME2

#newaliases 生成新的hash查找表文件

#systemctl restart postfix 重启服务后生效。

编译安装配置postfix:
        0.创建用户和组:
            用户和组的id必须一致,并且尽量大于1000。

#groupadd -g 2525 postfix
            #groupadd -g 2526 postdrop postfix自带的MDA,如果换成maildrop可以不创建。
            #useradd  -M -u 2525 -g 2525 postfix -s /sbin/nologin
            #useradd -M -u 2526 -g 2526 postdrop -s /sbin/nologin

1.编译安装:
            #tar -xf postfix-xxx.tar.gz
            #cd postfix-xx
            #make makefiles ‘CCARGS=-DHAS_MYSQL -I/usr/local/mysql/include -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/include/sasl  -DUSE_TLS ‘ ‘AUXLIBS=-L/usr/local/mysql/lib -lmysqlclient -lz -lm -L/usr/lib/sasl2 -lsasl2  -lssl -lcrypto‘
            #make
            #make install

指定相关路径:

install_root: [/] / 默认路径。默认安装在根下。
            tempdir: [/root/postfix-XXX] /tmp/postfix 临时文件
            config_directory: [/etc/postfix] /etc/postfix 配置文件
            daemon_directory: [/usr/libexec/postfix] 进程目录
            command_directory: [/usr/sbin]  服务脚本位置
            data-directory: [/var/lib/postfix] 工作空间的位置
            queue_directory: [/var/spool/postfix] 邮件队列目录
            sendmail_path: [/usr/sbin/sendmail] sendmail客户端路径
            newaliases_path: [/usr/bin/newaliases] 生成新别名路径
            mailq_path: [/usr/bin/mailq] 邮件队列路径
            mail_owner: [postfix] 指定用户
            setgid_group: [postdrop] 指定用户组
            html_directory: [no]/var/www/html/postfix web格式文档路径。
            manpages: [/usr/local/man] man文档路径
            readme_directory: [no] readme文档路径

编译选项详解:
                CCARGS= 功能开关
                    -DHAS_MYSQL 支持mysql驱动
                    -I/usr/local/mysql/include 指定mysql头文件的位置
                    -DUSE_SASL_AUTH 支持SASL认证
                    -DUSE_TLS 支持TLS认证

AUXLIBS= 指定额外库文件位置
                    -L/usr/local/mysql/lib 指定mysql库文件
                    -L/usr/lib/sasl2 制定sasl库文件
                    -lmysqlclient mysql客户端的库文件
                    -lz 压缩库文件
                    -lm 模块文件
                    -lcrypto 加密的库文件
                    -lssl ssl的库文件
                    -lsasl2 sasl2的库文件,需要cyrus-sasl-devel包和cyrus-sasl-plain包。

2.复制服务脚本:
            #vim /etc/rc.d/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/rc.d/init.d/postfix

3.修改配置文件:
            #vim /etc/postfix/main.cf
                myhostname = MAILSERVERNAME.DOMAIN
                    邮件服务器的主机名。要和hostname以及dns服务器中的主机名称保持一致。

myorigin = $mydomain
                    指定发件人所在的域名。用来邮件地址伪装。发送来的邮件都会被改写成此域的域名。

mydomain = DOMAIN
                    当前邮件服务器所在的域的域名。若不指定,则会将$myhostname中的第一部分删除作为域名。

mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain, ns.$mydomain
                    指定目标收件人的域名。包含在其中域,表示本机为这些域的收件服务器,可以不用中继。能否中继取决于$mynetworks中定义。若主机有其他别名也一并添加,例如ns.$mydomain

mynetworks = 192.168.1.0/24, 127.0.0.0/8
                    本地网络,允许为来自以上网段的进行中继。

inet_interfaces = all postfix进程 监听的IP地址,默认为all。0.0.0.0表示本机的所有可用地址。

4.修改主机名和dns

#vim /etc/hostname
                MAILSERVERNAME.DOMAIN

#vim /etc/resolv.conf
                nameserver IP

5.生成别名数据库
            #newaliases

6.发送邮件测试:
            #telnet localhost 25 发送测试
                helo localhost
                mail from:[email protected]
                rcpt to:xxxx
                data
                Subject: xxxx
                XXX
                .
                quit

7.支持sasl认证:
            启用sasl服务:
                sasl服务脚本:
                    /etc/rc.d/init.d/saslauthd

脚本配置文件:
                    /etc/sysconfig/saslauthd
                        MECH=shadow 将认证方式从pem改为shadow,即从/etc/shadow中读取账号密码。

#systemctl start saslauthd

#saslauthd [OPTION]
                    [OPTION]
                        -v 显示当前sasl服务支持的认证方式,即所支持的认证模块。默认为pam。

#testsaslauthd [OPTION] 测试sasl认证命令。
                    [OPTION]
                        -u USERNAME
                        -p PASSWORD

例如:
                        #testsaslauthd -u hadoop -p hadoop

8.支持cyrus-sasl认证:
            1.验证是否支持cyrus-sasl
                #postfixconf -a
                    cyrus
                    dovecot

显示如上的话说明支持。

2.编辑main.cf
                #vim /etc/postfix/main.cf
                    ############################CYRUS-SASL############################
                    broken_sasl_auth_clients = yes 是否通过sasl来验证客户端身份。
                    smtpd_recipient_restrictions= 中继设置,根据实际情况选择。
                        permit_mynetworks, 允许$mynetworks中定义的的网段(必须有)
                        permit_sasl_authenticated, 允许sasl验证通过的用户(必须有)
                        reject_invalid_hostname, 拒绝主机名不合法
                        reject_non_fqdn_hostname, 拒绝主机名不是FQDN格式。
                        reject_unknown_sender_domain, 拒绝无法识别的发件人域
                        reject_non_fqdn_sender, 拒绝没有FQDN的发件人
                        reject_non_fqdn_recipient, 拒绝没有FQDN的收件人
                        reject_unknown_recipient_domain, 拒绝没有FQDN的收件人域
                        reject_unauth_pipelining, 拒绝无法验证的管道
                        reject_unauth_destination 拒绝无法验证的目标(必须有)
                    smtpd_sasl_auth_enable = yes 启用sasl验证
                    smtpd_sasl_local_domain = $myhostname
                    smtpd_sasl_security_options = noanonymous 禁止匿名用户
                    smtpd_sasl_path = smtpd 指定要使用sasl功能的服务器程序
                    smtpd_banner = Welcome to our $myhostname ESMTP,Warning: Version not Available! 定义欢迎信息

3.编辑smtpd.conf,若不存在则手工建立。
                #vim /usr/lib/sasl2/smptd.conf sasl对smtp验证的相关配置
                    log_level: 3 日志级别,3为显示更详细信息。一般用在排错,实际配置可以不写。
                    pwcheck_method: saslauthd 密码检查方法。
                    mech_list: PLAIN LOGIN 认证机制列表。

4.重启postfix服务:
                #systemctl restart postfix
                #systemctl restart saslauthd

5.测试:
                #vim /etc/postfix/main.cf
                    mynetworks=127.0.0.0/8

#telent 172.16.100.1 25
                    ehlo mail.test.com
                        ...
                        250-AUTH LOGIN PLAIN 显示以下2行说明启用了验证
                        250-AUTH=LOGIN PLAIN
                        ...
                    mail from: [email protected]
                    rcpt to [email protected] 默认情况下是拒绝的。
                        554 Realy access deny
                #telnet 172.16.100.1 25
                    ehlo mail.test.com
                        ...
                        250-AUTH LOGIN PLAIN
                        250-AUTH=LOGIN PLAIN
                        ...
                    auth login
                    334 xxxxxx
                    USERNAME 这里输入经过base64编码的用户名,例如使用hadoop登录。
                    334 xxxxxx
                    PASSWORD 经过base64编码的密码
                    235 Authentication successful
                    mail form [email protected]
                    rcpt to [email protected]

#echo -n "hadoop" | openssl base64
                默认echo会打印换行符,-n表示不换行。通过openssl进行base64编码。
                    USENAME

#echo -n “PASSWD” | openssl base64
                    PASSWORD

时间: 2024-10-25 03:33:58

postfix之postfix详解的相关文章

【转】Linux 下搭建Postfix邮件服务器详解:

在我自己的服务器上面搭建了邮件服务器,为的是接下来写shell脚本进行报警监控.当服务器发生意外,可以及时发送邮件服务器到邮箱. 看了两个教程,按照两个教程来搭建的,感谢原作. Linux 下搭建Postfix邮件服务器详解: 1.首先关闭sendmail服务 service sendmail stop 2.chkconfig sendmail off(关闭开机自启动) 3.修改DNS正解文件,使DNS能够解析邮箱服务 添加下面两行 mail.zhubf.com. IN A           

postfix之maildrop详解

maildrop 安装:        0.安装依赖库.头文件.库文件             # ln -sv /usr/local/courier-authlib/bin/courierauthconfig   /usr/bin             # ln -sv /usr/local/courier-authlib/include/*   /usr/include             # yum -y install pcre-devel 1.添加vmail用户和组,id大于10

postfix之courier-authlib详解

cureier authentication library:    courier-authlib是Courier组件中的认证库,它是courier组件中一个独立的子项目,用于为Courier的其它组件提供认证服务.其认证功能通常包括验正登录时的帐号和密码.获取一个帐号相关的家目录或邮件目录等信息.改变帐号的密码等.而其认证的实现方式也包括基于PAM通过/etc/passwd和/etc/shadow进行认证,基于GDBM或DB进行认证,基于LDAP/MySQL/PostgreSQL进行认证等.

postfix之extmail详解

extmail:    配置文件:        webmail.cf            SYS_CONFIG = /var/www/extsuite/extmail/ 指定配置文件路径.            SYS_LANGDIR = /var/www/extsuite/extmail/lang 指定语言字符集位置.            SYS_TEMPLDIR = /var/www/extsuite/extmail/html  临时文件的位置 SYS_HTTP_CACHE = 0 是

postfix之extman详解

extman: 配置文件:        webman.cf         内容和webmail.cf类似        SYS_SESS_DIR = /tmp/extman/ 会话进程目录,该目录的属主属组为httpd进程的属主属组,由于启用了suexec,进程的实际属主属组为postfix        SYS_CAPTCHA_ON = 1 用户登录是否需要输入验证码        SYS_DEFAULT_UID = 1000         SYS_DEFAULT_GID = 1000 

postfix 安装配置详解

[ref: http://blog.51yip.com/server/1382.html] [http://blog.chinaunix.net/uid-174325-id-1744019.html] [http://mba.shengwushibie.com/itbook/BookChapter.asp?id=4959] DNS服务器服务器自己可以不用搭,用第三方的就可以了.访问大也没有什么问题,我现在做游戏这一块,游戏要推广的,推广的时候一天的独立IP就可以达到700W左右.我用了dnspo

postfix之dovecot详解

dovecot: 支持4种协议:pop3.imap4.pops .imaps.    有sasl认证能力.    自身支持ssl,可以不依赖openssl. 配置文件:        /etc/dovecot.conf            protocols= imap imaps pop3 pop3s 启用支持协议,通常使用pop3和imaps. 安装:        #yum install dovecot 注意:rpm包会依赖mysql客户端. 服务脚本:        /etc/rc.

postfix之clamav详解

呼叫器:caller 通过此调用反垃圾和病毒机制    MIMEDefang.Mailscanner.Amavisd-new 反垃圾:    关闭OpenRelay RBL(Realtime Black List)实时黑名单 内容过滤器: Spamassassin perl开发,垃圾邮件分拣器.根据特征码分析. 病毒:    clamav 开源杀毒软件 病毒邮件服务器网管 clamav: 编译安装:        0.安装依赖包:            #yum install zlib-dev

postfix 邮件服务的安装及详解

sendmail:性能好,设置复杂,适合老手 qmail:体积小260+k ,模块化.需要做二次开发,适合对邮件性能有要求的 postfix:前身是sendmail,postfix原本是sendmail里面的一个模块,红帽6默认安装好postfix zmailer:近几年才出来的邮件 coremail:国内做的最好的商业平台,运行在linux上 Pop:允许客户端下载邮件,移动标记已读等操作  不会反馈到服务器. Imap4:双向通讯,客户端的操作会反馈到服务器,提供想更过的功能,听歌更好的邮件