mirror of
				https://github.com/pikami/mail-server.git
				synced 2025-11-04 00:30:10 +00:00 
			
		
		
		
	Added ansible playbook for secondary MX server
This commit is contained in:
		
							parent
							
								
									fcfd816548
								
							
						
					
					
						commit
						dd5869a62d
					
				@ -13,7 +13,10 @@ Ansible is used for configuration. The playbooks use a `vars.yml` file for setti
 | 
			
		||||
ssh_public_key: "ssh-rsa AAAAB3...ak4EsUU="
 | 
			
		||||
mx1_domains:
 | 
			
		||||
  - mx1.pikami.org
 | 
			
		||||
mx1_mail_domain: "mx1.pikami.org"
 | 
			
		||||
mx2_domains:
 | 
			
		||||
  - mx2.pikami.org
 | 
			
		||||
mx1_mail_domain: mx1.pikami.org
 | 
			
		||||
mx2_mail_domain: mx2.pikami.org
 | 
			
		||||
mail_domains:
 | 
			
		||||
  - pikami.net
 | 
			
		||||
  - pikami.org
 | 
			
		||||
@ -36,6 +39,8 @@ all:
 | 
			
		||||
  hosts:
 | 
			
		||||
    mx1:
 | 
			
		||||
      ansible_host: 51.158.215.227
 | 
			
		||||
    mx2:
 | 
			
		||||
      ansible_host: 89.58.5.252
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Environment setup
 | 
			
		||||
@ -71,3 +76,4 @@ Current ansible playbooks:
 | 
			
		||||
  - adds ssh public key
 | 
			
		||||
- 02-ssl.yml - generates ssl certificates and adds a renew cron job
 | 
			
		||||
- 03-mail.yml - installs and configures dovecot and opensmtpd
 | 
			
		||||
- 04-secondary-mail.yml - installs and configures opensmtpd as a backup mail receiver
 | 
			
		||||
 | 
			
		||||
@ -1,5 +1,7 @@
 | 
			
		||||
- name: Initial System Setup
 | 
			
		||||
  hosts: mx1
 | 
			
		||||
  hosts:
 | 
			
		||||
    - mx1
 | 
			
		||||
    - mx2
 | 
			
		||||
  remote_user: root
 | 
			
		||||
  become: true
 | 
			
		||||
  become_method: su
 | 
			
		||||
 | 
			
		||||
@ -1,5 +1,7 @@
 | 
			
		||||
- name: SSL Setup
 | 
			
		||||
  hosts: mx1
 | 
			
		||||
  hosts:
 | 
			
		||||
    - mx1
 | 
			
		||||
    - mx2
 | 
			
		||||
  remote_user: root
 | 
			
		||||
  vars_files:
 | 
			
		||||
    - vars.yml
 | 
			
		||||
@ -9,7 +11,7 @@
 | 
			
		||||
        path: "/var/www/vhosts/{{ item }}"
 | 
			
		||||
        state: directory
 | 
			
		||||
        owner: www
 | 
			
		||||
      with_items: "{{ mx1_domains }}"
 | 
			
		||||
      with_items: "{{ lookup('vars', inventory_hostname + '_domains') }}"
 | 
			
		||||
 | 
			
		||||
    - name: Install httpd.conf
 | 
			
		||||
      template:
 | 
			
		||||
@ -31,7 +33,7 @@
 | 
			
		||||
      command: "/usr/sbin/acme-client {{ item }}"
 | 
			
		||||
      args:
 | 
			
		||||
        creates: "/etc/ssl/{{ item }}.fullchain.pem"
 | 
			
		||||
      with_items: "{{ mx1_domains }}"
 | 
			
		||||
      with_items: "{{ lookup('vars', inventory_hostname + '_domains') }}"
 | 
			
		||||
      notify:
 | 
			
		||||
        - reload httpd
 | 
			
		||||
 | 
			
		||||
@ -41,7 +43,7 @@
 | 
			
		||||
        minute: "0"
 | 
			
		||||
        job: "sleep $((RANDOM \\% 2048)) && acme-client {{ item }} && rcctl reload httpd"
 | 
			
		||||
        user: root
 | 
			
		||||
      with_items: "{{ mx1_domains }}"
 | 
			
		||||
      with_items: "{{ lookup('vars', inventory_hostname + '_domains') }}"
 | 
			
		||||
 | 
			
		||||
  handlers:
 | 
			
		||||
    - name: reload httpd
 | 
			
		||||
 | 
			
		||||
