Очень часто бывает необходимо настроить 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 соответственно, то изменить необходимые настройки и переустановить сам сервер не будет представлять никаких проблем.
Итак, в нашем распоряжении имеется следующая система:
# 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 запускается из супер-демона 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)