Mailtest

Wenn man einen Mailserver für diverse Domains betreibt, möchte man nach Erstellung einer neuen Domain überprüfen, ob alles (Mailserver, DNS, etc.) auch korrekt konfiguriert ist und Mails von der neuen Domäne nicht irgendwo von einen Spam-Filter o.ä. abgefangen werden. Dafür gibt es ein tolles Web-Tool:

https://www.mail-tester.com

Hier kann man sich einen Mail-Empfänger generieren lassen, auf welchen dann ein Mail von der zu überprüfenden Mail-Adresse gesendet werden kann. Das Web-Tool listet dann den Score auf und zeigt was verbessert werden kann.

IRedMail: Unban IP Adresse

Nach einigen „Modifikationen“ auf meinen Mail-Server schlug fail2ban zu und blockierte meine IP mit

reject-with icmp-port-unreachable

Nach einem kurzen Check auf iptables war auch klar wieso:

> sudo iptables -L -n

Chain fail2ban-dovecot (1 references)
target     prot opt source               destination         
REJECT     all  --  1.2.3.4              0.0.0.0/0            reject-with icmp-port-unreachable

Um die IP wieder freizuschalten geht man folgendermassen vor:

Ermitteln des fail2ban jails

> sudo fail2ban-client status

Status
|- Number of jail:	5
`- Jail list:		ssh-iredmail, roundcube-iredmail, w00tw00t-scans, dovecot-iredmail, postfix-iredmail

Dabei erkennt man, dass der Jail-name dovecot-iredmail mit der  iptables chain fail2ban-dovecot korrespondiert. Das ist also die jail, um welche es sich dreht.

Nun die Ip wieder freischalten

> sudo fail2ban-client set dovecot-iredmail unbanip 1.2.3.4

Ein weiterer check mit iptables zeigt, dass die Freischaltung funktioniert hat:

> sudo iptables -L -n

Chain fail2ban-dovecot (1 references)
target     prot opt source               destination         
RETURN     all  --  0.0.0.0/0            0.0.0.0/0

Referenz

Serverfault: Fail2ban – unpan ip

iredmail E-Mail Verteiler Liste erstellen

E-Mail Verteilerlisten lassen sich mit der  iredmail Pro-Version leicht über das Admin-Panel erstellen. All jene, welche nicht die Pro-Version einsetzen, können das aber auch direkt über die Datenbank einrichten. Ich verwende MySQL als Backend-DB.

Folgendes Beispiel erstellt einen Alias „EmailUserAlias@example.net“. Mails an diese Adresse werden an die Adressen

  • user1@domain.com
  • user2@domain.com
  • user3@domain.com

weitergeleitet. Es sollen aber lediglich Mitglieder der Domain „example.net“ Emails an den Verteiler  „EmailUserAlias@example.net“ versenden können.

Das Forwarding wird für die Domain „example.net“ eingerichtet.

Und so geht’s:

mysql --user=<user> --password=<password>
USE vmail;
INSERT INTO alias (address, goto, accesspolicy, domain) VALUES ('EmailUserAlias@example.net', 'user1@domain.com,user2@domain.com,user3@domain.com','domain','example.net');

Mögliche Access Policies in iRedAPD-1.3.4:

Restriction Comment Value of column ‚alias.accesspolicy‘
Unrestricted Email is unrestricted, which means everyone can mail to this address. public
Domain Wide Only users under same domain can send mail to this address. domain
Domain and all sub-domains Only users under same domain and sub-domains can send mail to this address. subdomain
Members Only Only members can send mail to this address membersOnly
Moderators Only Only moderators can send mail to this address allowedOnly
Members and Moderators Only Only members and moderators can send mail to this address membersAndModeratorsOnly

Siehe dazu auch Link: http://www.iredmail.org/docs/sql.create.mail.alias.html

iredmail Greylisting

Nach der Installation von iRedMail konnte ich zwar Mails versenden, Mails empfangen ging aber teilweise nicht. Ursprung des Problem war Greylisting. Folgender Link hilft weiter:

http://www.laub-home.de/wiki/Eigener_Mailserver_mit_iRedMail#Fallstricke

Zitat aus obigem Link:
Bei den ersten Versuchen, von extern eine E-Mail an den Server zu schicken, wird diese nicht ankommen und Logfile ist zu sehen, dass die Nachricht wegen des Greylisting nicht zugestellt wurde. Greylisting ist standardmäßig über das Module Cluebringer aktiv und ist eine Methode zur Verhinderung von Spam.

Beim Greylisting wird ein Objekt aus der Sender-Adresse, dem Mail-Server und der Empfänger-Adresse gebildet. Taucht eine solche Kombination das erste Mal auf, wird die E-Mail temporär abgelehnt. Seriöse E-Mail-Server (Sender) versuchen in diesem Fall, die E-Mail nach einigen Minuten nochmals zuzustellen während eine Spam-Schleuder einfach aufhört. Erfolgt der zweite (manchmal auch dritte) Zustellungsversuch wird die E-Mail zugestellt und das Objekt in eine Whitelist aufgenommen. Alle zukünftigen Zustellungsversuche mit derselben Kombination werden sofort zugelassen.

Ist dieses Verhalten nicht gewünscht, dann kann das Greylisting in der Datei

/etc/cluebringer/cluebringer.conf

deaktiviert werden, indem unter dem Bereich [Greylisting] der Wert von „enable“ auf 0 gesetzt wird. Danach ist eine Restart des Cluebringer Service nötig:

service postfix-cluebringer restart

Photon 3.0 auf ESXi 5.5

Photon 3.0 installieren

Netzwerk einrichten

vi /etc/systemd/network/99-dhcp-en.network

Das File updaten

[Match]
Name=e*

[Network]
Address=x.x.x.x/xx
Gateway=x.x.x.x
DNS=x.x.x.x
Domains=name

Nach dem anschliessend Reboot sollte das Netzwerk erreichbar sein

reboot

root-login auf ssh erlauben

Natürlich ist es keine gute Idee, den root-User auf SSH zu erlauben. Damit man aber einigermassen angenehem die Konfigurationen vornehmen kann (über die ssh Konsole), wird dieser aktiviert. Sobald weitere User eingereichtet sind, kann der root-access wieder eingeschränkt werden.

Damit man sich als root per ssh einloggen kann muss man das File

vi /etc/ssh/sshd_config

editieren:

PermitRootLogin yes

Anschliessend den Service restarten

systemctl restart sshd

Root Passwort ändern

Beim Installieren von Photon gebe ich ein einfaches Passwort ein, weil die locale (Tastatur-Layout) nicht wirklich für Deutsch funktioniert. Anschliessen, sobald über SSH connected werden kann, setze ich ein stärkeres Passwort:

passwd

Upgrade PhotonOS

PhotonOS upgraden

tdnf distro-sync

Docker aktivieren

systemctl enable docker

Neuer User erstellen

Nun werden neue User erstellt.

useradd -m -U username
passwd username
usermod -aG docker username

Anschliessend rebooten

reboot

Ab sofort kann man sich mit dem neue erstellen User per SSH einloggen.

Root-User Rechter erhält man ab sofort mit

su -

Docker Compose installieren

Nun wird Docker Compose installiert. Bitte darauf achten, dass die neueste Version installiert wird.

Siehe auch https://github.com/docker/compose/releases/

su -
curl -L https://github.com/docker/compose/releases/download/1.23.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
chgrp docker /usr/local/bin/docker-compose
exit

Root wieder deaktivieren

Nun kann das Root-Login über SSH wenn gewünscht wieder deaktiviert werden.

vi /etc/ssh/sshd_config
PermitRootLogin yes
systemctl restart sshd

Alfresco Upgrade Prozedur von Version 5.1 auf Version 5.2 (Alfresco Community Edition 201612 GA)

Dieses Howto beschreibt meine Schritte um eine Alfresco 5.1 Installation nach Alfresco 5.2 (Alfresco Community Edition 201612 GA) zu erhöhen.

Aktuelle Alfresco Installation

Mein Alfresco-System wird nicht im produktiven Umfeld sondern lediglich privat genutzt. Die Anforderungen an das System sind entsprechend niedgrig (keine Skalierung, geringe Performance).

Alfresco
2 Server 1 VM-Server für die Alfresco Installation, DB und Index (45 GB Festplatte)
1 VM-Server für Daten (350 GB Festplatte)
Alfresco Home /opt/alfresco-community
Installation Default installations-Routine
Postgres-SQL Ja, Installiert über die normale Installations-Routine von Alfresco
Index SOLR4
Alfresco Service Ja. Servicename „alfresco“, Installiert über die normale Installations-Routiene von Alfresco
alf_data Das alf_data Verzeichnis befindet sich ausgelagert auf einem NFS-Server (VM für Daten und Index). Das alf_data Verzeichnis wird dann auf dem Alfresco-Server nach /opt/alfresco/alf_data gemounted.
Ugrade Prozedur Die Upgrade Prozedur richtet sich grundsätzlich nach der Alfresco-Doku: Link

Neue VM erstellen

Bei einem Alfresco-Update (welches ja nicht so häufig vorkommt) erstelle ich meist eine neue VM mit aktuellstem Ubuntu-Betriebssystem (LTS):

  1.  Neue VM erstellen (ESXi 5.5, VM mit Ubuntu-Linux, 4 CPUs, 8GB RAM)
  2. Alfresco benötigt einige Libs als Voraussetzung. Die Installationsroutine meckert, wenn diese nicht vorhanden sind (siehe hier).
    Auf Ubuntu folgendes ausführen:

    sudo apt-get install libice6 libsm6 libxt6 libxrender1 libxext6 libfontconfig1 libcups2 libglu1-mesa libcairo2 libegl1-mesa libxinerama1

    Achtung: Die Installationsroutine zeigt nach der Installation aller notwendigen Libs immer noch an, dass diese Fehlen (Stand 3.1.2017, Ubuntu 16.04). Das scheint aber ein Bug der Installationsroutine von Alfresco zu sein.

  3. Alfresco auf der neuen VM installieren.
    1. Für die Installation verwende ich die default Installations-Routine von Alfresco.
    2. Die Ports Ändere ich auf 80 bzw. 443.
    3. Den Service installiere ich auch mit der Alfresco Installations-Routine.
  4. Memory anpassen: Link
  5. Max Open Files anpassen: Link
  6. Anschlissend überprüfen ob die neue Installation sauber funktioniert (z.B. LibreOffice).

Konfigurationen/Customizing der neuen Installation anwenden

Ich habe auf meinem Alfresco einige „customs“ eingebaut:

Custom Datalists

Custom Share Header

Custom Web-Extensions

  1. Zwei eigene Listen (Inventar und Bibliothek). Hier zeige ich nur die Bibliotheksliste. Das selbe auch für Inventar machen.
  2. Die neuen Datalists registrieren
    cp /opt/alfresco-alt//tomcat/shared/classes/alfresco/extension/customDatalist-model-context.xml /opt/alfresco-neu//tomcat/shared/classes/alfresco/extension/customDatalist-model-context.xml

    Datalist-Model erstellen/kopieren

    cp /opt/alfresco-alt/tomcat/shared/classes/alfresco/extension/bibliothekDatalistModel.xml /opt/alfresco-neu/tomcat/shared/classes/alfresco/extension/bibliothekDatalistModel.xml

    Das web-extensions File erweitern mit den Erweiterungen aus der alten Instanz

    /opt/alfresco-community/tomcat/shared/classes/alfresco/web-extension/share-config-custom.xml
  3. Download Buttons entfernen: Link
  4. Header-Icons ausblenden, welche nicht gebraucht werden: Link
  5. Download-Button nur wenn Schreibrecht vorhanden: Link

Alte Alfresco-Instanz backupen

  1. Alte Alfresco-Instanz stoppen
  2. Ganze DB backupen
    1. Postgres starten
      sudo /opt/alfresco-community/alfresco.sh start postgresql
    2. Die gesamte Alfresco-Datenbank dumpen
      cd /opt/alfresco-community/postgresql/bin/
      ./pg_dump -h localhost -U alfresco alfresco > /tmp/alfrescodbdump
    3. Postgres stoppen
      sudo /opt/alfresco-4.2.d/alfresco.sh stop postgresql
  3. alf_data Verzeichnis der alten Alfresco-Instanz backupen. => Darauf achten, dass der Alfresco-Service nicht läuft!
    Ich kopiere dazu einfach das gesamte alte alf_data Verzeichnis nach alf_data_alt.

Daten auf neuer Alfresco-DB Instanz restoren

  1. Die neue Alfresco-Instanz stoppen.
  2. Nun die Postgresql-Datenbank der NEUEN Installation starten:
    sudo /opt/alfresco-community/alfresco.sh start postgresql
  3. Die Datenbank „alfresco“ der neuen Installation löschen:
    cd /opt/alfresco-community/postgresql/bin/
    ./dropdb -U alfresco alfresco -h localhost -i
    Database "alfresco" will be permanently removed.
    Are you sure? (y/n) y
    Password:
    
  4. Die gelöschte Datenbank wieder erstellen
    $ sudo ./createdb -U postgres -T template0 alfresco -h localhost
    Password:
    
  5. Nun den Alfresco-Dump der alten Instanz auf der neuen einspielen:
    $ sudo ./psql -U alfresco alfresco -h localhost < /tmp/alfrescodbdump
    Password:
    (...)
    ALTER TABLE
    ALTER TABLE
    REVOKE
    REVOKE
    GRANT
    GRANT
    $ exit
  6. Die Postgres-DB der neuen Installation wieder stoppen.
    sudo /opt/alfresco-community/alfresco.sh stop postgresql

Content-Store und Idexe restoren

Content-Store und Index habe ich auf einem NFS-Server.

  1. Wichtig, nicht das postgres-Datenverzeichnis der neuen Installation löschen!!!!!! Das ganze alf_data Verzeichnis der neuen Alfresco-Instanz nach ~/alf_data_backup verschieben. Dies, weil sich auch das postgres-Datenverzeichnis hier befindet. Die DB mit den Daten wird wegkopiert.
    sudo mv /opt/alfresco/alf_data ~/alf_data
  2. Jetzt den mount-Punkt „alf_data“ des NFS-Servers auf die neue Alfresco-Instanz mounten.
  3. Nun die postgres Daten wieder zurück kopieren
    sudo rm -r
    sudo cp ~/alf_data/postgresql/* /opt/alfresco/alf_data/postgresql/
  4. Reindexierung von SOLR4:
    Ich initialisiere Solr4 nach jeder Installation neu gem. Alfresco-Dokumentation: Link

Update Esxi Server

Dieses Howto beschreibt ein Update von ESXi 4.0 nach ESXi 4.1. Für ein Update von ESXi 5.5 siehe hier.

Vorbereitung

  • Kopieren der Update-Datei (z.B. update-from-esxi4.1-4.1_update03.zip) auf den Esxi-Host
  • Per SSH auf den Esxi-Host einloggen
  • Zum Update-File navigieren

Durchführung Update

Das Update-File kann nun mit dem Befehl

esxupdate

angewendet werden

Überprüfen welche Updates in dem File vorhanden sind

esxupdate --loglevel=DEBUG --bundle update-from-esxi4.1-4.1_update03.zip scan

Durchführung eines Testlaufs => nichts wird modifiziert

esxupdate --loglevel=DEBUG --bundle update-from-esxi4.1-4.1_update03.zip stage
  • Alle VMs sauber stoppen
  • Den Server in den Maintenance-Mode setzen => über den vShpereClient
  • Update installieren
    esxupdate --loglevel=DEBUG --bundle update-from-esxi4.1-4.1_update03.zip update
  • Den Host über vSphereClient rebooten
  • Den Host über vSphereClient wieder in den normalen Betriebs-Mode setzen
  • Alle VMs wieder starten
  • Check ob alle Dienste wieder laufen

Beschreibung der Optionen

Siehe File: esxupdate

VM-Ware Tools auf einem Ubunut-Gastsystem installieren (VM-Ware ESXi 4.1)

Getestet mit „ESXi 4.1 Update 3“ Server (4.1.0, 800380) und folgenden Gastsystemen:

  • Ubuntu-Server 10.04.4 LTS
  • Ubuntu-Server 12.04.1 LTS
  • Ubuntu-Server 12.10

Als erstes sicherstellen, dass auf dem Gastsystem alles notwendige installiert ist:

sudo apt-get install build-essential
sudo apt-get install linux-headers-$(uname -r)

Dann in der vSphere-Client-Konsole: Menü VM->Gast->VMwareTools installieren. Dies hängt das VMWare-Tools .iso ein, das per ESXi-Server-Installation bereits im datastore liegt.

Per SSH zur VM verbinden, oder einfach die Konsole öffnen (ich finde SSH komfortabler, da in der Konsole kein Copy&Paste möglich ist),

  1. iso ins Betriebssystem einhängen
    sudo mkdir /mnt/cdrom
    sudo mount /dev/cdrom /mnt/cdrom
  2. VMware Tools-<version> kopieren und auspacken
    cp /mnt/cdrom/VMwareTools-9.4.15-2827462.tar.gz /tmp/
    cd /tmp
    tar -zxf VMwareTools-9.4.15-2827462.tar.gz
  3. Pakete fürs Kompilieren holen/überprüfen, falls diese noch nicht installiert sind
  4. #Installation durchführen
    cd vmware-tools-distrib
    sudo ./vmware-install.pl

    – Alle Nachfragen mit ENTER bestätigen.
    – Das Script hängt das Image automatisch aus.
    – Ein Reboot des Gast-Systems ist nicht notwendig

VmWare-Tools läuft nun als Service:

ps -ef | grep vm
root      1072     1  0 14:53 ?        00:00:00 /usr/sbin/vmtoolsd
ralwet    1318  1219  0 14:54 pts/0    00:00:00 grep --color=auto vm

Check, welche VmWare-Tools version installiert ist

/usr/bin/vmware-toolbox-cmd -v
8.3.17.15269 (build-784891)

 

ESXi Templates

  1. Shutdown der VM, welche kopiert werden soll
  2. Click on the host > Configuration tab
  3. Select Hardware > Storage to display the datastores
  4. Right-click on the datastore with the VM you want to clone > Browse Datastore
  5. Create a new folder in the store
  6. Right click on the VM folder and select Copy (must be done in the right pane of the Datastore Browser)
  7. Paste the VM to a new sub folder (otherwise the VM will overwrite itself)
  8. Once copied, rename and move the folder if desired
  9. Select the .vmx file within the cloned VM and select ‚Add to Inventory‘

Es kann vorkommen, dass das Networking der VM nach dem Kopieren nicht funktioniert. Das Problem war, weil der Adapternahme von eth0 auf eth1
gewechselt hatte:

http://blog.inventic.eu/2013/03/ubuntu-eth0-error-while-getting-interface-flags-no-such-device/