发新话题
打印

Fedora6上安装postfix全过程,本人亲自测试保证能成功

Fedora6上安装postfix全过程,本人亲自测试保证能成功

首先安装好apache, mysql, php

1. 准备好所有需要的软件

  • postfix
  • Courier-authlib
  • courier-imap
  • tmail
  • Clamav
  • Spamassassin
  • MailScanner
复制内容到剪贴板
代码:
vi /etc/ld.so.conf
引用:
/usr/local/mysql/lib/mysql
我的MYSQL装在/usr/local/mysql目录下
再运行
复制内容到剪贴板
代码:
ldconfig -v
2. 安装POSTFIX
增加postfix的用户和组

  • groupadd -g 12345 postfix
  • useradd -u 12345 -g 12345 -c postfix -d/dev/null -s/sbin/nologin postfix
  • groupadd -g 54321 postdrop



  • tar zxvf ./software/postfix/postfix-2.3.8.tar.gz
  • cd postfix-2.3.8
  • make -f Makefile.init makefiles 'CCARGS=-DUSE_SASL_AUTH -DHAS_MYSQL -I/usr/local/mysql/include/mysql -I/usr/include/sasl' 'AUXLIBS=-L/usr/local/mysql/lib/mysql -L/usr/lib/sasl2 -lmysqlclient -lsasl2 -lz -lm'
  • make install

执行make install这里会出现很多问题,但postfix已经为我们设置好了默认的答案,直接使用这些答案就可以使postfix正常工作了,所以我们只要直接按回车就可以了


3. 安装Courier-authlib

  • tar -jxvf ../src/courier-authlib-0.59.2.tar.bz2
  • cd courier-authlib-0.59.2
  • ./configure --prefix=/usr/lib/authlib --without-stdheaderdir --without-authuserdb --without-authpam --without-authldap --without-authpwd --without-authshadow --without-authvchkpw --without-authpgsql --without-authcustom --with-authmysql --with-mysql-libs=/usr/local/mysql/lib/mysql --with-mysql-includes=/usr/local/mysql/include/mysql --with-redhat --sysconfdir=/usr/lib/authlib/etc
  • make && make install
  • make install-migrate
  • make install-configure



设置authlib的环境变量

  • COURIERAUTHCONFIG=/usr/lib/authlib/bin/courierauthconfig
  • export COURIERAUTHCONFIG


