magic 发表于 2015-11-25 12:08:36

sendmail 学习笔记

   基础知识
  1.守护进程
sendmail,监听端口25。
  2.配置文件
/etc/aliases /etc/mail
  /etc/mail/sendmail.cf
/etc/mail/sendmail.mc(通过修改该文件生成一个sendmail.cf文件,如下使用m4命令:)
m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf (m4需要安装sendmail-cf-8.13.1-3.2.el4.i386.rpm)

/etc/mail/access.db 决定那些主机可以通过本邮件服务器发送邮件,该文件是二进制,所以要通过修改access文件来生产access.db。
access 文件格式:
IP|域名RELAY|REJECT|OK|DISCARD      (允许SMTP代理投递|拒绝接受并发布错误信息|无条件接受|放弃邮件,无错误信息发布)
192.168RELAY//允许192.168整个网段的IP
使用命令makemap生产access.db
makemap hash /etc/mail/access.db < /etc/mail/access
  /etc/mail/submit.mc
/etc/mail/submit.cf
  3.启动脚本
service sendmail start|stop|restart|status
  4.sendmail.mc初始配置
  include(`/usr/share/sendmail-cf/m4/cf.m4')dnl   包含/usr/share/sendmail-cf/m4/cf.m4文件;
  VERSIONID(`setup for Red Hat Linux')dnl      定义版本信息;
  OSTYPE(`linux')dnl      选择包含操作系统指定属性的文件;
  define(`confDEF_USER_ID',``8:12'')dnl      指定sendmail用户使用用户ID为8,组ID为12;
  dnl define(`confAUTO_REBUILD')dnl   
  define(`confTO_CONNECT', `1m')dnl      设置等待连接的最长时间为1分钟;
  define(`confTRY_NULL_MX_LIST',true)dnl      如果MX记录指向本机,则sendmail直接连接到远程主机;
  define(`confDONT_PROBE_INTERFACES',true)dnl   sendmail不会自动的把服务器网络接口视为有效地址;
  define(`PROCMAIL_MAILER_PATH',`/usr/bin/procmail')dnl    设置procmail的存放路径;
  define(`ALIAS_FILE', `/etc/aliases')dnl      设置邮件别名存放路径;
  define(`STATUS_FILE', `/var/log/mail/statistics')dnl    设置日志文件路径;
  define(`UUCP_MAILER_MAX', `2000000')dnl      基于UUCP协议的mailer处理信息的最大限制为2M;
  define(`confUSERDB_SPEC', `/etc/mail/userdb.db')dnl    设置用户数据库文件路径;
  define(`confPRIVACY_FLAGS', `authwarnings,novrfy,noexpn,restrictqrun')dnl 设置部分邮件命令的标志;
  define(`confAUTH_OPTIONS', `A')dnl      授权成功后,将AUTH参数添加到邮件的消息头中;
  dnl TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
dnl define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
dnl define(`confCACERT_PATH',`/usr/share/ssl/certs')
dnl define(`confCACERT',`/usr/share/ssl/certs/ca-bundle.crt')
dnl define(`confSERVER_CERT',`/usr/share/ssl/certs/sendmail.pem')
dnl define(`confSERVER_KEY',`/usr/share/ssl/certs/sendmail.pem')
dnl define(`confDONT_BLAME_SENDMAIL',`groupreadablekeyfile')dnl
dnl define(`confTO_QUEUEWARN', `4h')dnl
dnl define(`confTO_QUEUERETURN', `5d')dnl
dnl define(`confQUEUE_LA', `12')dnl
dnl define(`confREFUSE_LA', `18')dnl
define(`confTO_IDENT', `0')dnl       设置ident查询等待的最大响应时间为0秒;
dnl FEATURE(delay_checks)dnl
FEATURE(`no_default_msa',`dnl')dnl      允许msa被DAMEMON-OPION覆盖的默认配置;
  FEATURE(`smrsh',`/usr/sbin/smrsh')dnl      设置邮件发送器smrsh的存放路径;
  FEATURE(`mailertable',`hash -o /etc/mail/mailertable.db')dnl   设置邮件发送器数据库的存放路径;
  FEATURE(`virtusertable',`hash -o /etc/mail/virtusertable.db')dnl设置虚拟邮件域数据库的存放路径;
  FEATURE(redirect)dnl      支持.redirect虚拟域;
  FEATURE(always_add_domain)dnl       增加主机名到所有本地发送的邮件;
  FEATURE(use_cw_file)dnl      加载/etc/mail/local-host-name文件中定义的主机;
  FEATURE(use_ct_file)dnl      加载可信任用户名单;
  dnl define(`confMAX_DAEMON_CHILDREN', 12)dnl
  dnl define(`confCONNECTION_RATE_THROTTLE', 3)dnl
  FEATURE(local_procmail,`',`procmail -t -Y -a $h -d $u')dnl   使用procmail作为本地邮件发送者;
  FEATURE(`access_db',`hash -T<TMPF> -o /etc/mail/access.db')dnl   从指定数据库中加载可中继的域;
  FEATURE(`blacklist_recipients')dnl      根据访问数据库的值过滤外来邮件;
  EXPOSED_USER(`root')dnl      禁止伪装发送用户地址中出现root用户;
  dnl DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl   指定sendmail任为MTA运行时的参数;
  DAEMON_OPTIONS(`Port=25, Name=MSA')dnl
dnl DAEMON_OPTIONS(`Port=smtps, Name=TLSMTA, M=s')dnl
dnl DAEMON_OPTIONS(`port=smtp,Addr=::1, Name=MTA-v6, Family=inet6')dnl
dnl DAEMON_OPTIONS(`Name=MTA-v4, Family=inet, Name=MTA-v6, Family=inet6')
FEATURE(`accept_unresolvable_domains')dnl   可接收不能由DNS解析的主机所发送的邮件;
  dnl FEATURE(`relay_based_on_MX')dnl
LOCAL_DOMAIN(`localhost.localdomain')dnl   设置本地域;
  dnl MASQUERADE_AS(`mydomain.com')dnl
dnl FEATURE(masquerade_envelope)dnl
dnl FEATURE(masquerade_entire_domain)dnl
dnl MASQUERADE_DOMAIN(localhost)dnl
dnl MASQUERADE_DOMAIN(localhost.localdomain)dnl
dnl MASQUERADE_DOMAIN(mydomainalias.com)dnl
dnl MASQUERADE_DOMAIN(mydomain.lan)dnl
MAILER(smtp)dnl         指定sendmail所有SMTP发送者,包括smtp,esmtp,smtp8和relay;
  MAILER(procmail)dnl      指定使用procmail作为本地邮件发送者;
  5.submit.mc初始配置(通过修改该文件使用m4生成submit.cf)
divert(0)dnl         将配置文件导出生成cf配置文件;
  include(`/usr/share/sendmail-cf/m4/cf.m4')
VERSIONID(`linux setup for Red Hat Linux')dnl
define(`confCF_VERSION', `Submit')dnl      设置配置版本;
  define(`__OSTYPE__',`')dnl dirty hack to keep proto.m4 from complaining经过proto.m4检查后,将__OSTYPE__值设置为空;
  define(`_USE_DECNET_SYNTAX_', `1')dnl support DECnet    设置支持DECNET;
  define(`confTIME_ZONE', `USE_TZ')dnl      设置系统时区;
  define(`confDONT_INIT_GROUPS', `True')dnl   禁止直行initgroups程序;
  define(`confPID_FILE', `/var/run/sm-client.pid')dnl    设置PID文件路径;
  dnl define(`confDIRECT_SUBMISSION_MODIFIERS',`C')   
FEATURE(`use_ct_file')dnl       加载可信任用户名单
dnl
dnl If you use IPv6 only, change to
FEATURE(`msp', `')dnl      设置msp的IP地址
  6./etc/aliases
设置别名,默认情况,系统中所有账号别名为root,所以邮件全部由root接收。
修改完aliases,使用命令newaliases生效。
  7.安装dovecot,并启动服务,来提供pop和imap服务,实现异地接受邮件
/etc/dovecot.conf文件内容修改:
protocols = imap imaps pop3 pop3s
  
页: [1]
查看完整版本: sendmail 学习笔记