E-Mail Verwaltung · 11 min read · Jan 09, 2026

Virtuelle Benutzer und Domains mit Postfix, Courier, MySQL und SquirrelMail (CentOS 6.0 x86_64) - Seite 6

18 Installation von SquirrelMail

SquirrelMail ist eine Webmail-Oberfläche, die es Ihren Benutzern ermöglicht, E-Mails in einem Browser zu senden und zu empfangen. Dieses Kapitel zeigt, wie man es installiert und an unser Setup anpasst, sodass Benutzer sogar ihr E-Mail-Konto-Passwort über die SquirrelMail-Oberfläche ändern können.

Um SquirrelMail zu installieren, führen wir aus:

yum install squirrelmail php-pear-DB

Danach starten wir Apache neu:

/etc/init.d/httpd restart

SquirrelMail wird mit einigen vorinstallierten Plugins geliefert, leider kann keines von ihnen uns ermöglichen, unser E-Mail-Passwort in unserer MySQL-Datenbank zu ändern. Aber es gibt das Change SQL Password-Plugin, das wir manuell installieren können:

cd /usr/share/squirrelmail/plugins  
wget http://www.squirrelmail.org/plugins/change_sqlpass-3.3-1.2.tar.gz  
tar xvfz change_sqlpass-3.3-1.2.tar.gz  
cd change_sqlpass  
cp config.php.sample config.php

Jetzt müssen wir config.php bearbeiten und an unser Setup anpassen. Bitte passen Sie die Variablen $csp_dsn, $lookup_password_query, $password_update_queries, $password_encryption, $csp_salt_static und $csp_delimiter wie folgt an und kommentieren Sie $csp_salt_query aus:

vi config.php

| [...] $csp_dsn = 'mysql://mail_admin:mail_admin_password@localhost/mail'; [...] $lookup_password_query = 'SELECT count(*) FROM users WHERE email = "%1" AND password = %4'; [...] $password_update_queries = array('UPDATE users SET password = %4 WHERE email = "%1"'); [...] $password_encryption = 'MYSQLENCRYPT'; [...] $csp_salt_static = 'LEFT(password, 2)'; [...] //$csp_salt_query = 'SELECT salt FROM users WHERE username = "%1"'; [...] $csp_delimiter = '@'; [...] |

Die vollständige Datei sieht wie folgt aus:

