Почтовый сервер · 5 min read · Dec 25, 2025

Простой почтовый сервер на Arch Linux (Postfix + Dovecot)

Простой почтовый сервер на Arch Linux (Postfix + Dovecot)

Автор: Джеффри Геленс
Версия: 1.3
Дата: 04-12-2009

Введение

Этот учебник описывает, как установить полный почтовый сервер с использованием Postfix и Dovecot на машине Arch Linux или VPS. Этот конкретный учебник основан на моем VPS с 256 МБ. Требуются базовые знания Linux, так как я не описываю каждый шаг подробно.

Базовая система

Базовый образ - Arch Linux 2008.06. После загрузки лучше отключить входы root в вашем SSH-сервере и создать нового пользователя следующим образом:

adduser   
usermod -a -G wheel,users,nobody,mail 

Рейтинг зеркал Arch Linux по скорости является необязательным, но это может ускорить установку:

pacman -Sy  
pacman -S python  
sed -ie'' 's/^#S/S/g' /etc/pacman.d/mirrorlist  
rankmirrors -v /etc/pacman.d/mirrorlist | tee /etc/pacman.d/mirrorlist.new && mv /etc/pacman.d/mirrorlist.new /etc/pacman.d/mirrorlist

Установите необходимые пакеты для этой настройки:

pacman -Syu  
pacman -S sudo base-devel abs

Почтовые серверы

Теперь, когда мы установили базовые пакеты, следующим шагом является установка почтовых серверов. В качестве SMTP-сервера мы установим Postgrey, так как это лучшие инструменты против спама, поэтому давайте установим их тоже. Грейлистинг в данный момент является очень эффективным способом блокировки спама без сканирования самого сообщения, поэтому это не тратит циклы ЦП. На моем сервере он блокирует около 95% всего спама, остальные 5% обрабатываются Spamassassin. Единственный недостаток грейлистинга заключается в том, что входящие электронные письма задерживаются на несколько минут.

pacman -S postfix dovecot spamassassin procmail  
groupadd -g 5001 spamd  
useradd -u 5001 -g spamd -s /sbin/nologin -d /var/lib/spamassassin -m spamd  
chown spamd:spamd /var/lib/spamassassin

Spamassassin

Отредактируйте –max-children по вашему усмотрению. Spamassassin использует много памяти, поэтому для почтового сервера с несколькими пользователями 1 дочерний процесс вполне достаточно.

/etc/conf.d/spamd

SAHOME="/var/lib/spamassassin/"
SPAMD_OPTS="-c --max-children 1 --username spamd -H ${SAHOME} -s ${SAHOME}spamd.log --pidfile /var/run/spamd.pid"

Сертификаты

Сначала нам нужно сгенерировать несколько самоподписанных сертификатов для Dovecot и Postfix. Он запросит пароль, любая случайная строка подойдет, вам не нужно его запоминать.

cd /etc/ssl/certs  
openssl req -new -x509 -newkey rsa:1024 -days 3650 -keyout mail.key -out mail.crt  
openssl rsa -in mail.key -out mail.key  
mv mail.key /etc/ssl/private

Dovecot

Мы настроим Dovecot и Postfix для использования структуры Maildir для хранения электронных писем. Это хранит каждое письмо пользователя в его домашнем каталоге, а не в базе данных. Это нормально для этой настройки, но для большего количества пользователей лучше использовать MySQL или PostgreSQL для хранения. Dovecot будет настроен так, чтобы пользователи могли использовать IMAP и IMAPs (SSL). Также Dovecot имеет встроенный сервер аутентификации SASL, так что нам не нужно настраивать отдельный сервер SASL, что экономит память.

/etc/dovecot/dovecot.conf

protocols = imap imaps
disable_plaintext_auth = yes
log_timestamp = "%b %d %H:%M:%S "
ssl = yes
ssl_cert_file = /etc/ssl/certs/mail.crt
ssl_key_file = /etc/ssl/private/mail.key
mail_location = maildir:~/Maildir
mail_access_groups = mail
auth_username_chars = abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@
protocol imap {
  imap_client_workarounds = delay-newmail tb-extra-mailbox-sep
}
auth default {
  mechanisms = plain login
  passdb pam {
  }
  userdb passwd {
  }
  user = root
  socket listen {
    client {
      path = /var/run/dovecot/auth-client
      user = postfix
      group = postfix
      mode = 0660
    }
  }
}

Postfix

Следующий шаг - Postfix, конфигурационный файл очень сложный. К счастью, я провел все исследования, так что вы можете просто скопировать и вставить почти все. Следующие настройки все еще нужно изменить:

myhostname Это местоположение ваших почтовых серверов (например, mail.example.com). myorigin Это домен после @ в адресах электронной почты (например, jeffrey@ example.com). virtual_alias_domains То же самое, что и myorigin.

/etc/postfix/main.cf

# Пути
queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/lib/postfix
mail_owner = postfix
# Настройки домена
myhostname = mail.example.com
myorigin = example.com
mydestination = $myhostname, localhost.$mydomain, localhost
# Настройки тайм-аута и другие ограничения
delay_warning_time = 4h
unknown_local_recipient_reject_code = 450
minimal_backoff_time = 300s
maximal_backoff_time = 1200s
maximal_queue_lifetime = 1d
bounce_queue_lifetime = 1d
smtp_helo_timeout = 60s
smtpd_soft_error_limit = 3
smtpd_hard_error_limit = 12
# Настройки SMTP
smtpd_tls_cert_file=/etc/ssl/certs/mail.crt
smtpd_tls_key_file=/etc/ssl/private/mail.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:/var/lib/postfix/smtpd_scache
smtp_tls_session_cache_database = btree:/var/lib/postfix/smtp_scache
smtpd_tls_loglevel = 1
smtpd_sasl_auth_enable = yes
#smtp_sasl_auth_enable = yes
smtpd_recipient_restrictions = permit_sasl_authenticated,
                               permit_mynetworks,
                               reject_unauth_destination,
                               check_policy_service inet:127.0.0.1:10030
