mainly alerting improvements
[distro-setup] / mail-setup
index ea2b1f25ec13763495629935b965799c5e8d044a..72af2a1e5545c3e592025ba8d11e2f71f7e9556a 100755 (executable)
@@ -4,10 +4,6 @@
 # SPDX-License-Identifier: AGPL-3.0-or-later
 
 
-# todo: install new alertmanager, like new prometheus
-
-# todo: setup a logrotate for /var/log/mymain and mypanic
-
 # todo: setup an alert for bouncing test emails.
 
 # todo: bounces to my fsf mail can come from fsf@iankelling.org,
@@ -22,7 +18,6 @@
 #  todo: harden dovecot. need to do some research. one way is for it to only listen on a wireguard vpn interface, so only clients that are on the vpn can access it.
 #  todo: consider hardening cups listening on 0.0.0.0
 #  todo: stop/disable local apache, and rpc.mountd, and kdeconnect when not in use.
-#  todo: check that spamd and unbound only listen locally.
 
 # todo:  hosts should only allow external mail that is authed and
 # destined for backup route. it is a minor issue since traffic is
@@ -395,6 +390,7 @@ EOF
 fi
 
 # light version of exim does not have sasl auth support.
+# note: for bitfolk hosts, unbound has important config with conflink.
 pi-nostart exim4 exim4-daemon-heavy spamassassin unbound clamav-daemon wireguard
 
 # note: pyzor debian readme says you need to run some initialization command
@@ -1097,6 +1093,11 @@ bk.b8.nz * F,1d,4m;F,14d,1h
 eggs.gnu.org * F,1d,4m;F,14d,1h
 fencepost.gnu.org * F,1d,4m;F,14d,1h
 
+# afaik our retry doesnt need this, but just using everything
+mx.amnimal.ninja * F,1d,4m;F,14d,1h
+mx.expertpathologyreview.com * F,1d,4m;F,14d,1h
+
+
 mail.fsf.org * F,1d,15m;F,14d,1h
 EOF
 
@@ -2979,6 +2980,27 @@ case $HOSTNAME in
 # this makes it easier to see which exim is doing what
 log_file_path = /var/log/exim4/my%s
 EOF
+
+    cat >/etc/logrotate.d/myexim <<'EOF'
+/var/log/exim4/mymain /var/log/exim4/myreject {
+       daily
+       missingok
+       rotate 1000
+       delaycompress
+       notifempty
+       nocreate
+}
+/var/log/exim4/mypanic {
+       size 10M
+       missingok
+       rotate 10
+       compress
+       delaycompress
+       notifempty
+       nocreate
+}
+EOF
+
     # If we ever wanted to have a separate spool,
     # we could do it like this.
     #     cat >>/etc/exim4/conf.d/main/000_local-nn <<'EOF'
@@ -3184,12 +3206,32 @@ PATH=/usr/bin:/bin:/usr/local/bin
 MAILTO=daylert@iankelling.org
 */5  * * * *   $u send-test-forward |& log-once send-test-forward
 */10 * * * *   root chmod -R g+rw /m/md/bounces |& log-once -1 bounces-chmod
-*/5  * * * *   root timeout 290 mailtest-check slow |& log-once -4 mailtest-check
+# todo: delete, this is old
+#*/5  * * * *   root timeout 290 mailtest-check slow |& log-once -1 mailtest-check
 # if a bounce happened yesterday, dont let it slip through the cracks
 8   1 * * *   root export MAILTO=alerts@iankelling.org; [[ -s /var/log/exim4/mainlog.1 ]] && awk '\$5 == "**"' /var/log/exim4/mainlog.1
 EOF
+
+
     m sudo rsync -ahhi --chown=root:root --chmod=0755 \
       /b/ds/mailtest-check /b/ds/check-remote-mailqs /usr/local/bin/
+    cat >/etc/systemd/system/mailtest-check.service <<'EOF'
+[Unit]
+Description=mailtest-check
+After=local-fs.target
+StartLimitIntervalSec=0
+
+[Service]
+Type=simple
+ExecStart=/usr/local/bin/mailtest-check slow
+Restart=always
+RestartSec=60
+
+[Install]
+WantedBy=graphical.target
+EOF
+    sysd-prom-fail-install mailtest-check
+    sre mailtest-check
     ;;&
   $MAIL_HOST)
     test_froms=(ian@iankelling.org z@zroe.org iank@gnu.org)
@@ -3201,24 +3243,33 @@ EOF
 EOF
     ;;&
   bk)
-    test_froms=(testignore@expertpathologyreview.com testignore@amnimal.ninja)
-    test_tos=(testignore@iankelling.org testignore@zroe.org testignore@je.b8.nz)
+    test_froms=(testignore@amnimal.ninja testignore@expertpathologyreview.com)
+    test_tos=(testignore@iankelling.org testignore@je.b8.nz)
+    # We dont need to send from different addresses to the same
+    # address. this breaks down our nice elegant logic of building up
+    # froms and tos , so I just handle expertpath in a special case
+    # below and set the to: to be testignore@zroe.org.  If we did sent
+    # that way, it would also mess up our mailtest-check logic that
+    # finds which messages to check.
+    # for example: from testignore@amnimal.ninja to: testignore@iankelling.org testignore@zroe.org
+    # that would become 2 messages and we'd only check 1.
     ;;&
   je)
     test_froms=(testignore@je.b8.nz)
     test_tos=(testignore@iankelling.org testignore@zroe.org testignore@expertpathologyreview.com testignore@amnimal.ninja)
     ;;&
   $MAIL_HOST|bk|je)
-    test_to=${test_tos[0]}
-    # dont put these test messages into the sent folder or else it will
+
+    # Dont put these test messages into the sent folder or else it will
     # overwhelm it, plus i dont want to save a copy at all.
-    echo $test_to > /etc/exim4/ignore-sent
-    for t in ${test_tos[@]:1}; do
-      test_to+=", $t"
+    rm -f /etc/exim4/ignore-sent
+    for t in ${test_tos[@]}; do
       echo $t >> /etc/exim4/ignore-sent
     done
+
     cat >/usr/local/bin/send-test-forward <<'EOF'
 #!/bin/bash
+# we remove from the queue older than 4.3 minutes since we send every 5 minutes.
 olds=(
 $(/usr/sbin/exiqgrep -o 260 -i -r '^(testignore@(iankelling\.org|zroe\.org|expertpathologyreview\.com|amnimal\.ninja|je\.b8\.nz)|jtuttle@gnu\.org)$')
 )
@@ -3227,6 +3278,17 @@ if (( ${#olds[@]} )); then
 fi
 EOF
     for test_from in ${test_froms[@]}; do
+
+      test_to=${test_tos[0]}
+      for t in ${test_tos[@]:1}; do
+        test_to+=", $t"
+      done
+      case $test_from in
+        testignore@expertpathologyreview.com)
+          test_to=testignore@zroe.org
+          ;;
+      esac
+
       cat >>/usr/local/bin/send-test-forward <<EOFOUTER
 /usr/sbin/exim -f $test_from -t <<EOF
 From: $test_from
@@ -3240,6 +3302,7 @@ EOFOUTER
     m chmod +x /usr/local/bin/send-test-forward
     ;;
   *)
+    soff mailtest-check.service
     rm -fv /etc/cron.d/mailtest
     ;;
 esac