| * 2002-2005 Paul Lesneiwski <[email protected]> * Dieses Programm ist unter GPL lizenziert. Siehe COPYING für Details * * @package plugins * @subpackage Change SQL Password * */ // Globale Variablen, fassen Sie diese nicht an, es sei denn, Sie möchten das Plugin brechen // global $csp_dsn, $password_update_queries, $lookup_password_query, $force_change_password_check_query, $password_encryption, $csp_salt_query, $csp_salt_static, $csp_secure_port, $csp_non_standard_http_port, $csp_delimiter, $csp_debug, $min_password_length, $max_password_length, $include_digit_in_password, $include_uppercase_letter_in_password, $include_lowercase_letter_in_password, $include_nonalphanumeric_in_password; // csp_dsn // // Theoretisch sollte jede von Pear unterstützte SQL-Datenbank unterstützt werden // hier. Der DSN (Data Source Name) muss die Informationen enthalten, die benötigt werden // um sich mit Ihrem Datenbank-Backend zu verbinden. Ein MySQL-Beispiel ist unten enthalten. // Für weitere Details zur DSN-Syntax und zur Liste der unterstützten Datenbanktypen, // siehe: // http://pear.php.net/manual/en/package.database.db.intro-dsn.php // //$csp_dsn = 'mysql://user:password@localhost/email_users'; $csp_dsn = 'mysql://mail_admin:mail_admin_password@localhost/mail'; // lookup_password_query // // Dieses Plugin wird immer das alte Passwort des Benutzers // gegen ihr Anmeldepasswort überprüfen, aber eine zusätzliche Überprüfung kann auch // gegen die Datenbank für mehr Sicherheit durchgeführt werden, wenn Sie // wünschen. Wenn Sie die zusätzliche Passwortüberprüfung nicht benötigen, // stellen Sie sicher, dass diese Einstellung leer ist. // // Dies ist eine Abfrage, die einen positiven Wert zurückgibt, wenn ein Benutzer // und Passwortpaar in der Datenbank gefunden werden. // // Diese Abfrage sollte einen Wert zurückgeben (eine Zeile, eine Spalte), der // Wert sollte idealerweise eine Eins oder eine Null sein, die einfach angibt, dass // das Benutzer-/Passwortpaar tatsächlich in der Datenbank existiert. // // %1 wird in dieser Abfrage durch den vollständigen Benutzernamen // (einschließlich Domain) ersetzt, wie z.B. "[email protected]" // %2 wird in dieser Abfrage durch den Benutzernamen (ohne // irgendeinen Domainanteil) ersetzt, wie z.B. "jose" // %3 wird in dieser Abfrage durch den Domainnamen ersetzt, // wie z.B. "example.com" // %4 wird in dieser Abfrage durch das aktuelle (alte) // Passwort in welchem Verschlüsselungsformat auch immer benötigt wird, gemäß // den Konfigurationseinstellungen anderer Plugins (Beachten Sie, dass die Syntax des // Passworts bereitgestellt wird, abhängig von Ihren Verschlüsselungs- // wahlen, sodass Sie NIE Anführungszeichen um diesen // Wert in der Abfrage hier bereitstellen müssen.) // %5 wird in dieser Abfrage durch das aktuelle (alte) // Passwort im unverschlüsselten Klartext ersetzt. Wenn Sie kein // Passwortverschlüsselung verwenden, werden %4 und %5 die gleichen Werte sein, // außer dass %4 Anführungszeichen um sich hat und %5 nicht. // //$lookup_password_query = ''; // SCHLECHTE SICHERHEIT: $lookup_password_query = 'SELECT count(*) FROM users WHERE username = "%1" AND plain_password = "%5"'; //$lookup_password_query = 'SELECT count(*) FROM users WHERE username = "%1" AND crypt_password = %4'; $lookup_password_query = 'SELECT count(*) FROM users WHERE email = "%1" AND password = %4'; // password_update_queries // // Ein Array von SQL-Abfragen, die alle ausgeführt werden // wann immer ein Passwortänderungsversuch unternommen wird. // // Hier können beliebig viele Abfragen enthalten sein. // Die Abfragen werden in der hier angegebenen Reihenfolge ausgeführt. // // %1 wird in allen Abfragen durch den vollständigen Benutzernamen // (einschließlich Domain) ersetzt, wie z.B. "[email protected]" // %2 wird in allen Abfragen durch den Benutzernamen (ohne // irgendeinen Domainanteil) ersetzt, wie z.B. "jose" // %3 wird in allen Abfragen durch den Domainnamen ersetzt, // wie z.B. "example.com" // %4 wird in allen Abfragen durch das neue Passwort // in welchem Verschlüsselungsformat auch immer benötigt wird, gemäß // den Konfigurationseinstellungen anderer Plugins (Beachten Sie, dass die Syntax des // Passworts bereitgestellt wird, abhängig von Ihren // Verschlüsselungswahlen, sodass Sie NIE Anführungszeichen // um diesen Wert in den Abfragen hier bereitstellen müssen.) // %5 wird in allen Abfragen durch das neue Passwort // im unverschlüsselten Klartext ersetzt - VORSICHT! Wenn Sie kein // Passwortverschlüsselung verwenden, werden %4 und %5 die gleichen // Werte sein, außer dass %4 Anführungszeichen um sich hat // und %5 nicht. // // $password_update_queries = array( // 'UPDATE users SET crypt_password = %4 WHERE username = "%1"', // 'UPDATE user_flags SET force_change_pwd = 0 WHERE username = "%1"', // 'UPDATE users SET crypt_password = %4, force_change_pwd = 0 WHERE username = "%1"', // ); $password_update_queries = array('UPDATE users SET password = %4 WHERE email = "%1"'); // force_change_password_check_query // // Eine Abfrage, die nach einem Flag prüft, das angibt, ob ein Benutzer // gezwungen werden sollte, sein Passwort zu ändern. Diese Abfrage // sollte einen Wert zurückgeben (eine Zeile, eine Spalte), der // Null ist, wenn der Benutzer sein Passwort NICHT ändern muss, // oder Eins, wenn der Benutzer gezwungen werden sollte, es jetzt zu ändern. // // Diese Einstellung sollte eine leere Zeichenfolge sein, wenn Sie diese // Funktionalität nicht aktivieren möchten. // // %1 wird in dieser Abfrage durch den vollständigen Benutzernamen // (einschließlich Domain) ersetzt, wie z.B. "[email protected]" // %2 wird in dieser Abfrage durch den Benutzernamen (ohne // irgendeinen Domainanteil) ersetzt, wie z.B. "jose" // %3 wird in dieser Abfrage durch den Domainnamen ersetzt, // wie z.B. "example.com" // //$force_change_password_check_query = 'SELECT IF(force_change_pwd = "yes", 1, 0) FROM users WHERE username = "%1"'; //$force_change_password_check_query = 'SELECT force_change_pwd FROM users WHERE username = "%1"'; $force_change_password_check_query = ''; // password_encryption // // Welche Verschlüsselungsmethode verwenden Sie, um Passwörter // in Ihrer Datenbank zu speichern? Bitte verwenden Sie eine der folgenden, // genau so, wie Sie sie sehen: // // NONE Passwörter werden nur im Klartext gespeichert // MYSQLPWD Passwörter werden mit der MySQL password()-Funktion gespeichert // MYSQLENCRYPT Passwörter werden mit der MySQL encrypt()-Funktion gespeichert // PHPCRYPT Passwörter werden mit der PHP crypt()-Funktion gespeichert // MD5CRYPT Passwörter werden mit dem verschlüsselten MD5-Algorithmus gespeichert // MD5 Passwörter werden als MD5-Hash gespeichert // //$password_encryption = 'MYSQLPWD'; $password_encryption = 'MYSQLENCRYPT'; // csp_salt_query // csp_salt_static // // Verschlüsselungstypen, die ein Salt benötigen, müssen wissen, woher sie // dieses Salt erhalten. Wenn Sie einen konstanten, bekannten Saltwert haben, // sollten Sie ihn in $csp_salt_static definieren. Andernfalls lassen Sie diesen // Wert leer und definieren Sie einen Wert für die $csp_salt_query. // // Lassen Sie beide Werte leer, wenn Sie keine (oder keine) Salze // zur Verschlüsselung Ihrer Passwörter benötigen (oder verwenden). // // Die Abfrage sollte einen Wert zurückgeben (eine Zeile, eine Spalte), der // der Saltwert für das Passwort des aktuellen Benutzers ist. Diese // Abfrage wird ignoriert, wenn $csp_salt_static etwas anderes als leer ist. // // %1 wird in dieser Abfrage durch den vollständigen Benutzernamen // (einschließlich Domain) ersetzt, wie z.B. "[email protected]" // %2 wird in dieser Abfrage durch den Benutzernamen (ohne // irgendeinen Domainanteil) ersetzt, wie z.B. "jose" // %3 wird in dieser Abfrage durch den Domainnamen ersetzt, // wie z.B. "example.com" // //$csp_salt_static = 'LEFT(crypt_password, 2)'; //$csp_salt_static = '"a4"'; // verwenden Sie dieses Format mit MYSQLENCRYPT //$csp_salt_static = '$2$blowsomefish$'; // verwenden Sie dieses Format mit PHPCRYPT //$csp_salt_static = ''; $csp_salt_static = 'LEFT(password, 2)'; //$csp_salt_query = 'SELECT SUBSTRING_INDEX(crypt_password, '$', 1) FROM users WHERE username = "%1"'; //$csp_salt_query = 'SELECT SUBSTRING(crypt_password, (LENGTH(SUBSTRING_INDEX(crypt_password, '$', 2)) + 2)) FROM users WHERE username = "%1"'; //$csp_salt_query = 'SELECT salt FROM users WHERE username = "%1"'; //$csp_salt_query = ''; // csp_secure_port // // Sie können sicherstellen, dass SSL-Verschlüsselung während der Passwort- // änderung verwendet wird, indem Sie dies auf den Port setzen, auf dem Ihr HTTPS bereitgestellt wird // (443 ist typisch). Setzen Sie es auf Null, wenn Sie keine HTTPS-Verbindung erzwingen möchten, // wenn Benutzer ihre Passwörter ändern. // // Sie können diesen Wert für bestimmte Domains, Benutzer oder // Dienstebenen über das Virtual Host Login (vlogin)-Plugin // überschreiben, indem Sie einen Wert(e) für $vlogin_csp_secure_port in der vlogin // Konfiguration festlegen. // $csp_secure_port = 0; //$csp_secure_port = 443; // csp_non_standard_http_port // // Wenn Sie Standard-HTTP-Webanfragen auf einem nicht standardmäßigen // Port (alles außer Port 80) bereitstellen, sollten Sie diese // Portnummer hier angeben. Setzen Sie es andernfalls auf Null. // // Sie können diesen Wert für bestimmte Domains, Benutzer oder // Dienstebenen über das Virtual Host Login (vlogin)-Plugin // überschreiben, indem Sie einen Wert(e) für $vlogin_csp_non_standard_http_port // in der vlogin-Konfiguration festlegen. // //$csp_non_standard_http_port = 8080; $csp_non_standard_http_port = 0; // min_password_length // max_password_length // include_digit_in_password // include_uppercase_letter_in_password // include_lowercase_letter_in_password // include_nonalphanumeric_in_password // // Sie können die minimalen und maximalen Passwortlängen festlegen, die // Sie akzeptieren oder diese Einstellungen auf Null belassen, um anzuzeigen, dass // kein Limit angewendet werden soll. // // Aktivieren Sie eine der anderen Einstellungen hier, um zu überprüfen, dass das // neue Passwort mindestens eine Ziffer, einen Großbuchstaben, // einen Kleinbuchstaben und/oder ein nicht alphanumerisches Zeichen enthält. // $min_password_length = 6; $max_password_length = 0; $include_digit_in_password = 0; $include_uppercase_letter_in_password = 0; $include_lowercase_letter_in_password = 0; $include_nonalphanumeric_in_password = 0; // csp_delimiter // // wenn Ihr System Benutzernamen mit etwas anderem als // einem "@"-Zeichen hat, das den Benutzer- und Domainanteil trennt, // geben Sie dieses Zeichen hier an // //$csp_delimiter = '|'; $csp_delimiter = '@'; // Debug-Modus // $csp_debug = 0; ?> |

