互联网服务Linux

linux服务之sendmail

MUA:邮件用户代理(outlook)、即邮件客户端

MTA:邮件传输代理 即邮件服务器

MDA:邮件投递代理 检查邮件是否安全及邮件发送

MRA:邮件获取代理


MTA  SMTP(simple mail transport protocol)

smtp使用的是TCP 25号端口,且端口号是不能随意改变的。如果服务端端口号发生改变,客户端要修改,容易造成很大的工作量

lmtp(local mail transport protocol)本地邮件传输协议,用于收发自己的邮件,即自己给自己发邮件,一般用于测试


例子

mail -vs ‘some subject’ [email]station@example.com[/email]

v:查看发送的过程

s:定义邮件的主题



MTA:邮件传输代理 即邮件服务器

sendmail postfix exim(用的比较少)

MTA通用功能:

1、支持虚拟主机,可以将所有收发邮件自动转发一封到某一个特定邮箱

2、自动重试,当对方服务器发生问题时,每隔15分钟会重新发送一次

3、垃圾邮件过滤

MTA默认访问控制


1、sendmail和postfix默认没有setuid组件,如果有setuid组件,任何人都可以对其操作

2、只侦听本地回环,即只有本地用户才能发送邮件

3、中继拒绝,如果中继打开,该邮件服务器就成了垃圾邮件中转站。可以限制某个网段的用户可以通过我的MTA发送邮件。在Linux缺省情况下中继是关闭的。



问题:当用户出差,在外地的时候,不在本域里面,怎么解决?

1、可以使用vpn拨号到公司里面来进行发邮件

2、使用用户验证,必须输入邮箱账号和密码才能发送邮件



sendmail

可以被tcp_wrapper所支持

软件包:sendmail,sendmail-cf,sendmail-doc

服务:/usr/sbin/sendmail

脚本:/etc/init.d/sendmail

端口:25(smtp)

配置文件:/etc/mail/sendmail.mc   /etc/aliases

额外包:procmail(MDA),spamassassin,tcp_wrappers,sendmail-doc


sendmail使用M4宏来配置即使用dnl+空格来取消注释

配置文件里面的内容必须顶头写

当重启sendmail的时候,读取的配置文件是/etc/mail/Makefile

必须将/etc/mail/sendmail.mc转换成/etc/mail/sendmail.cf,当服务重启的时候,M4宏会帮我们自动转换。为什么配置sendmail.mc而不直接配置sendmail.cf呢?因为sendmail.cf的语法比较复杂,所有我们修改sendmail配置文件的时候,就直接修改sendmail.mc


vim /etc/mail/sendmail.mc

dnl DAEMON_OPTIONS('Port=smtp,Addr=127.0.0.1,Name=MTA')dnl,即默认sendmail是侦听在本地的,当将127.0.0.1改为0.0.0.0或者将本行注释掉,即侦听所有网络

当修改配置文件的时候,首先应将sendmail.cf备份,避免发生错误,修改完成之后,直接使用M4来进行转换M4 sendmail.mc > sendmail.cf,当我们只修改sendmail.mc并没有使用M4转换的话,修改无效。

邮件服务器对时间的要求非常重要,当时间戳发生改变的时候,sendmail启动的时候会报错,可以使用touch /etc/mail/*规定使用当前时间戳

缺省sendmail-cf是没有安装的,必须要手动安装,如果该包没有安装sendmail.mc和sendmail.cf是不能转换的。



接收邮件具体配置

1、首先修改sendmail侦听所有网络

2、/etc/mail/local-host-names里面写出所有主机名,如果里面不写主机名,是无法收到邮件的。

测试:

telnet instructor.example.com 25

mail from: [email]redhat@instructor.example.com[/email]

rcpt to: [email]admin@instructor.example.com[/email]

data

this is my test mail!

.



发送邮件地址伪装(全局)具体配置

修改配置文件/etc/mail/sendmail.mc

将以下几行内容取消注释

EXPOSED_USER('root')dnl

FEATURE(masquerade_envelope)dnl

MASQUERADE_AS('example.com')dnl(伪装域)

FEATURE(masquerade_entire_domain)dnl



本地别名

发进来邮件别名具体配置   /etc/aliases  

fakename: realname 一对一发送

a-list: fakename, otheruser  列表发送多个

helpdesk: | mail2ticket

修改之后需要newaliases重新加载文件生成数据库

群发邮件

it: it1,it2,it3并且it这个用户本地不需要存在


虚拟别名  /etc/mail/virtusertable主要定义域

admin1@123.com
shopper

admin1@xyz.org
jdj

pageme@he.net
lmiwtc@pg.com

@cba.com
cba@ao1.com

@dom1.org
%[email]1@dom2.org[/email]一般用于公司域名发生改变  %1是变量,即有获取取用户名的作用

makemap hash virtusertable.db < virtusertable



发出邮件地址伪装(必须将全局配置还原):

/etc/mail/sendmail.mc

添加以下几行

FEATURE(genericstale)dnl

FEATURE('always_add_domain')dnl

GENERICS_DOMAIN_FILE('/etc/mail/local-host-names')dnl

手动创建/etc/mail/genericstable

user@example.com
user@otherexample.com域名发生改变

redhat@example.com
redhat.lastname@example.com用户名发生改变

域名必须写入/etc/mail/local-host-names,不然伪装没有任何意义

地址伪装使用的SMTP邮件传输协议


中继:是否允许用户通过本邮件服务器发送邮件

开启中继:/etc/mail/sendmail.mc

FEATURE(`blacklist_recipients')dnl默认开启


在/etc/mail/access里面设置中继

Connect:localhost.localdomain
RELAY

Connect:localhost
RELAY

Connect:127.0.0.1
RELAY

默认设置只允许本地发送邮件

RELAY:允许中继

REJECT:拒绝并提示拒绝

DROP:不提示直接拒绝

From:user@example.com
REJECT哪些MTA向我发邮件

Connect:spamRus.net
REJECT哪些MUA可以通过我向外发邮件

Connect:204.168.23
REJECT

Connect:10.3
OK

From:virtualdomain1.com
RELALY

To:user@dom.com
ERROR:505 mail discarded

To:user@
ERROR:505 bad name

参与0

0同行回答

“答”则兼济天下,请您为题主分忧!

提问者

kkmmll
软件开发工程师kkmmll
擅长领域: 服务器大数据分布式系统

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2013-08-14
  • 关注会员:0 人
  • 问题浏览:1760
  • X社区推广