Small installation guide for postfix and dkim

Juni 9, 2022 - Lesezeit: 6 Minuten

How to install smtp and dkim on linux Server

This description is only a very small installation guide.
For more information and explanation of the parameters read the postfix/dkim manual.

### Install postfix and mailutils ###

Login as root on the server:

    apt-get install postfix
    During the installation set the fqdn for the server
    apt-get install mailutils (mail and mailx for cli)
   
Edit main.cf

    vi /etc/postfix/main.cf
   
    [...]
    myhostname = example.com  (check whether hostname / fqdn is correct)
    sender_canonical_maps=hash:/etc/postfix/sender_canonical
    mtp_tls_security_level = may
    mynetworks = 127.0.0.0/8 172.18.0.0/16 [::ffff:127.0.0.0]/104 [::1]/128 (each client must be listed here to allow access to smtp, or if more than one client the subnet)
    [...]
   
    after dkim has been installed, put these entries at the end of main.cf
   
    inet_protocols = ipv4
    milter_default_action = accept
    milter_protocol = 6
    smtpd_milters = inet:localhost:8891
    non_smtpd_milters = inet:localhost:8891
   
    service postfix restart
   
Edit / create sender_canonical

    vi /etc/postfix/sender_canonical
   
    root root@example.com
   
    postmap /etc/postfix/sender_canonical
   
Restart postfix service

    service postfix restart
   
### Install DKIM ###

    apt-get install opendkim opendkim-tools
   
Edit opendkim, all entries with SOCKET should be comment out, only RUNDIR should be comment in

    vi /etc/default/opendkim
   
    [...]
    RUNDIR=/var/run/opendkim
    [...]
   
Edit opendkim.conf

    vi /etc/opendkim.conf
   
    [...]
    Syslog yes
    UMask 002
    Canonicalization relaxed/simple
    Mode sv
    SubDomains yes
    SignatureAlgorithm rsa-sha256
    OversignHeaders From
    Socket inet:8891@localhost
    PidFile /var/run/opendkim/opendkim.pid
    OversignHeaders From
    TrustAnchorFile /usr/share/dns/root.key
    UserID opendkim
    KeyTable /etc/opendkim/key.table
    SigningTable refile:/etc/opendkim/signing.table
    ExternalIgnoreList /etc/opendkim/trusted.hosts
    InternalHosts /etc/opendkim/trusted.hosts
    [...]
   
Change permission and create directory

    chmod u=rw,go=r /etc/opendkim.conf
    mkdir /etc/opendkim/keys
    chown -R opendkim:opendkim /etc/opendkim
    chmod go-rw /etc/opendkim/keys
   
Edit signing.table and key.table

    vi /etc/opendkim/signing.table
   
    *@example.com    example
   
    vi /etc/opendkim/key.table
   
    example    example.com:202207:/etc/opendkim/keys/example.com.private
   
    (202207 is the selector, it is needed for dns entry later. You can name it, however you like.)
   
Edit trusted.hosts

    vi /etc/opendkim/trusted.hosts
   
    127.0.0.127
    ::1
    example
    example.com
   
Change permissions

    chown -R opendkim:opendkim /etc/opendkim
    chmod -R go-rwx /etc/opendkim/keys
   
Create Domain Key and rename it

    cd /etc/opendkim/keys
    opendkim-genkey -d example.com -b 2048 -r -s 202207
    mv 202207.private example.private
    mv 202207.txt example.txt
   
Change permissions and restart opendkim

    chown -R opendkim:opendkim /etc/opendkim
    chmod -R go-rw /etc/opendkim/keys
    systemctl restart opendkim
    systemctl status -l opendkim
   