Das Change SQL Password-Plugin hängt auch vom Compatibility-Plugin ab, das wir wie folgt installieren:

cd /usr/share/squirrelmail/plugins  
wget http://www.squirrelmail.org/countdl.php?fileurl=http%3A%2F%2Fwww.squirrelmail.org%2Fplugins%2Fcompatibility-2.0.16-1.0.tar.gz  
tar xvfz compatibility-2.0.16-1.0.tar.gz

Jetzt müssen wir in die SquirrelMail-Konfiguration gehen und SquirrelMail mitteilen, dass wir Courier als unseren POP3- und IMAP-Server verwenden und die Plugins Change SQL Password und Compatibility aktivieren:

/usr/share/squirrelmail/config/conf.pl

Sie sehen das folgende Menü. Navigieren Sie durch es wie angegeben:

SquirrelMail Konfiguration : Gelesen: config.php (1.4.0)  
---------------------------------------------------------  
Hauptmenü --  
1.  Organisationspräferenzen  
2.  Servereinstellungen  
3.  Ordnerstandards  
4.  Allgemeine Optionen  
5.  Themen  
6.  Adressbücher  
7.  Nachricht des Tages (MOTD)  
8.  Plugins  
9.  Datenbank  
10. Sprachen  
  
D.  Vordefinierte Einstellungen für bestimmte IMAP-Server festlegen  
  
