Настройка popa3d
На сервере под управлением FreeBSD 10.0-RELEASE возникла необходимость открыть 110 pop3 порт для осуществления возможности получения с него почты. Чтобы не городить огород с монстром, подобным dovecot, было принято решение поставить небольшой демон popa3d. Единственной загвоздкой стало желание прослушивать соединения по этому порту на определенном сетевом интерфейсе. |
Установку данного порта произвести совершенно не сложно. Находим его расположение в дереве портов:
[root@mail /]# cd /usr/ports/ [root@mail /usr/ports]# make search name=popa3d Port: popa3d-1.0.3 Path: /usr/ports/mail/popa3d Info: Secure, performance, tiny POP3 daemon Maint: gblach@FreeBSD.org B-deps: R-deps: WWW: http://www.openwall.com/popa3d/
Переходим в нужный каталог и выбираем необходимые нам опции:
[root@mail /usr/ports]# cd /usr/ports/mail/popa3d [root@mail /usr/ports/mail/popa3d]# make config
После этого производим непосредственно установку и запуск демона:
[root@mail /usr/ports/mail/popa3d]# make install clean [root@mail /usr/ports/mail/popa3d]# echo 'popa3d_enable="YES"' >> /etc/rc.conf [root@mail /usr/ports/mail/popa3d]# /usr/local/etc/rc.d/popa3d start Starting popa3d.
Проверку работы демона можно осуществить так:
[root@mail /usr/ports/mail/popa3d]# lsof -i tcp:110 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME popa3d 1626 root 3u IPv4 0xfffff8000aec4800 0t0 TCP *:pop3 (LISTEN)
Либо стандартной командой netstat:
[root@mail /usr/ports/mail/popa3d]# netstat -an | grep 110 tcp4 0 0 *.110 *.* LISTEN
На этом можно было бы остановиться. Но мне не понравилось, что данный демон прослушивает запросы по 110 порту на всех сетевых интерфейсах. Конечно pop3 можно прикрыть на внешнем интерфейсе файерволом (pf или iptables), но я пошел по другому пути. Возникла идея пересобрать демон с опцией, уже включающей ip-адрес необходимого мне сетевого интерфейса.
Для этого нам понадобятся исходники для установки порта. Получить их можно, как я описал в этой статье.
Непосредственно в каталоге порта popa3d даем команду:
[root@mail /usr/ports/mail/popa3d]# make configure
После чего необходимо найти файл(-ы), где описана константа INADDR_ANY. Делается это так:
[root@mail /usr/ports/mail/popa3d]# find ./ -type f -exec grep -il 'INADDR_ANY' {} \; ./work/popa3d-1.0.3/params.h ./work/popa3d-1.0.3/params.h.orig ./work/popa3d-1.0.3/params.h.bak
В файле по абсолютному пути /usr/ports/mail/popa3d/work/popa3d-1.0.3/params.h мы обнаружим секцию с наименованием The address and port to listen on. Осталось только изменить значение по умолчанию 0.0.0.0 на необходимый мне:
[root@mail /usr/ports/mail/popa3d]# nano -w ./work/popa3d-1.0.3/params.h ... /* * The address and port to listen on. */ #define DAEMON_ADDR "172.16.10.8" /* INADDR_ANY */ #define DAEMON_PORT 110 ...
После пересборки и установки порта произведем перезапуск демона и проверку его работы:
[root@mail /usr/ports/mail/popa3d]# /usr/local/etc/rc.d/popa3d restart Stopping popa3d. Waiting for PIDS: 1626. Starting popa3d. [root@mail /usr/ports/mail/popa3d]#netstat -an | grep 110 tcp4 0 0 172.16.10.8.110 *.* LISTEN
Задача достигнута.
P.S. оставлю это замечание тут…
Демон popa3d не будет работать с почтой, если в postfix директива home_mailbox настроена следующим образом: home_mailbox = Maildir/
, т.е. если доставка почты осуществляется в директорию.
Он понимает только такую настройку этой директивы: home_mailbox = Mailbox
…