Điểm:0

Cách ủy quyền kết nối IMAP/POP3 tới máy chủ thư phụ trợ thích hợp theo tên miền

lá cờ ng

Tôi có hệ thống với nhiều máy chủ email (exchange, zimbra) cho nhiều tên miền. Vì vậy, khi người dùng miền A muốn kết nối với máy chủ để nhận email, họ phải sử dụng IP của máy chủ A (VD: 192.168.10.253), người dùng miền B cũng vậy, họ phải sử dụng IP của máy chủ B (VD: 192.168.10.253). 20.253).

Tôi muốn đơn giản hóa kết nối giữa người dùng và máy chủ thư bằng cách tạo một máy chủ proxy cho kết nối IMAP/POP3 nhưng tôi không thể tìm ra giải pháp để thực hiện việc đó, có cách nào để thực hiện không? xin vui lòng cho tôi keywork hoặc một giải pháp tốt hơn. Cảm ơn bạn rất nhiều.

Mô tả hình ảnh cho câu hỏi của tôi

Điểm:0
lá cờ ng

Đây là giải pháp của tôi, hy vọng nó sẽ giúp ích.

Đây là của tôi kiến trúc sư hệ thống proxy

Đây là cấu hình trong nginx

email {
         auth_http localhost:80/ldap_auth.php;
         pop3_capabilities "TOP" "USER";
         imap_capabilities "IMAP4rev1" "UIDPLUS";

        người phục vụ {
                nghe 110;
                giao thức pop3;
                pop3_auth đơn giản apop cram-md5;
                bật proxy;
        }

        người phục vụ {
                nghe 143;
                hình ảnh giao thức;
                bật proxy;
        }
}

Đây là mã nguồn trong ldap_auth.php

<?php
if (!isset($_SERVER["HTTP_AUTH_USER"]) || !isset($_SERVER["HTTP_AUTH_PASS"])) {
    Thất bại();
}

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

// cổng phụ trợ mặc định
$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";

// Xác thực người dùng hoặc thất bại
if (!authuser($username, $userpass)) {
    Thất bại();
    lối ra;
}

$userserver = getmaildomain($username);

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

// Vượt qua!
vượt qua($server_ip, $backend_port);

//CHẤM DỨT

chức năng authuser($user, $pass)
{
    $pass = str_replace('%20', ' ', $pass);
    $pass = str_replace('%25', '%', $pass);
    $emailDomain = getmaildomain($user);
    $emailUsername = getmailuser($user);

    $ldapconfig['máy chủ'] = '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['host'], $ldapconfig['port']);

    if (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($user) && isset($pass)) {
            if (ldap_bind($ds, $ldapconfig['binduser'], $ldapconfig['bindpass'])) {
                if ($search_result = ldap_search($ds, $ldapconfig['basedn'], "(|(uid=%U)(sAMAccountName=%U))")) {
                    $entries = ldap_get_entries($ds, $search_result);
                    if ($entries['count'] == 1) {
                        $dn = $entries[0]['dn'];
                        nếu (ldap_bind($ds, $dn, $pass)) {
                            trả về đúng;
                        } khác {
                            trả về sai;
                        }
                    }
                }
            }
        }
    }
    trả về sai;
}

hàm getmaildomain($user)
{
    trả về chất nền($user, strpos($user, '@') + 1);
}

hàm getmailuser($user)
{
    trả về chất nền($user, 0, strpos($user, '@'));
}

chức năng thất bại()
{
    header("Auth-Status: Tên đăng nhập hoặc mật khẩu không hợp lệ");
    lối ra;
}

vượt qua chức năng ($ máy chủ, $ cổng)
{
    tiêu đề ("Trạng thái xác thực: OK");
    header("Auth-Server: $server");
    header("Auth-Port: $port");
    lối ra;
}

đây là cấu hình trong OpenLDAP Font-end

bao gồm /etc/ldap/schema/core.schema 
bao gồm /etc/ldap/schema/corba.schema 
bao gồm /etc/ldap/schema/cosine.schema 
bao gồm /etc/ldap/schema/duaconf.schema 
bao gồm /etc/ldap/schema/dyngroup.schema
bao gồm /etc/ldap/schema/inetorgperson.schema
bao gồm /etc/ldap/schema/java.schema 
bao gồm /etc/ldap/schema/misc.schema 
bao gồm /etc/ldap/schema/nis.schema 
bao gồm /etc/ldap/schema/openldap.schema 
bao gồm /etc/ldap/schema/collective.schema 
bao gồm /etc/ldap/schema/pmi.schema 
bao gồm /etc/ldap/schema/ppolicy.schema
cho phép bind_v2
# Xác định ACL toàn cầu để tắt quyền truy cập đọc mặc định.

# Không kích hoạt giới thiệu cho đến SAU KHI bạn có một thư mục làm việc
# dịch vụ VÀ sự hiểu biết về giới thiệu.
#giới thiệu ldap://root.openldap.org

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

# Tải các mô-đun phụ trợ động: 
đường dẫn mô-đun/usr/lib/ldap 
tải mô-đun rwm.la
tải mô-đun back_meta.la 
tải mô-đun back_ldap.la
loglevel -1
            ################################################# #####################
# Định nghĩa máy chủ từ xa LDAP
            ################################################# #####################

#Phông chữ
cơ sở dữ liệu meta
hậu tố "dc=topdomain,dc=vn"
rootdn "cn=admin,dc=topdomain,dc=vn"
rootpw P@ssw0rd

#doamin1.vn - Máy Chủ
uri "ldap://10.0.250.251/ou=domain1.vn,dc=topdomain,dc=vn"
chỉ đọc không 
tắt lần cuối
hậu tốmassage "ou=domain1.vn,dc=topdomain,dc=vn" "DC=domain1,DC=vn"
thuộc tính bản đồ uid sAMAccountName
idassert-bind bindmethod=đơn giản
binddn="CN=ldap,CN=Users,DC=domain1,DC=vn"
thông tin xác thực = "P@ssw0rd"
idassert-authzTừ "dn.exact:cn=admin,dc=topdomain,dc=vn"

#doamin1.vn - Máy Chủ
uri "ldap://10.0.220.45/ou=domain2.vn,dc=topdomain,dc=vn"
chỉ đọc không 
tắt lần cuối
hậu tốmassage "ou=domain2.vn,dc=topdomain,dc=vn" "DC=domain2,DC=vn"
thuộc tính bản đồ uid sAMAccountName
idassert-bind bindmethod=đơn giản
binddn="CN=Quản trị viên LDAP,CN=Người dùng,DC=domain2,DC=vn"
thông tin xác thực = "P@ssw0rd"
idassert-authzTừ "dn.exact:cn=admin,dc=topdomain,dc=vn"

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.