C   Farbe ausschalten  
S   Daten speichern  
Q   Beenden  
  
Befehl >> <-- D  
  
  
SquirrelMail Konfiguration : Gelesen: config.php  
---------------------------------------------------------  
Während wir SquirrelMail aufgebaut haben, haben wir einige Präferenzen entdeckt, die besser mit einigen Servern funktionieren, die nicht so gut mit anderen funktionieren.  Wenn Sie Ihren IMAP-Server auswählen, wird diese Option einige vordefinierte Einstellungen für diesen Server festlegen.  
  
Bitte beachten Sie, dass Sie trotzdem alles durchgehen und sicherstellen müssen, dass alles korrekt ist.  Dies ändert nicht alles.  Es gibt nur einige Einstellungen, die dies ändern wird.  
  
Bitte wählen Sie Ihren IMAP-Server:  
    bincimap    = Binc IMAP-Server  
    courier     = Courier IMAP-Server  
    cyrus       = Cyrus IMAP-Server  
    dovecot     = Dovecot Secure IMAP-Server  
    exchange    = Microsoft Exchange IMAP-Server  
    hmailserver = hMailServer  
    macosx      = Mac OS X Mailserver  
    mercury32   = Mercury/32  
    uw          = IMAP-Server der Universität von Washington  
    gmail       = IMAP-Zugriff auf Google-Mail (Gmail)-Konten  
  
    quit        = Nichts ändern  
