使用Ansible配置Postfix系统角色的SMTP。都是常用的模块的叠加运用。
RH358专栏地址:https://blog.csdn.net/qq_41765918/category_11532281.html
rhel-system-roles包提供了rhel-system-roles.postfix (也称为linux-system-roles.postfix) Ansible角色。该角色使在托管主机上配置Postfix变得很容易。它安装postfix包,配置postfix,并根据需要启动、重新加载或重启服务。
**重要:**rhel-system-roles.postfix角色不会修改主机的防火墙规则,必须使用一个单独的任务来管理防火墙规则。
角色根据Ansible postfix_conf变量的值来配置Postfix。此变量定义一组键值对,这些键值对指定要应用于托管主机的配置设置。可以指定任何可以用postconf命令配置的Postfix参数。参数的名称是键,它的值是应该在/etc/postfix/main.cf配置文件中分配的值。
rhel-system-roles.postfix角色还有另外两个变量:postfix_backup和postfix_backup_multiple。这些变量控制如何备份/etc/postfix/main.cf Postfix配置文件。
postfix_backup_multiple变量控制角色在修改Postfix配置之前是否对/etc/postfix/main.cf进行时间戳备份。当此变量为true时,角色每次将其应用到托管主机时都会创建一个新的备份。这是默认值。
postfix_backup变量导致角色在进行配置更改之前复制/etc/postfix/main.cf转换为单个备份文。每次执行此角色时,该角色都会将当前的Postfix配置复制到/etc/postfix/main.cf.backup。如果多次运行,它将使用最新的Postfix配置覆盖备份。该变量的默认值为false。
**重要:**当postfix_backup_multiple设置为true时,角色会忽略postfix_backup的值。
例如,可以定义以下主机变量,将这些内容放在特定主机的host_vars文件中,或放在特定主机组的group_vars文件中:
postfix_conf: # 包含要应用的postconf设置。 relayhost: "[smtp.example.com]" # 将relayhost定义为公司邮件中继。 mynetworks: "127.0.0.0/8 [::1]/128" # 发送来自127.0.0.0/8和[::1]/128网络的消息。 myorigin: "example.com" # 重写发送邮件到公司域的发送者电子邮件地址example.com mydestination: "" # 通过将mydestination选项设置为空值来拒绝所有域的传送。 inet_interfaces: "loopback-only" postfix_backup_multiple: true # 创建/etc/postfix/main.cf的时间戳备份。
即使受管主机的配置已经正确,此角色当前也会重新应用更改并报告更改的任务。
[student@workstation ~]$ lab smtp-automation start
该命令确保DNS、SMTP和IMAP服务对lab.example.com SMTP中继服务器提供支持。
本练习的lab命令将在~/smtp-auto中设置一个不完整的Ansible项目,以便在lab.example.com域中将一组服务器配置为Postfix空客户端。这些空客户端将使用不需要认证的smtp.lab.example.com的邮件中继。
在练习的最后,您将通过使用命令行工具向student@lab.example.com发送电子邮件来验证您的工作。然后确认消息已转发到该收件人的邮件服务器。
[student@workstation ~]$ cd ~/smtp-auto [student@workstation smtp-auto]$ tree [student@workstation smtp-auto]$ cat inventory [nullclients] servera.lab.example.com serverb.lab.example.com serverc.lab.example.com serverd.lab.example.com
剧本的hosts应该设置为nullclients主机组。
[student@workstation smtp-auto]$ vim playbook.yml --- - name: Configure Null Client Email Service become: true hosts: nullclients vars: postfix_conf: relayhost: "[smtp.lab.example.com]" inet_interfaces: "loopback-only" mynetworks: "127.0.0.0/8 [::1]/128" myorigin: "lab.example.com" mydestination: "" roles: - linux-system-roles.postfix
[student@workstation smtp-auto]$ ansible-playbook --syntax-check playbook.yml playbook: playbook.yml [student@workstation smtp-auto]$ ansible-playbook playbook.yml
使用mail命令向student@lab.example.com发送消息,该命令使用/usr/sbin/sendmail助手程序发送电子邮件。使用-s选项将Null client test设置为主题,输入null client test content作为内容,然后在行首加上句号(.)标记内容的结尾并发送电子邮件
[student@servera ~]$ mail -s 'Null client test' student@lab.example.com null client test content . EOT
通过检查邮箱中的student@lab.example,验证服务器是否将消息传递给了邮件中继,并成功通过imap.lab.example.com地将消息传递给了收件人的邮件服务器。
[student@servera ~]$ mutt -f imaps://imap.lab.example.com # 按a接受证书,避免以后提示。 Username at imap.lab.example.com: student Password for student@imap.lab.example.com: student
[student@workstation ~]$ lab smtp-automation finish