smtpd_sender_restrictions = permit_sasl_authenticated, permit_mynetworks
smtpd_sasl_security_options = noanonymous
# SASL
smtpd_sasl_type = dovecot
smtpd_sasl_path = /var/run/dovecot/auth-client
# Сетевые настройки
inet_interfaces = all
inet_protocols = ipv4
mynetworks = 127.0.0.0/8
relayhost =
# Настройки электронной почты и почтового ящика
alias_maps = hash:/etc/postfix/aliases
alias_database = $alias_maps
home_mailbox = Maildir/
virtual_alias_domains = example.com
virtual_alias_maps = hash:/etc/postfix/virtual
mailbox_size_limit = 0
# Разное
mailbox_command = /usr/bin/procmail
smtpd_banner = $myhostname ESMTP
biff = no
append_dot_mydomain = no
debug_peer_level = 2
sendmail_path = /usr/sbin/sendmail
newaliases_path = /usr/bin/newaliases
mailq_path = /usr/bin/mailq
setgid_group = postdrop
html_directory = no
manpage_directory = /usr/man
sample_directory = /etc/postfix/sample
readme_directory = no
recipient_delimiter = +

Отредактируйте master.cf, чтобы позволить Postfix фильтровать электронные письма через Postgrey (о котором мы поговорим в следующей главе) и Spamassassin.

/etc/postfix/master.cf

Замените следующую строку:

smtp      inet  n       -       n       -       -       smtpd

на эти две строки:

smtp      inet  n       -       n       -       -       smtpd
  -o content_filter=spamassassin

И добавьте следующие три строки в конец файла:

spamassassin unix -     n       n       -       -       pipe
  user=spamd argv=/usr/bin/perlbin/vendor/spamc -f -e
        /usr/sbin/sendmail -oi -f ${sender} ${recipient}

Настройте правила Spamassassin. Возможно, вам придется немного подкорректировать required_score. Значение по умолчанию 6.31 кажется отличным для меня.

/etc/mail/spamassassin/local.cf

rewrite_header Subject ***SPAM***
required_score 6.31
report_safe 1
use_bayes 1
use_bayes_rules 1
bayes_auto_learn 1

/etc/procmailrc

Спам можно автоматически копировать в папку «Спам», создав этот файл:

DROPPRIVS=yes
DEFAULT=$HOME/Maildir/
MAILDIR=$HOME/Maildir/

:0:
* ^X-Spam-Status: Yes
.Junk/

Создание учетных записей пользователей

Для каждого пользователя электронной почты создайте соответствующие учетные записи, создайте свой собственный скрипт, если не хотите делать все вручную.

useradd -m -G mail -s /sbin/nologin   
cd ~  
umask 077  
mkdir -p Maildir/{cur,new,tmp}  
mkdir -p Maildir/.Drafts/{cur,new,tmp}  
mkdir -p Maildir/.Sent/{cur,new,tmp}  
mkdir -p Maildir/.Trash/{cur,new,tmp}  
chmod 0700 Maildir/{cur,new,tmp}  
chmod 0700 Maildir/.Drafts/{cur,new,tmp}  
chmod 0700 Maildir/.Sent/{cur,new,tmp}  
chmod 0700 Maildir/.Trash/{cur,new,tmp}  
chown -R :users *

Убедитесь, что адреса электронной почты новых пользователей добавлены в виртуальную карту пользователей.

/etc/postfix/virtual

[email protected] jeffrey@localhost

Выполните

postmap /etc/postfix/virtual

после сохранения этого файла.

Postgrey

Postgrey не находится в стандартных репозиториях pacman, поэтому давайте загрузим его из AUR. Убедитесь, что вы выполняете следующие команды как обычный пользователь, а не как root.

cd ~  
wget http://aur.archlinux.org/packages/yaourt/yaourt.tar.gz  
tar xzvf yaourt.tar.gz  
cd yaourt  
makepkg -i  
yaourt --noconfirm -S postgrey

При желании файлы /etc/postfix/postgrey_whitelist_recipients можно отредактировать, чтобы внести в белый список домены и адреса электронной почты, которым вы доверяете. Это полезно, так как эти адреса не будут задерживаться из-за грейлистинга.

Запуск серверов

Наконец! Мы закончили. Теперь давайте запустим все серверы и надеемся, что они все работают.

Отредактируйте /etc/rc.conf и убедитесь, что вы добавили перечисленные демоны:

DAEMONS=(spamd postgrey dovecot postfix)

Это гарантирует, что все демоны будут запущены автоматически при перезагрузке. На данный момент запустите их вручную:

/etc/rc.d/spamd start  
/etc/rc.d/postgrey start  
/etc/rc.d/dovecot start  
/etc/rc.d/postfix start

Добавьте mail.example.com в ваши любимые почтовые клиенты, введите настройки своей учетной записи, при желании включите SSL, и ваш личный полнофункциональный почтовый сервер готов!

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.