Виртуальные домены с использованием GNU pop3d и Postfix

Original:http://jth.net/virtual.html

GNU pop3d 0.10.2

GNU pop3d 0.10.2 готов. Вы можете скачать его здесь GNU pop3d 0.10.2

ИЗМЕНЕНИЯ / ИСТОРИЯ

22 / марта / 2014 г. 0.10.2 Jørgen Thomsen bugs@jth.net, http://jth.net/virtual.html

Новые возможности

————

Поддержка IPv6 с конфигурацией –disable – ipv6 и во время выполнения –ipv6

Поддержка POP3S с помощью –enable-pop3s

Установит рабочую конфигурацию xinetd, используя stunnel вкл. Образец сертификата и ключ

Предварительное условие: xinetd и stunnel установлены

        Поддержка зашифрованных (C Crypt) паролей в виртуальных доменах (без APOP)

Поддержка запуска Daemon extended –enable-service = SERVICE

Теперь поддерживающая конфигурация для sysvinit, init, event.d, systemd и одиночного пользователя inetd, xinetd

                (Вероятно, не идеально 🙂 Проверьте вашу установку)

Корневой каталог установки можно указать во время настройки –enable-rootdir = DIR, а также

Make install ROOT = DIR

Добавлена ​​функция удаления

Pop3client.pl программа для простого тестирования и стресс-тестирования сервера pop3

Mkpwd.pl для создания и / или шифрования паролей для виртуальных доменов, совместимых с glibc crypt ()

Kill -SIGUSR2 отобразит несколько переменных состояния в syslog

Daemon: количество просмотров и количество активных дочерних элементов, значение флага, определяющего завершение, а также количество сеансов до сих пор.

Ребенок: используется время отображения и команды для пользователя, подключенного с IP-адреса

Изменения

——-

Extra.c / pop3_syslog теперь может регистрироваться в STDERR (debug = 0x1yy).

Отдельные приоритеты syslog хранятся в pop3_syslog.

Больше регистрации через pop3_syslog.

Уменьшено использование библиотечных процедур в pop3_syslog для повышения стабильности.

Устаревшие gethostbyname и gethostbyaddr заменены getaddrinfo и getnameinfo

Inet_ntoa заменен на inet_ntop

Задержка 1 секунда для возврата BAD LOGIN для сдерживания проверки роботами слабых паролей.

Тексты справки очищены и улучшены.

Улучшенный сценарий установки

– обработка дополнительных систем запуска daemon

– настройка pop3s с помощью stunnel + xinetd

– спецификация корневого каталога установки

– Поддержка IPv6

– поддерживается брандмауэр firewalld

– возможность удаления

Пожалуйста, обратите внимание, что тестирование установки было сделано только на Linux Fedora 12, 15, 18, 20, поэтому он может быть не идеальным во всех случаях.

Поскольку GNU-pop3d – это только одна программа без необходимых файлов конфигурации, ее можно вручную поместить в / usr / local / sbin / gnu-pop3d

И вписывается в сценарий запуска ваших системных служб

Обновлен код MD5 (Gray Watson), добавлена ​​поддержка большого / маленького байта

Последние GNU config.guess и config.sub установлены.

Исправлены ошибки

———-

Более надежное дочернее управление (занятый сервер, DoS-атаки).

Недавние изменения функций crypt или strcmp, по-видимому, вызвали бесконечный цикл во время входа в систему в определенных случаях.

Запрещен вход с использованием зашифрованного пароля в виртуальных доменах.

07 / февраля / 2011 г. 0.9.13 Jørgen Thomsen jth@jth.net, http://jth.net

         Журналирование Syslog из подпрограммы обработчика сигнала pop3_signal вызвало зависание процессов, особенно во время DoS-атак или

         Множеством одновременных клиентов. Частично исправлено (может появиться при использовании этого бита (08) в маске отладки)

         Исправление: некоторые методы входа в систему не работали (David B. Cortarello)

         Глобальный дочерний счетчик child_procs изменился с int на «volatile sig_atomic_t», чтобы уменьшить вероятность

         Он не обновляется должным образом.

         Счетчик не всегда уменьшался, поэтому программа использовала только один экземпляр, когда max child

         Процессы были неправильно достигнуты.

         Последние GNU config.guess и config.sub установлены.

         Makefile.in и configure.in улучшены, а поддержка обнаружения процессоров Atom добавлена и больше поддержки для

         Сервисная установка (/ etc / init)

         Каталог RFC удален, поскольку RFC-файлы доступны в Интернете

