Mail,邮件服务(二):收发邮件以及如何基于认证实现邮件简单安全
邮件服务相关协议的监听端口以及连接类型。
SMTP协议:监听:25/tcp 加密后叫 smtps 465/tcp
pop3协议:监听 110/tcp 加密后叫 pop3s 995/tcp
imap4,监听 143/tcp 加密后叫 imaps 993/tcp
每一个协议都有相关协议的RFC(帮助文档)
从MTA开始配建一个完整的Mail服务器。
Redhat默认提供了Sendmail,而且已经默认监听在了本机。我们以Postfix这个强大的软件来讲解。
注意:我们的邮件服务严重依赖于DNS,DNS必须非常可靠,邮件服务器必须要反解!(反向不需要MX记录)
Postfix的安装和使用:
安装好配置好DNS之后
rpm -e sendmail --nodeps ##卸载sendmail
yum install postfix ##使用yum源安装postfix
service postfix start ##启动postfix服务
netstat -ntlp ##发现有53号端口
chkconfig postfix on ##实现开机自动启动
安装好postfix之后,比较重要的文件以及命令
master.cf:提供其他模块的加载。启动postfix之后,会启动 master这个进程,这是系统协调管理员。而它的配置就叫 master.conf。
main.cf:提供fstbd服务器的最重要服务。
smtpd.conf:提供所有smtpd的服务有两个版本,我们一般使用的是2版本。
postmap :支持数据库检索文件映射的工具
postqueue:查看邮件发送队列的
-p :查看邮件队列里的邮件。这里的邮件过一段时间会重发的。一般是300秒。
-f :强制重发邮件队列里的邮件。
postalias :定义别名
postconf :查看定义配置在main.cf的辅助型配置工具
-d :查看默认配置
-n :查看修改过的配置
-a :查看支持的认证机制 一般是 cyrus和dovecot
-m :显示本地支持的用户或者什么的名称映射功能的。
/usr/libexec/postfix下也有很多命令,这里面也是postfix的各种模块。比如:
pickup 分拣模块
bounce 弹回的队列
pipe 邮件传输机制
我们看看如何使用邮件服务。
telnet 127.0.0.1 25 ##连接邮件服务ESMTP 扩展MTP发送一封邮件
mail from:alien@126.com ##指定发件人
rcpt to:gentoo@a.org ##指定收件人
data ##编辑信息
Subject:How are you? ##指定主题是什么
How are you these days? ##指定内容
. ##指定退出编辑。
bye ##退出邮件系统
tail /var/log/maillog ##查看邮件日志
要想在一台主机上实现邮件的发送,你只要发送到127.0.0.1就好了
rcpt to:gentoo@localhost
我们su到gentoo里。
使用命令
mail 则可以实现查看邮件
输入1 则可以查看第一封邮件。
quit 可以退出邮件系统。
============================================
详解main.cf:/etc/postfix/main.cf
对于postfix来讲。所有关于sftp的服务都在main.cf。
main.cf
格式:指令 = 值
可以换行,而且不需要换行符。如果需要换行,则需要多一个空白符作为换行的机制。
inet_interfaces = $myhostname,locahost 监听的端口
myhostname = ##变量
mydomain = ##定于自己的域 是什么
myorigin = $mydomain ##邮件名如果没有指定地址,则以自己指定的地址及域发送。
mydestination = 指定只接受哪个地址的邮件。
##我们在mydestination中开启最下面的一项。
mynetworks = ##允许哪个网段的来发邮件进行中继
##表示有两种方式一种是 style 表示监听类型
##第二种表示只给哪个网段中继
service postfix restart 重新启动服务
则发现我们的53已经监听在172.16.100.1自己的地址了。
Redhat会解析发件人地址,所以当我们在指定发件人地址的时候,当它自己不能识别,不匹配的时候,他就不会让你发送。
接下来我们发一封正常的。来多次熟悉这个过程
telnet 127.0.0.1 25
HELO mail.a.org
mail from:centos@a.org
rcpt to:gentoo@a.org
data
Subject:Test
OK?
.
quit
我们真正的使用一次我们172.16.100.1的地址给他发
telnet 172.16.100.1 25
EHLO mail.a.org ##扩展的Hello命令
mail from:centos@a.org
rcpt to:gentoo@a.org
data
Subject:Reply
OK?
.
quit
我们使用windows试试
在cmd命令提示符中
telnet 172.16.100.1 25
MAIL FROM:centos@a.org
RCPT TO:gentoo@a.org
DATA
SUBJECT:Test
OK?
.
QUIT
小提示:当我们定义了 mynetworks 是否允许中继之后,它就不会再给其他的中继。那样我们发往其他的网络的域的邮件,一旦需要我们的邮件系统进行中继,则根本不中继。
如何收邮件呢?
我们使用 dovecot
它的配置文件是/etc/dovecot.conf
里面唯一需要改的,就是提供什么服务
# vim /etc/dovecot.conf
找到并修改为
# protocols = pop3 ##则只监听pop3的服务。
启动服务
# service dovecot start
# chkconfig dovecot on
# netstat -ntl | grep 110
它监听在110端口上
我们通过mail命令直接给Gentoo发一封邮件。
echo “To pop3 User” | mail -s “haha” gentoo@a.org
这就直接发了一封邮件内容为To pop2 User的发给gentoo的主题为haha的邮件
如何为你的SMTP用户添加认证呢?
如果你允许一个特定网段内的用户进行中继的话,如果这个网段的用户发送垃圾邮件的话,我们是无法对其进行识别的。我们SMTP完全可以引入SASL(Simple Authentication and Security Layer)的这种机制来实现。事实上启用认证就是强制用户想发信就必须提供一个真实有效的身份来发送。
现在常用的这种机制就是通过SASL来实现的,这个协议目前比较常用的版本有两个,SASL/SASL2,都属于cyrus
我们的系统上已经安装了许多关于cyrus的软件包,比如cyrus-sasl-plain这种实现验证的机制。
saslauthd服务,一般情况下当安装软件之后就会自动安装上的。默认这个服务一定是关闭着的。我们可以使用service saslauthd restart将其启动起来。这个服务是靠着库来实现的,相对应的库文件都在/usr/lib/sasl/2的目录下。这里面有一个*.conf的文件,是相关你的STMP的软件的。
1.配置并启动saslauthd服务
建立配置文件 /usr/lib/sasl2/smtpd.conf
在里面加入pwchechk_method:saslauthd
可以加入checklist等
2.调整main.cf文件,以便支持认证
修改后要重载postfix服务:postfix reload
postconf -d | grep sasl:只看sasl
vim /etc/postfix/main.cf
smtpd_sasl_auth_enable = yes 是否启用相关认证
smtpd_sasl_security_options = noanonymous 禁止匿名用户登录
smtpd_recipient_restrictions = 设置收件人地址过滤规则
permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination :拒绝所有的未授权网络内的收件人
修改mynetworks = 127.0.0.1
saslauthd -v 可以看到它支持的所有认证方式
修改/etc/sysconfig/saslauthd文件 ## 这个只是一种机制
改为MECH=shadow ## 不是必须,也可以使用pam认证
如果两个都想支持,在/etc/init.d/saslauthd中
MECH=”shadow pam”
然后将下面几行注释掉
if..
..
fi..
这样就同时启用的两种机制
重启服务service postfix restart
使用postconf -n查看一下。
这时候我们再次发邮件的时候,
他就会报错的,所以我们需要通过认证才能够发送邮件
telnet mail.a.org 25
EHLO mail.a.org
MAIL FROM:gentoo@a.org
RCPT TO:centos@a.org ##中继被拒绝
AUTH LOGIN ##启用登录认证使用base64进行编码
## echo -n “gentoo” | openssl base64
## 它会生成一个编码,此时我们用编码作为用户名输入上去
## 然后还少密码
## echo -n “redhat” | openssl base64
## 将生成的编码作为密码输入上去
PCPT TO:centos@a.org
DATA
SUBJECT:Test
OK?
.
QUIT
aliases 别名机制:
用户的别名都保存在/etc/aliases
格式:别名:地址1,地址2,地址3
a: b
kehu: a,b,c@126.com,d@hostmail.com ##此时你只需要发送一封邮件给一个kehu,则可以实现给kehu这个组的所有用户群发。
执行newaliases 命令即可更新别名设置,它会将其变成aliases.db,这才是postfix所应该使用的文件
比如:我们定义,凡是发给slackware 都发给gentoo
凡是发给mygrp的都发送给 gentoo,centos
我们简单的测试一下。
echo “TO slackware” | mail -s “to sackware” slackware@a.org
则本是发送给slackware的都发送给了gentoo