Почтовый сервер · 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/spamassassinSpamassassin
Отредактируйте –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/privateDovecot
Мы настроим 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, и ваш личный полнофункциональный почтовый сервер готов!
Get new posts in your inbox
No spam. Unsubscribe anytime.