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

2017-11-26 Jørgen Thomsen, [email protected]
Valid XHTML 1.0!

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

GNU pop3d 0.10.3

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


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



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



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


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


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



22/мар/2014 0.10.2 Джордж Томсен [email protected], 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 Джорген Томсен [email protected], 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 [email protected], http://jth.net


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


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



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



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



18/Apr/2010 0.9.11 Jørgen Thomsen [email protected], 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 [email protected], http://jth.net


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


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


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


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


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


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



24/Aug/2003 0.9.9-5 Jørgen Thomsen [email protected], http://jth.net


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


Командні рядки не були зібрані в одну лінію, якщо вони отримані як окремі TCP-пакети (Nicolas Gregoire)



18/січня/2003 р. 0.9.9-4 Джорген Томсен [email protected], http://jth.net


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


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


'%' дозволено як розділювач замість @ у віртуальному імені користувача (електронна адреса)


Невеликі внутрішні зміни.


Додаткова підтримка автором virtdomain.pl (як знайти поштові скриньки)


18/Жов/2002 0.9.9-3 Jørgen Thomsen [email protected], http://jth.net/


Виправлено помилку, коли погана поштову скриньку не містила "Від" як перший рядок.


05/вересень/2002 0.9.9-2 Джорген Томсен [email protected], http://jth.net/


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

Він був збережений без змін


04/вересень/2002 0.9.9-1 Джорген Томсен [email protected], http://jth.net/


Якщо поштова скринька не припиняється каналом рядка (якщо в разі аварійного завершення під час написання повідомлення в ньому)


відбувається нескінченна петля.

Якщо поштова скринька модифікується GNU pop3d, вона буде виправлена.


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


19/серпень/2002 0.9.9 Джорген Томсен [email protected], http://jth.net/


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


Додана чарівна зупинка, спіймаючи сигнали (SIGHUP і SIGTERM).


Останній штрих і номер версії змінено на 0.9.9


19/жовтня 2001 р. Джорген Томсен [email protected], http://jth.net/


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


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


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


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

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


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


http://nullwebmail.sourceforge.net/)



17/жовтня 2001 р. Джорген Томсен [email protected], 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 [email protected], 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 : [email protected] (тільки для віртуальних користувачів) і [email protected] (реальний користувач 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 щасливим.
Пошта для [email protected] доставляється до / home / kvt_dk / Пошта / поштова скринька (див. Нижче).
Пошта для [email protected] доставляється до /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"

Відмовте будь-яке повідомлення не за адресою [email protected] або [email protected]

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

|/usr/local/bin/virtual

Надішліть всю пошту [email protected] у поштові скриньки віртуального домену, щоб змінити рядок заголовка Delivered-To: до правильного.

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

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

Доставте всю пошту [email protected] до поштової скриньки kvt_dk

/etc/postfix/virtual

kvt.dk нічого
[email protected] postmaster
[email protected] jth

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

/etc/postfix/virtual_regexp

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

Цей вираз викликає постфікс для доставки будь-якої пошти з адресами [email protected] та [email protected] з реальним користувачем 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 і додайте порожню лінію до повідомлень, щоб забезпечити відокремлення повідомлень
#

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