@ -1,5 +1,6 @@
 | 
			
		||||
- name: OpenSMTPD Installation and Configuration
 | 
			
		||||
  hosts: mx1
 | 
			
		||||
  hosts:
 | 
			
		||||
    - mx1
 | 
			
		||||
  remote_user: root
 | 
			
		||||
  vars_files:
 | 
			
		||||
    - vars.yml
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										25
									
								
								ansible/04-secondary-mail.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								ansible/04-secondary-mail.yml
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,25 @@
 | 
			
		||||
- name: Secondary MX OpenSMTPD Configuration
 | 
			
		||||
  hosts:
 | 
			
		||||
    - mx2
 | 
			
		||||
  remote_user: root
 | 
			
		||||
  vars_files:
 | 
			
		||||
    - vars.yml
 | 
			
		||||
  tasks:
 | 
			
		||||
    - name: Configure OpenSMTPD smtpd.conf
 | 
			
		||||
      template:
 | 
			
		||||
        src: "templates/secondary-smtpd.conf"
 | 
			
		||||
        dest: /etc/mail/smtpd.conf
 | 
			
		||||
      notify:
 | 
			
		||||
        - reload smtpd
 | 
			
		||||
 | 
			
		||||
    - name: Enable and start OpenSMTPD service
 | 
			
		||||
      service:
 | 
			
		||||
        name: smtpd
 | 
			
		||||
        enabled: yes
 | 
			
		||||
        state: started
 | 
			
		||||
 | 
			
		||||
  handlers:
 | 
			
		||||
    - name: reload smtpd
 | 
			
		||||
      service:
 | 
			
		||||
        name: smtpd
 | 
			
		||||
        state: restarted
 | 
			
		||||
@ -3,7 +3,7 @@ authority letsencrypt {
 | 
			
		||||
    account key "/etc/acme/letsencrypt-privkey.pem"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
{% for domain in mx1_domains %}
 | 
			
		||||
{% for domain in lookup('vars', inventory_hostname + '_domains') %}
 | 
			
		||||
domain "{{ domain }}" {
 | 
			
		||||
    domain key "/etc/ssl/private/{{ domain }}.key"
 | 
			
		||||
    domain full chain certificate "/etc/ssl/{{ domain }}.fullchain.pem"
 | 
			
		||||
 | 
			
		||||
@ -9,7 +9,7 @@ server "{{ inventory_hostname }}" {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
{% for vhost in mx1_domains %}
 | 
			
		||||
{% for vhost in lookup('vars', inventory_hostname + '_domains') %}
 | 
			
		||||
server "{{ vhost }}" {
 | 
			
		||||
    listen on * tls port 443
 | 
			
		||||
    tls {
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										16
									
								
								ansible/templates/secondary-smtpd.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								ansible/templates/secondary-smtpd.conf
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,16 @@
 | 
			
		||||
{% set _mx_domain = lookup('vars', inventory_hostname + '_mail_domain') %}
 | 
			
		||||
pki {{ _mx_domain }} cert "/etc/ssl/{{ _mx_domain }}.fullchain.pem"
 | 
			
		||||
pki {{ _mx_domain }} key "/etc/ssl/private/{{ _mx_domain }}.key"
 | 
			
		||||
 | 
			
		||||
listen on all tls pki {{ _mx_domain }}
 | 
			
		||||
 | 
			
		||||
table aliases file:/etc/mail/aliases
 | 
			
		||||
 | 
			
		||||
action "local" mbox alias <aliases>
 | 
			
		||||
action "relay" relay host {{ mx1_mail_domain }}
 | 
			
		||||
 | 
			
		||||
{% for domain in mail_domains %}
 | 
			
		||||
match from any for domain {{ domain }} action "relay"
 | 
			
		||||
{% endfor %}
 | 
			
		||||
match from local for local action "local"
 | 
			
		||||
match from local for any action "relay"
 | 
			
		||||
@ -21,3 +21,4 @@ match from any for domain {{ domain }} action "local_mail"
 | 
			
		||||
{% endfor %}
 | 
			
		||||
match from local for local action "local_mail"
 | 
			
		||||
match from local for any action "outbound"
 | 
			
		||||
match auth from any for any action "outbound"
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user