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

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


mail:popa3d

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

mail:popa3d [2012/05/11 14:09] (текущий)
Строка 1: Строка 1:
 +====== pop3 сервер ======
  
 +
 +===== Введение =====
 +
 +Очень часто бывает необходимо настроить pop3 сервер,​ но без всяких дополнительных возможностей,​ таких как - поддержка виртуальных доменов и пользователей,​ поддержка квот, поддержка протокола imap, поддержка шифрования SSL/TLS и т.п. Т.е. нам необходимо получить базовый функционал - поддержка протокола pop3 и системных пользователей.
 +
 +Как раз с такой целью и функционалом и был разработан popa3d. Данный pop3 сервер обладает минимальным количеством настроек,​ а если быть более точным,​ то настройки как таковые отсутствуют. Весь pop3 сервер состоит из одного демона - popa3d. Данный демон запускается из супердемона inetd или более современного вариант xinetd. Поэтому единственный конфигурационный файл будет располагаться в <color #​006500>​**/​etc/​xinetd/​popa3d**</​color>​.
 +
 +К сожалению данный проект не развивается с 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 =====
 +Итак, в нашем распоряжении имеется следующая система: ​
 +
 +<cli>
 +# cat /​etc/​redhat-release
 +CentOS release 6.2 (Final)
 +
 +# uname -r
 +2.6.32-220.13.1.el6.x86_64
 +</​cli>​
 +
 +К сожалению данный сервер отсутствует в стандартных репозитариях CentOS/​EPEL/​RPMForge. Поэтому для сборки и установки вы можете взять src.rpm {{:​srpms:​popa3d-1.0.2-1.src.rpm|с моего сайта}}. Устанавливаем сам пакет
 +
 +<cli>
 +# rpm -ivh popa3d-1.0.2-1.src.rpm
 +</​cli>​
 +
 +И собираем rpm. Поддержка maildir уже включена по умолчанию,​ если вам нужно ее выключить,​ то замените **%define USE_MAILDIR 1** на **%define USE_MAILDIR 0**
 +<cli>
 +# 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
 +</​cli>​
 +
 +Устанавливаем сам пакет
 +<cli>
 +# rpm -ivh /​root/​rpmbuild/​RPMS/​x86_64/​popa3d-1.0.2-1.x86_64.rpm
 +Preparing... ​               ###########################################​ [100%]
 +   ​1:​popa3d ​                ###########################################​ [100%]
 +</​cli>​
 +
 +Теперь у нас все готово к настройке и тестированию
 +
 +===== Настройка и тестирование popa3d =====
 +Так как popa3d запускается из супер-демона xinetd, то все, что нужно для настройки это отредактировать файл <color #​006500>​**/​etc/​xinetd.d/​popa3d**</​color>,​ после чего перезапустить сам xinetd
 +<cli>
 +# 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
 +}
 +</​cli>​
 +
 +Последние 5 строк являются не обязательными. Перезапускаем сервис xinetd
 +<cli>
 +# service xinetd restart
 +Stopping xinetd: ​                                          ​[ ​ OK  ]
 +Starting xinetd: ​                                          ​[ ​ OK  ]
 +</​cli>​
 +
 +Собственно на этом настройку можно считать завершенной. Всю почту popa3d будет искать в <color #​006500>​**/​var/​spool/​mail/<​user_name>​**</​color>​. Поэтому вы должны соответствующим образом настроить свой MTA.
 +
 +<cli>
 +# 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 root@sys-adm.local ​ Tue Mar 27 16:57:44 2012
 +Return-Path:​ <​root@sys-adm.local>​
 +X-Original-To:​ test
 +Delivered-To:​ test@sys-adm.local
 +Received: by mail.sys-adm.local (Postfix, from userid 0)
 +        id 22CA821807; Tue, 27 Mar 2012 16:57:44 +0300 (EEST)
 +To: test@sys-adm.local
 +From: root@sys-adm.local
 +Subject: *** popa3d ***
 +Message-Id: <​20120327135744.22CA821807@mail.sys-adm.local>​
 +Date: Tue, 27 Mar 2012 16:57:44 +0300 (EEST)
 +
 +Hello world
 +.
 +quit
 ++OK
 +Connection closed by foreign host.
 +</​cli>​
 +
 +При этом в log файле на сервер будут подобные записи
 +<cli>
 +# 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)
 +</​cli>​
mail/popa3d.txt · Последние изменения: 2012/05/11 14:09 (внешнее изменение)