The Content of example.txt must be inserted in DNS e.g.
 
    cat /etc/opendkim/keys/example.txt

    202207._domainkey       IN      TXT     ( "v=DKIM1; h=sha256; k=rsa; s=email; "
          "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAp/JLS3R5eetf9EHDd9tJzPwjK7yigXG4DRX/zlwqp01E9vrHNE3YGEmSdAy9vWPgzY4WDcWvuci+SllFZTIt+0MGCKfAJ2qnQK2S9BGKAUxMsLw2RPdg+95OaQKAdbXn9KLdmUsMv4kOIvhfrqx7oekFOi9J1uVo7z95lDmNugQ4yvYlWg+XFe33LCb1SKZboOw4b5rlZP59tk"
          "eLZTL+rm8CLCFyM4xQOHO30B9X5iXMWx9sWSuCKrVGNXFuTSzO69F33pBzS6LQpG1IMn9jtKf4L18CUoXdW7t1hd2g9eQ1Hw7ab17/jIC19nm2fEkdBHRfmnSx23uQj8yfDAYDgQIDAQAB" )  ; ----- DKIM key 202207 for example.com
         

          This is important for DNS:
         
          v=DKIM1; h=sha256; k=rsa; s=email; "
          "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAp/JLS3R5eetf9EHDd9tJzPwjK7yigXG4DRX/zlwqp01E9vrHNE3YGEmSdAy9vWPgzY4WDcWvuci+SllFZTIt+0MGCKfAJ2qnQK2S9BGKAUxMsLw2RPdg+95OaQKAdbXn9KLdmUsMv4kOIvhfrqx7oekFOi9J1uVo7z95lDmNugQ4yvYlWg+XFe33LCb1SKZboOw4b5rlZP59tk"
          "eLZTL+rm8CLCFyM4xQOHO30B9X5iXMWx9sWSuCKrVGNXFuTSzO69F33pBzS6LQpG1IMn9jtKf4L18CUoXdW7t1hd2g9eQ1Hw7ab17/jIC19nm2fEkdBHRfmnSx23uQj8yfDAYDgQIDAQAB
         
          Selector is 202207
         
To check the key, wait 24h

    opendkim-testkey -d example.com -s 202207 -vvv
    opendkim-testkey: using default configfile /etc/opendkim.conf
    opendkim-testkey: checking key '202207._domainkey.example.com'
    opendkim-testkey: key not secure  ==> it is ok, no DNSSEC in use
    opendkim-testkey: key OK


Script für PRTG mySQL und Replizierung

März 1, 2022 - Lesezeit: ~1 Minute

Für die Überwachung der Datenbankreplizierung (Master/Master/Slave) auf Linux Systemen, habe ich ein Shell Script erstellt.

Das Script prüft, ob der mySQL Prozess läuft und ob die Replizierung ebenfalls aktiv ist.

Das Script sollte auf den DB Systemen unter /var/prtg/scripts abgelegt werden.

cat mysql-status.sh
#Mysql Check danach Slave IO & Slave SQL Check
#!/bin/bash

SQLout=`mysql -u root --password=xxx mysql -e "show slave status \G" | grep -i "Slave_SQL_Running"|awk '{print $2}'`
IOout=`mysql -u root --password=xxx mysql -e "show slave status \G" | grep -i "Slave_IO_Running"|awk '{print $2}'`
SQLcheck=`mysql -u root --password=xxx mysql -e "quit"`

if [ "$?" = "1" ]; then
#if [ "$SQLcheck" = "false" ]; then
echo "4:1:Database down"
exit 1

elif [ "$SQLout" = "No" ] || [ "$IOout" = "No" ]; then
echo "4:1:Replikationsfehler"
exit 1
fi

echo "0:0:OK"
exit 0


DSL Ausfall Update

Januar 10, 2022 - Lesezeit: 2 Minuten

Weiter geht es.

Am Freitag lief es halbwegs stabil, der Anschluß liegt lt. Aussage der Telekom auf Dauerüberwachung. Gegen Abend  häuften sich die Abbrüche dann wieder. Also Anruf bei der Störungsstelle und mein Anliegen erneut vorgetragen.

Für Dienstag wurde dann ein Techniker zugesagt, vorher ginge es lt.Terminplan nicht. In der Nacht von Samstag auf Sonntag ist der Anschluß dann endgültig abgekackt, Internet und Telefonie komplett weg. Das Router-Log ist voll von DSL Sync. Fehlermeldungen. Also am Sonntag erneuter Anruf bei der Telekom, die Aussage war sehr hilfreich.

  • Der Techniker ist für Dienstag geplant
  • Wenn sie telefonisch (Festnetzt) erreichbar sein wollen, machen sie eine Anrufweiterschaltung auf ihr Mobiltelefon
  • Ihr Anschluß ist noch auf alte Technik geschaltet, für 5 Euro im Monat zusätzlich könnten wir sie auf die neue Technik aufschalten
  • Ich sehe hier laufend DSL Abbrüche, wahrscheinlich ein Leutungsfehler

Das ist doch mal eine kompetente Aussage. Weil ich also noch auf "alte Technik" geschaltet bin, muß ich den Totalausfall hinnehmen. Ich habe dem Mitarbeiter klar gesagt, das wir für 40 Euro im Monat wohl einen funktionierenden Anschluß erwarten können und das eine Störung zeitnah behoben wird. Das Spiel zieht sich mittlerweile über 1 Woche hin.

Zur Zeit arbeite ich weiterhin über den HotSpot, den ich mit meinem iPhone eingerichtet habe.

Ich werde weiter berichten und bin mal gespannt was der Dienstag bringen wird.


DSL Ausfall, Internet weg, Telefonie weg

Januar 5, 2022 - Lesezeit: 3 Minuten

Dank der tollen VoIP Technik ist unser Telefonanschluß nun auch nicht verfügbar.

Es fing vor ca. 1 Woche an. Sporadische DSL Abbrüche, die ich immer mitbekommen habe, da ich per VPN bei meinem Arbeitgeber eingeloggt bin. DSL Verbindung unterbrochen, VPN tot. Ist normal.

Anruf bei der Telekom, es wurde beschlossen mir einen neuen Router zu schicken. Router ist bei der Telekom gemietet.

Der neue Router traf auch am nächsten Tag ein, also Router getauscht und eingerichtet. DSL war erst einmal stabil.

Am Wochenende dann ging es wieder los. Abbrüche und zwar nicht wenig, also erneut bei derTelekom angerufen.

Nach einem kurzen Gespräch, der Mitarbeiter war wirklich sehr kompetent, wurde für Dienstag ein vor Ort Termin vereinbart. Ich habe noch dazu ein 30 GB Datenvolumen für mein iPhone bekommen, damit ich dieses als HotSpot nutzen kann und darüber meine Verbindung ins Internet (HomeOffice) aufbaue.

Gestern rief dann der Techniker an und sagte mir er habe die Leitung gemessen und keinen Fehler feststellen können. Er meinte, der DSL Port an dem mein Router hängt könnte defekt sein und er würde den Port tauschen.

Nach der Aktion war das DSL stabil, freu.

Dann, heute früh ich schau in meine e-mails. 27 Abbrüche in der Nacht, Anzahl steigend.

Morgen kommt der Techniker und schaut sich die Sache hier vor Ort an.

Im Schnitt haben wir hier 1-2 Mal im Jahr einen kompletten DSL Ausfall. In der Vergangenheit habe ich mir 2 FritzBoxen geschrottet, das ist der Grund für den Mietrouter der Telekom.

Zu anlog Zeiten und auch zu ISDN Zeiten kann ich mich nicht erinnern, jemals einen Ausfall gehabt zu haben. Als später dann DSL aufkam, immer noch mit einem ISDN oder analogen Telefonanschluß zusätzlich, konnte man wenigstens noch über diesen telefonieren, auch wenn das DSL mal nicht verfügbar war.

