Browsed by
Tag: dovecot

Postfix / Dovecot 配置的一些修改

Postfix / Dovecot 配置的一些修改

email 大概是自互联网洪荒时代就留存下来的技术,有着厚重的历史沉淀,回味且让人困惑。互联网技术往往粗糙、简陋,像有点漏水的瓶,能用,但就是哪哪总有点不对。而 email 更像是漏水的镶金大瓦罐,更漏水、更实用、更异域风情。相比其他互联网服务,例如web,配置 email 总是让人战战兢兢,需要理解极为繁琐的概念、在不同的配置文件左右横跳,然而过了一段时间后,你会发现,原来配置还没完,还有地方能优化,超有精雕细琢的样子。

最近我就雕琢了一下。

事情其实和我们的 email 本身没有关系,和 IPv6 的地址范围有关。数据中心服务商给我们提供了一个比较大范围的 IPv6 地址群,然而不幸的是其他一些用户也在这个地址群内。我们通过自己的 IPv6 地址发送 email 时,由于反垃圾机构已经将这个地址群拉黑了,导致我们的 email 无法送达到客户。这是典型的「殃及池鱼」,我们进行了申诉(拉黑一个大范围的 IPv6 地址群显然过于粗暴、完全不合理),并向数据中心反馈情况(希望能查查是谁在发垃圾邮件)。反垃圾邮件机构不理会我们(有了SPF、DKIM等技术都不能让它们更精确、更理智点),而数据中心只是表示可以将我们划到另一个小点的 IPv6 地址群……

互联网就是这么荡气回肠,到处漏水,到处打补丁,到处都是草台班子。

我们回头重新思考,将 email 系统限制在 IPv4 地址显然是个简单有效的解决方案。IPv4 的主要缺点是地址太少,但在这个问题上反而是优点,估计没有哪家反垃圾邮件机构会疯到拉黑一大段 IPv4 地址。

方案有了,改起来倒是不太复杂。第一步修改 DNS 的 MX 记录绑定 IPv4 地址。进 DNS 服务商的面板里改改就可以。

第二步修改 Postfix 以及 Dovecot 的配置。Postfix 管理邮件的发送和接收,而 Dovecot 管理个人的邮箱,大致功能就是这样,它们共同组成整个 email 系统。

(1)修改 Dovecot

可以直接修改 /etc/dovecot/dovecot.conf 文件,但这样不太好, 如果将来系统升级,可能还要注意保留配置不被覆盖,因此建议将自己的配置存放在 /etc/dovecot/conf.d/ 目录下。例如,在该目录下创建 99-myvoipapp.conf 文件,并设置以下内容绑定 IPv4 地址(本机的实际地址,这里假设是 1.1.1.1):

listen = 1.1.1.1

(2)修改 Postfix

Postfix 不像 Dovecot 那样提供自定义配置的存放目录,因此只能修改 /etc/postfix/main.cf 文件,修改 inet_interfaces 项绑定 IPv4 地址(本机的实际地址,这里假设是 1.1.1.1):

inet_interfaces = 1.1.1.1

(3)启用 SMTPS

完成上述两步操作后,email 系统绑定了 IPv4 地址,重启 Postfix 以及 Dovecot 就可以了。Debian 系统默认配置没有启动 SMTPS,只启动了SMTP。建立 TCP 连接后,客户端收到 STARTTLS 命令才启用 TLS 加密传输过程,这样可以兼容化石级的 email 客户端,但目前主流的 email 客户端(包括我们正在使用的客户端)都支持 SMTPS,完全可以一开始就直接建立 TLS 连接。

修改 /etc/postfix/master.cf 文件,将以下内容的注释去掉即可启动 SMTPS:

smtps     inet  n       -       -       -       -       smtpd
-o syslog_name=postfix/smtps
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_reject_unlisted_recipient=no
-o smtpd_client_restrictions=$mua_client_restrictions
-o smtpd_helo_restrictions=$mua_helo_restrictions
-o smtpd_sender_restrictions=$mua_sender_restrictions
-o smtpd_recipient_restrictions=
-o smtpd_relay_restrictions=permit_sasl_authenticated,reject
-o milter_macro_daemon_name=ORIGINATING

(4)相关命令

