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

2017-11-26 Jørgen Thomsen, jth@jth.net
Valid XHTML 1.0!

Віртуальні домени за допомогою GNU pop3d та Postfix

Білоруський переклад Deutsche Übersetzung Tlumaczenie polskie Tradução em português русский переклад словацький переклад Переклад французькою

GNU pop3d 0.10.3

GNU pop3d 0.10.3 готовий. Ви можете завантажити його тут GNU pop3d 0.10.3


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



 12/травень/2017 р. 0.10.3 Джордж Томсен bugs@jth.net, http://jth.net/virtual.html


        
 Нові можливості        
 ---------------

        
 Вимкнення статусу: підтримка заголовка (RFC 2076)

        
 Додано параметр s- до імені користувача входу (див. Файл README)



 22/мар/2014 0.10.2 Джордж Томсен bugs@jth.net, http://jth.net/virtual.html

	
 Нові можливості

	
 ------------

	
 Підтримка IPv6 з конфігурацією - disable - ipv6 і під час виконання --ipv6


	
 Підтримка POP3S за допомогою --enable-pop3s

		
 Встановить робочу конфігурацію xinetd, використовуючи stunnel incl.
 
 сертифікат і ключ зразка

		
 Необхідна умова: встановлено xinetd та stunnel

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


	
 Daemon start support extended --enable-service = SERVICE

		
 тепер підтримує конфігурацію для sysvinit, init, event.d, systemd та single user inetd, xinetd

                
 (можливо, не ідеально :) Перевірте свою установку)


	
 Встановлення root можна вказати під час конфігурації --enable-rootdir = DIR, а також

	
 за допомогою make install ROOT = DIR


	
 додано функцію видалення


	
 Програма pop3client.pl для простого тестування та стрес-тестування сервера pop3

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


	
 вбити-SIGUSR2
  
 відображатиме кілька змінених станів у системному журналі

	
 Daemon: кількість показів і кількість активних дітей, значення прапора, що визначає припинення дії, а також кількість сеансів до цих пір.

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


	
 Зміни

	
 -------

	
 extra.c/pop3_syslog може тепер зареєструватися в STDERR (debug = 0x1yy).

	
 Індивідуальні пріоритети системного журналу зберігаються в pop3_syslog.

	
 Більше ведення журналу за допомогою pop3_syslog.

	
 Зниження використання бібліотечних процедур у pop3_syslog для підвищення стабільності.

	
 Застарілий gethostbyname і gethostbyaddr замінено getaddrinfo і getnameinfo

	
 inet_ntoa замінено на inet_ntop

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


	
 Довідкові тексти очищені та вдосконалені.


	
 Покращений сценарій установки

	
 - обробка додаткових систем запуску демонів

	
 - конфігурація pop3s за допомогою stunnel + xinetd

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

	
 - Підтримка IPv6

	
 - підтримується брандмауер firewalld

	
 - функція деінсталяції

	
 Будь ласка, зверніть увагу, що тестування встановлення було зроблено лише на Linux Fedora 12, 15, 18, 20, тому воно може бути не ідеальним у всіх випадках.

	
 Оскільки GNU-pop3d - це лише одна програма без необхідних файлів конфігурації, її можна вручну помістити в / usr / local / sbin / gnu-pop3d

	
 і увійшов до сценарію запуску вашого системного сервісу


	
 MD5-код ​​оновлено (Gray Watson), додавши підтримку великого / маленького Endian

	
 Остання версія GNU config.guess та config.sub встановлена.


	
 Виправлено помилки	
 ------------------

	
 Більш надійне управління дітьми (зайнятий сервер, DoS-атаки).

	
 Останні зміни в операціях склеп або strcmp мабуть викликали нескінченний цикл під час входу в певні випадки.

	
 Вхід за допомогою вкраденого зашифрованого пароля у віртуальних доменах запобігається.




 07/Feb/2011 0.9.13 Джорген Томсен jth@jth.net, http://jth.net

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

        
 багатьма одночасними клієнтами.
 
 Частково фіксована (може все ще траплятися при використанні цього біта (08) у налагодженій масі)


        
 Bugfix: деякі способи входу не працюють (David B. Cortarello)


        
 Глобальний дитячий лічильник child_procs змінено з int на "volatile sig_atomic_t", щоб зменшити можливість

        
 це не оновлюється належним чином.

        
 Лічильник не завжди був зменшений, тому програма використовувала лише один екземпляр, коли макс дитина

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


        
 Остання версія GNU config.guess та config.sub встановлена.


        
 Makefile.in і configure.in поліпшені та підтримуються для виявлення процесорів Atom та додаткової підтримки

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


        
 Каталог RFC видалено, оскільки RFC доступні в Інтернеті



 26/Apr/2010 0.9.12 Jørgen Thomsen jth@jth.net, http://jth.net

	
 Можливість подвійного видалення змінної назви поштової скриньки у спеціальних ситуаціях помилки, наприклад, при двох одночасних логінах до

	
 одна і та ж поштову скриньку.


	
 config.guess і config.sub відсутні в дистрибутиві


	
 Додано початкове повідомлення до системного журналу



 18/Apr/2010 0.9.11 Jørgen Thomsen jth@jth.net, http://jth.net

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

        
 з спробою уникнути особливостей Linux.


        
 Удосконалення сценарію налаштування, включаючи 64-бітну підтримку ЦП.


        
 Алгоритм Nagle (TCP No Delay) був відключений, що призвело до значного покращення швидкості.


        
 SO_REUSEADDR додано до демону socket для негайного повторного використання сокета після перезапуску.


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

        
 після того як сигнал тепер має бути набагато краще, не залишаючи файли поштової скриньки.


        
 * bug * змінної носилки в дитині завжди була -1, а не фактична розетка (sock2), так що pop3_signal у дитини не закрив гніздо.

        
 Видалені виклики синхронізації (), наприклад, копіювання великих файлів на USB-диск, призведе до зависання, поки всі дані буде записано на диск (кілька хвилин)


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

        
 Параметр налагодження був змінений на бітову маску з 2 шістнадцятирічними цифрами (діти, демон) та додатковою

        
 введені твердження для налагодження.


        
 MAXHOSTNAMELEN збільшено до 128 через імена доменів IDNA


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


        
 оновлена ​​сторінка людини



 18/липень/2007 р. 0.9.10 Jørgen Thomsen jth@jth.net, http://jth.net

        
 Замок fcntl на поштовій скриньці змінено для запису блокування

        
 sync() завжди викликається при розблокуванні

        
 читайте дані від клієнта, коли таймаут включено (select), тепер перевіряє, чи не зламана труба теж викликає негайний вихід,

        
 якщо клієнт раптово зникне.

        
 Коли поштова скринька була скопійована до нової поштової скриньки, деякі MTA (e, g, postfix) можуть продовжувати писати стару поштову скриньку.

        
 Тепер порожня стара скринька зберігається як mailbox.old і об'єднується з новою, якщо вона не порожня в наступному пробігу.



 24/Aug/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 Джорген Томсен 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/вересень/2002 0.9.9-2 Джорген Томсен jth@jth.net, http://jth.net/

        
 Виправлення для диска повністю перешкоджає створенню зміненої поштової скриньки в файл .new.
 
 Він був збережений без змін


 04/вересень/2002 0.9.9-1 Джорген Томсен 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 р. Джорген Томсен jth@jth.net, http://jth.net/

        
 Додано сповіщення про відправлення повідомлення (повернення чека, RFC 2298)

        
 Додані параметри налаштування, щоб уникнути редагування config.h в більшості випадків

        
 Зміна оновлення поштової скриньки після копіювання всередині файлу до створення нового файлу (mailbox.new)

        
 якщо потрібно, і поліпшить копіювання всередині файлу.
 
 Це значно підвищує швидкість роботи веб-пошти.

        
 Введена підтримка класичного статусу: заголовок RFC 2076 (підтримується eq Null Webmail

        
 http://nullwebmail.sourceforge.net/)



 17/жовтня 2001 р. Джорген Томсен jth@jth.net, http://jth.net/

        
 Додано старий патч для кращої обробки дитячих процесів створення та смерті.

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


   

VirtDomain 1.05

Інтерфейс веб-інтерфейсу GUI функціональний як для стандартних віртуальних доменів Postfix, так і для смаку: jth віртуальних доменів. Вона поставляється як одна програма Perl, яка викликається з командного рядка для створення віртуального домену, а також від веб-сервера для адміністрування. Потрібен недавній випуск Postfix VirtDomain 1.05

 #!/usr/bin/perl -w
#**********************************************************************
#
# Utility to administer virtual domains in postfix (both the standard
# ones and those defined in http://jth.net/virtual.html)
#
# This program should reside in /var/www/cgi-bin/virtdomain.pl with global
# read and execute rights (chmod o+rx /var/www/cgi-bin/virtdomain.pl).
#
# Remember to define $main::postfixadmin below !
#
# The first argument to the program determines its function:

# CREATE:  call from commandline as root: create virtual domain by updating
#          /etc/postfix/virtual and virtual_regexp
#          and creating /etc/virtual/domain/passwd and /var/spool/virtual/domain
#          CREATE <domain name> <real user administering the domain>
#                               <passwd> [postfix]

# DELETE:  call from commandline as root: delete virtual domain by updating
#          /etc/postfix/virtual and virtual_regexp
#          and deleting /etc/virtual/domain/passwd and /var/spool/virtual/domain as
#          well as .forward files in the administrators homedir
#          DELETE <domain name> <real user administering the domain> <passwd>

# <blank>
# MAILBOUNCE
#          if called from postfix as mail to user@domain the email on STDIN will be processed
#          according to the setup of the user in /etc/virtual/domain/passwd.
#          MAILBOUNCE: bounce email to unknown users otherwise store in postmaster mailbox

# <blank>  if called from postfix as mail to postmaster@domain or <postfixadmin+postmaster>
#          with the subject "*** Virtual domain update ***" and line 1 is trans=UPDATE....
#          a user will be created/updated/deleted
#          otherwise process email normally as above

# <blank>: if called from a web server displays webpages to update the user
#          base in a virtual domain e,g, http://jth.net/cgi-bin/virtdomain.pl

#
# As a basis the user postmaster must be defined for the domain.
# in the /etc/virtual/domain/passwd file. The user and group ids as
# well as homedir from this user is used for the virtual domain.
# For each virtual user the file homedir/.forward+user--domain is created.
# The web server should have read access to these files as well as
# the /etc/virtual/domain/passwd file.
# The GNU pop3d deamon as maintained by me is supporting this
# virtual domain implementation.
#
# Using this program to deliver the mail for jth style domains is not suitable for
# a high volume system, as loading the Perl interpreter
# has a fairly high initial CPU usage compared to this program (90% of total run time).
# However, using the provision for hooking in another program to deliver the mail
# may be useful. An awk utility may be used instead virtual.awk
#
# ©2002 Jørgen Thomsen jth@jth.net, http://jth.net/virtual.html
# 1.01  2002-08-22 Official release
# 1.02  2003-01-24 Support for new virtual_alias_map parameter and relay_domains behaviour
# 1.03  2003-04-26 Better language support and fix webmail URL in info
# 1.04  2003-05-30 Chars | and " were removed from forwards in input. Now user shall not enter |, but start commands with "
# 1.05  2004-08-06 Modifications specific to jth.net: /var/www/perl, body background changed, no CGI used
#
#**********************************************************************

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

Зміни в GNU pop3d 0.9.8
(включаючи деякі зміни, не пов'язані з віртуальними доменами, наприклад POP-before-SMTP )

Базуючись на власних потребах, я зробив патч для версії GNU-pop3d. 0.9.8
Я також послухав деякі запити до списку розсилки GNU pop3d.
Патч може бути застосований також, якщо вам не потрібні матеріали віртуального домену.

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

Пошук поштової скриньки користувачів виконується як

  1. пошук MAILSPOOLHOME (наприклад/home/user/Mail/mailbox)
  2. пошук _MAILDIR (наприклад var/mail/user)
  3. пошук VIRTUAL_MAILDIR (наприклад /var/spool/virtual/domain/user)
  4. здавайся і використовуй/dev/null

Патчування GNU pop3d

Замість кожного, хто застосовує патчі, я зробив це.

  1. Завантажте виправлене джерело gnu-pop3d-0.9.11.tar.gz
  2. Створіть файл config.h за допомогою
    ./configure
    або
    ./configure --enable-ip-based-virtual
    (також ще один виклик нижче)
  3. Якщо потрібно / хоче визначити MAILSPOOLHOME (наприклад, "/ Mail / mailbox") та / або DEFAULT_DOMAIN в config.h
  4. Скомпілюйте, виконавши марку

Технічні зміни

Впровадження віртуальних доменів у Postfix та GNU pop3d

Причиною невикористання стандартних віртуальних доменів Postfix є подвійне:
1) ця реалізація фокусується на віртуальних доменах з кожним своїм власним адміністратором
2) такі обмеження (цитата з документації Postfix (мій акцент)):
Цей агент був спочатку заснований на місцевому агенті поставки Postfix. Зміни в основному полягали у видаленні коду, який або не був застосований, або який не був безпечним у цьому контексті: псевдоніми, ~ користувач / .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

