邮件服务器(Postfix)

MUA(mail user agent)邮件用户代理,帮助用户读写邮件

MTA 邮件传输代理。把邮件由一个服务器传到另一个服务器

MDA邮件投递代理,把邮件放到用户的邮箱里

软件: postfix

netstat -nuptl |grep 25 查看服务是否起来

主配置文件 /etc/postfix/main.cf

运行参数配置/etc/postfix/master.cf

访问控制文件 /etc/postfix/access

别名数据库文件/etc/aliases

虚拟别名域库文件/etc/postfix/virtual

主配置文件

myhostname = 主机名

mydomain = 域名

myorigin = $mydomain设置由本级寄出去的邮件所使用的域名或主机名

inet_interfaces = all 设置postfix服务监听的网络接口

mydestination = $mydomain, $myhostname设置可接受邮件的主机名和域名

mynetwork = 设置可转发哪些网络的邮件

relay_domains 设置可转发哪些网域的邮件

第一季

-----------------------小知识命令

Postconf –d 显示默认配置

Postconf –v 显示被更改的配置信息

首先关于邮件服务的工作原理这里就不说了,如果明白了邮件服务器工作原理和邮件接收发送的原理就能明白下面的内容:

Postfix配置文件中,

myhostname =

mydomain =

myorigin = $mydomain

这3个都是被注释掉的,所以要自己取消注释并修改

然后

inet_interfaces =

文件默认监听自己还回口的(其实默认是监听所有的,但是因为红帽为了安全,在开发的时候就将文件里面的这个改成了监听还回口了,所以我们postconf –d |grep inet 的时候看到的是inet_interfaces = all)

参数myorigin = $mydomain,我们来改这个参数

因为mydestination限制了自己能接收谁的邮件,所以我们测试的时候要在后面添加baidu.com这个域,

我们在desktop1.example.com上发邮件给server.example.com

发送邮件

telnet主机

telnet localhost 25

hello

mail from :tom(注意这里tom后面不能接后缀)

rcpt to:jack邮件发送给jack

data

可以直接写邮件内容

test first mail

以. 结束

然后quit

pop3服务

软件dovecot

依赖包perl-DBI-*

    mysql-*

   dovecot-*

配置/etc/dovecot.conf

protocols = pops

用pop3接受邮件

telnet localhost 110

user TOM

pass tom

list (查看文件)

retr n(数字)查看邮件

别名配置

在/etc/postfix/main.cf

中确认是否有

alias_maps = hash:/etc/aliases

alias_database = hash:/etc/aliases

编辑/etc/aliases

(格式)别名:真实名

执行service postfix restart或者newaliases生效

postmap /etc/aliases

postalias /etc/aliases

域名别名

在/etc/postfix/main.cd中

加入

virtual_alias_domains = 域名

virtual_alias_maps = hash:/etc/postfix/virtual

编辑/etc/postfix/virtual

域名别名 真实域名

postmap /etc/postfix/virtual

service postfix restart

访问控制

在主配置文件/etc/postfix/main.cf中加入

smtpd_client_restrictions = check_client_access hash:/etc/postfix/access

然后配置/etc/postfix/access文件

127.0.0.1 OK

192.168.1.1 REJECT丢弃并返回信息

example。com DISCARD丢弃且不返回信息

192.168.2.1 RELAY转发

立即生效 postmap /etc/postfix/access

       service postfix reload

ssl实现

1,创建密钥

make -C /etc/pki/tls/certs创建指定目录

make -C /etc/pki/tls/certs dovecot.pem制定文件名

编辑/etc/dovecot.pem

2变价配置文件/etc/postfix/main.cf 开启pop3s并取消如下2行注释

ssl_cert_file = /etc/pki/certs/dovecot.pem

ssl_key_file = /etc/pki/certs/dovecot.pem

ssl_disable = no

3,立即生效

service dovecot restart

netstat -nutl |grep LINTEN

TLS(安全传输层协议)

服务:master和子进程,子进程间没有父子关系

tcp(smtp) 25

tcp(tls) 465

配置文件:

/etc/postfix/main.cf

/etc/postfix/master.cf

/etc/postfix/*

/etc/alias

安装postfix后要确定使用postfix

yum -y install system-switch-mail

选择使用postfix为默认邮件服务器

system-switch-mail

或者alternatives --config mta

service sendmail stop

chkconfig sendmail off

ps aux |grep postfix显示有2个服务,其实后天是有21个服务在运行

大部分程序都运行在低权限上

每个单独程序是分开的

没有suid功能

可以实现内存动态分配,防止内存溢出

防止高负载

由master进程控制,没有父子进程关系,

进程可以相互调用

当接受邮件大于处理队列邮件能力的时候,或者达到负载的时候,就会先去处理接受邮件,而停止处理队列邮件,因为处理接受邮件的延迟比处理队列邮件小!

master服务控制所有进程

管理21个子进程,可以选择让他运行哪些子服务

服务的管理是有/etc/postfix/master.cf

其中

第一列service表示服务类型

第二列private表示是否为私有类型,默认为yes(-表示默认,n表示不是)

第三列unpriv表示是否不是私有类型

第四列wakeup表示多久唤醒一次服务,例如

表示每60秒唤醒一次,这个设置主要是因为如果每个服务都开启,会浪费资源。

第五列maxpro表示最大的进程数

第六列command+args表示执行的命令和标志

下面使用ps aux |grep 25会发现服务只监听了25,并没有监听465(tls)

这里可以让服务同时监听tls

做一下更改

将这3行注释取消

表示强制只监听465,也就是说不会监听25了

邮件的接受

4个队列:maildrop本地邮件放置在maildrop中,同时也被拷贝到incoming中。

          incoming 放置正在到达或队列管理进程尚未发现的邮件。

         active 放置队列管理进程已经打开了并正准备投递的邮件,该队列有长度的限制。

        deferred放置临时不能被投递的邮件

           corrupt 不可达或者损坏的邮件,每隔15分钟尝试发送一次

           hold 如果一份邮件尝试很长时间发送不出去就放在此目录,表示不会再去发送了

在邮件服务器之间接受和发送邮件是使用的smtp

当一个邮件服务器A发送邮件给邮件服务器B时,先将邮件放在mialdrop队列中,然后再由pickup这个服务去读取队列中的邮件,然后pickup和smtpd将邮件传递给cleanup这个服务(cleanup服务是将邮件传递给用户的信箱里,他可以负责内容检测,过滤,头部信息检查),检查完邮件,就传递给incoming队列中区,然后通知qmgr这个进程

邮件的传递

正常的邮件都在/var/spool/postfix/incoming中

postfix中是有很多队列目录的

local服务负责本地的邮件间传递

smtp有用其他邮件服务器之间传递

队列

postfix的队列目录在/var/spool/postfix

sendmail的队列目录在/var/spoll/mquque

postqueue -p 查看队列中是否有邮件存在

postconf工具

默认是显示和编辑/etc/postfix/main.cf

不加任何参数把默认和非默认的参数都显示出来

-n非默认设置

-d默认设置

-e修改配置(postconf -e "mynetworks=192.168.0.0/24")

这里是定义不伪装的用户,与myorigin相反,可以互补使用

中继实验演示

安全

这个是限制用户通过vrfy命令探测服务器上的用户信息。

默认是开启的,所以我们这里要关闭这个功能

下面演示一下如果没有屏蔽vrfy功能,客户端对服务器的操作

这里可以看出,客户很容易就测试出服务器上是否有user1这个用户了!

所以我们

这个可以看到默认是没有关闭vrfy功能的,所以我们将这行参数追加到main.cf文件里,然后将no改为yes

重启服务后,再来测试一下

然后看一下另一个参数

这里默认是关闭的,主要是指,本地用户给邮件服务器发送邮件时,必须先要发送helo或者ehlo ,不然将无法把邮件成功发送到邮件服务器,这是对本地用户来设置的,

对外用户(其他邮件服务器)也可以做这个限制

这个意思就是外服务器想自己发送邮件的时候也要先发送helo

预防DOS攻击

这个参数默认值为1

意思是当服务器接受邮件频率过高(每秒接受的邮件数超过1封),则邮件服务器会拒绝工作。

local_destination_concurrency_limit=2,默认为2

这个参数主要是,如果当同时给一个邮箱发送邮件数量超过2个时,就会认为有人攻击

这个参数是限制一些内容中有通配符等字符串的邮件,主要是避免一些脚本在服务器上执行

默认是没有启用的,所以要导入到main.cf文件中,并改为yes

/etc/postfix/access文件,主要用于屏蔽或者垃圾邮件过滤

这里可以看到定义access文件时,先是用户,然后是工作

下面的是一些其他的参数,这里可以根据实际情况做多个更改

这里是access文件中的内容,可以看到这里吗,默认的参数是check_client_access,

当然,可以根据实际情况来更改为上面的那些参数

下面就要将这2行配置拷贝到/etc/postfix/main.cf中,

这里也可以看到,当要用到多个参数的时候,是要用“,”分开的,(注意后面不一定就是要写access文件,也可以定义自己的文件,但是要按access的模板来写,)

然后编辑access文件

这里表示,如果来自192.168.0.0的主机想通过我中继,则会被我拒绝。

下面测试:

首先重启postfix服务,然后要postconf /etc/postfix/access 来生成相应 的库文件

      黑名单列表

      DNS黑洞列表

把一个我认为是发垃圾邮件的服务器给拒绝掉,在dns服务器中给目标主机做个dns的反解,然后将下面的主机名改为dns反解的ip

  垃圾邮件过滤

对进来的邮件进行过滤,并告知被拒绝的对方邮件被拒绝(sendmail是不会退信告诉对方的)

postfix默认不启用procmail和防垃圾邮件机制

这里可以看到,默认是没开启的,

所以我们将mailbox_command导入到main.cf中,然后加上procmail文件所在的路径

然后给procmail这个文件加上sgid

为什么要加sgid,是因为每次传递过来的邮件,当执行procmail命令的时候就可以以mail这个组员的身份来执行,然后把邮寄放在/etc/spool/mail中

 

主要对4个方面进行过滤:

      1,对邮件头(主题)过滤 header_checks

      2,对邮件的附件过滤 mime_header_checks

      3,对邮件内容过滤 body_checks

      4,对邮件大小过滤 body_checks_max_size(默认为10M)

可以使用mutt直接发送邮件

开始做过滤

这里的header_checks表示对邮件的主题过滤,这个文件是一个模板

首先在主配置文件main.cf中加入这样一句话:

(在header_checks文件中说明了

     当然在主配置文件中是可以定义多个规则的,

这里就定义了对邮件主题,邮件中附件和邮件内容进行过滤,然后就要具体指明过滤规则了,所以就要去编辑后面对应的三个文件(这3个文件名可以随意,但是改为与前面的一样,易于分辨)

下面就可以将模板复制成刚刚定义的文件

编辑

这里前面的写法可以使用正则表达式,中间reject表示采取的动作,后面表示退信内容

其他相应的文件,写法一样

         !!!注意对附件进行过滤的时候需要拷贝模板中的一段话,然后做更改:

这里可以看到我们复制了一下,然后更改成当附件包含有exe doc xls ppt结尾的附件时,就被拒绝

  然后同样使用mutt来测试

注意了,上面的这些操作其实都是procmail在进行的,所以必须将procmail打开

启用sasl(simple authentication and security layer)和tls(transportation layer securityy)

sasl就是smtp的传输对用户发送邮件时需要身份验证

,tls就是安全的传输层协议,就是用来加密的

mkdir /etc/postfix/certs

将自己的私钥,签名后的证书和ca的证书都复制到certs目录中

然后启用tls

首先第一行查看的是要指向私钥的

第二行是指向证书的

第三行是指向ca的证书

是否启用日志,默认为0关闭

最后更改主配置文件如下

 

启用sasl

兼容老的sasl版本的认证

匿名用户不能发送

最后配置文件为如下:

第一行表示,允许登录的网络用户,允许通过sasl认证的用户,拒绝不通过认证的

然后启用2个服务

测试: