OpenSSL 在 Apache 和 Dovecot 下的使用(二)

本文介绍如何配置Postfix和Dovecot实现邮件服务,包括TLS/SSL加密配置及测试方法。

Postfix 配置

你必须编辑 /etc/postfix/main.cf 以及 /etc/postfix/master.cf。实例的 main.cf 是完整的配置,基于我们先前的教程。替换成你自己的 OpenSSL 密钥和证书名以及本地网络地址。

 
 
  1. compatibility_level=2
  2. smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu/GNU)
  3. biff = no
  4. append_dot_mydomain = no
  5. myhostname = localhost
  6. alias_maps = hash:/etc/aliases
  7. alias_database = hash:/etc/aliases
  8. myorigin = $myhostname
  9. mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 192.168.0.0/24
  10. mailbox_size_limit = 0
  11. recipient_delimiter = +
  12. inet_interfaces = all
  13. virtual_mailbox_domains = /etc/postfix/vhosts.txt
  14. virtual_mailbox_base = /home/vmail
  15. virtual_mailbox_maps = hash:/etc/postfix/vmaps.txt
  16. virtual_minimum_uid = 1000
  17. virtual_uid_maps = static:5000
  18. virtual_gid_maps = static:5000
  19. virtual_transport = lmtp:unix:private/dovecot-lmtp
  20. smtpd_tls_cert_file=/etc/ssl/certs/test-com.pem
  21. smtpd_tls_key_file=/etc/ssl/private/test-com.key
  22. smtpd_use_tls=yes
  23. smtpd_sasl_auth_enable = yes
  24. smtpd_sasl_type = dovecot
  25. smtpd_sasl_path = private/auth
  26. smtpd_sasl_authenticated_header = yes

在 master.cf 取消 submission inet 部分的注释,并编辑 smtpd_recipient_restrictions

 
 
  1. #submission inet n - y - - smtpd
  2. -o syslog_name=postfix/submission
  3. -o smtpd_tls_security_level=encrypt
  4. -o smtpd_sasl_auth_enable=yes
  5. -o milter_macro_daemon_name=ORIGINATING
  6. -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
  7. -o smtpd_tls_wrappermode=no

完成后重新加载 Postfix:

 
 
  1. $ sudo service postfix reload

Dovecot 配置

在我们以前的教程中,我们为 Dovecot 创建了一个单一配置文件 /etc/dovecot/dovecot.conf,而不是使用多个默认配置文件。这是一个基于我们以前的教程的完整配置。再说一次,使用你自己的 OpenSSL 密钥和证书,以及你自己的 userdb 的 home 文件:

 
 
  1. protocols = imap pop3 lmtp
  2. log_path = /var/log/dovecot.log
  3. info_log_path = /var/log/dovecot-info.log
  4. disable_plaintext_auth = no
  5. mail_location = maildir:~/.Mail
  6. pop3_uidl_format = %g
  7. auth_mechanisms = plain
  8. passdb {
  9. driver = passwd-file
  10. args = /etc/dovecot/passwd
  11. }
  12. userdb {
  13. driver = static
  14. args = uid=vmail gid=vmail home=/home/vmail/studio/%u
  15. }
  16. service lmtp {
  17. unix_listener /var/spool/postfix/private/dovecot-lmtp {
  18. group = postfix
  19. mode = 0600
  20. user = postfix
  21. }
  22. }
  23. protocol lmtp {
  24. postmaster_address = postmaster@studio
  25. }
  26. service lmtp {
  27. user = vmail
  28. }
  29. service auth {
  30. unix_listener /var/spool/postfix/private/auth {
  31. mode = 0660
  32. user=postfix
  33. group=postfix
  34. }
  35. }
  36. ssl=required
  37. ssl_cert = </etc/ssl/certs/test-com.pem
  38. ssl_key = </etc/ssl/private/test-com.key

重启 Dovecot:

 
 
  1. $ sudo service postfix reload

用 telnet 测试