На моєму сервері поштова інформація зберігається у homeedir /home/user </ 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 / Пошта / поштова скринька (див. Нижче).
Пошта для 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 напр
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 груд. 10 02:52. вперед
-rw-r - r-- 1 kvt_dk mail 25 груд. 10 01:55 .forward + abc--kvt.dk
-rw-r - r-- 1 kvt_dk mail 20 груд. 10 02:53 .forward + kvt--kvt.dk

/home/kvt_dk/.forward

| "вийти 67"

Відмовте будь-яке повідомлення не за адресою abc@kvt.dk або kvt@kvt.dk

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

|/usr/local/bin/virtual

Надішліть всю пошту abc@kvt.dk у поштові скриньки віртуального домену, щоб змінити рядок заголовка Delivered-To: до правильного.

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

/home/kvt_dk/Пошта/поштова скринька

Доставте всю пошту kvt@kvt.dk до поштової скриньки kvt_dk

/etc/postfix/virtual

kvt.dk нічого
postmaster@kvt.dk postmaster
webmaster@kvt.dk jth

Реальні користувачі: postmaster і jth повинні отримувати всі повідомлення поштовому майстру та веб-майстру віртуального домену

/etc/postfix/virtual_regexp

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

Цей вираз викликає постфікс для доставки будь-якої пошти з адресами 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
# поштова скринька
#
# Postfix використовуватиме цю утиліту для доставки повідомлення локальному
# поштова скринька перезаписати рядок заголовка Delivered-To оригінальному одержувачу
# адреса
# 2002-04-11 Виправте рядки "Від" у теці msg і додайте порожню лінію до повідомлень, щоб забезпечити відокремлення повідомлень
#

Доставляйте до поштової скриньки віртуального домену, наприклад, abc@def.kvt.dk, щоб /var/spool/virtual/kvt.dk/abc.
Заголовок Delivered-To: змінено таким чином, щоб він містив оригінальну адресу одержувача конверта (після можливих змін за псевдонімами).