26 / Апрел / 2010 0.9.12 Jørgen Thomsen jth@jth.net, http://jth.net

Возможна двойная отмена имени переменной почтового ящика в особых ситуациях, например, при одновременном входе в систему

Тот же почтовый ящик.

Config.guess и config.sub отсутствуют в дистрибутиве

Добавлено стартовое сообщение в syslog

18 апреля 2010 г. 0.9.11 Jørgen Thomsen jth@jth.net, http://jth.net

        Программа поддерживается на платформе Linux Fedora без тестирования на других платформах, но

        С попыткой избежать специфических особенностей Linux.

        Усовершенствования сценария configure, включая поддержку 64-разрядных процессоров.

        Алгоритм Nagle (TCP No Delay) был отключен, что вызвало значительное улучшение скорости.

        SO_REUSEADDR добавлен в сокет daemon для немедленного повторного использования сокета после перезапуска.

        Обработка сигналов улучшилась, чтобы быть более портативными (sigaction) и небезопасными вызовами, удаленными из обработчика сигналов. Прекращение действия

        После сигнала теперь должно быть намного лучше, не оставляя файлы mailbox.lock.

        * Bug * переменная sock в дочернем элементе всегда равна -1, а не фактический сокет (sock2), поэтому pop3_signal в дочернем элементе не закрывал сокет.

        Удалены вызовы sync (), например,. Копирование больших файлов на USB-диск приведет к зависанию, пока все данные не будут записаны на диск (несколько минут)

        Условная компиляция отладочных операторов удалена, так как накладные расходы настолько малы.

        Параметр отладки был изменен на битовую маску из двух шестнадцатеричных цифр (дети, демон) и дополнительные

        Добавлены отладочные операторы.

        MAXHOSTNAMELEN увеличился до 128 из-за доменных имен IDNA

        Файл gnu-pop3d для /etc/event.d включен

        Обновлена ​​страница man

18 / июля / 2007 0.9.10 Йорген Томсен jth@jth.net, http://jth.net

        Блокировка fcntl для почтового ящика изменена на блокировку записи

        Sync () всегда вызывается при разблокировке

        Считывать данные с клиента, когда включен тайм-аут (select), теперь проверяет наличие сломанного канала, также вызывающего немедленный выход,

        Если клиент внезапно исчезает.

        Когда почтовый ящик был скопирован в новый почтовый ящик, некоторые MTA (e, g, postfix) могут продолжить запись в старый почтовый ящик.

        Теперь пустой старый почтовый ящик хранится как mailbox.old и сливается с новым, если не пуст при следующем запуске.

24 августа 2003 г. 0.9.9-5 Jørgen Thomsen jth@jth.net, http://jth.net

        Тест для строк заголовка не был достаточно строгим. Статус: и X-Status: считается равным (Jem Berkes)

        Командные строки не были собраны в одну строку, если они были получены в виде отдельных TCP-пакетов (Nicolas Gregoire)

18 / января / 2003 0.9.9-4 Jørgen Thomsen jth@jth.net, http://jth.net

        Поддержка строки заголовка Postfix X-Original-To: для уведомления об отправке сообщений.

        Вычисление UIDL больше не будет включать в себя заголовки X-заголовков, так как они могут быть добавлены некоторыми почтовыми программами.

        «%» Разрешено вместо разделителя @ в качестве виртуального имени пользователя (адрес электронной почты)

        Незначительные внутренние изменения.

        Дополнительная поддержка автора virtdomain.pl автором (как найти почтовый ящик)

18 / окт. / 2002 г. 0.9.9-3 Jørgen Thomsen jth@jth.net, http://jth.net/

Исправлена ​​ошибка, когда в неправильном почтовом ящике в первой строке не было «От».