Befehl >> <-- courier  
  
  
              imap_server_type = courier  
         default_folder_prefix = INBOX.  
                  trash_folder = Trash  
                   sent_folder = Sent  
                  draft_folder = Drafts  
            show_prefix_option = false  
          default_sub_of_inbox = false  
show_contain_subfolders_option = false  
            optional_delimiter = .  
                 delete_folder = true  
  
Drücken Sie eine Taste, um fortzufahren... <-- drücken Sie eine Taste  
  
  
SquirrelMail Konfiguration : Gelesen: config.php (1.4.0)  
---------------------------------------------------------  
Hauptmenü --  
1.  Organisationspräferenzen  
2.  Servereinstellungen  
3.  Ordnerstandards  
4.  Allgemeine Optionen  
5.  Themen  
6.  Adressbücher  
7.  Nachricht des Tages (MOTD)  
8.  Plugins  
9.  Datenbank  
10. Sprachen  
  
D.  Vordefinierte Einstellungen für bestimmte IMAP-Server festlegen  
  
C   Farbe ausschalten  
S   Daten speichern  
Q   Beenden  
  
Befehl >> <-- 8  
  
  
SquirrelMail Konfiguration : Gelesen: config.php (1.4.0)  
---------------------------------------------------------  
Plugins  
  Installierte Plugins  
    1. delete_move_next  
    2. squirrelspell  
    3. newmail  
  
  Verfügbare Plugins:  
    4. administrator  
    5. bug_report  
    6. calendar  
    7. change_sqlpass  
    8. compatibility  
    9. filters  
    10. fortune  
    11. info  
    12. listcommands  
    13. mail_fetch  
    14. message_details  
    15. sent_subfolders  
    16. spamcop  
    17. test  
    18. translate  
  
R   Zurück zum Hauptmenü  
C   Farbe ausschalten  
S   Daten speichern  
Q   Beenden  
  
Befehl >> <-- 8 (oder welche Nummer das Compatibility-Plugin hat - es wird vom change_sqlpass-Plugin benötigt)  
  
  
SquirrelMail Konfiguration : Gelesen: config.php (1.4.0)  
---------------------------------------------------------  
Plugins  
  Installierte Plugins  
    1. delete_move_next  
    2. squirrelspell  
    3. newmail  
    4. compatibility  
  
  Verfügbare Plugins:  
    5. administrator  
    6. bug_report  
    7. calendar  
    8. change_sqlpass  
    9. filters  
    10. fortune  
    11. info  
    12. listcommands  
    13. mail_fetch  
    14. message_details  
    15. sent_subfolders  
    16. spamcop  
    17. test  
    18. translate  
  
R   Zurück zum Hauptmenü  
C   Farbe ausschalten  
S   Daten speichern  
Q   Beenden  
  
Befehl >> <-- 8 (die Nummer des change_sqlpass-Plugins)  
  
  
SquirrelMail Konfiguration : Gelesen: config.php (1.4.0)  
---------------------------------------------------------  
Plugins  
  Installierte Plugins  
    1. delete_move_next  
    2. squirrelspell  
    3. newmail  
    4. compatibility  
    5. change_sqlpass  
  
  Verfügbare Plugins:  
    6. administrator  
    7. bug_report  
    8. calendar  
    9. filters  
    10. fortune  
    11. info  
    12. listcommands  
    13. mail_fetch  
    14. message_details  
    15. sent_subfolders  
    16. spamcop  
    17. test  
    18. translate  
  
R   Zurück zum Hauptmenü  
C   Farbe ausschalten  
S   Daten speichern  
Q   Beenden  
  