完成配置后,可以使用以下命令检查是否正确:

sudo postfix check
sudo dovecot -n

使用以下命令重启 Postfix 和 Dovecot:

sudo systemctl restart postfix
sudo systemctl restart dovecot

使用以下命令检查 Postfix 和 Dovecot 的端口占用情况:

sudo netstat -tlnp | grep dovecot
sudo netstat -tlnp | grep tcp | grep :25
sudo netstat -tlnp | grep tcp | grep :465

SMTP 默认采用 TCP 25 端口,而 SMTPS 默认采用 TCP 465 端口。

dovecot配置上一点改动

dovecot配置上一点改动

Debian系统中的Dovecot套件升级了,一直工作正常,没怎么在意升级的影响。今天在syslog中看到一些告警:

dovecot: config: Warning: NOTE: You can get a new clean config file with: doveconf -n > dovecot-new.conf
dovecot: config: Warning: Obsolete setting in /etc/dovecot/conf.d/auth-system.conf.ext:77: add auth_ prefix to all settings inside auth {} and remove the auth {} section completely

从告警信息看,“/etc/dovecot/conf.d/auth-system.conf.ext”有一些变化,重新修改后可以去除这个告警。比如,原文件中内容为:

auth default {
    socket listen {
        client {
            path = /var/spool/postfix/private/auth-dovecot
            mode = 0660
            user = postfix
            group = postfix
        }
    }
}

新配置修改为以下内容:

service auth {
    unix_listener /var/spool/postfix/private/auth-dovecot {
        mode = 0660
        user = postfix
        group = postfix
    }
}
VPS升级Debian的几点小事项

VPS升级Debian的几点小事项

数据中心升级,要求所有节点最好是64位系统。而我们的节点不幸是32bit系统,因此不得不大动干戈地重新构造系统。

原来的系统是采用Ubuntu 10.04,年代比较久了。这次升级打算全部换成Debian7,真是no zuo no die。虽说两个系统相差不大,但是其中的一些细节还是会坑死人的。

1、bash问题

Debian7中root用户采用bash,如果新创建一个用户,默认居然采用sh,无法理解。因此需要修改/etc/passwd文件,将用户对应的shell修改为bash即可。

2、sudoer问题

这个不是大问题,无非就是修改/etc/sudoers文件,手工将用户加入sudo用户列表中即可。(升级完成后,最好将用户剔出sudoer列表,只保留root用户)。

3、postfix与dovecot

这些配置折腾了几乎一天。在Ubuntu环境中,很容易搞定,ubuntu非常体贴的提供了一个安装包dovecot-postfix,几乎不需要配置就可以转起来。而Debian7则需要手工进行配置。首先dovecot必须安装以下几个包:

apt-get install dovecot-common dovecot-core dovecot-pop3d

在配置之前,首先要弄明白一些关键概念:

  • Postfix是发送邮件服务器,提供SMTP服务;
  • Dovecot是接收邮件服务器,提供IMAP/POP服务。
  • Postfix自身不鉴权,通过SASL与其他应用(例如SASL服务、POP3服务等)交互来实现鉴权。

通常网上的文章都会采用SASL服务器或者连接MySQL数据库等来实现一个非常复杂的邮件服务系统。而我们的需求没有这么夸张,debian系统的用户就是email用户,不需要进行区分。因此我们采用dovecot来鉴权。

跑个题先,网上居然有文档配置postfix时不进行鉴权,简直是纯找死的节奏,这种情况下,任何人都可以利用他的服务器发送邮件,过不了多久,相信全世界的邮件服务器都会视其为垃圾邮件服务器,直接屏蔽掉。

因此配置的关键点在于以下几点:

  • 告诉postfix,通过dovecot鉴权。
  • dovecot创建与postfix之间的管道,接受postfix的鉴权请求。
  • dovecot采用系统用户的信息直接鉴权。

3.1 配置dovecot

这里臭骂一下Debian。把dovecot的配置拆成N多文件,乱七八糟,有必要么?网上的参考文档多半是基于RHEL或者CentOS,基本都是在一个文件中进行配置(Ubuntu 10.04也基本是一个文件),Debian这种方式貌似很合理,实际操作起来更让人纠结。