就像我们以前一样,现在我们可以通过使用 telnet 发送消息来测试我们的设置。 但是等等,你说 telnet 不支持 TLS/SSL,那么这样怎么办呢?首先通过使用 openssl s_client 打开一个加密会话。openssl s_client 的输出将显示你的证书及其指纹和大量其它信息,以便你知道你的服务器正在使用正确的证书。会话建立后输入的命令都是不以数字开头的:

 
 
  1. $ openssl s_client -starttls smtp -connect studio:25
  2. CONNECTED(00000003)
  3. [masses of output snipped]
  4. Verify return code: 0 (ok)
  5. ---
  6. 250 SMTPUTF8
  7. EHLO studio
  8. 250-localhost
  9. 250-PIPELINING
  10. 250-SIZE 10240000
  11. 250-VRFY
  12. 250-ETRN
  13. 250-AUTH PLAIN
  14. 250-ENHANCEDSTATUSCODES
  15. 250-8BITMIME
  16. 250-DSN
  17. 250 SMTPUTF8
  18. mail from: <carla@domain.com>
  19. 250 2.1.0 Ok
  20. rcpt to: <alrac@studio>
  21. 250 2.1.5 Ok
  22. data
  23. 354 End data with .subject: TLS/SSL test
  24. Hello, we are testing TLS/SSL. Looking good so far.
  25. .
  26. 250 2.0.0 Ok: queued as B9B529FE59
  27. quit
  28. 221 2.0.0 Bye

你应该可以在邮件客户端中看到一条新邮件,并在打开时要求你验证 SSL 证书。你也可以使用 openssl s_client 来测试 Dovecot 的 POP3 和 IMAP 服务。此示例测试加密的 POP3,第 5 号消息是我们在 telnet(如上)中创建的:

 
 
  1. $ openssl s_client -connect studio:995
  2. CONNECTED(00000003)
  3. [masses of output snipped]
  4. Verify return code: 0 (ok)
  5. ---
  6. +OK Dovecot ready
  7. user alrac@studio
  8. +OK
  9. pass password
  10. +OK Logged in.
  11. list
  12. +OK 5 messages:
  13. 1 499
  14. 2 504
  15. 3 514
  16. 4 513
  17. 5 565
  18. .
  19. retr 5
  20. +OK 565 octets
  21. Return-Path: <carla@domain.com>
  22. Delivered-To: alrac@studio
  23. Received: from localhost
  24. by studio.alrac.net (Dovecot) with LMTP id y8G5C8aablgKIQAAYelYQA
  25. for <alrac@studio>; Thu, 05 Jan 2017 11:13:10 -0800
  26. Received: from studio (localhost [127.0.0.1])
  27. by localhost (Postfix) with ESMTPS id B9B529FE59
  28. for <alrac@studio>; Thu, 5 Jan 2017 11:12:13 -0800 (PST)
  29. subject: TLS/SSL test
  30. Message-Id: <20170105191240.B9B529FE59@localhost>
  31. Date: Thu, 5 Jan 2017 11:12:13 -0800 (PST)
  32. From: carla@domain.com
  33. Hello, we are testing TLS/SSL. Looking good so far.
  34. .
  35. quit
  36. +OK Logging out.
  37. closed

现在做什么?

现在你有一个功能良好的,具有合适的 TLS/SSL 保护的邮件服务器了。我鼓励你深入学习 Postfix 以及 Dovecot; 这些教程中的示例尽可能地简单,不包括对安全性、防病毒扫描程序、垃圾邮件过滤器或任何其他高级功能的调整。我认为当你有一个基本工作系统时更容易学习高级功能。

下周回到 openSUSE 包管理备忘录上。

原文发布时间为:2017-02-03

本文来自云栖社区合作伙伴“Linux中国”