05 / Sep / 2002 0.9.9-2 Jørgen Thomsen jth@jth.net, http://jth.net/

        Исправление для полного заполнения диска предотвратило запись измененного почтового ящика в .новый файл. Он был сохранен без изменений

04 / сентября / 2002 0.9.9-1 Jørgen Thomsen jth@jth.net, http://jth.net/

        Если почтовый ящик не завершился фидом линии (если произошел сбой при записи сообщения в него)

        Произошел бесконечный цикл. Если почтовый ящик модифицирован GNU pop3d, он будет исправлен.

        Когда диск заполнялся при записи нового почтового ящика, он не был обнаружен, и новый почтовый ящик был усечен

19 / Августа / 2002 0.9.9 Йорген Томсен jth@jth.net, http://jth.net/

        Совместимость с внедренными файлами passwd vm-pop3d (не полностью протестирована)

        Добавлена ​​грациозная остановка путем улавливания сигналов (SIGHUP и SIGTERM).

        Последние штрихи и номер версии изменены на 0.9.9

19 / октября / 2001 Jørgen Thomsen jth@jth.net, http://jth.net/

        Добавлено уведомление об отправке сообщения (получение квитанции, RFC 2298)

        Добавлены опции настройки, чтобы избежать редактирования config.h в большинстве случаев

        Изменено обновление почтового ящика от копирования внутри файла до создания нового файла (mailbox.new)

        Если необходимо, и улучшено копирование внутри файла. Это значительно повышает скорость, особенно для почтовых программ.

        Введена поддержка классической строки заголовка Status: RFC 2076 (поддерживаемая e.q. Null Webmail

        Http://nullwebmail.sourceforge.net/)

17 / октября / 2001 Jørgen Thomsen jth@jth.net, http://jth.net/

        Добавлен старый патч для лучшей обработки создания и смерти детских процессов.

        Теперь дочерние процессы создаются по мере необходимости, и только родительский процесс является постоянным.

VirtDomain 1,05

Интерфейс веб-интерфейса функционален как для стандартных виртуальных доменов Postfix, так и для моего вкуса: виртуальные домены jth. Он поставляется в виде единой программы Perl, которая вызывается из командной строки для создания виртуального домена и с веб-сервера для его администрирования. Требуется последняя версия Postfix VirtDomain 1.05

#! / Usr / bin / perl -w

# ************************************************* *********************

#

# Утилита для администрирования виртуальных доменов в postfix (как стандартная

# Те и те, которые определены в http://jth.net/virtual.html)

#

# Эта программа должна находиться в /var/www/cgi-bin/virtdomain.pl с глобальной

# Читать и выполнять права (chmod o + rx /var/www/cgi-bin/virtdomain.pl).

#

# Не забудьте указать $ main :: postfixadmin ниже!

#

# Первый аргумент программы определяет его функцию:

# CREATE: вызов из командной строки с правами root: создать виртуальный домен путем обновления

# / Etc / postfix / virtual и virtual_regexp

# И создание / etc / virtual / domain / passwd и / var / spool / virtual / domain

# CREATE <имя домена> <реальный пользователь, администрирующий домен>

# <Passwd> [постфикс]

# DELETE: вызов из командной строки с правами root: удаление виртуального домена путем обновления

# / Etc / postfix / virtual и virtual_regexp

# И удаление / etc / virtual / domain / passwd и / var / spool / virtual / domain как

# Также как файлы .forward в администраторах homedir

# DELETE <имя домена> <реальный пользователь, администрирующий домен> <пароль>

# <Blank>

# MAILBOUNCE

# Если вызывается из postfix как почта для пользователя @ domain, будет обработано письмо на STDIN

# В соответствии с настройкой пользователя в / etc / virtual / domain / passwd.

# MAILBOUNCE: электронная почта отказов неизвестным пользователям сохраняется в почтовом ящике postmaster

# <Blank>, если вызывается из postfix как почта в postmaster @ domain или <postfixadmin + postmaster>

# С темой “*** Обновление виртуального домена ***”, а строка 1 – trans = UPDATE ….

# Пользователь будет создан / обновлен / удален

# В противном случае обрабатывать электронную почту как обычно

# <Blank>: если вызов с веб-сервера отображает веб-страницы для обновления пользователя

# Base в виртуальном домене например, http://jth.net/cgi-bin/virtdomain.pl

#

# В качестве основы пользователь postmaster должен быть определен для домена.

# В файле / etc / virtual / domain / passwd. Идентификаторы пользователя и группы:

# Также как homedir от этого пользователя используется для виртуального домена.

# Для каждого виртуального пользователя создается файл homedir / .forward + user-domain.

# Веб-сервер должен иметь доступ на чтение этих файлов, а также

# Файл / etc / virtual / domain / passwd.

# GNU pop3d deamon, поддерживаемый мной, поддерживает это

# Реализация виртуального домена.

#

# Использование этой программы для доставки почты для доменов стиля j не подходит для

# Система с большими объемами, как загрузка интерпретатора Perl

# Имеет довольно высокое начальное использование ЦП по сравнению с этой программой (90% от общего времени выполнения).

# Однако, используя условие для подключения другой программы для доставки почты

# Может быть полезным. Утилита awk может использоваться вместо virtual.awk

#

# © 2002 Jørgen Thomsen jth@jth.net, http://jth.net/virtual.html

# 1.01 2002-08-22 Официальный релиз

# 1.02 2003-01-24 Поддержка новых параметров virtual_alias_map и relay_domains

# 1.03 2003-04-26 Улучшена поддержка языков и исправлен URL-адрес веб-почты в инфо

# 1.04 2003-05-30 Chars | И “были удалены из форвардов на входе. Теперь пользователь не должен вводить |, но запускать команды с”

# 1.05 2004-08-06 Изменения, специфичные для jth.net: / var / www / perl, фон тела изменен, CGI не используется

#

# ************************************************* *********************

Старый, но в основном все еще действительный

Изменения в GNU pop3d 0.9.8

(Включая некоторые изменения, не связанные с виртуальными доменами, например, POP-before-SMTP)

Основываясь на собственных потребностях, я сделал патч для GNU-pop3d vers. 0,9

Я также прослушал некоторые запросы в списке рассылки GNU pop3d.

Патч можно применять также, если вам не нужен материал виртуального домена.

За основу я взял виртуальный патч Джереми Рида, сделал его более общим и добавил мои собственные изменения GNU pop3d:

  • Позволяя пользователям виртуального домена быть реальными пользователями тоже с почтовыми ящиками в другом месте
  • Добавление поддержки APOP для пользователей виртуального домена
  • Добавление домена по умолчанию для удаления, если он используется для реального домена, например. “Userid@domain.com” -> “userid”
  • Добавлено ведение ненужных кодов ошибок команд
  • Добавлено UIDL commmand, предоставляющее уникальные идентификаторы для каждого сообщения
  • Исправлено вычисление размера сообщения
  • Немного очистил код, особенно освободив выделенную память
  • J6: добавлено “from <IP address>” в сообщение журнала “Incoming connection open”
  • J7: добавлен новый msg «Аутентифицированный IP <IP-адрес>» в maillog для поддержки POP-before-SMTP
  • J8: удален (закомментирован) maillog msg “Аутентифицированный IP <IP-адрес>”
  • Добавлено «from <IP address>» в сообщение «Пользователь% s, вошедший в систему с почтовым ящиком% s», так что утилита POP-before-SMTP от Bennett Todd может быть использована без изменений

Поиск почтового ящика пользователей выполняется как

  1. Поиск MAILSPOOLHOME (например, / home / user / Mail / mailbox)
  2. Найти _MAILDIR (например, / var / mail / user)
  3. Поиск VIRTUAL_MAILDIR (например, / var / spool / virtual / domain / user)
  4. Отказаться и использовать / dev / null

Исправление GNU pop3d

Вместо всех, применяющих патчи, я сделал это.

Загрузите пропатченный источник gnu-pop3d-0.9.11.tar.gz

Создайте файл config.h командой

./configure

или

./configure –enable-ip-based-virtual

(См. Также другой вызов ниже)

Если необходимо / нужно определить MAILSPOOLHOME (например, «/ Mail / mailbox») и / или DEFAULT_DOMAIN в config.h

Скомпилируйте, выполнив make

Технические изменения

  • Формат файла паролей виртуального домена был сравнен со стандартным форматом файла / etc / passwd
  • Имя пользователя: пароль: идентификатор пользователя: (идентификатор группы) 🙁 имя пользователя): папка почтового ящика: (shell)
  • Позволяя проверять его командой pwck, например.
  • Pwck -r /etc/virtual/domain.com/passwd
  • Поля, заключенные в скобки, не используются. Каталог почтовых ящиков должен быть ‘.’ Если не используется
  • Поддержка APOP была отключена в распределении 0.9.8. Помимо теста, пользователю APOP не разрешается использовать команду USER для входа в систему. Это не логично, так как пользователи могут использовать разные почтовые программы для проверки почты. Некоторые из них могут не поддерживать APOP
  • Исходный виртуальный патч использует зашифрованные пароли в файле passwd. Чтобы поддерживать APOP из того же файла, пароли теперь незашифрованы
  • Уникальный-идентификатор сообщения вычисляется как дайджест MD5 на начальной строке «From» и все строки заголовка, исключая необходимость в необязательном поле Message-ID: -field
  • Длина буфера в строке увеличилась с 80 до 160 символов, чтобы избежать чтения строки с двумя вызовами fgets в большинстве случаев. Люди, использующие пропорциональные шрифты, могут легко превышать 80 символов в строке
  • Добавлен «UIDL» к возможностям, указанным командой CAPA
  • Добавлено сообщение «Authenticated IP a.b.c.d» в maillog, а также IP-адрес «Входящее соединение открыто» для поддержки POP-before-SMTP