Befehl >> <-- S  
  
  
SquirrelMail Konfiguration : Gelesen: config.php (1.4.0)  
---------------------------------------------------------  
Plugins  
  Installierte Plugins  
    1. delete_move_next  
    2. squirrelspell  
    3. newmail  
    4. compatibility  
    5. change_sqlpass  
  
  Verfügbare Plugins:  
    6. administrator  
    7. bug_report  
    8. calendar  
    9. filters  
    10. fortune  
    11. info  
    12. listcommands  
    13. mail_fetch  
    14. message_details  
    15. sent_subfolders  
    16. spamcop  
    17. test  
    18. translate  
  
R   Zurück zum Hauptmenü  
C   Farbe ausschalten  
S   Daten speichern  
Q   Beenden  
  
Befehl >> <-- S  
  
  
SquirrelMail Konfiguration : Gelesen: config.php (1.4.0)  
---------------------------------------------------------  
Plugins  
  Installierte Plugins  
    1. delete_move_next  
    2. squirrelspell  
    3. newmail  
    4. compatibility  
    5. change_sqlpass  
  
  Verfügbare Plugins:  
    6. administrator  
    7. bug_report  
    8. calendar  
    9. filters  
    10. fortune  
    11. info  
    12. listcommands  
    13. mail_fetch  
    14. message_details  
    15. sent_subfolders  
    16. spamcop  
    17. test  
    18. translate  
  
R   Zurück zum Hauptmenü  
C   Farbe ausschalten  
S   Daten speichern  
Q   Beenden  
  
Befehl >> <-- Q  

Eine letzte Sache, die wir tun müssen, ist die Datei /etc/squirrelmail/config_local.php zu ändern und die Variable $default_folder_prefix auszukommentieren - wenn Sie dies nicht tun, sehen Sie die folgende Fehlermeldung in SquirrelMail, nachdem Sie sich angemeldet haben: Abfrage: CREATE “Sent” Grund: Ungültiger Mailbox-Name.

vi /etc/squirrelmail/config_local.php

| |

Jetzt können Sie http://server1.example.com/webmail oder http://192.168.0.110/webmail in Ihrem Browser eingeben, um auf SquirrelMail zuzugreifen.

Melden Sie sich mit Ihrer E-Mail-Adresse (z.B. [email protected]) und Ihrem Passwort an:

Sie sollten die Willkommens-E-Mail in Ihrem Posteingang finden:

Um Ihr Passwort zu ändern, gehen Sie zu Optionen und wählen Sie dann Passwort ändern:

Geben Sie Ihr aktuelles Passwort und dann Ihr neues Passwort zweimal ein:

Nachdem Sie das Passwort geändert haben, müssen Sie sich sofort mit dem neuen Passwort erneut anmelden:

19 VMA (Virtuelle Mail-Admin-Oberfläche)

Virtual Mail Admin (VMA) ist eine kleine PHP-basierte Webanwendung, die geschrieben wurde, um das E-Mail-System zu verwalten, das in diesem Leitfaden eingerichtet wurde. Ich habe es nicht getestet, aber ich dachte, ich teile es.

Das hat der Entwickler (Charl Loubser) mir in einer E-Mail geschrieben:

*”Hallo,

Ich weiß nicht, ob Ihnen das gefällt oder ob es Ihnen nützt, aber ich dachte, ich teile es:

Ich habe eine kleine Webanwendung für das Setup geschrieben, das Sie im Howto gemacht haben: https://www.howtoforge.com/virtual-users-domains-postfix-courier-mysql-squirrelmail-ubuntu-10.04

Wenn Sie es genehmigen und es für wertvoll halten, um es in Ihrem Tutorial zu teilen, sind Sie mehr als willkommen und können dies gerne tun.

Wie im Readme erwähnt, ist dies keine perfekte App, aber sie erfüllt ihren Zweck für jetzt, und ich denke, es ist relativ sicher in einer geschlossenen Umgebung (LAN-Setup zwischen Servern).

Die rar-Datei mit der App ist angehängt, kann aber auch heruntergeladen werden unter: http://code.google.com/p/vma/ “*

20 Referenzen

Tutorial: ISP-ähnlicher E-Mail-Dienst mit Debian-Sarge und Postfix 2.1: http://workaround.org/articles/ispmail-sarge/

Postfix + Quota: http://vhcs.net/new/modules/newbb/viewtopic.php?topic_id=3496&forum=17

Mail-Passwörter verschlüsselt mit saslauthd: http://www.syscp.de/docs/public/contrib/cryptedmailpws

21 Links

Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.