smartmachine 1.2.3 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/smart_machine/commands/grid.rb +8 -0
- data/lib/smart_machine/commands/grid_commands/emailer.rb +107 -0
- data/lib/smart_machine/commands/grid_commands/roundcube.rb +65 -0
- data/lib/smart_machine/configuration.rb +35 -2
- data/lib/smart_machine/credentials.rb +10 -0
- data/lib/smart_machine/engine.rb +6 -0
- data/lib/smart_machine/grids/adminer.rb +1 -0
- data/lib/smart_machine/grids/certbot.rb +1 -0
- data/lib/smart_machine/grids/emailer/.keep +0 -0
- data/lib/smart_machine/grids/emailer.rb +188 -0
- data/lib/smart_machine/grids/haproxy.rb +1 -0
- data/lib/smart_machine/grids/mariadb.rb +1 -0
- data/lib/smart_machine/grids/postgresql.rb +1 -0
- data/lib/smart_machine/grids/roundcube.rb +114 -0
- data/lib/smart_machine/machine.rb +7 -0
- data/lib/smart_machine/syncer.rb +10 -0
- data/lib/smart_machine/templates/dotsmartmachine/config/emailer/docker/command.rb +50 -0
- data/lib/smart_machine/templates/dotsmartmachine/config/emailer/docker/entrypoint.rb +196 -0
- data/lib/smart_machine/templates/dotsmartmachine/config/emailer/docker/logtailer.rb +75 -0
- data/lib/smart_machine/templates/dotsmartmachine/config/emailer/etc/dovecot/conf.d/10-auth.conf +132 -0
- data/lib/smart_machine/templates/dotsmartmachine/config/emailer/etc/dovecot/conf.d/10-mail.conf +427 -0
- data/lib/smart_machine/templates/dotsmartmachine/config/emailer/etc/dovecot/conf.d/10-master.conf +153 -0
- data/lib/smart_machine/templates/dotsmartmachine/config/emailer/etc/dovecot/conf.d/10-ssl.conf +87 -0
- data/lib/smart_machine/templates/dotsmartmachine/config/emailer/etc/dovecot/conf.d/15-mailboxes.conf +94 -0
- data/lib/smart_machine/templates/dotsmartmachine/config/emailer/etc/dovecot/conf.d/20-imap.conf +102 -0
- data/lib/smart_machine/templates/dotsmartmachine/config/emailer/etc/dovecot/conf.d/20-lmtp.conf +43 -0
- data/lib/smart_machine/templates/dotsmartmachine/config/emailer/etc/dovecot/conf.d/90-quota.conf +114 -0
- data/lib/smart_machine/templates/dotsmartmachine/config/emailer/etc/dovecot/conf.d/90-sieve.conf +229 -0
- data/lib/smart_machine/templates/dotsmartmachine/config/emailer/etc/dovecot/dovecot-sql.conf.ext +163 -0
- data/lib/smart_machine/templates/dotsmartmachine/config/emailer/etc/dovecot/sieve/learn-ham.sh +2 -0
- data/lib/smart_machine/templates/dotsmartmachine/config/emailer/etc/dovecot/sieve/learn-ham.sieve +5 -0
- data/lib/smart_machine/templates/dotsmartmachine/config/emailer/etc/dovecot/sieve/learn-spam.sh +2 -0
- data/lib/smart_machine/templates/dotsmartmachine/config/emailer/etc/dovecot/sieve/learn-spam.sieve +2 -0
- data/lib/smart_machine/templates/dotsmartmachine/config/emailer/etc/dovecot/sieve-after/spam-to-folder.sieve +6 -0
- data/lib/smart_machine/templates/dotsmartmachine/config/emailer/etc/haproxy/haproxy.cfg +58 -0
- data/lib/smart_machine/templates/dotsmartmachine/config/emailer/etc/monit/conf.d/services.cfg +70 -0
- data/lib/smart_machine/templates/dotsmartmachine/config/emailer/etc/monit/monitrc +344 -0
- data/lib/smart_machine/templates/dotsmartmachine/config/emailer/etc/opendkim.conf +71 -0
- data/lib/smart_machine/templates/dotsmartmachine/config/emailer/etc/postfix/main.cf +123 -0
- data/lib/smart_machine/templates/dotsmartmachine/config/emailer/etc/postfix/master.cf +149 -0
- data/lib/smart_machine/templates/dotsmartmachine/config/emailer/etc/postfix/mysql-sender-login-maps.cf +7 -0
- data/lib/smart_machine/templates/dotsmartmachine/config/emailer/etc/postfix/mysql-virtual-alias-domains.cf +7 -0
- data/lib/smart_machine/templates/dotsmartmachine/config/emailer/etc/postfix/mysql-virtual-alias-maps-domains.cf +7 -0
- data/lib/smart_machine/templates/dotsmartmachine/config/emailer/etc/postfix/mysql-virtual-alias-maps-masters.cf +7 -0
- data/lib/smart_machine/templates/dotsmartmachine/config/emailer/etc/postfix/mysql-virtual-alias-maps-users.cf +7 -0
- data/lib/smart_machine/templates/dotsmartmachine/config/emailer/etc/postfix/mysql-virtual-alias-maps-userstothemselves.cf +7 -0
- data/lib/smart_machine/templates/dotsmartmachine/config/emailer/etc/postfix/mysql-virtual-mailbox-domains.cf +7 -0
- data/lib/smart_machine/templates/dotsmartmachine/config/emailer/etc/postfix/mysql-virtual-mailbox-maps.cf +7 -0
- data/lib/smart_machine/templates/dotsmartmachine/config/emailer/etc/postfix-policyd-spf-python/policyd-spf.conf +12 -0
- data/lib/smart_machine/templates/dotsmartmachine/config/emailer/etc/spamassassin/local.cf +124 -0
- data/lib/smart_machine/templates/dotsmartmachine/config/emailer/usr/local/bin/quota-warning.sh +22 -0
- data/lib/smart_machine/templates/dotsmartmachine/config/emailer.yml +37 -0
- data/lib/smart_machine/templates/dotsmartmachine/config/engine.yml +2 -0
- data/lib/smart_machine/templates/dotsmartmachine/config/roundcube/etc/apache2/sites-available/000-default.conf +35 -0
- data/lib/smart_machine/templates/dotsmartmachine/config/roundcube/usr/local/etc/php/conf.d/zzz_roundcube-custom.ini +4 -0
- data/lib/smart_machine/templates/dotsmartmachine/config/roundcube/var/roundcube/config/config.custom.inc.php +25 -0
- data/lib/smart_machine/templates/dotsmartmachine/config/roundcube.yml +41 -0
- data/lib/smart_machine/templates/dotsmartmachine/config/users.yml +1 -1
- data/lib/smart_machine/version.rb +2 -2
- data/lib/smart_machine.rb +2 -0
- metadata +55 -4
data/lib/smart_machine/templates/dotsmartmachine/config/emailer/etc/dovecot/dovecot-sql.conf.ext
ADDED
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
# This file is commonly accessed via passdb {} or userdb {} section in
|
|
2
|
+
# conf.d/auth-sql.conf.ext
|
|
3
|
+
|
|
4
|
+
# This file is opened as root, so it should be owned by root and mode 0600.
|
|
5
|
+
#
|
|
6
|
+
# http://wiki2.dovecot.org/AuthDatabase/SQL
|
|
7
|
+
#
|
|
8
|
+
# For the sql passdb module, you'll need a database with a table that
|
|
9
|
+
# contains fields for at least the username and password. If you want to
|
|
10
|
+
# use the user@domain syntax, you might want to have a separate domain
|
|
11
|
+
# field as well.
|
|
12
|
+
#
|
|
13
|
+
# If your users all have the same uig/gid, and have predictable home
|
|
14
|
+
# directories, you can use the static userdb module to generate the home
|
|
15
|
+
# dir based on the username and domain. In this case, you won't need fields
|
|
16
|
+
# for home, uid, or gid in the database.
|
|
17
|
+
#
|
|
18
|
+
# If you prefer to use the sql userdb module, you'll want to add fields
|
|
19
|
+
# for home, uid, and gid. Here is an example table:
|
|
20
|
+
#
|
|
21
|
+
# CREATE TABLE users (
|
|
22
|
+
# username VARCHAR(128) NOT NULL,
|
|
23
|
+
# domain VARCHAR(128) NOT NULL,
|
|
24
|
+
# password VARCHAR(64) NOT NULL,
|
|
25
|
+
# home VARCHAR(255) NOT NULL,
|
|
26
|
+
# uid INTEGER NOT NULL,
|
|
27
|
+
# gid INTEGER NOT NULL,
|
|
28
|
+
# active CHAR(1) DEFAULT 'Y' NOT NULL
|
|
29
|
+
# );
|
|
30
|
+
|
|
31
|
+
# Database driver: mysql, pgsql, sqlite
|
|
32
|
+
#driver =
|
|
33
|
+
##### SmartMachine Begin.
|
|
34
|
+
driver = mysql
|
|
35
|
+
##### SmartMachine Close.
|
|
36
|
+
|
|
37
|
+
# Database connection string. This is driver-specific setting.
|
|
38
|
+
#
|
|
39
|
+
# HA / round-robin load-balancing is supported by giving multiple host
|
|
40
|
+
# settings, like: host=sql1.host.org host=sql2.host.org
|
|
41
|
+
#
|
|
42
|
+
# pgsql:
|
|
43
|
+
# For available options, see the PostgreSQL documentation for the
|
|
44
|
+
# PQconnectdb function of libpq.
|
|
45
|
+
# Use maxconns=n (default 5) to change how many connections Dovecot can
|
|
46
|
+
# create to pgsql.
|
|
47
|
+
#
|
|
48
|
+
# mysql:
|
|
49
|
+
# Basic options emulate PostgreSQL option names:
|
|
50
|
+
# host, port, user, password, dbname
|
|
51
|
+
#
|
|
52
|
+
# But also adds some new settings:
|
|
53
|
+
# client_flags - See MySQL manual
|
|
54
|
+
# connect_timeout - Connect timeout in seconds (default: 5)
|
|
55
|
+
# read_timeout - Read timeout in seconds (default: 30)
|
|
56
|
+
# write_timeout - Write timeout in seconds (default: 30)
|
|
57
|
+
# ssl_ca, ssl_ca_path - Set either one or both to enable SSL
|
|
58
|
+
# ssl_cert, ssl_key - For sending client-side certificates to server
|
|
59
|
+
# ssl_cipher - Set minimum allowed cipher security (default: HIGH)
|
|
60
|
+
# ssl_verify_server_cert - Verify that the name in the server SSL certificate
|
|
61
|
+
# matches the host (default: no)
|
|
62
|
+
# option_file - Read options from the given file instead of
|
|
63
|
+
# the default my.cnf location
|
|
64
|
+
# option_group - Read options from the given group (default: client)
|
|
65
|
+
#
|
|
66
|
+
# You can connect to UNIX sockets by using host: host=/var/run/mysql.sock
|
|
67
|
+
# Note that currently you can't use spaces in parameters.
|
|
68
|
+
#
|
|
69
|
+
# sqlite:
|
|
70
|
+
# The path to the database file.
|
|
71
|
+
#
|
|
72
|
+
# Examples:
|
|
73
|
+
# connect = host=192.168.1.1 dbname=users
|
|
74
|
+
# connect = host=sql.example.com dbname=virtual user=virtual password=blarg
|
|
75
|
+
# connect = /etc/dovecot/authdb.sqlite
|
|
76
|
+
#
|
|
77
|
+
#connect =
|
|
78
|
+
##### SmartMachine Begin.
|
|
79
|
+
connect = host=%<mysql_host>s port=%<mysql_port>s dbname=%<mysql_database_name>s user=%<mysql_user>s password=%<mysql_password>s
|
|
80
|
+
##### SmartMachine Close.
|
|
81
|
+
|
|
82
|
+
# Default password scheme.
|
|
83
|
+
#
|
|
84
|
+
# List of supported schemes is in
|
|
85
|
+
# http://wiki2.dovecot.org/Authentication/PasswordSchemes
|
|
86
|
+
#
|
|
87
|
+
#default_pass_scheme = MD5
|
|
88
|
+
|
|
89
|
+
# passdb query to retrieve the password. It can return fields:
|
|
90
|
+
# password - The user's password. This field must be returned.
|
|
91
|
+
# user - user@domain from the database. Needed with case-insensitive lookups.
|
|
92
|
+
# username and domain - An alternative way to represent the "user" field.
|
|
93
|
+
#
|
|
94
|
+
# The "user" field is often necessary with case-insensitive lookups to avoid
|
|
95
|
+
# e.g. "name" and "nAme" logins creating two different mail directories. If
|
|
96
|
+
# your user and domain names are in separate fields, you can return "username"
|
|
97
|
+
# and "domain" fields instead of "user".
|
|
98
|
+
#
|
|
99
|
+
# The query can also return other fields which have a special meaning, see
|
|
100
|
+
# http://wiki2.dovecot.org/PasswordDatabase/ExtraFields
|
|
101
|
+
#
|
|
102
|
+
# Commonly used available substitutions (see http://wiki2.dovecot.org/Variables
|
|
103
|
+
# for full list):
|
|
104
|
+
# %u = entire user@domain
|
|
105
|
+
# %n = user part of user@domain
|
|
106
|
+
# %d = domain part of user@domain
|
|
107
|
+
#
|
|
108
|
+
# Note that these can be used only as input to SQL query. If the query outputs
|
|
109
|
+
# any of these substitutions, they're not touched. Otherwise it would be
|
|
110
|
+
# difficult to have eg. usernames containing '%' characters.
|
|
111
|
+
#
|
|
112
|
+
# Example:
|
|
113
|
+
# password_query = SELECT userid AS user, pw AS password \
|
|
114
|
+
# FROM users WHERE userid = '%u' AND active = 'Y'
|
|
115
|
+
#
|
|
116
|
+
#password_query = \
|
|
117
|
+
# SELECT username, domain, password \
|
|
118
|
+
# FROM users WHERE username = '%n' AND domain = '%d'
|
|
119
|
+
##### SmartMachine Begin.
|
|
120
|
+
password_query = SELECT password FROM virtual_users WHERE email='%u'
|
|
121
|
+
##### SmartMachine Close.
|
|
122
|
+
|
|
123
|
+
# userdb query to retrieve the user information. It can return fields:
|
|
124
|
+
# uid - System UID (overrides mail_uid setting)
|
|
125
|
+
# gid - System GID (overrides mail_gid setting)
|
|
126
|
+
# home - Home directory
|
|
127
|
+
# mail - Mail location (overrides mail_location setting)
|
|
128
|
+
#
|
|
129
|
+
# None of these are strictly required. If you use a single UID and GID, and
|
|
130
|
+
# home or mail directory fits to a template string, you could use userdb static
|
|
131
|
+
# instead. For a list of all fields that can be returned, see
|
|
132
|
+
# http://wiki2.dovecot.org/UserDatabase/ExtraFields
|
|
133
|
+
#
|
|
134
|
+
# Examples:
|
|
135
|
+
# user_query = SELECT home, uid, gid FROM users WHERE userid = '%u'
|
|
136
|
+
# user_query = SELECT dir AS home, user AS uid, group AS gid FROM users where userid = '%u'
|
|
137
|
+
# user_query = SELECT home, 501 AS uid, 501 AS gid FROM users WHERE userid = '%u'
|
|
138
|
+
#
|
|
139
|
+
#user_query = \
|
|
140
|
+
# SELECT home, uid, gid \
|
|
141
|
+
# FROM users WHERE username = '%n' AND domain = '%d'
|
|
142
|
+
##### SmartMachine Begin.
|
|
143
|
+
user_query = SELECT email as user, \
|
|
144
|
+
concat('*:bytes=', quota_bytes) AS quota_rule, \
|
|
145
|
+
'/var/vmail/%d/%n' AS home, \
|
|
146
|
+
5000 AS uid, 5000 AS gid \
|
|
147
|
+
FROM virtual_users WHERE email='%u'
|
|
148
|
+
##### SmartMachine Close.
|
|
149
|
+
|
|
150
|
+
# If you wish to avoid two SQL lookups (passdb + userdb), you can use
|
|
151
|
+
# userdb prefetch instead of userdb sql in dovecot.conf. In that case you'll
|
|
152
|
+
# also have to return userdb fields in password_query prefixed with "userdb_"
|
|
153
|
+
# string. For example:
|
|
154
|
+
#password_query = \
|
|
155
|
+
# SELECT userid AS user, password, \
|
|
156
|
+
# home AS userdb_home, uid AS userdb_uid, gid AS userdb_gid \
|
|
157
|
+
# FROM users WHERE userid = '%u'
|
|
158
|
+
|
|
159
|
+
# Query to get a list of all usernames.
|
|
160
|
+
#iterate_query = SELECT username AS user FROM users
|
|
161
|
+
##### SmartMachine Begin.
|
|
162
|
+
iterate_query = SELECT email AS user FROM virtual_users
|
|
163
|
+
##### SmartMachine Close.
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
global
|
|
2
|
+
log /dev/log local0
|
|
3
|
+
log /dev/log local1 notice
|
|
4
|
+
chroot /var/lib/haproxy
|
|
5
|
+
stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
|
|
6
|
+
stats timeout 30s
|
|
7
|
+
user haproxy
|
|
8
|
+
group haproxy
|
|
9
|
+
daemon
|
|
10
|
+
|
|
11
|
+
# Default SSL material locations
|
|
12
|
+
ca-base /etc/ssl/certs
|
|
13
|
+
crt-base /etc/ssl/private
|
|
14
|
+
|
|
15
|
+
# See: https://ssl-config.mozilla.org/#server=haproxy&server-version=2.0.3&config=intermediate
|
|
16
|
+
ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
|
|
17
|
+
ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
|
|
18
|
+
ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets
|
|
19
|
+
|
|
20
|
+
defaults
|
|
21
|
+
log global
|
|
22
|
+
mode http
|
|
23
|
+
option httplog
|
|
24
|
+
option dontlognull
|
|
25
|
+
timeout connect 5000
|
|
26
|
+
timeout client 50000
|
|
27
|
+
timeout server 50000
|
|
28
|
+
errorfile 400 /etc/haproxy/errors/400.http
|
|
29
|
+
errorfile 403 /etc/haproxy/errors/403.http
|
|
30
|
+
errorfile 408 /etc/haproxy/errors/408.http
|
|
31
|
+
errorfile 500 /etc/haproxy/errors/500.http
|
|
32
|
+
errorfile 502 /etc/haproxy/errors/502.http
|
|
33
|
+
errorfile 503 /etc/haproxy/errors/503.http
|
|
34
|
+
errorfile 504 /etc/haproxy/errors/504.http
|
|
35
|
+
|
|
36
|
+
##### SmartMachine Begin.
|
|
37
|
+
frontend myfrontend
|
|
38
|
+
bind :80
|
|
39
|
+
acl oracle_ips_listed str("%<oracle_ips_allowed>s") -m len gt 0
|
|
40
|
+
acl oracle_ip_allowed req.hdr(X-Real-IP) -m ip %<oracle_ips_allowed>s
|
|
41
|
+
http-request redirect code 302 location %<oracle_deflect_url>s unless oracle_ips_listed oracle_ip_allowed
|
|
42
|
+
http-request redirect code 302 location /oracle/monit/ if { path /oracle/monit }
|
|
43
|
+
use_backend monitbackend if { path_beg -i /oracle/monit/ }
|
|
44
|
+
stats enable
|
|
45
|
+
stats uri /oracle/haproxy
|
|
46
|
+
stats refresh 30s
|
|
47
|
+
stats admin if oracle_ips_listed oracle_ip_allowed
|
|
48
|
+
|
|
49
|
+
backend monitbackend
|
|
50
|
+
balance roundrobin
|
|
51
|
+
option forwardfor
|
|
52
|
+
http-request add-header X-Forwarded-Proto https if { ssl_fc }
|
|
53
|
+
http-request set-header X-Forwarded-Host %[req.hdr(Host)]
|
|
54
|
+
http-request set-header X-Forwarded-Port %[dst_port]
|
|
55
|
+
http-request replace-path /oracle/monit(/)?(.*) /\2
|
|
56
|
+
option httpchk GET /
|
|
57
|
+
server s1 127.0.0.1:2812 check
|
|
58
|
+
##### SmartMachine Close.
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# system
|
|
2
|
+
check system $HOST
|
|
3
|
+
if loadavg (5min) > 3 then alert
|
|
4
|
+
if loadavg (15min) > 1 then alert
|
|
5
|
+
if memory usage > 90% for 4 cycles then alert
|
|
6
|
+
if swap usage > 60% for 4 cycles then alert
|
|
7
|
+
# Test the user part of CPU usage
|
|
8
|
+
if cpu usage (user) > 80% for 2 cycles then alert
|
|
9
|
+
# Test the system part of CPU usage
|
|
10
|
+
if cpu usage (system) > 20% for 2 cycles then alert
|
|
11
|
+
# Test the i/o wait part of CPU usage
|
|
12
|
+
if cpu usage (wait) > 80% for 2 cycles then alert
|
|
13
|
+
# Test CPU usage including user, system and wait. Note that
|
|
14
|
+
# multi-core systems can generate 100% per core
|
|
15
|
+
# so total CPU usage can be more than 100%
|
|
16
|
+
if cpu usage > 200% for 4 cycles then alert
|
|
17
|
+
|
|
18
|
+
# rsyslog
|
|
19
|
+
check process rsyslog with pidfile /run/rsyslogd.pid
|
|
20
|
+
start program = "/usr/sbin/service rsyslog start"
|
|
21
|
+
stop program = "/usr/sbin/service rsyslog stop"
|
|
22
|
+
|
|
23
|
+
# rsyslog.syslog
|
|
24
|
+
check file rsyslog.syslog with path /var/log/syslog
|
|
25
|
+
if timestamp > 65 minutes then alert
|
|
26
|
+
|
|
27
|
+
# haproxy
|
|
28
|
+
check process haproxy with pidfile /run/tmpfs/haproxy.pid
|
|
29
|
+
start program = "/usr/sbin/haproxy -W -f /etc/haproxy/haproxy.cfg -p /run/tmpfs/haproxy.pid -S /run/haproxy-master.sock"
|
|
30
|
+
stop program = "/bin/bash -c '/bin/kill --signal SIGUSR1 `cat /run/tmpfs/haproxy.pid`'"
|
|
31
|
+
|
|
32
|
+
# spamassassin
|
|
33
|
+
check process spamassassin with pidfile /home/spamd/spamd.pid
|
|
34
|
+
start program = "/usr/sbin/spamd -d --pidfile=/home/spamd/spamd.pid --create-prefs --max-children 5 --username spamd --helper-home-dir /home/spamd/ -s /home/spamd/spamd.log"
|
|
35
|
+
stop program = "/bin/bash -c '/bin/kill --signal SIGTERM `cat /home/spamd/spamd.pid`'"
|
|
36
|
+
if cpu usage > 99% for 5 cycles then alert
|
|
37
|
+
if mem usage > 99% for 5 cycles then alert
|
|
38
|
+
|
|
39
|
+
# spamassassin.update
|
|
40
|
+
check program spamassassin.update with path "/bin/bash -c '/usr/bin/sa-update && /bin/kill --signal SIGHUP `cat /home/spamd/spamd.pid`'"
|
|
41
|
+
every "0-15 12-1 * * *"
|
|
42
|
+
if changed status then alert
|
|
43
|
+
|
|
44
|
+
# opendkim
|
|
45
|
+
check process opendkim with pidfile /var/run/opendkim/opendkim.pid
|
|
46
|
+
start program = "/usr/sbin/opendkim"
|
|
47
|
+
stop program = "/bin/bash -c '/bin/kill --signal SIGTERM `cat /var/run/opendkim/opendkim.pid`'"
|
|
48
|
+
|
|
49
|
+
# postfix
|
|
50
|
+
check process postfix with pidfile /var/spool/postfix/pid/master.pid
|
|
51
|
+
start program = "/bin/bash -c '/usr/lib/postfix/configure-instance.sh - && /usr/sbin/postmulti -i - -p start'"
|
|
52
|
+
stop program = "/usr/sbin/postmulti -i - -p stop"
|
|
53
|
+
if failed port 25 protocol smtp then restart
|
|
54
|
+
|
|
55
|
+
# dovecot
|
|
56
|
+
check process dovecot with pidfile /run/dovecot/master.pid
|
|
57
|
+
start program = "/usr/sbin/dovecot"
|
|
58
|
+
stop program = "/usr/bin/doveadm stop"
|
|
59
|
+
if failed host %<fqdn>s port 993 type tcpssl sslauto protocol imap for 5 cycles then restart
|
|
60
|
+
|
|
61
|
+
# certbot
|
|
62
|
+
check file certbot.fullchain with path /etc/letsencrypt/live/%<fqdn>s/fullchain.pem
|
|
63
|
+
if changed checksum then exec "/bin/bash -c '/usr/sbin/postfix reload && /usr/sbin/dovecot reload'"
|
|
64
|
+
check file certbot.key with path /etc/letsencrypt/live/%<fqdn>s/key.pem
|
|
65
|
+
if changed checksum then exec "/bin/bash -c '/usr/sbin/postfix reload && /usr/sbin/dovecot reload'"
|
|
66
|
+
|
|
67
|
+
# monit
|
|
68
|
+
check process monit with pidfile /var/run/tmpfs/monit.pid
|
|
69
|
+
start program = "/usr/bin/monit"
|
|
70
|
+
stop program = "/usr/bin/monit quit"
|
|
@@ -0,0 +1,344 @@
|
|
|
1
|
+
###############################################################################
|
|
2
|
+
## Monit control file
|
|
3
|
+
###############################################################################
|
|
4
|
+
##
|
|
5
|
+
## Comments begin with a '#' and extend through the end of the line. Keywords
|
|
6
|
+
## are case insensitive. All path's MUST BE FULLY QUALIFIED, starting with '/'.
|
|
7
|
+
##
|
|
8
|
+
## Below you will find examples of some frequently used statements. For
|
|
9
|
+
## information about the control file and a complete list of statements and
|
|
10
|
+
## options, please have a look in the Monit manual.
|
|
11
|
+
##
|
|
12
|
+
##
|
|
13
|
+
###############################################################################
|
|
14
|
+
## Global section
|
|
15
|
+
###############################################################################
|
|
16
|
+
##
|
|
17
|
+
## Start Monit in the background (run as a daemon):
|
|
18
|
+
#
|
|
19
|
+
set daemon 120 # check services at 2-minute intervals
|
|
20
|
+
# with start delay 240 # optional: delay the first check by 4-minutes (by
|
|
21
|
+
# # default Monit check immediately after Monit start)
|
|
22
|
+
#
|
|
23
|
+
#
|
|
24
|
+
## Set syslog logging. If you want to log to a standalone log file instead,
|
|
25
|
+
## specify the full path to the log file
|
|
26
|
+
#
|
|
27
|
+
set log /var/log/monit.log
|
|
28
|
+
|
|
29
|
+
#
|
|
30
|
+
#
|
|
31
|
+
## Set the location of the Monit lock file which stores the process id of the
|
|
32
|
+
## running Monit instance. By default this file is stored in $HOME/.monit.pid
|
|
33
|
+
#
|
|
34
|
+
# set pidfile /var/run/monit.pid
|
|
35
|
+
##### SmartMachine Begin.
|
|
36
|
+
set pidfile /run/tmpfs/monit.pid
|
|
37
|
+
##### SmartMachine Close.
|
|
38
|
+
#
|
|
39
|
+
## Set the location of the Monit id file which stores the unique id for the
|
|
40
|
+
## Monit instance. The id is generated and stored on first Monit start. By
|
|
41
|
+
## default the file is placed in $HOME/.monit.id.
|
|
42
|
+
#
|
|
43
|
+
# set idfile /var/.monit.id
|
|
44
|
+
set idfile /var/lib/monit/id
|
|
45
|
+
#
|
|
46
|
+
## Set the location of the Monit state file which saves monitoring states
|
|
47
|
+
## on each cycle. By default the file is placed in $HOME/.monit.state. If
|
|
48
|
+
## the state file is stored on a persistent filesystem, Monit will recover
|
|
49
|
+
## the monitoring state across reboots. If it is on temporary filesystem, the
|
|
50
|
+
## state will be lost on reboot which may be convenient in some situations.
|
|
51
|
+
#
|
|
52
|
+
set statefile /var/lib/monit/state
|
|
53
|
+
#
|
|
54
|
+
#
|
|
55
|
+
|
|
56
|
+
## Set limits for various tests. The following example shows the default values:
|
|
57
|
+
##
|
|
58
|
+
# set limits {
|
|
59
|
+
# programOutput: 512 B, # check program's output truncate limit
|
|
60
|
+
# sendExpectBuffer: 256 B, # limit for send/expect protocol test
|
|
61
|
+
# fileContentBuffer: 512 B, # limit for file content test
|
|
62
|
+
# httpContentBuffer: 1 MB, # limit for HTTP content test
|
|
63
|
+
# networkTimeout: 5 seconds # timeout for network I/O
|
|
64
|
+
# programTimeout: 300 seconds # timeout for check program
|
|
65
|
+
# stopTimeout: 30 seconds # timeout for service stop
|
|
66
|
+
# startTimeout: 30 seconds # timeout for service start
|
|
67
|
+
# restartTimeout: 30 seconds # timeout for service restart
|
|
68
|
+
# }
|
|
69
|
+
|
|
70
|
+
## Set global SSL options (just most common options showed, see manual for
|
|
71
|
+
## full list).
|
|
72
|
+
#
|
|
73
|
+
# set ssl {
|
|
74
|
+
# verify : enable, # verify SSL certificates (disabled by default but STRONGLY RECOMMENDED)
|
|
75
|
+
# selfsigned : allow # allow self signed SSL certificates (reject by default)
|
|
76
|
+
# }
|
|
77
|
+
#
|
|
78
|
+
#
|
|
79
|
+
## Set the list of mail servers for alert delivery. Multiple servers may be
|
|
80
|
+
## specified using a comma separator. If the first mail server fails, Monit
|
|
81
|
+
# will use the second mail server in the list and so on. By default Monit uses
|
|
82
|
+
# port 25 - it is possible to override this with the PORT option.
|
|
83
|
+
#
|
|
84
|
+
# set mailserver mail.bar.baz, # primary mailserver
|
|
85
|
+
# backup.bar.baz port 10025, # backup mailserver on port 10025
|
|
86
|
+
# localhost # fallback relay
|
|
87
|
+
##### SmartMachine Begin.
|
|
88
|
+
set mailserver %<monit_smtp_host>s port %<monit_smtp_port>s username "%<monit_smtp_username>s" password "%<monit_smtp_password>s" using SSL using HOSTNAME %<container_name>s.%<fqdn>s
|
|
89
|
+
##### SmartMachine Close.
|
|
90
|
+
#
|
|
91
|
+
#
|
|
92
|
+
## By default Monit will drop alert events if no mail servers are available.
|
|
93
|
+
## If you want to keep the alerts for later delivery retry, you can use the
|
|
94
|
+
## EVENTQUEUE statement. The base directory where undelivered alerts will be
|
|
95
|
+
## stored is specified by the BASEDIR option. You can limit the queue size
|
|
96
|
+
## by using the SLOTS option (if omitted, the queue is limited by space
|
|
97
|
+
## available in the back end filesystem).
|
|
98
|
+
#
|
|
99
|
+
set eventqueue
|
|
100
|
+
basedir /var/lib/monit/events # set the base directory where events will be stored
|
|
101
|
+
slots 100 # optionally limit the queue size
|
|
102
|
+
#
|
|
103
|
+
#
|
|
104
|
+
## Send status and events to M/Monit (for more information about M/Monit
|
|
105
|
+
## see https://mmonit.com/). By default Monit registers credentials with
|
|
106
|
+
## M/Monit so M/Monit can smoothly communicate back to Monit and you don't
|
|
107
|
+
## have to register Monit credentials manually in M/Monit. It is possible to
|
|
108
|
+
## disable credential registration using the commented out option below.
|
|
109
|
+
## Though, if safety is a concern we recommend instead using https when
|
|
110
|
+
## communicating with M/Monit and send credentials encrypted. The password
|
|
111
|
+
## should be URL encoded if it contains URL-significant characters like
|
|
112
|
+
## ":", "?", "@". Default timeout is 5 seconds, you can customize it by
|
|
113
|
+
## adding the timeout option.
|
|
114
|
+
#
|
|
115
|
+
# set mmonit http://monit:monit@192.168.1.10:8080/collector
|
|
116
|
+
# # with timeout 30 seconds # Default timeout is 5 seconds
|
|
117
|
+
# # and register without credentials # Don't register credentials
|
|
118
|
+
#
|
|
119
|
+
#
|
|
120
|
+
## Monit by default uses the following format for alerts if the mail-format
|
|
121
|
+
## statement is missing::
|
|
122
|
+
## --8<--
|
|
123
|
+
## set mail-format {
|
|
124
|
+
## from: Monit <monit@$HOST>
|
|
125
|
+
## subject: monit alert -- $EVENT $SERVICE
|
|
126
|
+
## message: $EVENT Service $SERVICE
|
|
127
|
+
## Date: $DATE
|
|
128
|
+
## Action: $ACTION
|
|
129
|
+
## Host: $HOST
|
|
130
|
+
## Description: $DESCRIPTION
|
|
131
|
+
##
|
|
132
|
+
## Your faithful employee,
|
|
133
|
+
## Monit
|
|
134
|
+
## }
|
|
135
|
+
## --8<--
|
|
136
|
+
##
|
|
137
|
+
## You can override this message format or parts of it, such as subject
|
|
138
|
+
## or sender using the MAIL-FORMAT statement. Macros such as $DATE, etc.
|
|
139
|
+
## are expanded at runtime. For example, to override the sender, use:
|
|
140
|
+
#
|
|
141
|
+
# set mail-format { from: monit@foo.bar }
|
|
142
|
+
##### SmartMachine Begin.
|
|
143
|
+
set mail-format {
|
|
144
|
+
from: %<monit_smtp_email_name>s <%<monit_smtp_email_address>s>
|
|
145
|
+
subject: Monit | $SERVICE | $EVENT
|
|
146
|
+
message:
|
|
147
|
+
While monitoring the system, I observed a change and have performed the actions you had asked.
|
|
148
|
+
|
|
149
|
+
Date: $DATE
|
|
150
|
+
Timezone: %<timezone>s
|
|
151
|
+
Host: $HOST
|
|
152
|
+
FQDN: %<fqdn>s
|
|
153
|
+
Container: %<container_name>s
|
|
154
|
+
Service: $SERVICE
|
|
155
|
+
Event: $EVENT
|
|
156
|
+
Action: $ACTION
|
|
157
|
+
Description: $DESCRIPTION
|
|
158
|
+
|
|
159
|
+
Please check if you need to do something about it further.
|
|
160
|
+
|
|
161
|
+
Your Faithful Employee,
|
|
162
|
+
Monit
|
|
163
|
+
}
|
|
164
|
+
##### SmartMachine Close.
|
|
165
|
+
#
|
|
166
|
+
#
|
|
167
|
+
## You can set alert recipients whom will receive alerts if/when a
|
|
168
|
+
## service defined in this file has errors. Alerts may be restricted on
|
|
169
|
+
## events by using a filter as in the second example below.
|
|
170
|
+
#
|
|
171
|
+
# set alert sysadm@foo.bar # receive all alerts
|
|
172
|
+
##### SmartMachine Begin.
|
|
173
|
+
set alert %<sysadmin_email>s
|
|
174
|
+
##### SmartMachine Close.
|
|
175
|
+
#
|
|
176
|
+
## Do not alert when Monit starts, stops or performs a user initiated action.
|
|
177
|
+
## This filter is recommended to avoid getting alerts for trivial cases.
|
|
178
|
+
#
|
|
179
|
+
# set alert your-name@your.domain not on { instance, action }
|
|
180
|
+
#
|
|
181
|
+
#
|
|
182
|
+
## Monit has an embedded HTTP interface which can be used to view status of
|
|
183
|
+
## services monitored and manage services from a web interface. The HTTP
|
|
184
|
+
## interface is also required if you want to issue Monit commands from the
|
|
185
|
+
## command line, such as 'monit status' or 'monit restart service' The reason
|
|
186
|
+
## for this is that the Monit client uses the HTTP interface to send these
|
|
187
|
+
## commands to a running Monit daemon. See the Monit Wiki if you want to
|
|
188
|
+
## enable SSL for the HTTP interface.
|
|
189
|
+
#
|
|
190
|
+
# set httpd port 2812 and
|
|
191
|
+
# use address localhost # only accept connection from localhost (drop if you use M/Monit)
|
|
192
|
+
# allow localhost # allow localhost to connect to the server and
|
|
193
|
+
# allow admin:monit # require user 'admin' with password 'monit'
|
|
194
|
+
# #with ssl { # enable SSL/TLS and set path to server certificate
|
|
195
|
+
# # pemfile: /etc/ssl/certs/monit.pem
|
|
196
|
+
# #}
|
|
197
|
+
##### SmartMachine Begin.
|
|
198
|
+
set httpd port 2812 and
|
|
199
|
+
use address localhost
|
|
200
|
+
allow localhost
|
|
201
|
+
##### SmartMachine Close.
|
|
202
|
+
|
|
203
|
+
###############################################################################
|
|
204
|
+
## Services
|
|
205
|
+
###############################################################################
|
|
206
|
+
##
|
|
207
|
+
## Check general system resources such as load average, cpu and memory
|
|
208
|
+
## usage. Each test specifies a resource, conditions and the action to be
|
|
209
|
+
## performed should a test fail.
|
|
210
|
+
#
|
|
211
|
+
# check system $HOST
|
|
212
|
+
# if loadavg (1min) per core > 2 for 5 cycles then alert
|
|
213
|
+
# if loadavg (5min) per core > 1.5 for 10 cycles then alert
|
|
214
|
+
# if cpu usage > 95% for 10 cycles then alert
|
|
215
|
+
# if memory usage > 75% then alert
|
|
216
|
+
# if swap usage > 25% then alert
|
|
217
|
+
#
|
|
218
|
+
#
|
|
219
|
+
## Check if a file exists, checksum, permissions, uid and gid. In addition
|
|
220
|
+
## to alert recipients in the global section, customized alert can be sent to
|
|
221
|
+
## additional recipients by specifying a local alert handler. The service may
|
|
222
|
+
## be grouped using the GROUP option. More than one group can be specified by
|
|
223
|
+
## repeating the 'group name' statement.
|
|
224
|
+
#
|
|
225
|
+
# check file apache_bin with path /usr/local/apache/bin/httpd
|
|
226
|
+
# if failed checksum and
|
|
227
|
+
# expect the sum 8f7f419955cefa0b33a2ba316cba3659 then unmonitor
|
|
228
|
+
# if failed permission 755 then unmonitor
|
|
229
|
+
# if failed uid "root" then unmonitor
|
|
230
|
+
# if failed gid "root" then unmonitor
|
|
231
|
+
# alert security@foo.bar on {
|
|
232
|
+
# checksum, permission, uid, gid, unmonitor
|
|
233
|
+
# } with the mail-format { subject: Alarm! }
|
|
234
|
+
# group server
|
|
235
|
+
#
|
|
236
|
+
#
|
|
237
|
+
## Check that a process is running, in this case Apache, and that it respond
|
|
238
|
+
## to HTTP and HTTPS requests. Check its resource usage such as cpu and memory,
|
|
239
|
+
## and number of children. If the process is not running, Monit will restart
|
|
240
|
+
## it by default. In case the service is restarted very often and the
|
|
241
|
+
## problem remains, it is possible to disable monitoring using the TIMEOUT
|
|
242
|
+
## statement. This service depends on another service (apache_bin) which
|
|
243
|
+
## is defined above.
|
|
244
|
+
#
|
|
245
|
+
# check process apache with pidfile /usr/local/apache/logs/httpd.pid
|
|
246
|
+
# start program = "/etc/init.d/httpd start" with timeout 60 seconds
|
|
247
|
+
# stop program = "/etc/init.d/httpd stop"
|
|
248
|
+
# if cpu > 60% for 2 cycles then alert
|
|
249
|
+
# if cpu > 80% for 5 cycles then restart
|
|
250
|
+
# if totalmem > 200.0 MB for 5 cycles then restart
|
|
251
|
+
# if children > 250 then restart
|
|
252
|
+
# if disk read > 500 kb/s for 10 cycles then alert
|
|
253
|
+
# if disk write > 500 kb/s for 10 cycles then alert
|
|
254
|
+
# if failed host www.tildeslash.com port 80 protocol http and request "/somefile.html" then restart
|
|
255
|
+
# if failed port 443 protocol https with timeout 15 seconds then restart
|
|
256
|
+
# if 3 restarts within 5 cycles then unmonitor
|
|
257
|
+
# depends on apache_bin
|
|
258
|
+
# group server
|
|
259
|
+
#
|
|
260
|
+
#
|
|
261
|
+
## Check filesystem permissions, uid, gid, space usage, inode usage and disk I/O.
|
|
262
|
+
## Other services, such as databases, may depend on this resource and an automatically
|
|
263
|
+
## graceful stop may be cascaded to them before the filesystem will become full and data
|
|
264
|
+
## lost.
|
|
265
|
+
#
|
|
266
|
+
# check filesystem datafs with path /dev/sdb1
|
|
267
|
+
# start program = "/bin/mount /data"
|
|
268
|
+
# stop program = "/bin/umount /data"
|
|
269
|
+
# if failed permission 660 then unmonitor
|
|
270
|
+
# if failed uid "root" then unmonitor
|
|
271
|
+
# if failed gid "disk" then unmonitor
|
|
272
|
+
# if space usage > 80% for 5 times within 15 cycles then alert
|
|
273
|
+
# if space usage > 99% then stop
|
|
274
|
+
# if inode usage > 30000 then alert
|
|
275
|
+
# if inode usage > 99% then stop
|
|
276
|
+
# if read rate > 1 MB/s for 5 cycles then alert
|
|
277
|
+
# if read rate > 500 operations/s for 5 cycles then alert
|
|
278
|
+
# if write rate > 1 MB/s for 5 cycles then alert
|
|
279
|
+
# if write rate > 500 operations/s for 5 cycles then alert
|
|
280
|
+
# if service time > 10 milliseconds for 3 times within 5 cycles then alert
|
|
281
|
+
# group server
|
|
282
|
+
#
|
|
283
|
+
#
|
|
284
|
+
## Check a file's timestamp. In this example, we test if a file is older
|
|
285
|
+
## than 15 minutes and assume something is wrong if its not updated. Also,
|
|
286
|
+
## if the file size exceed a given limit, execute a script
|
|
287
|
+
#
|
|
288
|
+
# check file database with path /data/mydatabase.db
|
|
289
|
+
# if failed permission 700 then alert
|
|
290
|
+
# if failed uid "data" then alert
|
|
291
|
+
# if failed gid "data" then alert
|
|
292
|
+
# if timestamp > 15 minutes then alert
|
|
293
|
+
# if size > 100 MB then exec "/my/cleanup/script" as uid dba and gid dba
|
|
294
|
+
#
|
|
295
|
+
#
|
|
296
|
+
## Check directory permission, uid and gid. An event is triggered if the
|
|
297
|
+
## directory does not belong to the user with uid 0 and gid 0. In addition,
|
|
298
|
+
## the permissions have to match the octal description of 755 (see chmod(1)).
|
|
299
|
+
#
|
|
300
|
+
# check directory bin with path /bin
|
|
301
|
+
# if failed permission 755 then unmonitor
|
|
302
|
+
# if failed uid 0 then unmonitor
|
|
303
|
+
# if failed gid 0 then unmonitor
|
|
304
|
+
#
|
|
305
|
+
#
|
|
306
|
+
## Check a remote host availability by issuing a ping test and check the
|
|
307
|
+
## content of a response from a web server. Up to three pings are sent and
|
|
308
|
+
## connection to a port and an application level network check is performed.
|
|
309
|
+
#
|
|
310
|
+
# check host myserver with address 192.168.1.1
|
|
311
|
+
# if failed ping then alert
|
|
312
|
+
# if failed port 3306 protocol mysql with timeout 15 seconds then alert
|
|
313
|
+
# if failed port 80 protocol http
|
|
314
|
+
# and request /some/path with content = "a string"
|
|
315
|
+
# then alert
|
|
316
|
+
#
|
|
317
|
+
#
|
|
318
|
+
## Check a network link status (up/down), link capacity changes, saturation
|
|
319
|
+
## and bandwidth usage.
|
|
320
|
+
#
|
|
321
|
+
# check network public with interface eth0
|
|
322
|
+
# if failed link then alert
|
|
323
|
+
# if changed link then alert
|
|
324
|
+
# if saturation > 90% then alert
|
|
325
|
+
# if download > 10 MB/s then alert
|
|
326
|
+
# if total uploaded > 1 GB in last hour then alert
|
|
327
|
+
#
|
|
328
|
+
#
|
|
329
|
+
## Check custom program status output.
|
|
330
|
+
#
|
|
331
|
+
# check program myscript with path /usr/local/bin/myscript.sh
|
|
332
|
+
# if status != 0 then alert
|
|
333
|
+
#
|
|
334
|
+
#
|
|
335
|
+
###############################################################################
|
|
336
|
+
## Includes
|
|
337
|
+
###############################################################################
|
|
338
|
+
##
|
|
339
|
+
## It is possible to include additional configuration parts from other files or
|
|
340
|
+
## directories.
|
|
341
|
+
#
|
|
342
|
+
include /etc/monit/conf.d/*
|
|
343
|
+
include /etc/monit/conf-enabled/*
|
|
344
|
+
#
|