Реализация виртуальных доменов в Postfix и GNU pop3d

Причина отказа от использования стандартных виртуальных доменов Postfix двоякая:

1) эта реализация фокусируется на виртуальных доменах с каждым своим собственным администратором

2) следующие ограничения (цитата из документации Postfix (мой акцент)):

Этот агент изначально был основан на локальном агенте доставки Postfix. Модификации главным образом состояли в удалении кода, который либо не был применим, либо был небезопасен в этом контексте: псевдонимы, файлы ~ user / .forward, доставка в “| command” или в / file / name

Ниже показан один из способов реализации виртуального домена kvt.dk в Postfix и GNU pop3d.

В системе был определен реальный пользователь kvt_dk. Домашний каталог этого пользователя содержит некоторые данные для виртуального домена kvt.dk.

Два пользователя определены в kvt.dk: abc@kvt.dk (только для виртуальных пользователей) и kvt@kvt.dk (реальный пользователь kvt_dk на почтовом сервере)

Реализация основана на Redhat Linux 7.0

GNU pop3d

Джереми Ридз оригинальное описание виртуального патча

Виртуальный патч предполагает следующие файловые структуры:

/ Etc / virtual / <domain> / passwd

 Для определения пользователей, паролей и каталога почтовых ящиков

В этом примере создайте каталог /etc/virtual/kvt.dk

