Jump to content
Froxlor Forum

rseffner

Members
  • Posts

    217
  • Joined

  • Last visited

  • Days Won

    9

Posts posted by rseffner

  1. 4 minutes ago, d00p said:

    BLF-CRYPT steht aber doch drin...sollte problemlos funktionieren, nutze ich auf meiner Kiste seit Wochen mit aktualisierten und neuen Mail Konten 

    Zu BLF-CRYPT schrieb ich doch nur, dass das gesetzt wird, wenn ich jetzt mit froxlor2 ein Kennwort setze. Diese funktionieren dann übrigens. Ich konnte es auf den ersten Typ eingrenzen, Kennwörter, die kein "{***-CRYPT gesetzt}" haben.
    Vielleicht kann man die ja um {irgendwas-CRYPT}$irgendwas am Begin ergänzen und dann gehts wieder?

  2. 37 minutes ago, d00p said:

    welches os, welche dovecot version und wie lautet die ausgabe von doveadm pw -l

    history : db-updates seit syscp
    os : debian 11
    dovecot : 2.3.13+dfsg1-2+deb11u1
    doveadm pw -l : SHA1 SSHA512 SCRAM-SHA-256 BLF-CRYPT PLAIN HMAC-MD5 OTP SHA512 SHA DES-CRYPT CRYPT SSHA MD5-CRYPT PLAIN-MD4 PLAIN-MD5 SCRAM-SHA-1 SHA512-CRYPT CLEAR CLEARTEXT ARGON2I ARGON2ID SSHA256 MD5 PBKDF2 SHA256 CRAM-MD5 PLAIN-TRUNC SHA256-CRYPT SMD5 DIGEST-MD5 LDAP-MD5

  3. Nachdem ich dem Migrationsleitfaden folgend einen Tag nach Upgrade auf froxlor2 nun auch noch im dovecot "default_pass_scheme = CRYPT" kommentiert habe, gibt es jetzt einige Nutzer, die sich nicht mehr anmelden können.

    Was auffällt ist, dass es in der Spalte password_enc der Tabelle mail_users nun verschiedenen Kennwortypen gibt

    • *****
    • {BLF-CRYPT}$2y$10$***** - das entsteht bei Neusetzen eines Passortes mit froxlor2
    • {MD5-CRYPT}$1$***** - die scheinen laut dovecot.log auch zu funktionieren
    • {SHA512-CRYPT}$6$0***** - die scheinen laut dovecot.log auch zu funktionieren

    Kann es sein, dass nun ein(ige) Format(e) nicht mehr funktionieren? Welche?

  4. Vorab, ich bin kein Entwickler, daher kann das Folgende Fehler enthalten und/oder besser gelöst werden. Ferner kann ich es auch nicht mit einem "pull request" vollständig in die froxlor-Entwicklung einarbeiten - vielleicht erbarmt sich ja der Entwickler oder ein "Nutznießer" der folgenden Informationen.
    Ich habe das Setup unter debian 11 / bullseye laufen - für andere Distributionen mögen Anpassungen nötig sein.

    UI / SQL

    Zuerst gibt es zusätzliche Optionen für die E-Mail-Adressen (siehe frx-settings.jpg), dazu müssen customer_email.php, lib/formfields/customer/email/formfield.emails_edit.php und lib/Froxlor/Api/Commands/Emails.php angepasst werden (siehe *.diff). Damit die Settings auch irgendwo gespeichert werden, erweitert man die Datenbank von froxlor (siehe mail_virtual.sql, es braucht nur die 5 ALTER TABLE Befehle angewendet auf die Datenbank von froxlor). [die diffs sind gegen froxlor 2.0.6 erstellt!]

    DKIM / RSPAMD

    Nachdem der Nutzer nun Dinge einstellen kann (die sich noch nicht auswirken) kümmern wir uns mal um DKIM mit rspamd. Dazu könnten die Einstellungen wie in frx-dkim-settings.jpg vorgenommen werden. Ich bin mir nicht mehr sicher, ob der Ordner dkim unter /etc/postfix im Beispiel erst angelegt werden musste, oder ob sich froxlor darum kümmert. Dort werden nun jedenfalls eine dkim-keys.conf und die keys abgelegt. Da wir das aber in einem rspamd-tauglichen Format benötigen, wird zusätzlich das Skript /usr/local/sbin/dkim2rspamd getriggert. Dazu muss natürlich rspamd installiert und konfiguriert sein. Das Skript baut nun eine Konfiguration zur Mailsignierung aus den Daten, die froxlor ins Dateisystem gelegt hat. Benötigt werden bash, awk, head, cat und es wird von einem System mit systemd ausgegangen.

    SPAMSETTING / RSPAMD

    Nun müssen noch die Spamsettings der Nutzer ja irgendwie ins rspamd. Da ich hier im froxlor keinen Trigger gefunden habe, erledigt das ein cron-job. Z.B. alle 5 Minuten:

    */5 * * * * root /usr/local/sbin/froxlor2rspamd
    

    Im Skript froxlor2rspamd (welches auch unter /usr/local/sbin liegt) müssen noch Datenbankanmeldedaten mit mindestens lesenden Rechten hinterlegt werden. Hier kommen der mysql/mariadb-client, sed, cat und diff zum Einsatz - diff gehört wohl nicht unbedingt zu einer Grundausstattung. Es wird eine settings_frx.conf für rspamd erstellt, die aber erst noch eingebunden werden muss. Dazu kann ans Ende der (ggf. zu erstellenden) /etc/rspamd/local.d/settings.conf folgende Zeile

    .include(try=true; priority=1; duplicate=merge) "$LOCAL_CONFDIR/local.d/settings_frx.conf"
    

    TODO

    Bleibt die Frage, wie wirkt sich der Virenschutzparameter aus. Die Antwort ist "kommt drauf an". Aktuell habe ich einen AV mit icap im rspamd und der schert sich gerade gar nicht um die Einstellung - Vorschläge gern willkommen. Vorher lief amavis-milter und mit dem habe ich direkt die SQL-Tabelle ausgelesen. Wie das eingestellt war, finde ich auf Anfrage vielleicht noch in einem Backup.


    Diese "Information" ist aus dem Gedächtnis erstellt und wurde nicht an einen System from scratch ausprobiert. Du solltest im Linux wissen was Du tust, dann kommst Du sicher zurecht, wenn nicht ergänze ich gern oder beantworte Fragen. Ich werde aber keine Anleitungen geben wir z.B. rspamd oder postfix grundsätzlich zu konfigurieren sind. Das hier dient nur als Ergänzung für ein schon laufendes System mit diesen Komponenten.

    Viel Erfolg. Und wenn ich mir was wünschen dürfte - bringt das bitte so oder ähnlich ins froxlor.

    frx-settings.jpg

    frx-dkim-settings.jpg

    formfield.emails_edit.php.diff customer_email.php.diff Emails.php.diff mail_virtual.sql froxlor2rspamd

     

    dkim2rspamd

    • Thanks 1
  5. 3 minutes ago, d00p said:

    puh, das ist ja noch uralt layout...müssen wir wohl doch noch berücksichtigen, hat keine der vorherigen versionen das mal ordentlich neugeschrieben (dachte eigentlich wir hatten da was) - schau ich mir an.

    Auf den betroffenen Servern ziehe ich mir das latest als tgz per wget und kopiere (außer z.b. der userdata.inc.php) einfach im docroot über. Vielleicht hatten Diene Automatismen da auch nie eine Chance zur Korrektur.

  6. Froxlor schreibt doch auf Wunsch (Einstellungen) eine Datei voller Domains, Separatoren und Keydateinamen sowie die privaten Keys in ein Verzeichnis.

    Ich habe dazu einen dirty hack, der das in eine rspmad-Konfiguration übersetzt

    #!/bin/bash
    
    chown root._rspamd /etc/postfix/dkim/*
    
    SIGNFILE=/tmp/dkim_signing.conf
    
    echo "# If false, messages with empty envelope from are not signed" >$SIGNFILE
    echo "allow_envfrom_empty = true;" >>$SIGNFILE
    echo "# If true, envelope/header domain mismatch is ignored" >>$SIGNFILE
    echo "allow_hdrfrom_mismatch = true;" >>$SIGNFILE
    echo "# If true, multiple from headers are allowed (but only first is used)" >>$SIGNFILE
    echo "allow_hdrfrom_multiple = false;" >>$SIGNFILE
    echo "# If true, username does not need to contain matching domain" >>$SIGNFILE
    echo "allow_username_mismatch = true;" >>$SIGNFILE
    echo "# If false, messages from local networks are not selected for signing" >>$SIGNFILE
    echo "sign_local = true;" >>$SIGNFILE
    echo "# If false, messages from domains not defined here will not be signed" >>$SIGNFILE
    echo "try_fallback = false;" >>$SIGNFILE
    echo "symbol = "DKIM_SIGNED";" >>$SIGNFILE
    echo "use_domain = "envelope";" >>$SIGNFILE
    
    echo "domain {" >>$SIGNFILE
    
    cat /etc/postfix/dkim/dkim-keys.conf | while read LINE; do
            DOMAIN=`echo $LINE | awk -F: '{ print $2 }'`
            echo "  $DOMAIN {" >>$SIGNFILE
            ED_ENABLED="no"
            if [ -f /etc/postfix/dkim/$DOMAIN.pubkey ]; then
                    ED_ENABLED="yes"
                    ED_SELECTOR=`head -n 1 /etc/postfix/dkim/$DOMAIN.pubkey | awk -F. '{print $1}'`
                    echo "    selectors [" >>$SIGNFILE
                    echo "      {" >>$SIGNFILE
                    echo "        path = \"/etc/postfix/dkim/$DOMAIN.privkey\";" >>$SIGNFILE
                    echo "        selector = \"$ED_SELECTOR\";" >>$SIGNFILE
                    echo "      }," >>$SIGNFILE
                    echo "      {" >>$SIGNFILE
            fi
            KEY=`echo $LINE | awk -F: '{ print $3 }'`
            echo "        path = \"$KEY\";" >>$SIGNFILE
            SELECTOR=`echo $KEY | awk -F/ '{ print $5 }' | awk -F. '{ print $1 }'`
            echo "        selector = \"$SELECTOR\";" >>$SIGNFILE
            if [ $ED_ENABLED = "yes" ]; then
                    echo "      }" >>$SIGNFILE
                    echo "    ]" >>$SIGNFILE
            fi
            echo "  }" >>$SIGNFILE
    done
    
    echo "}" >>$SIGNFILE
    
    cp $SIGNFILE /etc/rspamd/local.d/dkim_signing.conf
    systemctl reload rspamd
    
    rm $SIGNFILE

    Das Skript kannst Du auch durch Froxlor triggern lassen, siehe DKIM-Einstellungen.

  7. 43 minutes ago, d00p said:

    Wie sieht deine lib/userdata.inc.php aus? (pwd natürlich bitte entfernen)

    so sah es VOR UND NACH dem Update aus

    root@ns2:/var/www/froxlor/lib# cat userdata.inc.php
    <?php
    $sql['host']='localhost';
    $sql['user']='syscp';
    $sql['password']='***';
    $sql['db']='syscp';
    $sql['root_user']='syscpsql';
    $sql['root_password']='*****';
    ?>

     

  8. 1) Beim Update von v0.10.3x.x wurde der MySQL-Server NICHT übernommen.

    2) Lege ich in v2 einen MySQL-Server an, so gibt es folgenden Fehler wenn die Aktivierung für alle Kunden ausgewählt wurde. Der Server wird aber angelegt.

    Uncaught exception
    0 in_array(): Argument #2 ($haystack) must be of type array, null given
    
    #0 /var/www/webs/its/froxlor***sier.de/lib/Froxlor/Api/Commands/MysqlServer.php(520): in_array(0, NULL)
    #1 /var/www/webs/its/froxlor***sier.de/lib/Froxlor/Api/Commands/MysqlServer.php(448): Froxlor\Api\Commands\MysqlServer->addDatabaseFromCustomerAllowedList(0)
    #2 /var/www/webs/its/froxlor***esier.de/admin_mysqlserver.php(124): Froxlor\Api\Commands\MysqlServer->update()
    #3 {main}

    3) Das Löschen von MySQL-Server wird mit Fehler quittiert (vermutlich liegt der selbe Grund wie für 2) vor)

    Uncaught exception
    0 array_search(): Argument #2 ($haystack) must be of type array, null given
    
    #0 /var/www/webs/its/froxlor***ier.de/lib/Froxlor/Api/Commands/MysqlServer.php(500): array_search(3, NULL)
    #1 /var/www/webs/its/froxlor***sier.de/lib/Froxlor/Api/Commands/MysqlServer.php(213): Froxlor\Api\Commands\MysqlServer->removeDatabaseFromCustomerAllowedList(3)
    #2 /var/www/webs/its/froxlor***sier.de/admin_mysqlserver.php(77): Froxlor\Api\Commands\MysqlServer->delete()
    #3 {main}

    4) Die Meldung zum Löschen eines MySQL-Servers hat wohl keinen deutschen String

    Sicherheitsabfrage
    question.admin_mysqlserver_reallydelete

     

  9. Hallo,

    mir ist klar, dass ich pro Domain die DNS-Unterstützung de-/aktivieren kann. Mir ist auch klar, dass aktiviert bei gleichzeitig aktivierter E-Mail-Domain dann A- und ggf. auch AAAA-records für die Subdomains/Hosts mail, smtp, pop3 und imap angelegt werden. Ich weiß sogar, dass ich diese Einträge auf Wunsch übersteuern kann - mein neuen validen Werten. Auch das Führen von manuell gepflegten Zonefiles ist mir klar.

    Was ich in einem konkreten Fall aber möchte ist, die Subdomain "mail" woandershin zeigen zu lassen und gleichzeitig deren IPv6-Derivat zu deaktivieren (ohne IPv6 für den Rest der Domain zu deaktivieren). Gesucht ist also eine Möglichkeit z.B. im Rahmen der DNS-Übersteuerung durch eine spezielle Option das Anlegen eines einzelnen dieser Automatischen Records zu verhindern.

    Geht das irgendwie (ohne eine manuelle Zone anlegen und pflegen zu müssen - denn das habe ich jetzt und für den "Kunden" sieht das im Froxlor aus, als könne er im DNS-Editor rumobern, nur führt das ja dann zu nix)?

  10. 11 hours ago, rseffner said:

    Komisch das. Mein oben dargestellter geänderter Code löst mein Problem. Nach den Einstellungen kann ich morgen schauen.

    Setting "Direkt via Hostname erreichbar" = Nein

    Allerdings habe ich /var/www/froxlor in das Docroot einer Subdomain eines Kunden verlinkt und die Option an, das die Domains in den Pfadnamen auftauchen sollen. Vielleicht führt dann eben genau dieses basenamedir() dazu, dass das wie zwei FQDN aussieht.

    Ist mein Setting ein von den best practices abweichender Weg?

     

  11.                                         $script = "/index.php"; // $_SERVER['SCRIPT_NAME'];
                                            if (Settings::Get('system.froxlordirectlyviahostname') == 0) {
                                                    $script = \Froxlor\FileDir::makeCorrectFile("/" . basename(__DIR__) . "/" . $script);
                                                    $activationlink = $protocol . '://' . $script . '?action=resetpwd&resetcode=' . $activationcode;
                                            } else {
                                                    $activationlink = $protocol . '://' . $host . $port . $script . '?action=resetpwd&resetcode=' . $activationcode;
                                            }

     

  12. Ich habe da eine Spur in der index.php um die Zeile 488.

    Und zwar habe ich in die Variable $activationlink zwischen "... $port . " und "$script ." mal etwast wiedererkennbaren Text geschrieben. Das führt dazu, dass der Link in der Mail dann https://server-fqdnTEXT/froxlor-fqdn... lautet.
    Das Problem muss also aus dem "if (Settings::Get('system.froxlordirectlyviahostname..." kommen, denn hier wird script von "/index.php" eben auf den Hostnamen umgebaut. In dem Fall sollte der activationlink wohl innerhalb des "if" ohne $host gesetzt werden und die bestehende Zeile sollte in einen else-Zweig?

  13. Naja, als spoolenden Backup-MX kannst Du die Froxlor-Kiste ja RFC-konform einsetzen. Du kannst dann nur nicht per Webmail in die Queue schauen und musst warten bis der Exchange wieder tut. So sind die Absender Ihre Mail an Dich in Deinen Hoheitsbereich los. Ganz Dringendes könnte sich ein admin unter /var/spool/postfix mit einem Editor ansehen 😉 Und wenn der Exchange wieder online kommt, gibt Dein Froxlor-Server dem dann die Post.

    Das Ganze konfigurierst Du aber außerhalb von Froxlor bei postfix z.B. mittels sauberer DNS-Zone und "permit_mx_backup_networks".

  14. Das kann per RFC so nicht funktionieren.

    Im DNS hinterlegst Du MX Records, wo die Mail an diese Domain hin soll, alle MXe (wenn mehrere eingetragen sind) sollten versuchen die Mail dem MX mit der höchsten Priorität zu geben. der weiß dann wo die Postfächer sind.

    Wenn du einem weiteren MX-Server Postfächer für die Domain gibst, obwohl der nicht die höchste Priorität hat, kommt der je nach Software und Konfiguration in einen Zielkonflikt : lokal ablegen oder dem MX mit hoher Priorität geben. Man könnte das als "split brain" bezeichnen, denn je nachdem wo Absender Mails einliefern, liegen die dann auf dem einen oder anderen Mailserver.

    Wenn du ein Backup a la "dann lese ich im Störungsfall meine Mails halt dort" haben willst, sollte Froxlor "bester" MX sein und Postfächer haben. Der Exchange holt dann per POPconn ab (oder so was auch immer Du einsetzen willst). Das hat auch den Charme, dass die den Exchange nicht ins Internet stellen musst (aber vermutlich will man haute ja auch OWA). Wenn der Exchange mal nicht geht, kannst Du per Webmail in die Postfächer auf dem Froxlor gucken. Aber das wird nie hübsch synchron - Du sieht keine bereits zugestellten Mails, schaltest Du "keep" ein hast Du keinen synchronen gelesen/gelöscht-Status.

    Dafür sind eigentlich dovecot- oder Exchangecluster da.

  15. Quote

    es greift doch erstmal der globale alias auf /.well-known/acme-challenge/ - hast du den nicht eingerichtet (/etc/apache2/conf-enabled/acme.conf)

    Doch, der globale Alias IST eingerichtet als acme.conf in /etc/apache2/conf-available und verlinkt nach conf-enabled. apache2ctl --configtest hat auch nichts zu meckern. ohne diese acme.conf hat die Validierung ja nicht geklappt, weil man per http-Requst nicht ans secret kam.

    Quote

    Hast du "SSL Redirect" nicht aktiviert? Normal legt er natürlich erst den vhost an und versucht dann ein Certificate zu bekommen - macht ja sonst keinen Sinn.

    Nein ich habe SSL-Redirect nicht aktiviert in dem Zustand in dem ich das Verhalten hatte und beschrieb.

    Quote

    "config neuschreiben" ist nichts anderes als ein cronlauf...außer das er natürlich forciert das die vhosts neu erstellt werden durch das einfügen einen entsprechenden Tasks

    Das ist der entscheidende Unterschied dann, dass das Flag gesetzt ist "mach wirklich was". Denn nur den Job zu triggern führt beim n-ten Durchluaf ja nur zu Erkenntnis es wäre nichts zu tun.

    Quote

    ja, da die AliasDomain bestandteil des vhosts der "haupt"domain ist, die wird mit in die SAN Liste eingetragen

    Dann kann ich mir die ganze Zertifikate sparen und einfach 20 mal die selbe AliasDomain setzen und die bekommt dann ein Zertifikat für 21 Namen?

     

    Dennoch habe ich reproduzierbar beobachtet, dass:

    - wenn eine http-only domain bereits angelegt ist
    - man SSL und LE aktiviert
    - dabei als DocumentRoot eine URI einstellt
    - der cron-job läuft
    - ZUERST LE gefragt wird und nicht verifizieren kann weil am Ziel (DocumentRoot) keiner das secret hat
    - DANN erst die VHosts neu gebaut werden und die RedirectAusnahme enthalten
    - der globale well-known Alias offenbar einem Redirect nachgeordnet behandelt wird

    Ohne weitere Abhängigkeiten zu kennen, sollte die LE-Routine im cron-job meiner Meinung nach erst laufen, wenn die VHosts erstellt sind und apache2 reloaded wurde.

    Quote

    Eh nein, das ist nicht so. Das hängt allein von der Option "SSL Redirect" ab

    Ein "einfacherer" Weg ist in so einem Fall einfach: Leg die Domain an, warte bis der Vhost erstellt ist, aktiviere dann Let's Encrypt. 

    Hier reden wir wohl aneinander vorbei. Der http-only-VHost WAR bereits erstellt.

×
×
  • Create New...