Gut werden einige sagen, ich telefoniere eh mit dem Mobiltelefon. Ja mache ich auch, aber wir nutzen auch nach wie vor den Festnetzanschluß. Was machen die Leute, die kein Mobiltelefon besitzen, wenn dieser VoIP Krempel ausfällt ?

Ich denke diese ganzen Sparmaßnahmen werden sich früher oder später einmal rächen. Die Vermittlungsstellen wurden abgeschaltet, weil es kostengünstiger ist, die Sprache über den DSL Anschluß (VoIP) zu übertragen. Ich kann mich noch gut an Leute erinnern, die bis zuletzt ihren ISDN Anschluß behalten wollten. Diese Technik war ausgereift und zuverlässig.


Ipad Pro

Oktober 25, 2021 - Lesezeit: ~1 Minute

Ich habe mir ein Ipad Pro, gebraucht von einem guten Freund, geleistet. OK Apple ist nicht preiswert, aber im Gegensatz zu dieser Androiden Kacke einfach nur unschlagbar in der Bedienung. Die Apps sind sofort verfügbar, Surfen mach einfach nur Spaß. Wenn ich mir da mein Androides Tablet ansehe, kotz würg. Die müssen noch viel lernen um an Apple heranzukommen.

Akkulaufzeit und Geschwindigkeit sind jedenfalls der Hammer.

Billig kann jeder.

Auf dem Foto, das ist kein Kratzer, keine Ahnung weshalb das auf dem Foto sichtbatr ist. Ich habe eine Display-Folie auf dem Display, vielleicht eine Spiegelung es ist jedenfalls weder ein Kratzer noch eine Beschädigung.


ZFS Check Pools Script

Juli 1, 2021 - Lesezeit: 3 Minuten

Um zfs Pools automatisch zu prüfen, habe ich vor ein paar Jahren einmal ein Shell Script erstellt, welches via cronjob in regelmässigen Abständen aufgerufen wird. Das Ergebnis wird via e-mail zugestellt.

Einfach die Variablen der eigenen Umgebung anpassen.

  #!/bin/bash
  # zpoolcheck Script Ver. 1.0
  # Date: 03.08.2012
  # by: Thomas Weidner
  # The script starts a scrub on each ZFS pool (only one at time)
  # and will send an e-mail with the result after the scrub is complete.


  # e-mail variables
 TO=tom@dvs8818.de
 LOG=/var/log/zpoolresult
 SUBJECTOK="Zpool status from nexenta-01"
 SUBJECTERROR="WARNING zpool error from nexenta-01"

 # work variables
 ERROR=0
 SEP=" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - "
 RUNNING=1

 # commands & configuration
 ZPOOL=/sbin/zpool

 DATE="`date +"%Y-%m-%d %H:%M:%S"`"

 echo $DATE > $LOG


 # find all pools
 pools=$($ZPOOL list -H -o name)


 # for each pool
for pool in $pools; do
    # start scrub for $pool
    echo "starting scrub on $pool" >> $LOG
    zpool scrub $pool
    RUNNING=1
    # wait until scrub for $pool has finished running
    while [ $RUNNING = 1 ];     do
        # still running?
        if $ZPOOL status -v $pool | grep -q "scrub in progress"; then
            sleep 60
        # not running
        else
            # finished with this pool, exit
            echo "scrub ended on $pool" >> $LOG
            echo "`$ZPOOL status -v $pool`" >> $LOG
            echo $SEP >> $LOG
            RUNNING=0
            # check for errors
            if ! $ZPOOL status -v $pool | grep -q "No known data errors"; then
                echo "data errors detected on $pool" >> $LOG
                ERROR=1
            fi
        fi
    done
done

 # send result via e-mail

if [ $ERROR = 1 ]; then

                        mailx -s "$SUBJECTERROR" $TO < $LOG
                else
                        mailx -s "$SUBJECTOK" $TO < $LOG

fi