如何用RHEL System Role把Postfix安装和配置自动化?
本文來自微信公眾號:紅帽
?
許多企業組織都需要在紅帽企業Linux(RHEL)服務器上配置郵件傳輸代理(MTA)。這樣做是為了讓服務器能夠通過電子郵件發送通知或報告。例如,可以配置一個腳本以在事件發生后通過電子郵件發送通知,或者可能有一個腳本在生成月度報告后通過電子郵件發送。
RHEL 7、8和9為MTA提供了兩個選項:Postfix和 Sendmail。Sendmail已被棄用,本文將重點關注 Postfix。
可以按照文檔說明在RHEL系統上手動安裝和配置Postfix,但這會很耗時并且容易出錯。紅帽引入了postfix?RHEL System Role,提供一個自動化的解決方案來安裝和配置Postfix。postfix?RHEL System Role是在RHEL 7.6中作為技術預覽功能引入的。隨著RHEL 8.5的發布,現在完全支持postfix?RHEL System Role。
postfix RHEL System Role是RHEL中包含的Ansible角色和模塊的集合,可幫助提供一致的工作流程并簡化手動任務的執行。
環境概述
在我的示例環境中,有一個名為controlnode的控制節點系統,運行著RHEL 8和四個受管節點:rhel8-server1、rhel8-server2、rhel7-server1和rhel7-server2(前兩個運行RHEL 8,另外兩個運行RHEL 7)。
我想在每一個托管節點上配置Postfix:
-
rhel8-server1應該使用基本的Postfix配置來接受來自本地子網(包含其他受管節點)的郵件。
-
rhel8-server2、rhel7-server1和rhel7-server2應配置為只轉發空客戶端,并應將郵件轉發到rhel8-server1。
我已經在五臺服務器上設置了一個Ansible服務帳戶,命名為ansible,并設置了SSH密鑰身份驗證,以便controlnode上的ansible帳戶可以登錄到每個系統。此外,ansible服務帳戶已配置為通過sudo在每個主機上訪問root帳戶。
我還在controlnode上安裝了rhel-system-roles和ansible包。有關這些任務的更多信息,請參閱RHEL System Roles博文。
在這個環境中,我使用的是RHEL 8控制節點,你也可以使用Ansible自動化控制器或紅帽衛星作為RHEL系統角色控制節點。Ansible自動化控制器提供了許多使用RHEL 控制節點時,不可用的高級自動化特性和功能。
定義清單文件和角色變量
從controlnode系統開始,第一步是創建一個新的目錄結構:
[ansible@controlnode ~]$ mkdir -p postfix/group_vars這些目錄將按如下方式使用:
-
postfix目錄將包含playbook和庫存文件。
-
postfix/group_vars文件將包含清單組的變量文件,這些文件將應用于各個Ansible清單組中的主機。
我需要定義一個Ansible清單文件來列出和分組我希望postfix系統角色配置的主機。我將在postfix/inventory.yml中創建包含以下內容的庫存文件:
all:children:postfix_server:hosts:rhel8-server1.example.com:postfix_null_client:hosts:rhel8-server2.example.com:rhel7-server1.example.com:rhel7-server2.example.com:此清單定義了兩個清單組:
-
postfix_server庫存組包含rhel8-server1主機。
-
postfix_null_client庫存組包含rhel8-server2、rhel7-server1和rhel7-server2主機。
請注意:如果使用Ansible自動化控制器作為控制節點,則可以通過SCM項目(例如GitHub或GitLab)或使用文檔中指定的awx-manage實用程序,將此清單導入紅帽Ansible自動化平臺。
接下來,我將定義角色變量,這些變量將控制postfix系統角色在運行時的行為。postfix角色的README.md文件,位于/usr/share/doc/rhel-system-roles/postfix/README.md,包含有關角色的重要信息,包括可用角色變量的列表以及如何使用它們。
我將通過在postfix/group_vars/postfix_server.yml中創建一個包含以下內容的文件來創建一個文件,該文件將為postfix_server庫存組中列出的受管節點定義變量:
postfix_conf:mydomain: "example.com"myorigin: "$mydomain"myhostname: "{{ inventory_hostname }}"mydestination: "$myhostname, localhost.$mydomain"mynetworks: "192.168.0.0/24"inet_interfaces: "all"這將導致postfix角色使用基本Postfix配置,來配置postfix_server庫存組 (rhel8-server1) 中的主機,該配置將接受來自192.168.0.0/24子網的連接,該子網是包含所有托管節點的網絡。
我還將創建一個文件,通過在postfix/group_vars/postfix_null_client.yml中創建一個包含以下內容的文件,為postfix_null_client庫存組中列出的受管節點定義變量:
postfix_conf:myhostname: "{{ inventory_hostname }}"myorigin: "$mydomain"relayhost: "rhel8-server1.example.com"inet_interfaces: "loopback-only"mydestination: ""這將導致postfix角色將postfix_null_client庫存組(rhel8-server2、rhel7-server1、rhel7-server)中的主機配置為僅轉發空客戶端,這些客戶端將使用rhel8-server1作為其中繼主機。
創建腳本
下一步是在postfix/postfix.yml創建playbook文件,內容如下:
- name: Open firewall for smtp on postfix_server grouphosts: postfix_servertasks:- firewalld:service: smtppermanent: yesimmediate: yesstate: enabled- name: Run postfix rolehosts: allroles:- rhel-system-roles.postfix第一個任務,為postfix_server組上的smtp打開防火墻,將僅在postfix_server庫存組中的rhel8-server1主機上運行,此任務將為smtp服務打開防火墻。
第二個任務,運行postfix role,將在所有四個受管節點上運行,并將使用先前定義的變量在每個主機上安裝和配置Postfix。
請注意:如果您使用Ansible自動化控制器作為控制節點,可以按照此處提供的文檔https://docs.ansible.com/ansible-tower/latest/html/userguide/projects.html,通過創建項目將此Ansible腳本導入紅帽Ansible自動化平臺。使用Git存儲庫來存儲Ansible腳本很常見。Ansible自動化平臺將自動化存儲在稱為作業的單元中,其中包含腳本、憑據和庫存。按照此處的文檔創建作業模板。
運行腳本
一切就緒,我已經準備好運行腳本了。對于此演示,我使用RHEL控制節點,并將從命令行運行playbook。我使用cd命令進入postfix目錄,然后使用ansible-playbook命令運行playbook。
[ansible@controlnode ~]$ cd postfix [ansible@controlnode postfix]$ ansible-playbook postfix.yml -b -i inventory.yml我指定運行postfix.yml playbook,它應該升級到root(-b?標志),并且應該將inventory.yml文件用作我的Ansible清單(-i?標志)。
腳本完成后,我驗證沒有失敗的任務:
請注意:如果使用Ansible自動化控制器作為控制節點,則可以從自動化控制器Web界面啟動作業。
驗證配置
為了驗證配置,我將分別登錄三個只進空客戶端(rhel8-server2、rhel7-server1、rhel7-server2)并向brian@rhel8-server1.example.com電子郵件地址發送電子郵件。然后,我將驗證rhel8-server1.example.com主機上的brian帳戶是否收到了電子郵件。
我將通過發送電子郵件開始驗證rhel8-server2:
[root@rhel8-server2 ~]# mail brian@rhel8-server1.example.com Subject: Test email from rhel8-server2 EOT Null message body; hope that's ok按Ctrl-d發送測試消息。我將在rhel7-server1和rhel7-server2上重復此步驟以發送來自它們的電子郵件。
接下來,我將以brian帳戶登錄rhel8-server1并驗證電子郵件是否已收到:
[brian@rhel8-server1 ~]$ mail Heirloom Mail version 12.5 7/5/10. Type ? for help. "/var/spool/mail/brian": 3 messages 3 new >N 1 root Wed Nov 24 10:01 21/870 "Test email from rhel8-server2"N 2 root Wed Nov 24 10:03 21/861 "Test email from rhel7-server1"N 3 root Wed Nov 24 10:03 21/863 "Test email from rhel7-server2" &結論
postfix RHEL System Role可以幫助你以自動化的方式在RHEL環境中快速、一致地實施Postfix MTA。
我們提供了許多RHEL系統角色,可以幫助自動化RHEL環境的其他重要方面。要探索其他角色,請查看可用RHEL系統角色列表,并立即開始以更高效、一致和自動化的方式管理RHEL服務器。
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的如何用RHEL System Role把Postfix安装和配置自动化?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CCNA必会知识点:路由器PAP单向认证
- 下一篇: 会了这些命令,还怕搞不定思科设备?