Puncte:0

Cum să proxy conexiunea IMAP/POP3 la serverul de corespondență backend corespunzător după domeniu

drapel ng

Am un sistem cu mai multe servere de e-mail (exchange, zimbra) pentru mai multe domenii. Deci, atunci când utilizatorii domeniului A doresc să se conecteze la server pentru a primi e-mail, trebuie să utilizeze IP-ul serverului A (Ex: 192.168.10.253), la fel ca utilizatorul domeniului B, trebuie să folosească IP-ul serverului B (Ex: 192.168.168. 20.253).

Vreau să simplific conexiunea dintre utilizatori și serverul de e-mail prin crearea unui server proxy pentru conexiunea IMAP/POP3, dar nu găsesc soluția pentru a o face, există oricum să o fac? Vă rog să-mi dați cheia sau o soluție pentru mai bine. Mulțumesc mult.

Descrierea imaginii pentru întrebarea mea

Puncte:0
drapel ng

Aceasta este soluția mea, sper să vă ajute.

Acesta este al meu arhitect sistem proxy

Acesta este configurat în nginx

Poștă {
         auth_http localhost:80/ldap_auth.php;
         pop3_capabilities „TOP” „USER”;
         imap_capabilities „IMAP4rev1” „UIDPLUS”;

        Server {
                asculta 110;
                protocol pop3;
                pop3_auth plain apop cram-md5;
                proxy activat;
        }

        Server {
                asculta 143;
                protocol imap;
                proxy activat;
        }
}

Acesta este codul sursă în ldap_auth.php

<?php
dacă (!isset($_SERVER["HTTP_AUTH_USER"]) || !isset($_SERVER["HTTP_AUTH_PASS"])) {
    fail();
}

$nume utilizator = $_SERVER["HTTP_AUTH_USER"];
$userpass = $_SERVER["HTTP_AUTH_PASS"];
$protocol = $_SERVER["HTTP_AUTH_PROTOCOL"];

// port de backend implicit
$backend_port = 110;

if ($protocol == „imap”) {
    $backend_port = 143;
}

$backend_ip["domain1.com"] = "10.0.250.251";
$backend_ip["domain2.com"] = "10.0.220.140";

// Autentifică utilizatorul sau eșuează
if (!authuser($nume utilizator, $userpass)) {
    fail();
    Ieșire;
}

$userserver = getmaildomain($nume utilizator);

$server_ip = (isset($backend_ip[$userserver])) ? $backend_ip[$userserver] : $userserver;

// Trece!
trece($server_ip, $backend_port);

//SFÂRŞIT

function authuser($utilizator, $trece)
{
    $pass = str_replace('%20', '', $pass);
    $pass = str_replace('%25', '%', $pass);
    $emailDomain = getmaildomain($user);
    $emailUsername = getmailuser($user);

    $ldapconfig['gazdă'] = '10.0.250.241';
    $ldapconfig['port'] = '389';
    $ldapconfig['basedn'] = 'ou=' . $emailDomain . ',dc=topdomain,dc=vn';
    $ldapconfig['binduser'] = 'cn=admin,dc=topdomain,dc=vn';
    $ldapconfig['bindpass'] = 'P@ssw0rd';
    $ds = ldap_connect($ldapconfig['gazdă'], $ldapconfig['port']);

    dacă (isset($ds)) {
        ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
        ldap_set_option($ds, LDAP_OPT_REFERRALS, 0);
        ldap_set_option($ds, LDAP_OPT_NETWORK_TIMEOUT, 10);

        if (isset($utilizator) && isset($trece)) {
            dacă (ldap_bind($ds, $ldapconfig['binduser'], $ldapconfig['bindpass'])) {
                dacă ($search_result = ldap_search($ds, $ldapconfig['basedn'], "(|(uid=%U)(sAMAccountName=%U))")) {
                    $intries = ldap_get_entries($ds, $search_result);
                    dacă ($intrii['număr'] == 1) {
                        $dn = $intrii[0]['dn'];
                        if (ldap_bind($ds, $dn, $pass)) {
                            returnează adevărat;
                        } altfel {
                            returnează fals;
                        }
                    }
                }
            }
        }
    }
    returnează fals;
}

funcția getmaildomain($user)
{
    return substr($utilizator, strpos($utilizator, '@') + 1);
}

funcția getmailuser($user)
{
    return substr($utilizator, 0, strpos($utilizator, '@'));
}

funcția fail()
{
    header("Stare-autentificare: autentificare sau parolă nevalidă");
    Ieșire;
}

trecerea funcției ($server, $port)
{
    header("Stare-autentificare: OK");
    header("Auth-Server: $server");
    header("Auth-Port: $port");
    Ieșire;
}

aceasta este configurația în OpenLDAP Font-end

includ /etc/ldap/schema/core.schema 
includ /etc/ldap/schema/corba.schema 
includ /etc/ldap/schema/cosine.schema 
includ /etc/ldap/schema/duaconf.schema 
includ /etc/ldap/schema/dyngroup.schema
includ /etc/ldap/schema/inorgperson.schema
includ /etc/ldap/schema/java.schema 
includ /etc/ldap/schema/misc.schema 
includ /etc/ldap/schema/nis.schema 
includ /etc/ldap/schema/openldap.schema 
includ /etc/ldap/schema/collective.schema 
includ /etc/ldap/schema/pmi.schema 
includ /etc/ldap/schema/ppolicy.schema
permite bind_v2
# Definiți ACL-uri globale pentru a dezactiva accesul implicit de citire.

# Nu activați recomandările decât după ce aveți un director de lucru
# serviciu ȘI o înțelegere a recomandărilor.
#referință ldap://root.openldap.org

pidfile /var/run/slapd/slapd.pid
argsfile /var/run/slapd/slapd.args

# Încărcați module backend dinamice: 
modulepath /usr/lib/ldap 
moduleload rwm.la
moduleload back_meta.la 
moduleload back_ldap.la
loglevel -1
            #################################################################### #####################
# Definiții server la distanță LDAP
            #################################################################### #####################

#font
meta bază de date
sufixul „dc=topdomain,dc=vn”
rootdn „cn=admin,dc=topdomain,dc=vn”
rootpw P@ssw0rd

#doamin1.vn - Server
uri „ldap://10.0.250.251/ou=domain1.vn,dc=topdomain,dc=vn”
numai citit nu 
lastmod off
sufixmassage „ou=domain1.vn,dc=topdomain,dc=vn” „DC=domain1,DC=vn”
atributul map uid sAMAccountName
idassert-bind bindmethod=simplu
binddn="CN=ldap,CN=Utilizatori,DC=domain1,DC=vn"
credentials="P@ssw0rd"
idassert-authzDe la „dn.exact:cn=admin,dc=topdomain,dc=vn”

#doamin1.vn - Server
uri „ldap://10.0.220.45/ou=domain2.vn,dc=topdomain,dc=vn”
numai citit nu 
lastmod off
sufixmassage „ou=domain2.vn,dc=topdomain,dc=vn” „DC=domain2,DC=vn”
atributul map uid sAMAccountName
idassert-bind bindmethod=simplu
binddn="CN=Administrator LDAP,CN=Utilizatori,DC=domeniu2,DC=vn"
credentials="P@ssw0rd"
idassert-authzDe la „dn.exact:cn=admin,dc=topdomain,dc=vn”

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.