Инструменты пользователя

Инструменты сайта


mail:popa3d

pop3 сервер

Введение

Очень часто бывает необходимо настроить pop3 сервер, но без всяких дополнительных возможностей, таких как - поддержка виртуальных доменов и пользователей, поддержка квот, поддержка протокола imap, поддержка шифрования SSL/TLS и т.п. Т.е. нам необходимо получить базовый функционал - поддержка протокола pop3 и системных пользователей.

Как раз с такой целью и функционалом и был разработан popa3d. Данный pop3 сервер обладает минимальным количеством настроек, а если быть более точным, то настройки как таковые отсутствуют. Весь pop3 сервер состоит из одного демона - popa3d. Данный демон запускается из супердемона inetd или более современного вариант xinetd. Поэтому единственный конфигурационный файл будет располагаться в /etc/xinetd/popa3d.

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

popa3d имеет встроенную поддержку виртуальных доменов. Хотя в документации говорится, что данный функционал является экспериментальным и недокументированным и использовать данную возможность стоит с осторожностью. Но я хотел бы рассмотреть другую интересную возможность, а именно использование формата maildir. Данный функционал появляется после применение стороннего патча. Примечание: по умолчанию popa3d поддерживает только mailbox

Maildir — это распространённый формат хранения электронной почты, не требующий монопольного захвата файла для обеспечения целостности почтового ящика при чтении, добавлении или изменении сообщений. Каждое сообщение хранится в отдельном файле. Все изменения делаются при помощи атомарных файловых операций, таким образом, монопольный захват файла ни в каком случае не нужен. Maildir — это каталог (чаще всего с именем Maildir) с тремя подкаталогами: tmp, new и cur.

При доставке сообщения оно помещается в файл в подкаталоге tmp, имя файла формируется из текущего времени, имени хоста, идентификатора процесса, создавшего этот файл, и некоторого случайного числа — таким образом, гарантируется уникальность имен файлов. После записи в файл всего сообщения создается жесткая ссылка на этот файл в каталоге new, а текущая ссылка из tmp удаляется — это делается для того, чтобы никакой другой процесс не смог прочитать содержимое сообщения до тех пор, оно не будет записано полностью. По такому же алгоритму при чтении сообщения (это может делать как MUA, так и другой MDA, предоставляющий доступ к Maildir по протоколу POP3 или IMAP) оно перемещается в каталог cur, при этом название файла изменяется: к нему добавляются пометки о прочтении, ответе, удалении и т.д.

К сожалению выбрать поддерживаемый формат можно только во время компиляции. После установки popa3d вы уже не сможете ничего изменить, в отличие от большинства современных pop3/imap серверов. Но так как мы будем собирать popa3d из src.rpm и rpm соответственно, то изменить необходимые настройки и переустановить сам сервер не будет представлять никаких проблем.

Сборка и установка popa3d

Итак, в нашем распоряжении имеется следующая система:

# cat /etc/redhat-release
CentOS release 6.2 (Final)

# uname -r
2.6.32-220.13.1.el6.x86_64

К сожалению данный сервер отсутствует в стандартных репозитариях CentOS/EPEL/RPMForge. Поэтому для сборки и установки вы можете взять src.rpm с моего сайта. Устанавливаем сам пакет

# rpm -ivh popa3d-1.0.2-1.src.rpm

И собираем rpm. Поддержка maildir уже включена по умолчанию, если вам нужно ее выключить, то замените %define USE_MAILDIR 1 на %define USE_MAILDIR 0

# cd /root/rpmbuild/SPECS/
# rpmbuild -ba --target=x86_64 popa3d.spec
Building target platforms: x86_64
Building for target x86_64
warning: line 18: prereq is deprecated: Prereq: xinetd
Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.9LdYC3
+ umask 022
+ cd /root/rpmbuild/BUILD
+ LANG=C
...
...
...
Wrote: /root/rpmbuild/SRPMS/popa3d-1.0.2-1.src.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/popa3d-1.0.2-1.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/popa3d-debuginfo-1.0.2-1.x86_64.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.2jvrlc
+ umask 022
+ cd /root/rpmbuild/BUILD
+ cd popa3d-1.0.2
+ rm -rf /root/rpmbuild/BUILDROOT/popa3d-1.0.2-1.x86_64
+ exit 0

Устанавливаем сам пакет

# rpm -ivh /root/rpmbuild/RPMS/x86_64/popa3d-1.0.2-1.x86_64.rpm
Preparing...                ########################################### [100%]
   1:popa3d                 ########################################### [100%]

Теперь у нас все готово к настройке и тестированию

Настройка и тестирование popa3d

Так как popa3d запускается из супер-демона xinetd, то все, что нужно для настройки это отредактировать файл /etc/xinetd.d/popa3d, после чего перезапустить сам xinetd

# cat /etc/xinetd.d/popa3d
# default: off
service pop3
{
        socket_type     = stream
        protocol        = tcp
        wait            = no
        user            = root
        server          = /usr/sbin/popa3d
        enable          = yes
        log_type        = SYSLOG daemon info
        log_on_success  = PID HOST DURATION
        log_on_failure  = HOST
        instances       = 100
        per_source      = 10
}

Последние 5 строк являются не обязательными. Перезапускаем сервис xinetd

# service xinetd restart
Stopping xinetd:                                           [  OK  ]
Starting xinetd:                                           [  OK  ]

Собственно на этом настройку можно считать завершенной. Всю почту popa3d будет искать в /var/spool/mail/<user_name>. Поэтому вы должны соответствующим образом настроить свой MTA.

# telnet pop.sys-adm.local 110
Trying 192.168.1.10...
Connected to pop.sys-adm.local (192.168.1.10).
Escape character is '^]'.
+OK
user test
+OK
pass 123
+OK
stat
+OK 1 437
retr 1
+OK
From [email protected]  Tue Mar 27 16:57:44 2012
Return-Path: <[email protected]>
X-Original-To: test
Delivered-To: [email protected]
Received: by mail.sys-adm.local (Postfix, from userid 0)
        id 22CA821807; Tue, 27 Mar 2012 16:57:44 +0300 (EEST)
To: [email protected]
From: [email protected]
Subject: *** popa3d ***
Message-Id: <[email protected]>
Date: Tue, 27 Mar 2012 16:57:44 +0300 (EEST)

Hello world
.
quit
+OK
Connection closed by foreign host.

При этом в log файле на сервер будут подобные записи

# cat /var/log/messages
May 11 13:56:53 mail xinetd[11722]: START: pop3 pid=12200 from=::ffff:192.168.1.11
May 11 13:57:01 mail popa3d[12200]: Authentication passed for test
May 11 13:57:01 mail popa3d[12200]: 1 message (437 bytes) loaded
May 11 13:57:09 mail popa3d[12200]: 0 (0) deleted, 1 (437) left
May 11 13:57:09 mail xinetd[11722]: EXIT: pop3 pid=12200 duration=16(sec)
mail/popa3d.txt · Последние изменения: 2012/05/11 14:09 (внешнее изменение)