<think>我们注意到用户的问题是关于openssl包的升级方法,并且用户引用了之前的一段关于RPM包构建与升级的内容。用户明确表示想查找openssl包的升级方法。 根据引用内容,用户提到的是通过RPM包更新OpenSSL,并且给出了一些步骤。但是用户也提到这个SPEC文件只构建了三个包,并且有手册页缺失的问题。因此,我们需要提供更全面的升级方法。 通常,升级OpenSSL包的方法有以下几种: 1. 使用操作系统的包管理器(如yum/dnf, apt等)进行升级。 2. 从源码编译安装。 3. 使用第三方提供的预编译包(如RPM包)。 考虑到用户引用的是RPM包升级,我们可以重点介绍通过RPM包升级的方法,同时也简要提及其他方法。 注意:升级OpenSSL是一个敏感操作,因为很多系统组件依赖于它。在升级前需要充分备份。 下面我们提供详细的升级步骤: ### 方法一:使用系统包管理器升级(推荐) ```bash # 对于RHEL/CentOS系统 sudo yum update openssl # 或者使用dnf(CentOS 8/RHEL 8以上) sudo dnf update openssl ``` ### 方法:从源码编译安装(适用于自定义版本或特定需求) 1. 下载源码包: ```bash wget https://www.openssl.org/source/openssl-1.1.1s.tar.gz tar -xvf openssl-1.1.1s.tar.gz cd openssl-1.1.1s ``` 2. 配置编译: ```bash ./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl shared zlib make sudo make install ``` 3. 更新系统链接(谨慎操作!): ```bash sudo ln -sf /usr/local/openssl/bin/openssl /usr/bin/openssl sudo ldconfig ``` ### 方法三:使用自定义RPM包升级(参考用户引用) 1. **构建RPM包**(如果官方仓库没有最新版本): 用户需要先获取或编写SPEC文件,然后使用rpmbuild工具构建。但注意用户引用的SPEC文件可能不完整(缺少man手册等)。 ```bash rpmbuild -ba openssl.spec ``` 2. **安装生成的RPM包**: ```bash sudo rpm -Uvh openssl-1.1.1s-1.x86_64.rpm openssl-devel-1.1.1s-1.x86_64.rpm ``` > 注意:升级前备份旧版本,避免依赖问题[^1]。 ### 重要注意事项 - **备份**:升级前备份旧版本相关文件(如`/usr/bin/openssl`, `/usr/lib64/libssl*`等)。 - **依赖问题**:升级后可能影响依赖OpenSSL的应用程序(如Apache, Nginx),需测试兼容性。 - **手册页缺失**:如引用所述,自定义RPM包可能缺少手册页,可通过补充`openssl-docs`包解决。 --- ### §§相关问题§§ 1. 如何验证OpenSSL升级后的版本? 2. 升级OpenSSL后如何回滚到旧版本? 3. 升级OpenSSL会导致哪些常见兼容性问题? [^1]: OpenSSL RPM升级实践, Section 3: 更新步骤 </think>以下是 OpenSSL 包的升级方法详解,包含多种场景的操作指南: ### 一、使用系统包管理器升级(推荐) ```bash # RHEL/CentOS 系统 sudo yum update openssl openssl-devel # Debian/Ubuntu 系统 sudo apt update && sudo apt upgrade openssl libssl-dev ``` > **注意事项**: > 1. 自动处理依赖关系安全更新 > 2. 保留原有配置文件(`*.rpmnew`或`*.dpkg-new`文件需手动检查)[^1] ### 、手动编译安装(自定义版本) ```bash # 1. 下载源码 wget https://www.openssl.org/source/openssl-1.1.1w.tar.gz tar -xvf openssl-1.1.1w.tar.gz # 2. 编译安装(示例配置) cd openssl-1.1.1w ./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl shared zlib make -j$(nproc) sudo make install # 3. 更新系统路径 echo '/usr/local/openssl/lib' | sudo tee /etc/ld.so.conf.d/openssl.conf sudo ldconfig ``` > **关键参数说明**: > - `--prefix`:指定安装目录 > - `shared`:构建共享库 > - `zlib`:启用压缩支持 ### 三、RPM包手动升级(特殊场景) ```bash # 1. 查询现有版本 rpm -qa | grep openssl # 2. 备份关键文件(必须步骤!) sudo cp -rp /usr/bin/openssl /usr/bin/openssl.bak sudo cp -rp /usr/lib64/libssl* /backup/ # 3. 强制安装新RPM包 sudo rpm -Uvh --force openssl-1.1.1s-1.x86_64.rpm openssl-devel-1.1.1s-1.x86_64.rpm # 4. 验证安装 openssl version -a ``` > **风险预警**: > - 需自行解决依赖冲突(`rpm -qa --last | grep openssl`查看历史版本) > - 手册页丢失问题可通过安装`openssl-docs`包解决[^1] ### 四、升级后验证 1. **版本检查**: ```bash openssl version # 应显示新版本号 ``` 2. **功能测试**: ```bash echo "Hello OpenSSL" | openssl aes-256-cbc -a -salt -pass pass:test ``` 3. **重启依赖服务**: ```bash sudo systemctl restart nginx postfix dovecot # 示例服务 ``` ### ▽ 关键注意事项 1. **环境隔离**:开发环境建议使用`/opt/openssl`独立目录 2. **ABI兼容性**:主版本升级(如1.0.x→1.1.x)需重编译所有依赖程序 3. **证书更新**:升级后检查`/etc/ssl/certs`目录完整性 4. **回滚方案**:保留旧RPM包(`rpm -Uvh --oldpackage openssl-1.0.2k-26.el7.x86_64.rpm`) --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值