4. 安装Courier-imap
  • tar -jxvf ../src/courier-imap-4.1.2.tar.bz2
  • cd courier-imap-4.1.2
  • ./configure --prefix=/usr/lib/imapd --with-redhat --enable-unicode --disable-root-check --with-trashquota --without-ipv6 CPPFLAGS='-I/usr/lib/authlib/include' COURIERAUTHCONFIG='/usr/lib/authlib/bin/courierauthconfig' CPPFLAGS='-I/usr/lib/authlib/include'
  • make && make install
  • make install-configure



    5. 配置系统

    • mv /etc/aliases /etc/aliases.bak
    • ln -s /etc/postfix/aliases /etc/aliases
    • echo "root: postfix">>/etc/postfix/aliases
    • /usr/bin/newaliases
    • mv /var/mail /var/mail.bak
    • mkdir /var/mail
    • chown -R postfix:postfix /var/mail
    • mv /etc/postfix/main.cf /etc/postfix/main.cf.bak
    • vi /etc/postfix/main.cf
    复制内容到剪贴板
    代码:
    command_directory = /usr/sbin
    config_directory = /etc/postfix
    daemon_directory = /usr/libexec/postfix
    debug_peer_level = 2
    html_directory = no
    mail_owner = postfix
    mailq_path = /usr/bin/mailq
    manpage_directory = /usr/local/man
    newaliases_path = /usr/bin/newaliases
    queue_directory = /var/spool/postfix
    readme_directory = no
    sample_directory = /etc/postfix
    sendmail_path = /usr/sbin/sendmail
    setgid_group = postdrop
    unknown_local_recipient_reject_code = 550
    header_checks = regexp:/etc/postfix/header_checks
    #############NEW ADD#####################
    #=====================BASE=====================
    myhostname = mail.oklrc.com
    mydomain = oklrc.com
    mydestination = $myhostname
    local_recipient_maps =
    local_transport = virtual
    #=====================MySQL=====================
    virtual_alias_maps = mysql:/etc/postfix/mysql/mysql_virtual_alias_maps.cf
    virtual_gid_maps = static:54321
    virtual_mailbox_base = /
    virtual_mailbox_domains = mysql:/etc/postfix/mysql/mysql_virtual_domains_maps.cf
    virtual_mailbox_limit = 51200000
    virtual_mailbox_maps = mysql:/etc/postfix/mysql/mysql_virtual_mailbox_maps.cf
    virtual_minimum_uid = 125
    virtual_transport = virtual
    virtual_uid_maps = static:12345
    #=====================Quota=====================
    virtual_create_maildirsize = yes
    virtual_mailbox_extended = yes
    virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql/mysql_virtual_mailbox_limit_maps.cf
    virtual_mailbox_limit_override = yes
    virtual_maildir_limit_message = Sorry, the user's maildir has overdrawn his diskspace quota, please try again later.
    virtual_overquota_bounce = yes
    #====================SASL=====================
    smtpd_sasl_auth_enable = yes
    smtpd_sasl_security_options = noanonymous
    broken_sasl_auth_clients = yes
    smtpd_delay_reject=yes
    smtpd_recipient_restrictions =
    permit_mynetworks,
    permit_sasl_authenticated,
    reject_unauth_destination,
    reject_unauth_pipelining,
    reject_invalid_hostname,
    reject_rbl_client cbl.anti-spam.org.cn
    smtpd_client_restrictions = permit_sasl_authenticated
    smtpd_sasl_application_name = smtpd
    smtpd_sasl_local_domain = $myhostname
    permit_mynetworks,那几行前面要多加一个空格.
    引用:
    vi /etc/postfix/mysql/mysql_virtual_alias_maps.cf
    复制内容到剪贴板
    代码:
    user = postfix
    password = mailadmin
    hosts = localhost
    dbname = postfix
    query = SELECT alias FROM userinfo WHERE address='%s' AND active = 1
    引用:
    vi /etc/postfix/mysql/mysql_virtual_domains_maps.cf
    复制内容到剪贴板
    代码:
    user = postfix
    password = mailadmin
    hosts = localhost
    dbname = postfix
    query = SELECT domain FROM domaininfo WHERE domain='%s'
    引用:
    vi /etc/postfix/mysql/mysql_virtual_mailbox_limit_maps.cf
    复制内容到剪贴板
    代码:
    user = postfix
    password = mailadmin
    hosts = localhost
    dbname = postfix
    query = SELECT quota FROM userinfo WHERE address='%s'
    引用:
    vi /etc/postfix/mysql/mysql_virtual_mailbox_maps.cf
    复制内容到剪贴板
    代码:
    user = postfix
    password = mailadmin
    hosts = localhost
    dbname = postfix
    query = SELECT maildir FROM userinfo WHERE address='%s' AND active = 1
    6. 配置sasl认证
    引用:
    vi /usr/lib/sasl2/smtpd.conf
    复制内容到剪贴板
    代码:
    pwcheck_method:authdaemond
    log_level:3
    mech_list:plain login
    authdaemond_path:/usr/lib/authlib/var/socket
    7. 配置courier-imap
    引用:
    mv /usr/lib/authlib/etc/authlib/authmysqlrc /usr/lib/authlib/etc/authlib/authmysqlrc.bak
    如果提示文件不存在就不管它!
    引用:
    vi /usr/lib/authlib/etc/authlib/authmysqlrc
    复制内容到剪贴板
    代码:
    MYSQL_SERVER localhost
    MYSQL_USERNAME postfix
    MYSQL_PASSWORD mailadmin
    MYSQL_PORT 0
    MYSQL_OPT 0
    MYSQL_DATABASE postfix
    MYSQL_USER_TABLE userinfo
    MYSQL_CRYPT_PWFIELD passwd
    #MYSQL_CLEAR_PWFIELD passwd
    MYSQL_UID_FIELD '12345'
    MYSQL_GID_FIELD '54321'
    MYSQL_LOGIN_FIELD address
    MYSQL_HOME_FIELD homedir
    MYSQL_NAME_FIELD realname
    MYSQL_MAILDIR_FIELD maildir
    MYSQL_QUOTA_FIELD quota
    注意:确认在这个文件中不能用空格键,只能用tab键
    引用:
    mv /usr/lib/authlib/etc/authlib/authdaemonrc /usr/lib/authlib/etc/authlib/authdaemonrc.bak
    引用:
    vi /usr/lib/authlib/etc/authlib/authdaemonrc
    复制内容到剪贴板
    代码:
    authmodulelist="authmysql"
    authmodulelistorig="authmysql"
    version="authdaemond.mysql"
    daemons=5
    subsystem=mail
    DEBUG_LOGIN=2
    DEFAULTOPTIONS="wbnodsn=1"
    引用:
    cp /usr/lib/imapd/etc/pop3d.dist /usr/lib/imapd/etc/pop3d
    引用:
    cp /usr/lib/imapd/etc/pop3d-ssl.dist /usr/lib/imapd/etc/pop3d-ssl
    引用:
    vi /usr/lib/imapd/etc/pop3d
    默认
    POP3DSTART=NO
    改为
    POP3DSTART=YES
    引用:
    cp /usr/lib/imapd/etc/imapd.dist /usr/lib/imapd/etc/imapd
    引用:
    cp /usr/lib/imapd/etc/imapd-ssl.dist /usr/lib/imapd/etc/imapd-ssl
    引用:
    vi /usr/lib/imapd/etc/imapd
    默认
    IMAPDSTART=NO
    改为
    IMAPDSTART=YES
    引用:
    chmod +x /usr/lib/authlib/var/
    8. 安装WebMail(Tmail)
    先建立数据库及数据库用户
    复制内容到剪贴板
    代码:
    /usr/local/mysql/bin/mysql -uroot -p

    • CREATE DATABASE `postfix`;
    • GRANT ALL ON postfix.* TO postfix@localhost IDENTIFIED BY "mailadmin";
    • UPDATE mysql.user SET PASSWORD=old_password('mailadmin') WHERE `User`='postfix';
    • FLUSH PRIVILEGES;
    • exit



    • mysql -u root -p postfix < /usr/local/apache2/htdocs/tmail/SQL/Tmail.sql
    • vi /usr/local/apache2/htdocs/tmail/config/config_inc.php
    复制内容到剪贴板
    代码:
    $CFG_BASEPATH = "/usr/local/apache2/htdocs/tmail/temp"; //临时目录
    // Mysql
    define(MYSQL_HOST, 'localhost'); //数据库主机名
    define(MYSQL_USER, 'postfix'); //数据库用户名
    define(MYSQL_PASS, 'mailadmin'); //数据库密码
    define(MYSQL_DATA, 'postfix'); //数据库名称
    $CFG_NETDISK_PATH = "/var/mail/netdisk"; //文件管理存储目录
    引用:
    vi /usr/local/apache2/htdocs/tmail/include/config.inc.php
    复制内容到剪贴板
    代码:
    // Mysql
    define(MYSQL_HOST, 'localhost'); //数据库主机名
    define(MYSQL_USER, 'postfix'); //数据库用户名
    define(MYSQL_PASS, 'mailadmin'); //数据库密码
    define(MYSQL_DATA, 'postfix'); //数据库名称

    • mkdir /var/mail/netdisk
    • chown -R postfix:postfix /var/mail/netdisk
    • mkdir /usr/local/apache2/htdocs/tmail/temp
    • chown -R postfix:postfix /usr/local/apache2/htdocs/tmail/temp
    • cp courier-authlib-0.59.2源码安装目录/courier-authlib.sysvinit /etc/rc.d/init.d/courier-authlib
    • chmod 755 /etc/rc.d/init.d/courier-authlib
    • chkconfig --add courier-authlib
    • cp courier-imap-4.1.2源码安装目录/courier-imap.sysvinit /etc/rc.d/init.d/courier-imap
    • chmod 755 /etc/rc.d/init.d/courier-imap
    • chkconfig --add courier-imap



    9. 启动服务测试

    • /usr/local/apache2/bin/apachectl start
    • service mysql start
    • service courier-authlib start
    • service courier-imap start
    • postfix start


    10. 通过后台加入域名和用户名http://mail.oklrc.com/tmail/webadmin(本文档中的域名为: test.com 、 用户名: test@test.com )
    引用:
    perl -MMIME::Base64 -e 'print encode_base64("test\@test.com");'
    dGVzdEB0ZXN0LmNvbQ==
    复制内容到剪贴板
    代码:
    perl -MMIME::Base64 -e 'print encode_base64("000000");'
    MDAwMDAw
    复制内容到剪贴板
    代码:
    telnet localhost 25
    引用:
    Trying 127.0.0.1...
    Connected to localhost.localdomain (127.0.0.1).
    Escape character is '^]'.
    220 mail.test.com ESMTP Postfix
    ehlo mail
    250-mail.test.com
    250-PIPELINING
    250-SIZE 10240000
    250-VRFY
    250-ETRN
    250-AUTH PLAIN LOGIN
    250-AUTH=PLAIN LOGIN
    250 8BITMIME
    auth login
    334 VXNlcm5hbWU6
    dGVzdEB0ZXN0LmNvbQ== //用户名(test@test.com)
    334 UGFzc3dvcmQ6
    MDAwMDAw // 密码(000000)
    235 Authentication successful //表示成功验证通过
    11. 安装Clamav
    #添加所需的组和用户
    复制内容到剪贴板
    代码:
    groupadd -g 46 clamav
    useradd -g clamav -s /bin/false -d /dev/null clamav
    安装软件
    复制内容到剪贴板
    代码:
    tar zxvf clamav-0.90.2.tar.gz
    cd clamav-0.90.2
    ./configure
    make && make install
    #根据clamd.conf的设置建立LOG目录
    复制内容到剪贴板
    代码:
    mkdir /var/log/clamav
    chown clamav:clamav /var/log/clamav
    chgrp -c clamav /var/log/clamav
    设定clamd.conf
    # vi /usr/local/etc/clamd.conf
    复制内容到剪贴板
    代码:
    #Example   注释掉Example行
    LogFile /var/log/clamav/clamd.log
    LogVerbose
    LogTime
    LocalSocket /tmp/clamav.socket
    PidFile /var/run/clamd.pid
    DatabaseDirectory /usr/local/share/clamav
    MaxDirectoryRecursion 15
    ScanMail
    ScanArchive
    #设定freshclam.conf
    # vi /usr/local/etc/freshclam.conf
    复制内容到剪贴板
    代码:
    #Example    注释掉Example行
    DatabaseDirectory /usr/local/share/clamav
    UpdateLogFile /var/log/clamav/freshclam.log
    LogSyslog
    LogVerbose
    DatabaseMirror db.CN.clamav.net
    DatabaseMirror database.clamav.net
    # 执行 Clamavs病毒库升级
    复制内容到剪贴板
    代码:
    /usr/local/bin/freshclam
    建立clamd的启动脚本:
    vi /etc/init.d/clamd
    复制内容到剪贴板
    代码:
    #! /bin/bash
    #
    # crond Start/Stop the clam antivirus daemon.
    #
    # chkconfig: 2345 90 60
    # description: clamdis a standard UNIX program that scans for Viruses.
    # processname: clamd
    # config: /usr/local/etc/clamd.conf
    # pidfile: /var/run/clamav/clamd.pid
    # Source function library.
    . /etc/init.d/functions
    RETVAL=0
    # See how we were called.
    prog="clamd"
    progdir="/usr/local/sbin"
    # Source configuration
    if [-f /etc/sysconfig/$prog]; then
       . /etc/sysconfig/$prog
    fi
    start() {
           echo -n $"Starting $prog: "
           daemon $progdir/$prog
           RETVAL=$?
           echo [$RETVAL -eq 0] && touch /var/run/clamav/clamd.pid
           return $RETVAL
    }
    stop() {
           echo -n $"Stopping $prog: "
           killproc $prog
           RETVAL=$?
           echo [$RETVAL -eq 0] && rm -f /var/run/clamav/clamd.pid
           return $RETVAL
    }
    status() {
           status clamd
    }
    restart() {
           stop
           start
    }
    reload() {
           echo -n $"Reloading clam daemon configuration: "
           killproc clamd -HUP
           retval=$?
           echo
           return $RETVAL
    }
    case "$1" in
    start)
           start
           ;;
    stop)
           stop
           ;;
    restart)
           restart
           ;;
    reload)
           reload
           ;;
    status)
           rhstatus
           ;;
    restart)
           [ -f /var/lock/subsys/clamd ] && restart || :
           ;;
    *)
           echo $"Usage: $0 {start|stop|status|reload|restart|condrestart}"
           exit 1
    esac
    exit 0
    #设置  clamav 为自启动项

    • chmod 755 /etc/init.d/clamd
    • chkconfig --add clamd
    • chkconfig clamd on
    • clamscan -r test

    对 test 文件夹进行病毒扫描

    设置自动更新病毒库
    vi /etc/crontab
    复制内容到剪贴板
    代码:
    0 4 * * * root /usr/local/bin/freshclam --quiet -l /var/log/clamav/clamd_autoupdate.log
    #启动 clamd 程序
    复制内容到剪贴板
    代码:
    /usr/local/sbin/clamd
    11. Mailscanner Version 4.58.9-1
    http://www.mailscanner.info/downloads.html

    安装 mailscanner

    • tar -zxvf MailScanner-4.58.9-1.tar.gz
    • cd MailScanner-4.58.9-1
    • ./install.sh


    设定 mailscanner,垃圾邮件直接删除掉
    vi /etc/MailScanner/MailScanner.conf
    复制内容到剪贴板
    代码:
    Run As User = postfix
    Run As Group = postfix
    Incoming Queue Dir = /var/spool/postfix/hold
    Outgoing Queue Dir = /var/spool/postfix/incoming
    MTA = postfix
    Virus Scanners = clamav
    High Scoring Spam Actions = delete
    设定 postfix
    vi /etc/postfix/main.cf
    复制内容到剪贴板
    代码:
    header_checks = regexp:/etc/postfix/header_checks
    vi /etc/postfix/header_checks
    在最后一行加上
    复制内容到剪贴板
    代码:
    /^Received:/ HOLD
    变更目录权限
    复制内容到剪贴板
    代码:
    chown postfix:postfix /var/spool/MailScanner/incoming
    chown postfix:postfix /var/spool/MailScanner/quarantine
    重新启动postfix和mailscanner
    postfix stop
    postfix start

    vi /etc/rc.local
    加入开机自动启动postfix和mailscanner的脚本命令
    复制内容到剪贴板
    代码:
    postfix start
    /opt/MailScanner/bin/MailScanner
    邮件测试通过,不过会在邮件的最后多出一句话:
    引用:
    This message has been scanned for viruses and
    dangerous content by MailScanner, and is
    believed to be clean.
    解决办法:
    vi /opt/MailScanner-4.58.9/etc/MailScanner.conf文件
    复制内容到剪贴板
    代码:
    Sign Clean Messages = no
    白名单和黑名单的设置查看/opt/MailScanner-4.58.9-1/etc/rules下面的文件


    12. 安装-配置SpamAssassin
    1、Spam是一个让人讨厌的字眼. 大部分的人都不喜欢它. 如果你想保护自己免受spam, 你就需要安装SpamAssassin.因我在安装系统的时候已经选择好了SpamAssassin。现在我们将其升级到最新版:
    手动安装

    • cd Mail-SpamAssassin-2.xx
    • export LC_ALL=C
    • perl Makefile.PL
    • make
    • make test
    • make install


    #spamassassin的过滤模板在/etc/mail/spamassassin/local.cf,修改为:
    复制内容到剪贴板
    代码:
    vi /etc/mail/spamassassin/local.cf
    引用:
    required_score 5.0
    rewrite_header Subject ********SPAM********
    report_safe 1
    use_bayes 1
    skip_rbl_checks 0
    ok_languages zh en
    ok_locales en ko
    score HEAD_ILLEGAL_CHARS 0
    score SUBJ_ILLEGAL_CHARS 0
    score DATE_IN_PAST_03_06 0
    score UPPERCASE_25_50 0
    score UPPERCASE_50_75 0
    score UPPERCASE_75_100 0
    score X_MSMAIL_PRIORITY_HIGH 0
    score X_PRIORITY_HIGH 0
    score TO_TXT 100
    score RATWARE_HASH_2 100
    score RATWARE_HASH_2_V2 100
    score BAYES_99 0.1
    score BAYES_80 0.1
    score BAYES_60 0.1
    score FROM_ILLEGAL_CHARS 0.1
    score MIME_BASE64_TEXT 0.1
    score NO_RDNS_DOTCOM_HELO 0.1
    score CHINA_HEADER 0.1
    score NO_REAL_NAME 0.2
    score HTML_MESSAGE 0.2
    score MIME_HTML_ONLY 0.2
    score MIME_HTML_ONLY_MULTI 0.2
    score FORGED_MUA_OUTLOOK 0.2
    score FORGED_HOTMAIL_RCVD 0.2
    score FORGED_OUTLOOK_TAGS 0.2
    score MAILTO_TO_SPAM_ADDR 0.2

    #黑白名单
    whitelist_from *@oklrc.com

    # ---------------------------------------------------------------------------
    # 使用中国反垃圾邮件联盟的CBL/CDL
    # URL: http://www.anti-spam.org.cn/
    header RCVD_IN_CBL eval:check_rbl('cbl', 'cbl.anti-spam.org.cn.')
    describe RCVD_IN_CBL Received via a relay in cbl.anti-spam.org.cn
    tflags RCVD_IN_CBL net

    header RCVD_IN_CDL eval:check_rbl('cdl-notfirsthop', 'cdl.anti-spam.org.cn.')
    describe RCVD_IN_CDL CDL: dialup sender did non-local SMTP
    tflags RCVD_IN_CDL net

    #SCORE
    score RCVD_IN_CBL 4.0
    score RCVD_IN_CDL 3.0
    #使用CCERT 中文垃圾邮件过滤规则集Chinese_rules.cf
    复制内容到剪贴板
    代码:
    wget -N -P /usr/share/spamassassin www.ccert.edu.cn/spam/sa/Chinese_rules.cf
    #建立SpamAssassin的学习系统
    复制内容到剪贴板
    代码:
    sa-learn --sync -D -p user_prefs
    #查看自学习的数据信息
    复制内容到剪贴板
    代码:
    sa-learn --dump all
    #查看调试信息
    复制内容到剪贴板
    代码:
    spamassassin --lint -D
    注:spamassassin要配合其它的邮件代理或服务器使用!


    13. postfix对某个帐户进行监控
    main.cf中设置相关参数:
    引用:
    寄件备份sender_bcc_maps
    收件备份recipient_bcc_maps
    寄件及收件备份always_bcc
    如: main.cf加上这个参数
    复制内容到剪贴板
    代码:
    sender_bcc_maps = hash:/etc/postfix/maps
    /etc/postfix/maps 这个名可随便起
    然后vi /etc/postfix/maps写转发和接收的邮箱,比如将abc@abc.com发出的信转给cde@abc.com
    引用:
    abc@abc.com cde@abc.com
    如果要监控多个用户,可以写多行,一条一行, 改好后在终端执行以下命令,生成postfix认识的格式
    复制内容到剪贴板
    代码:
    postmap hash:/etc/postfix/maps
    14. 在Mailscanner中监控某个用户收发的邮件功能
    首先在Mailscanner.conf的作如下更改
    复制内容到剪贴板
    代码:
    #Archive Mail = %rules-dir%/archive.rules
    然后进入rules目录,看有没有archive.rules文件,如果没有就建立!
    复制内容到剪贴板
    代码:
    FromOrTo: abc@abc.com yes forward cde@abc.com
    From表示将abc@abc.com发出的邮件转发一份给cde@abc.com
    To 表示将发给abc@abc.com的邮件转发一份给cde@abc.com

    比如单独要将abc@abc.com发出的邮件转给cde@abc.com作如下更改
    复制内容到剪贴板
    代码:
    From: abc@abc.com yes forward cde@abc.com
    改完后要重启动MailScanner! 另外可以监控整个域的邮件用用*@abc.com
    也可以监控所有邮件用*代替.


    15. POSTFIX附件大小设置
    postfix里有两个需要设置的:
    复制内容到剪贴板
    代码:
    mailbox_size_limit
    message_size_limit
  • TOP

    发新话题