URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 40067
[ Назад ]

Исходное сообщение
"промежуточный сервер"

Отправлено Purple , 03-Фев-04 09:06 
Требуется установить промежуточный сервер для приема и отсылки почты.
Сейчас почта работает через smart-host наружу, раздача внутри доменых
пользователей, -понятно- по pop3.
Что-то не соображу, с помощью чего это можно сделать?

Содержание

Сообщения в этом обсуждении
"промежуточный сервер"
Отправлено andrew , 03-Фев-04 09:12 
>Требуется установить промежуточный сервер для приема и отсылки почты.
>Сейчас почта работает через smart-host наружу, раздача внутри доменых
>пользователей, -понятно- по pop3.
>Что-то не соображу, с помощью чего это можно сделать?


а какой сакраментальный смысл "промежуточного" сервера?


"промежуточный сервер"
Отправлено Владимир , 03-Фев-04 10:54 
>Требуется установить промежуточный сервер для приема и отсылки почты.
>Сейчас почта работает через smart-host наружу, раздача внутри доменых
>пользователей, -понятно- по pop3.
>Что-то не соображу, с помощью чего это можно сделать?

Привет!
http://www.coruscant.demon.co.uk/mike/sendmail/examples.html
Это конфигурация почтового хаба под sendmail. Перегоняет через себя входящую и исходящую почту. Во время приема производит проверку только домена. Для включения проверки и имен юзеров нужно добавить:
FEATURE(`blacklist_recipients')
И работать с access - файлом.
http://www.opennet.ru/openforum/vsluhforumID1/38136.html - здесь все это обсуждалось.
Если у тебя внутри Exchange, могу поделиться опытом автоматического переноса списка существующих адресов.


"промежуточный сервер"
Отправлено vovka , 03-Фев-04 11:18 
>>Требуется установить промежуточный сервер для приема и отсылки почты.
>>Сейчас почта работает через smart-host наружу, раздача внутри доменых
>>пользователей, -понятно- по pop3.
>>Что-то не соображу, с помощью чего это можно сделать?
>
>Привет!
>http://www.coruscant.demon.co.uk/mike/sendmail/examples.html
>Это конфигурация почтового хаба под sendmail. Перегоняет через себя входящую и исходящую
>почту. Во время приема производит проверку только домена. Для включения проверки
>и имен юзеров нужно добавить:
>FEATURE(`blacklist_recipients')
>И работать с access - файлом.
>http://www.opennet.ru/openforum/vsluhforumID1/38136.html - здесь все это обсуждалось.
>Если у тебя внутри Exchange, могу поделиться опытом автоматического переноса списка существующих
>адресов.
Ага если не сложно и не жалко поделись, очень обяжешь


"промежуточный сервер"
Отправлено Владимир , 03-Фев-04 11:58 
>>>Требуется установить промежуточный сервер для приема и отсылки почты.
>>>Сейчас почта работает через smart-host наружу, раздача внутри доменых
>>>пользователей, -понятно- по pop3.
>>>Что-то не соображу, с помощью чего это можно сделать?
>>
>>Привет!
>>http://www.coruscant.demon.co.uk/mike/sendmail/examples.html
>>Это конфигурация почтового хаба под sendmail. Перегоняет через себя входящую и исходящую
>>почту. Во время приема производит проверку только домена. Для включения проверки
>>и имен юзеров нужно добавить:
>>FEATURE(`blacklist_recipients')
>>И работать с access - файлом.
>>http://www.opennet.ru/openforum/vsluhforumID1/38136.html - здесь все это обсуждалось.
>>Если у тебя внутри Exchange, могу поделиться опытом автоматического переноса списка существующих
>>адресов.
>Ага если не сложно и не жалко поделись, очень обяжешь


Ok! Если чего-то не понятно, уточняй.
Перенос ведется с помощью программы ADMIN.exe (exchange administrator) под 5.5. Файл со всем барахлом выкладывается на FTP машины с Exсhange, оттуда он забирается машиной-mail-hub, из него выдираются e-mail-адреса и происходит сборка access-файла (Perl-скрипт)
Содержимое bat-файла на Exchange:
copy C:\admin\userexport\exportfields.txt C:\admin\userexport\exchusers_abby.txt
D:\Programs\Ex\bin\ADMIN.EXE /e C:\admin\userexport\exchusers_abby.txt /n /o  C:\admin\userexport\userexport_abby.ini


Содежимое exportfields.txt
Obj-Class tab E-mail addresses tab Secondary-Proxy-Addresses
tab - в смысле табуляция (поля задаем)

Содержимое userexport_abby.ini
[Export]
DirectoryService=имя_сервера_Exchange
Basepoint=
ExportObject=All
InformationLevel=Minimal
BasepointOnly=No
RawMode=No
HiddenObjects=Yes
Subcontainers=No
CodePage=0
; 09 = TAB
ColumnSeparator=09
; 37 = %
MVSeparator=37
; 34 = "
QuoteCharacter=34

Все это копирование и остальной изврат с ini - файлами сделаны для экспорта всех адресов, по умолчанию экспортируются только reply-адреса и то, только маилбоксов, не групп.

На FreeBSD для автоматического скачивания поставил lftp-2.6.11

Скрипт на перле-скачивает файло, вытаскивает адреса, формирует и запускает access-файл, следит за тем чтобы ненароком не сотворить глупостей (чтобы все адреса не потереть, такое было :)) и отсылает отчеты о сделанных изменениях. Я не программер, так что извиняйте за возможную топорность.

#!/usr/bin/perl -w
use strict;
my $input = "/etc/mail/userexport";
my $output = "/etc/mail/userexport/access_mailboxes";
my $access = "/etc/mail/access";
my $access_mailboxes = "/etc/mail/userexport/access_mailboxes";
my $access_new = "/etc/mail/userexport/access_new";
my $access_global = "/etc/mail/userexport/access_global";
my $ourdomains = "/etc/mail/userexport/ourdomains";
my $exception = "/etc/mail/userexport/exception";
my $message = "/etc/mail/userexport/message";
my $log = "/etc/mail/userexport/log";
my @ourdomains;
my @exception;
my @mailboxes;
my @old_mailboxes;
my @added_strings;
my @deleted_strings;
my $l;
my $k;
my $string;
my $result;
my $domain;
my $address;
my @fields;
my $count=0;
my $old_count=0;


system "cd /etc/mail/userexport";
system "/usr/local/bin/lftp -e 'set ftp:passive-mode off && mget -E /Mail/userexport/exchusers*.txt && bye' -u user,pass mail.inel.ru";

open OURDOMAINS, "$ourdomains" or die "Cannot find $ourdomains\n";
while (<OURDOMAINS>) {
        chomp;
        push @ourdomains, $_;
}
close OURDOMAINS;

open EXCEPTION, "$exception" or die "Cannot find $exception\n";
while (<EXCEPTION>) {
        chomp;
        push @exception, $_;
}
close EXCEPTION;

open OUTPUT, "$output" or die "Cannot find $output\n";
        while (<OUTPUT>) {
                $old_count ++;
                push @old_mailboxes, $_;
}

close OUTPUT;


foreach (<$input/exchusers_*>) {
        open INPUT, "$_" or die "Cannot find $_\n";
        while (<INPUT>) {
                @fields = split /smtp/i, $_;
                foreach (@fields) {
                        if (/:(.*@.*\.\w*)/) {
                                $address = $1;
                                $domain = ($1 =~ /^.*@(.*\.\w*$)/);
                                $domain = $1;
                                foreach (@ourdomains) {
                                        if ($domain eq $_) {
                                                $result = "noexception";
                                                foreach (@exception) {
                                                        $result = "excpetion" if ($address eq $_);
                                                }
                                                if ($result eq "noexception") {
                                                        $count ++;
                                                        $string = "To:\L$address\E\t\tRELAY\n";
                                                        push @mailboxes, $string;
                                                }
                                        }
                                }
                        }
                }
        }
}

foreach $l (@old_mailboxes) {
        $result = "noconcur";
        foreach $k (@mailboxes) {
                $result = "concur" if ($l eq $k);
        }
        push @deleted_strings, $l if ($result eq "noconcur");
}

foreach $l (@mailboxes) {
        $result = "noconcur";
        foreach $k (@old_mailboxes) {
                $result = "concur" if ($l eq $k);
        }
        push @added_strings, $l if ($result eq "noconcur");
}

#die "Warning, to much changes!!!\nWas:\t$old_count\nNow\t$count\n" if ($old_cou
nt - $count > 10 || $count - $old_count > 10);

if ($old_count - $count > 10 || $count - $old_count > 10) {
        system 'cat /etc/mail/userexport/toomuch | mail -s "Mail base, warning"
admin@inel.ru';
        system 'cat /etc/mail/userexport/toomuch | mail -s "Mail base, warning"
serge@inel.ru';
        die;
}

open OUTPUT, ">$output" or die "Cannot find $output\n";

foreach (@mailboxes) {
#       print "$_";
        print OUTPUT "$_";
}
close OUTPUT;

print "deleted_strings\n @deleted_strings\n";
print "added_strings\n @added_strings\n";
print "Total was addresses: $old_count\n";
print "Total addresses: $count\n";


if ($count != $old_count) {
        print "Sending letter\n";
        open ACCESS_NEW, ">$access_new" or die "Cannot find $access_new\n";
        open ACCESS_MAILBOXES, "$access_mailboxes" or die "Cannot find $access_mailboxes\n";
        while (<ACCESS_MAILBOXES>) {
                print ACCESS_NEW "$_";
        }

        close ACCESS_MAILBOXES;

        open ACCESS_GLOBAL, "$access_global" or die "Cannot find $access_global\n";

        while (<ACCESS_GLOBAL>) {
                print ACCESS_NEW "$_";
        }

        close ACCESS_NEW;
        close ACCESS_GLOBAL;

        my $date = `date "+%d%-%m-%Y_%H:%M:%S"`;
        system "cp $access $access\_\_$date";
        sleep 1;
        system "cp $access_new $access";
        print "$access file relaced,\nold file named $access\_\_$date";
        sleep 1;
        system "cd /etc/mail";
        system "chown -R root /etc/mail/";
        system "makemap hash /etc/mail/access < /etc/mail/access";
        system "chown -R mailnull /etc/mail/";


                open MESSAGE, ">$message" or die "Cannot find $message\n";
                print MESSAGE "deleted_strings\n @deleted_strings\n";
                print MESSAGE "added_strings\n @added_strings\n";
                print MESSAGE "Total was addresses: $old_count\n";
                print MESSAGE "Total addresses now: $count\n";
                print MESSAGE "$access file relaced,\nold file named $access\_\_$date";
                close MESSAGE;
                system 'cat /etc/mail/userexport/message | mail -s "Mail base" admin@domain.ru';

}


"промежуточный сервер"
Отправлено Purple , 03-Фев-04 11:23 
Для andrew: разгрузить сервер от spamasassin-a.
Для Владимира: Помотрел, ключевое слово mailertable?

"промежуточный сервер"
Отправлено flusher , 03-Фев-04 12:06 
>Для andrew: разгрузить сервер от spamasassin-a.
>Для Владимира: Помотрел, ключевое слово mailertable?


Народ а собственно в чём проблема? Только перенос? Или?


"промежуточный сервер"
Отправлено Владимир , 03-Фев-04 12:21 
>Для andrew: разгрузить сервер от spamasassin-a.
>Для Владимира: Помотрел, ключевое слово mailertable?

Сорри, не понял, про что это ты..
В общем из того обсуждения наверное важнее всего это итоговое сообщение:

29. "Sendmail и имена получателей"  
Сообщение от OlAB  on 29-Дек-03, 11:26  (MSK)  
>>обламывает всех с диагностикой mail box disabled
>>а пользователя user@domain.ru обламывает с диагностикой releying denied
>>:-((
>Дык а у тя в relay-domains эти домены прописаны?
>Дай relay-domains
>mailertable и access
>посмотреть...
нет - файла relay-domains у меня не было совсем! ... пока я не начао заморачиваться с такой схемой - все работало без него - достаточно было прописать домен в access...
Сейчас все работает! - спасибо!

привожу для всех рабочее решение:
в файл access надо прописать так:
To:user@domain.ru    OK
.... по строчке на каждого пользователя
To:another@domain.ru OK
To:domain.ru         REJECT

надо создать файл relay-domains
и прописать в него
domain.ru

пересобрать access.db
перезапустить sendmail и все должно заработать...
Большое спасибо Всем за помощь в решении вопроса.

#################################


Единственное, я использую RELAY вместо OK и использую свой текст отлупа

Привожу копию своего m4 (здесь добавлено использование spamcop):

divert(-1)
#
# Copyright (c) 1998, 1999 Sendmail, Inc. and its suppliers.
#       All rights reserved.
# Copyright (c) 1983 Eric P. Allman.  All rights reserved.
# Copyright (c) 1988, 1993
#       The Regents of the University of California.  All rights reserved.
#
# By using this file, you agree to the terms and conditions set
# forth in the LICENSE file which can be found at the top level of
# the sendmail distribution.
#
#

#
#  This is a generic configuration file for 4.4 BSD-based systems,
#  including 4.4-Lite, BSDi, NetBSD, and FreeBSD.
#  It has support for local and SMTP mail only.  If you want to
#  customize it, copy it to a name appropriate for your environment
#  and do the modifications there.
#

divert(0)dnl
VERSIONID(`$Id: generic-bsd4.4.mc,v 8.10 1999/02/07 07:26:02 gshapiro Exp $')dnl
OSTYPE(bsd4.4)dnl
FEATURE(`nouucp', `reject')dnl
FEATURE(`always_add_domain')dnl
MASQUERADE_AS(`domain.ru')dnl
FEATURE(`masquerade_envelope')dnl
FEATURE(`mailertable')dnl
FEATURE(`access_db')dnl
FEATURE(`blacklist_recipients')dnl
FEATURE(`enhdnsbl', `bl.spamcop.net', `"Spam blocked see: http://spamcop.net/bl.shtml?"$&{client_addr}', `t')dnl
DOMAIN(generic)dnl
MAILER(`smtp')dnl
dnl Turn off ident querying, which is usually wrong and slows things down
define(`confTO_IDENT', `0')dnl
dnl Since the bastion box never delivers mail to disk or anything that
dnl generally requires it to assume a user's identity, we can run it as
dnl something other than root, which is very good.
define(`confRUN_AS_USER', `mailnull:mailnull')dnl
dnl Sendmail defaults to giving out all kinds of useful (to hackers)
dnl information in the greeting message.  There are still a number of
dnl ways to get Sendmail to give you that information, but this makes
dnl it a little harder.
define(`confSMTP_LOGIN_MSG', `')dnl
dnl This disables all of the commands that would allow an outsider to
dnl confirm email addresses, see who root mail is sent to, etc.
define(`confPRIVACY_FLAGS', `goaway')dnl
dnl Send a copy of bounce messages to the postmaster
define(`confCOPY_ERRORS_TO', `postmaster')dnl

Используются файлы:
local-host-names
В нем имя того куда идут поста внутрь
exchange.domain.ru

relay-domains
Прописаны внутренние почтовые домены:
domain.ru
domain2.ru

mailertable
domain.ru                 esmtp:[exchange.domain.ru]
domain2.ru                esmtp:[exchange.domain.ru]

access
Используем для безопасности:

To:use1@domain.ru          RELAY
............
To:usern@domain.ru          RELAY

To:use1@domain2.ru          RELAY
............
To:usern@domain2.ru          RELAY

To:domain.ru                              ERROR:"550 Nonexisting mailbox"
To:domain2.ru                              ERROR:"550 Nonexisting mailbox"


Connect:exchange.domain.ru                    RELAY
Connect:123.123.234.234                     RELAY

#       Friends, not spammers
#############################################
Connect:194.226.218.5                   OK
Connect:62.118.251                      OK


################ BLACK LIST #################

66.218.66.81            ERROR:"550 You are blacklisted [66.218.66.81]"
66.218.66.92            ERROR:"550 You are blacklisted [66.218.66.92]"