3 changed files with 352 additions and 0 deletions
@ -0,0 +1,242 @@ |
|||||
|
--- |
||||
|
- name: Setup and Configure Mail Relay Docker Container |
||||
|
hosts: your_target_host |
||||
|
become: true |
||||
|
vars: |
||||
|
mail_relay_dir: /mnt/docker/mail-relay |
||||
|
conf_dir: "{{ mail_relay_dir }}/conf" |
||||
|
mail_relay_password: "{{ lookup('community.general.random_string', length=10, special=false) }}" |
||||
|
certificate_subject: "/C=DE/ST=Germany/L=NRW/O=Asmodee Group/OU=Mail-Relay/CN=localhost/name=Mail-Relay/emailAddress=it-admin@asmodee.de" |
||||
|
|
||||
|
tasks: |
||||
|
- name: Create necessary directories |
||||
|
file: |
||||
|
path: "{{ item }}" |
||||
|
state: directory |
||||
|
loop: |
||||
|
- "{{ mail_relay_dir }}" |
||||
|
- "{{ conf_dir }}" |
||||
|
- "{{ mail_relay_dir }}/spool" |
||||
|
- "{{ mail_relay_dir }}/sasl2" |
||||
|
|
||||
|
- name: Create Dockerfile for mail relay |
||||
|
copy: |
||||
|
dest: /mnt/docker/mail-relay/mail-relay.Dockerfile |
||||
|
content: | |
||||
|
FROM alpine:3.17 |
||||
|
RUN apk add --no-cache bash net-tools tzdata busybox-extras postfix cyrus-sasl cyrus-sasl-static cyrus-sasl-login |
||||
|
RUN echo 'saslauthd -a sasldb -V; postfix start-fg' | tee /start.sh; chmod 755 /start.sh |
||||
|
CMD /start.sh |
||||
|
|
||||
|
- name: Create Docker Compose file |
||||
|
copy: |
||||
|
dest: /mnt/docker/mail-relay/docker-compose.yaml |
||||
|
content: | |
||||
|
version: "3" |
||||
|
services: |
||||
|
mail-relay: |
||||
|
image: mail-relay-custom |
||||
|
build: |
||||
|
context: . |
||||
|
dockerfile: ./mail-relay.Dockerfile |
||||
|
container_name: mail-relay |
||||
|
restart: unless-stopped |
||||
|
healthcheck: |
||||
|
test: ( grep -qr "master" /proc/*/status && grep -qr "saslauthd" /proc/*/status ) || exit 1 |
||||
|
interval: 1m |
||||
|
timeout: 30s |
||||
|
retries: 3 |
||||
|
volumes: |
||||
|
- /etc/timezone:/etc/timezone:ro |
||||
|
- /etc/localtime:/etc/localtime:ro |
||||
|
- ./main.cf:/etc/postfix/main.cf:ro |
||||
|
- ./master.cf:/etc/postfix/master.cf:ro |
||||
|
- ./conf:/etc/postfix/conf |
||||
|
- ./spool:/var/spool/postfix |
||||
|
- ./sasl2:/etc/sasl2 |
||||
|
networks: |
||||
|
default: |
||||
|
name: build |
||||
|
external: true |
||||
|
|
||||
|
- name: Create main.cf Postfix configuration file |
||||
|
copy: |
||||
|
dest: "{{ conf_dir }}/main.cf" |
||||
|
content: | |
||||
|
# Global Postfix configuration file |
||||
|
alias_maps = lmdb:/etc/postfix/conf/aliases |
||||
|
alias_database = lmdb:/etc/postfix/conf/aliases |
||||
|
myhostname = mail-relay |
||||
|
mynetworks_style = host |
||||
|
inet_interfaces = all |
||||
|
inet_protocols = ipv4 |
||||
|
message_size_limit = 10240000 |
||||
|
soft_bounce = no |
||||
|
|
||||
|
# Queue Time |
||||
|
bounce_queue_lifetime = 10h |
||||
|
maximal_queue_lifetime = 12h |
||||
|
maximal_backoff_time = 15m |
||||
|
minimal_backoff_time = 5m |
||||
|
queue_run_delay = 5m |
||||
|
|
||||
|
# TLS for smtp |
||||
|
smtp_tls_session_cache_database = lmdb:${data_directory}/smtp_scache |
||||
|
smtp_tls_loglevel = 1 |
||||
|
smtp_tls_security_level = secure |
||||
|
smtp_tls_mandatory_ciphers = high |
||||
|
smtp_tls_secure_cert_match = nexthop |
||||
|
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt |
||||
|
|
||||
|
# Send over Smarthost (outgoing Emails) |
||||
|
smtp_connection_cache_on_demand = no |
||||
|
smtp_sender_dependent_authentication = yes |
||||
|
smtp_sasl_type = cyrus |
||||
|
smtp_sasl_auth_enable = yes |
||||
|
smtp_sasl_auth_soft_bounce = yes |
||||
|
smtp_sasl_security_options = noplaintext, noanonymous |
||||
|
smtp_sasl_tls_security_options = noanonymous |
||||
|
smtp_sasl_password_maps = lmdb:/etc/postfix/conf/smtp_sasl_password_maps |
||||
|
sender_dependent_relayhost_maps = lmdb:/etc/postfix/conf/sender_dependent_relayhost_maps |
||||
|
|
||||
|
# Cleanup the Header |
||||
|
smtp_header_checks = regexp:/etc/postfix/conf/smtp_header_checks |
||||
|
|
||||
|
# SASL authentication (incoming Emails) |
||||
|
broken_sasl_auth_clients = no |
||||
|
smtpd_tls_auth_only = no |
||||
|
smtpd_sasl_auth_enable = yes |
||||
|
smtpd_sasl_security_options = noanonymous |
||||
|
smtpd_sasl_tls_security_options = noanonymous |
||||
|
smtpd_sender_restrictions = permit_sasl_authenticated, reject_unauth_destination |
||||
|
smtpd_relay_restrictions = $smtpd_sender_restrictions |
||||
|
|
||||
|
# TLS for smtpd |
||||
|
smtpd_tls_security_level = may |
||||
|
smtpd_tls_cert_file = /etc/postfix/conf/server.crt |
||||
|
smtpd_tls_key_file = /etc/postfix/conf/server.key |
||||
|
|
||||
|
# connection limits |
||||
|
smtpd_client_connection_rate_limit = 0 |
||||
|
smtpd_client_connection_count_limit = 0 |
||||
|
|
||||
|
# Logging for Docker Container |
||||
|
maillog_file = /dev/stdout |
||||
|
|
||||
|
- name: Create master.cf Postfix configuration file |
||||
|
copy: |
||||
|
dest: "{{ conf_dir }}/master.cf" |
||||
|
content: | |
||||
|
# Postfix master process configuration file |
||||
|
# |
||||
|
# ========================================================================== |
||||
|
# service type private unpriv chroot wakeup maxproc command + args |
||||
|
# (yes) (yes) (no) (never) (100) |
||||
|
# ========================================================================== |
||||
|
smtp inet n - n - - smtpd |
||||
|
-o syslog_name=postfix/smtp |
||||
|
submission inet n - n - - smtpd |
||||
|
-o syslog_name=postfix/submission |
||||
|
-o smtpd_tls_security_level=encrypt |
||||
|
-o smtpd_sasl_auth_enable=yes |
||||
|
-o smtpd_tls_auth_only=yes |
||||
|
smtps inet n - n - - smtpd |
||||
|
-o syslog_name=postfix/smtps |
||||
|
-o smtpd_tls_wrappermode=yes |
||||
|
-o smtpd_sasl_auth_enable=yes |
||||
|
pickup unix n - n 60 1 pickup |
||||
|
cleanup unix n - n - 0 cleanup |
||||
|
qmgr unix n - n 300 1 qmgr |
||||
|
tlsmgr unix - - n 1000? 1 tlsmgr |
||||
|
rewrite unix - - n - - trivial-rewrite |
||||
|
bounce unix - - n - 0 bounce |
||||
|
defer unix - - n - 0 bounce |
||||
|
trace unix - - n - 0 bounce |
||||
|
verify unix - - n - 1 verify |
||||
|
flush unix n - n 1000? 0 flush |
||||
|
proxymap unix - - n - - proxymap |
||||
|
proxywrite unix - - n - 1 proxymap |
||||
|
smtp unix - - n - - smtp |
||||
|
relay unix - - n - - smtp |
||||
|
-o syslog_name=postfix/$service_name |
||||
|
showq unix n - n - - showq |
||||
|
error unix - - n - - error |
||||
|
retry unix - - n - - error |
||||
|
discard unix - - n - - discard |
||||
|
local unix - n n - - local |
||||
|
virtual unix - n n - - virtual |
||||
|
lmtp unix - - n - - lmtp |
||||
|
anvil unix - - n - 1 anvil |
||||
|
scache unix - - n - 1 scache |
||||
|
postlog unix-dgram n - n - 1 postlogd |
||||
|
|
||||
|
- name: Generate RSA private key |
||||
|
openssl_privatekey: |
||||
|
path: "{{ conf_dir }}/server.key" |
||||
|
size: 4096 |
||||
|
|
||||
|
- name: Generate a Self Signed OpenSSL certificate |
||||
|
openssl_certificate: |
||||
|
path: "{{ conf_dir }}/server.crt" |
||||
|
privatekey_path: "{{ conf_dir }}/server.key" |
||||
|
subject: "{{ certificate_subject }}" |
||||
|
provider: selfsigned |
||||
|
|
||||
|
- name: Set permissions for server.key |
||||
|
file: |
||||
|
path: "{{ conf_dir }}/server.key" |
||||
|
mode: '0644' |
||||
|
|
||||
|
- name: Create smtp_sasl_password_maps file |
||||
|
copy: |
||||
|
dest: "{{ conf_dir }}/smtp_sasl_password_maps" |
||||
|
content: "mail@notifications.asmodee.de apikey:{{ password }}" |
||||
|
mode: '0600' |
||||
|
|
||||
|
- name: Create sender_dependent_relayhost_maps file |
||||
|
copy: |
||||
|
dest: "{{ conf_dir }}/sender_dependent_relayhost_maps" |
||||
|
content: "mail@notifications.asmodee.de [smtp.sendgrid.net]:" |
||||
|
|
||||
|
- name: Create aliases file |
||||
|
file: |
||||
|
path: "{{ conf_dir }}/aliases" |
||||
|
state: touch |
||||
|
|
||||
|
- name: Create smtp_header_checks file |
||||
|
copy: |
||||
|
dest: "{{ conf_dir }}/smtp_header_checks" |
||||
|
content: | |
||||
|
/^Received:/ IGNORE |
||||
|
/^User-Agent:/ IGNORE |
||||
|
/^Message-ID:/ IGNORE |
||||
|
/^X-Originating-ip:/ IGNORE |
||||
|
/^X-Forward:/ IGNORE |
||||
|
/^X-Mailer:/ IGNORE |
||||
|
/^X-Virus-/ IGNORE |
||||
|
/^X-Spam-/ IGNORE |
||||
|
|
||||
|
- name: Start Docker container with Docker Compose |
||||
|
community.docker.docker_compose: |
||||
|
project_src: "{{ mail_relay_dir }}" |
||||
|
state: present |
||||
|
restarted: yes |
||||
|
|
||||
|
- name: Update Postfix maps and aliases |
||||
|
community.docker.docker_container_exec: |
||||
|
container: mail-relay |
||||
|
command: "{{ item }}" |
||||
|
loop: |
||||
|
- "postmap /etc/postfix/conf/smtp_sasl_password_maps" |
||||
|
- "postmap /etc/postfix/conf/sender_dependent_relayhost_maps" |
||||
|
- "postalias /etc/postfix/conf/aliases" |
||||
|
|
||||
|
- name: Configure SASL password and permissions |
||||
|
community.docker.docker_container_exec: |
||||
|
container: mail-relay |
||||
|
command: "sh -c 'echo {{ mail_relay_password }} | saslpasswd2 -c -p -u mail-relay relay-apikey; chmod 640 /etc/sasl2/sasldb2; chown root:postfix /etc/sasl2/sasldb2'" |
||||
|
|
||||
|
- name: List SASL users |
||||
|
community.docker.docker_container_exec: |
||||
|
container: mail-relay |
||||
|
command: "sasldblistusers2" |
||||
@ -0,0 +1,71 @@ |
|||||
|
--- |
||||
|
- name: Setup UniFi Controller Docker Container |
||||
|
hosts: your_target_host |
||||
|
become: true |
||||
|
vars: |
||||
|
unifi_dir: /mnt/docker/unifi-controller |
||||
|
cert_dir: "{{ unifi_dir }}/data/cert" |
||||
|
cert_files: |
||||
|
- unifi-controller.asmodee.local.crt |
||||
|
- unifi-controller.asmodee.local.key |
||||
|
- root-ca.crt |
||||
|
|
||||
|
tasks: |
||||
|
- name: Create necessary directories |
||||
|
file: |
||||
|
path: "{{ item }}" |
||||
|
state: directory |
||||
|
loop: |
||||
|
- "{{ unifi_dir }}" |
||||
|
- "{{ cert_dir }}" |
||||
|
|
||||
|
- name: Create Docker Compose file for UniFi Controller |
||||
|
copy: |
||||
|
dest: "{{ unifi_dir }}/docker-compose.yaml" |
||||
|
content: | |
||||
|
version: "3" |
||||
|
services: |
||||
|
unifi-controller: |
||||
|
image: jacobalberty/unifi:latest |
||||
|
container_name: unifi-controller |
||||
|
restart: unless-stopped |
||||
|
healthcheck: |
||||
|
test: grep -qr "java" /proc/*/status || exit 1 |
||||
|
interval: 1m |
||||
|
timeout: 30s |
||||
|
retries: 3 |
||||
|
ports: |
||||
|
- 6789:6789 |
||||
|
- 8080:8080 |
||||
|
- 8443:8443 |
||||
|
- 8843:8843 |
||||
|
- 8880:8880 |
||||
|
- 3478:3478/udp |
||||
|
environment: |
||||
|
- RUNAS_UID0=false |
||||
|
volumes: |
||||
|
- /etc/timezone:/etc/timezone:ro |
||||
|
- /etc/localtime:/etc/localtime:ro |
||||
|
- ./data:/unifi |
||||
|
- ./run:/var/run/unifi |
||||
|
networks: |
||||
|
default: |
||||
|
name: build |
||||
|
external: true |
||||
|
|
||||
|
- name: Copy certificate files to UniFi directory |
||||
|
copy: |
||||
|
src: "{{ item }}" |
||||
|
dest: "{{ cert_dir }}/{{ item }}" |
||||
|
mode: '0600' |
||||
|
loop: "{{ cert_files }}" |
||||
|
|
||||
|
- name: Append certificate to chain file |
||||
|
command: |
||||
|
cmd: "cat {{ cert_dir }}/{{ cert_files[0] }} >> {{ cert_dir }}/chain.pem" |
||||
|
|
||||
|
- name: Start Docker container with Docker Compose |
||||
|
community.docker.docker_compose: |
||||
|
project_src: "{{ unifi_dir }}" |
||||
|
state: present |
||||
|
restarted: yes |
||||
@ -0,0 +1,39 @@ |
|||||
|
#!/bin/bash |
||||
|
|
||||
|
# Ensure the script is run as root |
||||
|
if [ "$(id -u)" != "0" ]; then |
||||
|
echo "This script must be run as root" 1>&2 |
||||
|
exit 1 |
||||
|
fi |
||||
|
|
||||
|
# Update and Upgrade the System |
||||
|
apt update && apt upgrade -y |
||||
|
|
||||
|
# Install sudo and other necessary packages |
||||
|
apt install -y sudo openssh-server |
||||
|
|
||||
|
# Create the ansible user |
||||
|
useradd -m -s /bin/bash ansible |
||||
|
|
||||
|
# Set up SSH for the ansible user |
||||
|
mkdir -p /home/ansible/.ssh |
||||
|
chmod 700 /home/ansible/.ssh |
||||
|
touch /home/ansible/.ssh/authorized_keys |
||||
|
chmod 600 /home/ansible/.ssh/authorized_keys |
||||
|
|
||||
|
# Replace 'your_public_key' with the actual public key |
||||
|
echo 'your_public_key' > /home/ansible/.ssh/authorized_keys |
||||
|
|
||||
|
# Change ownership of the .ssh directory to the ansible user |
||||
|
chown -R ansible:ansible /home/ansible/.ssh |
||||
|
|
||||
|
# Configure sudo privileges |
||||
|
echo 'ansible ALL=(ALL) NOPASSWD:ALL' > /etc/sudoers.d/ansible |
||||
|
|
||||
|
# Ensure the sudoers file is secure |
||||
|
chmod 0440 /etc/sudoers.d/ansible |
||||
|
|
||||
|
# Install Ansible |
||||
|
apt install -y ansible |
||||
|
|
||||
|
echo "Ansible and user setup complete." |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue