WIP
parent
6592f40e7b
commit
fdf19c4e26
@ -0,0 +1,2 @@
|
|||||||
|
---
|
||||||
|
|
@ -0,0 +1,3 @@
|
|||||||
|
---
|
||||||
|
|
||||||
|
dest: ""
|
@ -0,0 +1 @@
|
|||||||
|
---
|
@ -0,0 +1,27 @@
|
|||||||
|
---
|
||||||
|
|
||||||
|
- name: restart opendkim
|
||||||
|
service:
|
||||||
|
name: opendkim
|
||||||
|
state: restarted
|
||||||
|
|
||||||
|
- name: restart opendmarc
|
||||||
|
service:
|
||||||
|
name: opendmarc
|
||||||
|
state: restarted
|
||||||
|
|
||||||
|
- name: restart postfix
|
||||||
|
service:
|
||||||
|
name: postfix
|
||||||
|
state: restarted
|
||||||
|
|
||||||
|
- name: restart saslauthd
|
||||||
|
service:
|
||||||
|
name: saslauthd
|
||||||
|
state: restarted
|
||||||
|
|
||||||
|
- name: restart spamassassin
|
||||||
|
service:
|
||||||
|
name: spamassassin
|
||||||
|
state: restarted
|
||||||
|
# TODO Enable
|
@ -0,0 +1,18 @@
|
|||||||
|
---
|
||||||
|
|
||||||
|
- name: Install required packages
|
||||||
|
apt:
|
||||||
|
state: present
|
||||||
|
name:
|
||||||
|
- ca-certificates
|
||||||
|
- mailutils
|
||||||
|
- libsasl2-2
|
||||||
|
- libsasl2-modules
|
||||||
|
- opendkim
|
||||||
|
- opendkim-tools
|
||||||
|
- opendmarc
|
||||||
|
- postfix
|
||||||
|
- postfix-policyd-spf-python
|
||||||
|
- sasl2-bin
|
||||||
|
- spamassassin
|
||||||
|
- spamc
|
@ -0,0 +1,16 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
local USERID="<Enter_the_user_id_of_the_recipient>"
|
||||||
|
local KEY="<The_key_of_your_telegram_bot>"
|
||||||
|
local TIMEOUT="10"
|
||||||
|
local URL="https://api.telegram.org/bot$KEY/sendMessage"
|
||||||
|
local DATE_EXEC="$(date "+%d %b %Y %H:%M")" #Collect date & time.
|
||||||
|
if [ -n "$SSH_CLIENT" ] && [ -z "$TMUX" ]; then #Trigger
|
||||||
|
IP=$(echo $SSH_CLIENT | awk '{print $1}') #Get Client IP address.
|
||||||
|
PORT=$(echo $SSH_CLIENT | awk '{print $3}') #Get SSH port
|
||||||
|
HOSTNAME=$(hostname -f) #Get hostname
|
||||||
|
IPADDR=$(hostname -I | awk '{print $1}')
|
||||||
|
TEXT="$DATE_EXEC: ${USER} logged in to $HOSTNAME ($IPADDR) from $IP - $(curl https://ipinfo.io/$IP -s | jq -r '.org + " - " + .city + ", " + .region + ", " + .country') port $PORT"
|
||||||
|
curl -s --max-time $TIMEOUT -d "chat_id=$USERID&disable_web_page_preview=1&text=$TEXT" $URL > /dev/null
|
||||||
|
rm $TMPFILE #clean up after
|
||||||
|
fi
|
@ -0,0 +1,11 @@
|
|||||||
|
TODOs:
|
||||||
|
|
||||||
|
- PHP OPCache Configuration
|
||||||
|
File: /etc/php/7.0/fpm/php.ini (check path)
|
||||||
|
opcache.enable=1
|
||||||
|
opcache.enable_cli=1
|
||||||
|
opcache.memory_consumption=128
|
||||||
|
opcache.interned_strings_buffer=8
|
||||||
|
opcache.max_accelerated_files=10000
|
||||||
|
opcache.revalidate_freq=1
|
||||||
|
opcache.save_comments=1
|
@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
|
||||||
|
# domain: "example.com"
|
||||||
|
# system_user: "www-data"
|
||||||
|
# src: "/of/php/files"
|
||||||
|
# pool_name from nginx/php-pool
|
||||||
|
# TODO includes: ...
|
@ -0,0 +1,12 @@
|
|||||||
|
---
|
||||||
|
|
||||||
|
allow_duplicates: yes
|
||||||
|
|
||||||
|
dependencies:
|
||||||
|
- role: nginx/application
|
||||||
|
- role: acme/certificate
|
||||||
|
# domain
|
||||||
|
- role: nginx/php-pool
|
||||||
|
# system_user
|
||||||
|
# src
|
||||||
|
# pool_name
|
@ -0,0 +1,10 @@
|
|||||||
|
---
|
||||||
|
|
||||||
|
- name: Configure forward in nginx
|
||||||
|
template:
|
||||||
|
src: server.conf
|
||||||
|
dest: "{{ nginx_sites_directory }}/{{ domain }}"
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
mode: "u=rw,g=r,o=r"
|
||||||
|
notify: reload nginx
|
@ -0,0 +1,31 @@
|
|||||||
|
server {
|
||||||
|
listen 443 ssl http2;
|
||||||
|
listen [::]:443 ssl http2;
|
||||||
|
server_name {{ domain }};
|
||||||
|
|
||||||
|
ssl on;
|
||||||
|
ssl_certificate {{ acme_certificate_location }};
|
||||||
|
ssl_certificate_key {{ acme_key_location }};
|
||||||
|
|
||||||
|
include {{ nginx_snippets_directory }}/https;
|
||||||
|
include {{ nginx_snippets_directory }}/global;
|
||||||
|
|
||||||
|
index index.php index.html index.htm index.nginx-debian.html;
|
||||||
|
root {{ src }};
|
||||||
|
fastcgi_hide_header X-Powered-By;
|
||||||
|
|
||||||
|
location ~\.php$ {
|
||||||
|
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
|
||||||
|
try_files $uri =404;
|
||||||
|
fastcgi_index index.php;
|
||||||
|
include fastcgi_params;
|
||||||
|
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
|
||||||
|
fastcgi_param PATH_INFO $fastcgi_path_info;
|
||||||
|
fastcgi_param HTTPS on;
|
||||||
|
fastcgi_param modHeadersAvailable true;
|
||||||
|
fastcgi_param front_controller_active true;
|
||||||
|
fastcgi_pass {{ pool_name }};
|
||||||
|
fastcgi_intercept_errors on;
|
||||||
|
fastcgi_request_buffering off;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,5 @@
|
|||||||
|
# Mail Module
|
||||||
|
|
||||||
|
Configures a fully enabled mail server
|
||||||
|
with integration into NextCloud
|
||||||
|
following https://123qwe.com/tutorial/
|
@ -0,0 +1,21 @@
|
|||||||
|
- php-apcu
|
||||||
|
- php-bz2
|
||||||
|
- php-curl
|
||||||
|
- php-dom
|
||||||
|
- php-fileinfo
|
||||||
|
- php-gd
|
||||||
|
- php-iconv
|
||||||
|
- php-imagick
|
||||||
|
- php-intl
|
||||||
|
- php-json
|
||||||
|
- php-mbstring
|
||||||
|
- php-mcrypt
|
||||||
|
- php-posix
|
||||||
|
- php-simplexml
|
||||||
|
- php-xmlreader
|
||||||
|
- php-xmlwriter
|
||||||
|
- php-zip
|
||||||
|
- php-curl
|
||||||
|
- php-gd
|
||||||
|
- php-bz2
|
||||||
|
- php-apcu
|
@ -0,0 +1,18 @@
|
|||||||
|
---
|
||||||
|
|
||||||
|
mail_domains:
|
||||||
|
- example.com
|
||||||
|
mail_main_domain: "{{ mail_domains[0] }}"
|
||||||
|
mail_server_domain: "mail.{{ mail_main_domain }}"
|
||||||
|
|
||||||
|
mail_postmaster_address: "postmaster@{{ mail_main_domain }}"
|
||||||
|
|
||||||
|
mail_sql_database: "mail_server"
|
||||||
|
mail_sql_username: "mail_user"
|
||||||
|
mail_sql_password: "TODO"
|
||||||
|
mail_nextcloud_sql_username: "mail_nextcloud"
|
||||||
|
mail_nextcloud_sql_password: "TODO"
|
||||||
|
|
||||||
|
mail_postfix_username: "postfix"
|
||||||
|
mail_postfix_configuration_directory: "/etc/postfix"
|
||||||
|
mail_postfix_message_size_limit: 52428800 # 50 MB
|
@ -0,0 +1,7 @@
|
|||||||
|
USE DATABASE mail_server;
|
||||||
|
|
||||||
|
-- TODO Database transfer from local phpmyadmin
|
||||||
|
-- TODO Workaround for rule
|
||||||
|
|
||||||
|
CREATE TABLE domains (
|
||||||
|
)
|
@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
|
||||||
|
dependencies:
|
||||||
|
- role: acme/certificate
|
||||||
|
domain: "{{ mail_main_domain }}"
|
||||||
|
- role: mysql/application # TODO Repl
|
||||||
|
- role: nginx/application # TODO Repl
|
@ -0,0 +1,9 @@
|
|||||||
|
# TODO Create following DNS entries
|
||||||
|
|
||||||
|
# A Record (TODO move)
|
||||||
|
# AAAA Record (TODO move)
|
||||||
|
|
||||||
|
# For each mail domain by mail_domains
|
||||||
|
# {{ mail_domain }} MX 10 {{ mail_server_domain }}
|
||||||
|
# {{ mail_domain }} TXT v=spf1 mx -all
|
||||||
|
# _dmarc.{{ mail_domain }} TXT v=DMARC1; aspf=s; adkim=s; pct=100; p=reject; rua=mailto:{{ mail_postmaster_address }};
|
@ -0,0 +1,28 @@
|
|||||||
|
---
|
||||||
|
|
||||||
|
- name: Configure DNS entries
|
||||||
|
include_tasks: dns.yml
|
||||||
|
|
||||||
|
- name: Register apt key for rspamd
|
||||||
|
apt_key:
|
||||||
|
id: 3FA347D5E599BE4595CA2576FFA232EDBF21E25E
|
||||||
|
url: https://rspamd.com/apt-stable/gpg.key
|
||||||
|
|
||||||
|
- name: Register apt repository for rspamd
|
||||||
|
apt_repository:
|
||||||
|
repo: "deb http://rspamd.com/apt-stable/ {{ ansible_distribution_release }} main"
|
||||||
|
filename: rspamd
|
||||||
|
|
||||||
|
- name: Install required packages
|
||||||
|
apt:
|
||||||
|
state: present
|
||||||
|
name:
|
||||||
|
- dovecot-imapd
|
||||||
|
- dovecot-mysql
|
||||||
|
- dovecot-lmtpd
|
||||||
|
- dovecot-sieve
|
||||||
|
- dovecot-managesieved
|
||||||
|
- postfix
|
||||||
|
- postfix-mysql
|
||||||
|
- rspamd
|
||||||
|
update_cache: yes # TODO If added repository
|
@ -0,0 +1,17 @@
|
|||||||
|
---
|
||||||
|
|
||||||
|
- template:
|
||||||
|
dest: "{{ mail_postfix_configuration_directory }}/{{ item }}"
|
||||||
|
group: "{{ mail_postfix_username }}"
|
||||||
|
mode: 0640
|
||||||
|
owner: root
|
||||||
|
src: "{{ item }}"
|
||||||
|
loop:
|
||||||
|
- mysql-virtual-alias-maps.cf
|
||||||
|
- mysql-virtual-mailbox-domains.cf
|
||||||
|
- mysql-virtual-mailbox-maps.cf
|
||||||
|
|
||||||
|
- template:
|
||||||
|
dest: "{{ mail_postfix_configuration_directory }}/main.cf"
|
||||||
|
src: "main.cf"
|
||||||
|
validate: postfix check
|
@ -0,0 +1,55 @@
|
|||||||
|
myhostname={{ mail_main_domain }}
|
||||||
|
|
||||||
|
smptd_tls_cert_file={{ acme_certificates_directory }}/{{ mail_main_domain }}.crt
|
||||||
|
smptd_tls_key_file={{ acme_certificates_directory }}/{{ mail_main_domain }}.key
|
||||||
|
smtpd_tls_security_level=may
|
||||||
|
smtpd_tls_auth_only=yes
|
||||||
|
|
||||||
|
smtp_tls_security_level=may
|
||||||
|
|
||||||
|
smtpd_sasl_type=dovecot
|
||||||
|
smtpd_sasl_path=private/auth
|
||||||
|
smtpd_sasl_auth_enable=yes
|
||||||
|
|
||||||
|
virtual_mailbox_domains=mysql:{{ mail_postfix_configuration_directory }}/mysql-virtual-mailbox-domains.cf
|
||||||
|
virtual_mailbox_maps=mysql:{{ mail_postfix_configuration_directory }}/mysql-virtual-mailbox-maps.cf
|
||||||
|
virtual_alias_maps=mysql:{{ mail_postfix_configuration_directory }}/mysql-virtual-alias-maps.cf
|
||||||
|
|
||||||
|
virtual_transport=lmtp:unix:private/dovecot-lmtp
|
||||||
|
|
||||||
|
smtpd_client_restrictions =
|
||||||
|
permit_mynetworks
|
||||||
|
permit_sasl_authenticated
|
||||||
|
reject_unknown_reverse_client_hostname
|
||||||
|
|
||||||
|
smtpd_helo_restrictions =
|
||||||
|
permit_mynetworks
|
||||||
|
permit_sasl_authenticated
|
||||||
|
reject_invalid_helo_hostname
|
||||||
|
reject_non_fqdn_helo_hostname
|
||||||
|
reject_unknown_helo_hostname
|
||||||
|
smtpd_helo_required=yes
|
||||||
|
|
||||||
|
smtpd_sender_login_maps=
|
||||||
|
mysql:{{ mail_postfix_configuration_directory }}/mysql-virtual-mailbox-domains.cf
|
||||||
|
mysql:{{ mail_postfix_configuration_directory }}/mysql-virtual-alias-maps.cf
|
||||||
|
|
||||||
|
smtpd_sender_restrictions =
|
||||||
|
reject_non_fqdn_sender
|
||||||
|
reject_sender_login_mismatch
|
||||||
|
reject_unknown_sender_domain
|
||||||
|
|
||||||
|
smtpd_relay_restrictions =
|
||||||
|
permit_sasl_authenticated
|
||||||
|
reject_unauth_destination
|
||||||
|
|
||||||
|
smtpd_recipient_restrictions =
|
||||||
|
reject_non_fqdn_recipient
|
||||||
|
reject_unknown_recipient_domain
|
||||||
|
reject_unauth_pipelining
|
||||||
|
|
||||||
|
message_size_limit={{ mail_postfix_message_size_limit }}
|
||||||
|
|
||||||
|
smtpd_milters=inet:127.0.0.1:11332
|
||||||
|
non_smtpd_milters=inet:127.0.0.1:11332
|
||||||
|
milter_mail_macros=i {mail_addr} {client_addr} {client_name} {auth_authen}
|
@ -0,0 +1,5 @@
|
|||||||
|
user = {{ mail_sql_username }}
|
||||||
|
password = {{ mail_sql_password }}
|
||||||
|
hosts = 127.0.0.1
|
||||||
|
dbname = {{ mail_sql_database }}
|
||||||
|
query = SELECT destination_local || '@' || destination_domain FROM aliases WHERE source_local='%u' AND source_domain='%d';
|
@ -0,0 +1,5 @@
|
|||||||
|
user = {{ mail_sql_username }}
|
||||||
|
password = {{ mail_sql_password }}
|
||||||
|
hosts = 127.0.0.1
|
||||||
|
dbname = {{ mail_sql_database }}
|
||||||
|
query = SELECT * FROM domains WHERE domain='%s'
|
@ -0,0 +1,5 @@
|
|||||||
|
user = {{ mail_sql_username }}
|
||||||
|
password = {{ mail_sql_password }}
|
||||||
|
hosts = 127.0.0.1
|
||||||
|
dbname = {{ mail_sql_database }}
|
||||||
|
query = SELECT fqda FROM users_fqda WHERE fqda='%s';
|
@ -0,0 +1,3 @@
|
|||||||
|
---
|
||||||
|
|
||||||
|
allow_duplicates: yes
|
@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
|
||||||
|
- name: Install required packages
|
||||||
|
apt:
|
||||||
|
state: present
|
||||||
|
name:
|
||||||
|
- composer
|
Binary file not shown.
After Width: | Height: | Size: 90 KiB |
@ -0,0 +1,44 @@
|
|||||||
|
<svg version="1.2" viewBox="0 -4 100 100" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="fadeInOutCable" gradientUnits="userSpaceOnUse" x1="0%" x2="1" y1="0" y2="0">
|
||||||
|
<stop offset="0%" stop-color="rgb(220,220,0)" stop-opacity="0" />
|
||||||
|
<stop offset="15%" stop-color="rgb(220,220,0)" stop-opacity="0.2" />
|
||||||
|
<stop offset="30%" stop-color="rgb(220,220,0)" stop-opacity="1" />
|
||||||
|
<stop offset="70%" stop-color="rgb(220,220,0)" stop-opacity="1" />
|
||||||
|
<stop offset="85%" stop-color="rgb(220,220,0)" stop-opacity="0.2" />
|
||||||
|
<stop offset="100%" stop-color="rgb(220,220,0)" stop-opacity="0" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient id="fadeInOutBlack" gradientUnits="userSpaceOnUse" x1="0%" x2="1" y1="0" y2="0">
|
||||||
|
<stop offset="0%" stop-color="rgb(0,0,0)" stop-opacity="0" />
|
||||||
|
<stop offset="15%" stop-color="rgb(0,0,0)" stop-opacity="0.2" />
|
||||||
|
<stop offset="30%" stop-color="rgb(0,0,0)" stop-opacity="1" />
|
||||||
|
<stop offset="70%" stop-color="rgb(0,0,0)" stop-opacity="1" />
|
||||||
|
<stop offset="85%" stop-color="rgb(0,0,0)" stop-opacity="0.2" />
|
||||||
|
<stop offset="100%" stop-color="rgb(0,0,0)" stop-opacity="0" />
|
||||||
|
</linearGradient>
|
||||||
|
<g id="cableElement">
|
||||||
|
<line x1="0" y1="0" x2="1" y2="0" stroke="url(#fadeInOutCable)" stroke-width="5" />
|
||||||
|
<line x1="0" y1="-3" x2="1" y2="-3" stroke="url(#fadeInOutBlack)" stroke-width="1" />
|
||||||
|
<line x1="0" y1="3" x2="1" y2="3" stroke="url(#fadeInOutBlack)" stroke-width="1" />
|
||||||
|
</g>
|
||||||
|
<g id="banana">
|
||||||
|
<path d="M 1 -1.4 c 0 -3, 3 -4, 3 -8 c 0 -6, 0 -20, -16 -36 c -6 -6, -12 0, -6 6 c 8 8, 14 22, 14 30 c 0 4, 3 5, 3 8 c 0 3, 2 3, 2 0"
|
||||||
|
stroke="rgb(0,0,0)" stroke-width="1" fill="rgb(255,225,53)" />
|
||||||
|
</g>
|
||||||
|
<g id="bananaTree">
|
||||||
|
<use xlink:href="#banana" transform="rotate(45)" />
|
||||||
|
<use xlink:href="#banana" transform="rotate(30)" />
|
||||||
|
<use xlink:href="#banana" transform="rotate(15)" />
|
||||||
|
<use xlink:href="#banana" transform="rotate(0)" />
|
||||||
|
<use xlink:href="#banana" transform="rotate(-15)" />
|
||||||
|
<use xlink:href="#banana" transform="rotate(-30)" />
|
||||||
|
<use xlink:href="#banana" transform="rotate(-45)" />
|
||||||
|
</g>
|
||||||
|
</defs>
|
||||||
|
<use xlink:href="#cableElement" x="0" y="8" transform="scale(100, 1)" />
|
||||||
|
<use xlink:href="#cableElement" transform="translate(50, 12) rotate(90) scale(14, 1)" />
|
||||||
|
<rect x="42" y="0" width="16" height="16" fill="rgb(220,220,220)" stroke="rgb(0,0,0)" stroke-width="2" />
|
||||||
|
<rect x="42" y="22" width="16" height="8" fill="rgb(0,180,0)" stroke="rgb(0,0,0)" stroke-width="2" />
|
||||||
|
<use xlink:href="#bananaTree" transform="translate(50, 26) rotate(200) scale(1.2)" />
|
||||||
|
<use xlink:href="#logo" transform="translate(44, 2) scale(0.12)" />
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2.9 KiB |
Loading…
Reference in New Issue