首先修改/etc/dovecot/conf.d/10-auth.conf文件,设定以下参数:

disable_plaintext_auth = yes
auth_mechanisms = plain login

接着修改/etc/dovecot/conf.d/auth-system.conf.ext文件,在文件尾添加以下配置:

service auth {
    unix_listener /var/spool/postfix/private/auth-dovecot {
        mode = 0660
        user = postfix
        group = postfix
    }
}

简要说明:在这个文件中,可以看到以下信息,默认就是采用系统用户鉴权。其中的passwd就是指/etc/passwd文件。

userdb {
  driver = passwd
}

而我们添加的信息,其实就是为postfix创建一个管道,准备接受postfix的鉴权请求。管道名称就是auth-dovecot,创建在/var/spool/postfix/private目录下。这个信息在postfix配置中需要用到。

3.2 配置postfix

debian系统中的postfix基本配置与其他linux版本没有太大差别,无非就是修改一些hostname信息等。鉴权配置需要修改,修改/etc/postfix/main.cf文件,在文件尾添加以下信息:

home_mailbox = Maildir/
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth-dovecot
smtpd_sasl_security_options = noanonymous
smtpd_recipient_restrictions = reject_unknown_sender_domain, reject_unknown_recipient_domain, reject_unauth_pipelining, permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination

broken_sasl_auth_clients = yes
smtpd_sasl_authenticated_header = yes
smtpd_sasl_local_domain = $myhostname
smtpd_sender_restrictions = reject_unknown_sender_domain

其中关键部分就是蓝色字体标识的部分。”smtpd_sasl_path”项就是在dovecot中配置的管道路径(在这些配置项上,我几乎摔得满头是包)。

完成上述配置后,重启dovecot和postfix服务即可:

service dovecot restart
service postfix restart

4、SSH

处于安全因素的考虑,修改默认的SSH登录端口以及禁止root用户远程登录。修改/etc/ssh/sshd_config文件:

Port 1234
PermitRootLogin no
Ubuntu环境搭建email系统

Ubuntu环境搭建email系统

网上的一些文档大部分是基于其他linux的版本,因此对比之下配置比较复杂,让人望而却步。而Ubuntu则已经将一些基本的配置都打包好了,只需要稍做修改即可。

以下配置基于Ubuntu10.04,全部从官方软件中心下载安装。采用Postfix+Dovecot搭建邮件系统。请先切换到root用户安装和配置。

step1: 安装Postfix

apt-get install postfix

安装时,会提示选择类型。一般选择”internet site”,输入网站域名即可。安装后,先不要着急配置postfix,我们在后续dovecot安装成功后,大部分配置会自动完成。

step2: 安装dovecot

一般网文介绍是直接安装dovecot,实际上Ubuntu提供了与postfix配合的dovecot包,因此请按以下方式安装:

apt-get install dovecot-common dovecot-postfix

安装时,系统会自动根据dovecot的要求,对postfix进行配置。

step3:配置postfix

配置文件为:/etc/postfix/main.cf。如果不对email进行限制的话,其实已经不用再配置了。下面我们修改该配置文件,增加一些额外的控制,例如用户邮件大小等:

mailbox_size_limit = 20000000 <--限定邮件账户不超过20M字节
message_size_limit = 200000  <-- 每封邮件不超过20K字节
myhostname = mail.xxxx.com
mydomain = xxxx.com

step4: 配置dovecot

一般也不需要配置,但是在使用gmail托管时,ssl/tls似乎没起作用,因此稍作修改采用普通访问方式即可。注意,此时dovecot的配置文件是/etc/dovecot/conf.d/01-dovecot-postfix.conf

listen = *  
disable_plaintext_auth = no

缺省情况下,dovecot没有被配置为自启动,因此我们需要手工添加:

update-rc.d dovecot start 99 0 1 2 3 4 5 6 .

其他

email用户账户就是当前Ubuntu的用户。建议对email用户单独处理,并设置在mail组内,设置单独的用户目录等,如下所示,创建一个名为support的用户:

mkdir /home/mail-users
useradd -m -d /home/mail-users/support -g mail support 
passwd support

Debian系統的差異:

如果需要支持pop3的話,需要安裝以下軟件:

apt-get install dovecot-pop3d