Почтовый ящик по умолчанию для виртуального пользователя:

/ Var / spool / virtual / <domain> / <user>

В этом примере создайте каталог /var/spool/virtual/kvt.dk

На моем сервере почта хранится в домашней папке пользователя / home / <usr> / Mail / mailbox, что требует определения MAILSPOOLHOME в config.h.

У меня также есть только один IP-адрес, и я хочу, чтобы мой основной домен «jth.net» автоматически удалялся из почтовых запросов GNU pop3d.

Я сгенерировал файл config.h командой

./configure –enable-64bit –enable-maildir -enable-default-domain = jth.net –enable-language = DA

Перед компиляцией GNU pop3d я убедился, что в config.h определены следующие константы:

#define MAILSPOOLHOME “/ Mail / mailbox”

#define USE_VIRTUAL 1

#define DEFAULT_DOMAIN “jth.net”

/etc/virtual/kvt.dk/passwd

Создайте этот файл со следующим содержимым:

Kvt: kvtpasswd: 601: 100: kvtname: / home / kvt_dk /:

Abc: abcpasswd: 601: 100: abcname:.:

601 – это идентификатор пользователя kvt_dk. 100 – это groupid (групповая почта на моем сервере). ‘.’ Homedir для abc – это просто сделать pwck счастливым.

Почта для kvt@kvt.dk доставляется в / home / kvt_dk / Mail / mailbox (см. Ниже).

Почта для abc@kvt.dk доставляется в /var/spool/virtual/kvt.dk/abc

Если вы доверяете пользователю kvt_dk, создайте файл passwd в домашнем каталоге пользователя kvt_dk. И связать его в каталоге /etc/virtual/kvt.dk

Ln -s / home / kvt_dk / passwd /etc/virtual/kvt.dk/passwd

Обратите внимание, что здесь может возникнуть риск безопасности, поскольку GNU pop3d будет выполняться с любым идентификатором пользователя, указанным в файле passwd. Остается ли анализировать, является ли это реальной угрозой.

Владелец и разрешения для файлов и каталогов должны быть kvt_dk.mail и 700 e.g.

Chmod 700 /etc/virtual/kvt.dk/etc/virtual/kvt.dk/passwd/var/spool/virtual/kvt.dk

Chown kvt_dk.100 /etc/virtual/kvt.dk/etc/virtual/kvt.dk/passwd/var/spool/virtual/kvt.dk

Postfix

Эта реализация может быть более сложной, чем другие, но она позволяет различным администраторам каждого виртуального домена хранить все в домашнем каталоге администратора домена.

/etc/postfix/main.cf

recipient_delimiter = + 

home_mailbox = Mail/mailbox 

allow_mail_to_commands = forward 

allow_mail_to_files = forward

/home/kvt_dk

-rw-r–r–        1 kvt_dk   mail        12 Dec 10 02:52 .forward 

-rw-r–r–        1 kvt_dk   mail        25 Dec 10 01:55 .forward+abc–kvt.dk 

-rw-r–r–        1 kvt_dk   mail        20 Dec 10 02:53 .forward+kvt–kvt.dk

/home/kvt_dk/.forward

|”exit 67″

Отклонить любое сообщение не для abc@kvt.dk или kvt@kvt.dk

/home/kvt_dk/.forward+abc–kvt.dk

|/usr/local/bin/virtual

Отправьте всю почту для abc@kvt.dk в почтовый ящик виртуального домена, чтобы abc изменить строку заголовка «Доставляется до:» до нужного.

/home/kvt_dk/.forward+kvt–kvt.dk

/home/kvt_dk/Mail/mailbox

Доставить всю почту для kvt@kvt.dk в почтовый ящик kvt_dk

/etc/postfix/virtual

kvt.dk                        anything 

postmaster@kvt.dk             postmaster 

webmaster@kvt.dk              jth

Настоящие пользователи: postmaster и jth должны получать всю почту для почтмейстера и веб-мастера виртуального домена

/etc/postfix/virtual_regexp

/^(.+)@(.+\.)?(kvt\.dk)$/ kvt_dk+$1–$2$3

Это выражение заставит postfix доставлять любую почту с адресами x@kvt.dk и y@z.kvt.dk реальному пользователю kvt_dk, сохраняя получателя исходного конверта в качестве расширения к новому адресу получателя.

/usr/local/bin/virtual

awk  -F: -f /usr/local/bin/virtual.awk

/usr/local/bin/virtual.awk

# J. Thomsen 2002-04-11 Утилита Postfix

# /usr/local/bin/virtual.awk

#

# Используется Postfix для доставки почты в виртуальный домен GNU-pop3d

# Mailbox.

#

# Postfix будет использовать эту утилиту для доставки сообщения локальному

# Mailbox, переписывающий строку заголовка Delivered-To исходному получателю

# адрес.

# 2002-04-11 Исправьте строки «From» в теле сообщения и добавьте пустую строку в сообщения, чтобы обеспечить разделение сообщений

#

Доставить почтовый ящик виртуального домена, например. Abc@def.kvt.dk в /var/spool/virtual/kvt.dk/abc.

Заголовок Delivered-To: изменяется, чтобы содержать оригинальный адрес получателя конверта (после возможного изменения псевдонимами).

Leave a Reply

Your email address will not be published. Required fields are marked *