但是我们不能把邮件给它发送出去,除非我们自己从服务器发送。现在我们将让postfix为我们转发邮件,但是这个只有成功登录才可以,这是为了保证邮件是由服务器上的某个有效帐号发出来的。要做到这个,我们要打开一个特殊的,全程SSL连接的,SASL鉴权的邮件提交服务。在文件/etc/postfix/master.cf里设置下面的参数:
- submission inet n ---- smtpd
- -o syslog_name=postfix/submission
- -o smtpd_tls_security_level=encrypt
- -o smtpd_sasl_auth_enable=yes
- -o smtpd_client_restrictions=permit_sasl_authenticated,reject
- -o smtpd_sasl_type=dovecot
- -o smtpd_sasl_path=private/auth
- -o smtpd_sasl_security_options=noanonymous
- -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject_non_fqdn_recipient,reject_unauth_destination
然后重启postfix服务:
- service postfix reload
现在,让我们试试从一台不同的机器连接这个服务,确定一下postfix现在能够正常中继我们自己的而不是其他任何人的邮件:
- openssl s_client -connect cloud.linuxidc.net:587-starttls smtp
- EHLO cloud.linuxidc.net
注意一下服务器建议的'250-AUTH PLAIN'功能,在从端口25连接的时候不会出现。
- MAIL FROM:asdf@jkl.net
- rcpt to:bob@gmail.com
- 5545.7.1<bob@gmail.com>:Relay access denied
- QUIT
这个没问题,postfix在不认识我们的时候是不会中继邮件的。所以,首先让我们先鉴定一下自己的身份。要这样做,我们首先需要生成一个鉴权字符串:
- echo -ne '\000roudy@linuxidc.net\000mypassword'|base64
然后让我们尝试再次通过服务器发送邮件:
- openssl s_client -connect cloud.linuxidc.net:587-starttls smtp
- EHLO cloud.linuxidc.net
- AUTH PLAIN DGplYW5AMTk4NGNsb3VQLm5ldAA4bmFmNGNvNG5jOA==
- MAIL FROM:asdf@jkl.net
- rcpt to:bob@gmail.com
现在postfix应该能正常接收。最后完成这个测试,来检查一下我们的虚拟别名能正常工作,给发送一封邮件然后确认一下它会被送到:
- telnet cloud.linuxidc.net 25
- EHLO cloud.linuxidc.net
- MAIL FROM:youremail@domain.com
- rcpt to:postmaster@linuxidc.net
- data
- Subject:Virtualalias test
- Dear postmaster,
- Long time no hear! I hope your MX is working smoothly and securely.
- Yours sincerely,Roudy
- .
- QUIT
让我们检查一下邮件是否被正常送到正确的收件箱了:
- openssl s_client -crlf -connect cloud.linuxidc.net:993
- 1 login roudy@linuxidc.net "mypassword"
- 2 LIST """*"
- 3 SELECT INBOX
- *2 EXISTS
- *2 RECENT
- 4 LOGOUT
到这里,我们已经拥有一个能正常工作的邮箱服务器了,能收发邮件。我们可以配置自己的设备来使用它。
PS:不要忘记再次试试通过端口25往自己架设的服务器上的帐号发送邮件,来验证你已经没有被postgrey阻挡了。