Устанавливаем почтовый сервер. Часть вторая

Продолжение первой части установки и настройки корпоративного почтового сервера, в которой мы будет устанавливать и настраивать сначала Dovecot, а затем Postfix.

Настройка Dovecot

Устанавливаем Dovecot с поддержкой MySQL, sieve, IMAP и POP3.

# aptitude install dovecot-core dovecot-imapd dovecot-lmtpd dovecot-mysql dovecot-managesieved dovecot-pop3d dovecot-sieve dovecot-postfix

Автоматически будет установлен Postfix, дополнительные пакеты для работы Postfix мы установим немного позже. Установщик Postfix пит ввести первоначальную конфигурацию, просто ответим «Без настройки».

В Server 12.04 dovecot обновился до версии 2.х, в которой конфигурация разнесена по отдельным по отдельным файлам, размещающихся в каталоге /etc/dovecot/conf.d/. Тогда как в предыдущих версиях вся конфигурация

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

# cd /etc/dovecot
# dovecot -n > dovecot.conf.work
# mv dovecot.conf dovecot.conf.bak

Создадим новый файл конфигурации и приступим к его наполнению.

# nano dovecot.conf

# /etc/dovecot/dovecot.conf
#

# Поддерживаемые протоколы
protocols = pop3 imap lmtp sieve

# Logging
log_timestamp = "%Y-%m-%d %H:%M:%S "

# Вместо syslog будем использовать /var/log/dovecot.log
log_path = /var/log/dovecot.log

# Информационные сообщения будем сохранять в этот же файл
info_log_path = /var/log/dovecot.log

# Отключаем  plaintext аутентификацию
disable_plaintext_auth = no

# Включаем ssl
ssl = yes
ssl_cert = /ssl/certs/mydovecot.pem
ssl_key = /ssl/private/yourmail.domain.com.key
ssl_ca = /ssl/certs/cacert.pem
ssl_cipher_list = ALL:!LOW:!SSLv2:ALL:!aNULL:!ADH:!eNULL:!EXP:RC4+RSA:+HIGH:+MEDIUM

# Сообщение приветствия
login_greeting = Welcome to IMAP/POP3 server

# Месторасположение ских почтовых ящиков.
# Существует несколько специальных переменных, которые вы можете использовать:
#
# %u - имя пользователя
# %n - пользовательская часть в user@domain, то же самое что и %u
# если не задана доменная часть
# %d - доменная часть в user@domain, пустая, если не указан домен
# %h - домашний каталог
#
# Смотрите в doc/variables.txt полный список переменных переменных.

# Место расположения почтовых каталогов
mail_location = maildir:/home/vmail/%d/%n:LAYOUT=fs

# Включаем отладку, очень полезно при первоначальной настройке и поиске
# неисправностей. После настройки лучше отключать.
mail_debug = yes

# Допустимый интервал UID для пользователей, по умолчанию 500 и выше.
# Это сделано для того, чтобы быть уверенным в том, что пользователи
# не смогут войти как демоны или другие системные пользователи.
# Примечание. Запрет входа root встроен в бинарник dovecot и не может
# быть изменён, даже если установить first_valid_uid в 0.
first_valid_uid = 500
last_valid_uid = 50000

# Допустимый интервал GID для пользователей
first_valid_gid = 1005
last_valid_gid = 1005

# Пользователь и группа от которых будет ть dovecot
mail_gid = vmail
mail_uid = vmail

# Допустимые символы в имени пользователя
auth_username_chars = abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@

#############################################################################
# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
# ! Следующих три параметра следует использовать только во время настройки  !
# ! и отладки dovecot. После этого их лучше отключить.                      !
# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

# Более высокий уровень информативности. Полезно использовать при поиске
# ошибок, связанных с аутентификацией.
auth_verbose = yes

# Более высокий уровень информативности, используется в целях отладки.
# Например, показывает SQL запросы.
auth_debug = yes

# В случае несовпадения пароля, отображает  и используемую схему
# хранения пароля. Требует, чтобы был установлен auth_debug=yes.
auth_debug_passwords = yes

#
#############################################################################

# Разделённый пробелами список, используемых механизмов аутентификации:
# plain login digest-md5 cram-md5 ntlm rpa apop anonymous gssapi
auth_mechanisms = plain login

# База данных паролей используется для проверки паролей пользователей
# Пользователи могут быть временно отключены с помощью добавления опции deny=yes
# в passdb. Если пользователь найден в базе данных, аутентификация потерпит неудачу.
# База данных с отключёнными пользователями всегда должна быть указана перед остальными,
# так как её проверка идёт первой.
passdb {
    driver = sql
    args = /etc/dovecot/dovecot-sql.conf
}

userdb {
    driver = sql
    args = /etc/dovecot/dovecot-sql.conf
}

# Сервисы
service auth {
     unix_listener /var/spool/postfix/private/dovecot-auth {
         group = postfix
         mode = 0660
         user = postfix
     }
     unix_listener auth-master {
         group = vmail
         mode = 0660
         user = vmail
     }
     unix_listener auth-userdb {
         mode = 0600
         user = vmail
         group = vmail
     }
     user = dovecot
}

service imap-login {
    inet_listener imap {
        port = 143
    }
    inet_listener imaps {
        address = *
        port = 993
        ssl = yes
    }
}

service pop3-login {
    inet_listener pop3 {
        port = 110
    }
    inet_listener pop3s {
        address = *
        port = 995
        ssl = yes
    }
}

service lmtp {
    unix_listener /var/spool/postfix/private/dovecot-lmtp {
        group = postfix
        mode = 0660
        user = postfix
    }
}

service managesieve-login {
    inet_listener sieve {
        port = 4190
    }
}

# Протоколы
protocol lda {
     hostname = yourdomain.com
     mail_plugins = $mail_plugins sieve
     postmaster_address = postmaster@yourdomain.com
}

protocol imap {
    imap_client_workarounds = tb-extra-mailbox-sep
    mail_plugins = autocreate
}

protocol pop3 {
    pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
    pop3_uidl_format = %08Xu%08Xv
}

protocol sieve {
    managesieve_max_line_length = 65536
    mail_max_userip_connections = 10
}

# Плагины
plugin {
    auth_socket_path = /var/run/dovecot/auth-master

    # Plugin: autocreate. Создаем и подписываемся на папки IMAP.
    autocreate = INBOX
    autocreate2 = Sent
    autocreate3 = Trash
    autocreate4 = Drafts
    autocreate5 = Junk
    autosubscribe = INBOX
    autosubscribe2 = Sent
    autosubscribe3 = Trash
    autosubscribe4 = Drafts
    autosubscribe5 = Junk
    sieve = ~/.dovecot.sieve
    sieve_dir = ~/sieve
    sieve_max_script_size = 1M
    sieve_max_actions = 32
}

Создадим конфигурационный файл с данными для подключения к базе данных dovecot-sql.conf.


# touch dovecot-sql.conf

driver = mysql
connect = host=localhost dbname=maildbname user=mailadmin password=mailadmin_password

password_query = SELECT username AS user, domain, password FROM mailbox WHERE username = '%u' AND domain = '%d' AND active = 1

user_query = SELECT CONCAT('/home/vmail/', maildir) AS home, 1005 AS uid, 1005 AS gid FROM mailbox WHERE username = '%u' AND domain = '%d' AND active = 1
iterate_query = SELECT username AS user FROM mailbox

где

  • maildbname — название базы данных
  • mailadmin — имя пользователя базы данных
  • mailadmin_password — пароль пользователя mailadmin

Поправим права доступа к лог-файлу /var/log/dovecot.log


# chown vmail:vmail /var/log/dovecot.log

Теперь можно перегрузить dovecot, и убедиться что он работает.


# invoke-rc.d dovecot restart
# netstat -tap | grep dovecot

В результате выполнения последней команды у вас должно отобразиться нечто подобное:


tcp        0      0 *:pop3                  *:*                     LISTEN      18309/dovecot
tcp        0      0 *:imap2                 *:*                     LISTEN      18309/dovecot
tcp        0      0 *:sieve                 *:*                     LISTEN      18309/dovecot
tcp        0      0 *:imaps                 *:*                     LISTEN      18309/dovecot
tcp        0      0 *:pop3s                 *:*                     LISTEN      18309/dovecot

Так же стоит заглянуть в /var/log/dovecot.log


# tail -f /var/log/dovecot.log

Осталось настроить ротацию лог-файла. Создадим файл dovecot в каталоге /etc/logrotate.d/


# cd /etc/logrotate.d
# nano dovecot

Добавим в созданный файл следующее содержимое:


/var/log/dovecot.log {
    daily
    missingok
    rotate 5
    compress
    delaycompress
    notifempty
    create 660 vmail vmail
    sharedscripts
    postrotate
        /etc/init.d/dovecot restart > /dev/null
    endscript
}

Чтобы посмотреть как это будет работать, выполним команду


# logrotate -d /etc/logrotate.d/dovecot

Посмотрим, что будет происходить при выполнении нашего конфигурационного файла. Теперь осталось посмотреть весь в действии. Выполним команду


# logrotate -v -f /etc/logrotate.d/dovecot

На этом dovecot можно считать завершённой.

Sieve

Пару слов про SIEVE — это эдакий скриптовый язык, позволяющий производить сортировку входящей почты прямо на сервере. Т.е. нет необходимости во всех почтовых клиентах, которые вы используете, прописывать правила для рассовывания писем по папкам — всё делает Dovecot LDA в процессе доставки. Это работает только в том случае, если все ваши почтовые клиенты подсоединяются к почтовому серверу по протоколу IMAP.

ManageSIEVE — это протокол для управления этими скриптами прямо из почтового клиента. Я пользуюсь Thunderbird с соответствующим ом.

Посмотрите представленные ниже ссылки по SIEVE, и тогда, может быть, вы поймёте и определитесь — нужен вам SIEVE или не нужен.

Настройка Postfix

Так как Postfix у нас уже был установлен вместе с Dovecot, нам необходимо установить ещё несколько дополнительных пакетов.


# aptitude install postfix-mysql postfix-pcre

После завершения скачивания и установки пакетов, перейдём в каталог Postfix, создадим необходимые нам каталоги и файл конфигурации main.cf.


# cd /etc/postfix
# touch main.cf
# mkdir sql
# mkdir config

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

Файл /etc/postfix/sql/mysql_virtual_domains_maps.cf


user = mailadmin
password = mailadmin_password
hosts = localhost
dbname = maildbname
query = SELECT domain FROM domain WHERE domain = '%s' AND active = 1

Файл /etc/postfix/sql/mysql_virtual_alias_domain_maps.cf


user = mailadmin
password = mailadmin_password
hosts = localhost
dbname = maildbname
query = SELECT goto FROM alias, alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('%u', '@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active = 1

Файл /etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf


user = mailadmin
password = mailadmin_password
hosts = localhost
dbname = maildbname
query = SELECT maildir FROM mailbox, alias_domain WHERE alias_domain.alias_domain = '%d' AND mailbox.username = CONCAT('%u', '@', alias_domain.target_domain) AND mailbox.active = 1 AND alias_domain.active = 1

Файл /etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf


user = mailadmin
password = mailadmin_password
hosts = localhost
dbname = maildbname
query = SELECT goto FROM alias, alias_domain WHERE alias_domain.alias_domain = '%d' AND alias.address = CONCAT('@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active = 1

Файл /etc/postfix/sql/mysql_virtual_mailbox_maps.cf


user = mailadmin
password = mailadmin_password
hosts = localhost
dbname = maildbname
query = SELECT maildir FROM mailbox WHERE username = '%s' AND active = 1

Файл /etc/postfix/sql/mysql_virtual_emails_maps.cf


user = mailadmin
password = mailadmin_password
hosts = localhost
dbname = maildbname
query = SELECT username FROM mailbox WHERE username = '%s' AND active = 1

где

  • maildbname — название базы данных
  • mailadmin — имя пользователя базы данных
  • mailadmin_password — пароль пользователя mailadmin

Выставим права доступа


# chmod 640 /etc/postfix/sql/mysql_*.cf
# chown -R postfix /etc/postfix/sql

Приступим к наполнению конфигурационного файла main.cf.


# /etc/postfix/main.cf

# Common config
queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/lib/postfix
data_directory = /var/lib/postfix
myhostname = yourmail.domain.com
mydomain = domain.com
inet_interfaces = all
inet_protocols = ipv4
mydestination = $mydomain, $myhostname, localhost.$mydomain, localhost, localhost.localdomain

mynetworks = 127.0.0.0/8, 192.168.0.0/24
unknown_local_recipient_reject_code = 550

alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
smtpd_banner = $myhostname ESMTP $mail_name
biff = no
relayhost =
mailbox_size_limit = 0
virtual_mailbox_limit = 0
recipient_delimiter = +

# Проверяем заголовки
header_checks = regexp:/etc/postfix/config/header_checks
mime_header_checks = regexp:/etc/postfix/config/mime_header_checks

# TLS parameters
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

# Время, в течении которого письма будут находится в очереди
# Любят у меня пользователи отправлять почту на не существующие
# адреса, чтобы в очереди не висело, поставил 1 день
maximal_queue_lifetime = 1d
bounce_queue_lifetime = 1d

queue_run_delay=5m
minimal_backoff_time=5m
maximal_backoff_time=10m

# Ограничение на размер письма в байтах
# Я своим поставил ограничение в 25 мегабайт, хотя больше 20-25 мегабайт
# никто ещё не отправлял
message_size_limit = 26214400

#Дополнительные файлы конфигурации
sql_dir = /etc/postfix/sql

# Таблица просмотра виртуальных доменов
virtual_mailbox_domains = proxy:mysql:$sql_dir/mysql_virtual_domains_maps.cf

# Таблицы просмотра почтовых псевдонимов для виртуальных почтовых доменов/ящиков
virtual_alias_maps = proxy:mysql:$sql_dir/mysql_virtual_alias_maps.cf, proxy:mysql:$sql_dir/mysql_virtual_alias_domain_maps.cf, proxy:mysql:$sql_dir/mysql_virtual_alias_domain_catchall_maps.cf

# Таблицы просмотра каталогов для хранения почты
virtual_mailbox_maps = proxy:mysql:$sql_dir/mysql_virtual_mailbox_maps.cf, proxy:mysql:$sql_dir/mysql_virtual_alias_domain_mailbox_maps.cf

# Нужен чтобы по MAIL FROM узнать логин и затем сверить с логином, по которому прошла аутентификация.
smtpd_sender_login_maps = proxy:mysql:$sql_dir/mysql_virtual_emails_maps.cf

# Путь до каталога хранилища почты
virtual_mailbox_base = /home/vmail

home_mailbox = Maildir/
mailbox_command = /usr/lib/dovecot/deliver -c /etc/dovecot/dovecot.conf -m "${EXTENSION}"

virtual_uid_maps = static:1005
virtual_gid_maps = static:1005

virtual_minimum_uid = 1005

mail_owner = postfix
setgid_group = postdrop

mailbox_transport = dovecot
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1

# Поддержку sasl ризации
smtpd_sasl_auth_enable = yes

# Поддержки старых версий почтовых клиентов, например  Outlook Express 4 и Microsoft Exchange 5, использующих другую форму команды AUTH
broken_sasl_auth_clients = yes

smtpd_sasl_local_domain = $myhostname
smtpd_sasl_security_options = noanonymous
smtpd_sasl_authenticated_header = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/dovecot-auth

# Требуем, чтобы удалённый SMTP клиент представлял себя в начале SMTP сессии с помощью команды HELO или EHLO.
smtpd_helo_required = yes

# Всегда отправлять EHLO вначале SMTP сессии
smtp_always_send_ehlo = yes

# Отключает SMTP команду VRFY. В результате чего, невозможно определить существование определённого
# ящика. Данная техника (применение команды VRFY) используется ерами для сбора имён почтовых ящиков.
disable_vrfy_command = yes

# Сообщать ли клиентам о возможности использования TLS (шифрования соединения)
smtpd_use_tls = yes
smtpd_tls_received_header = yes
smtpd_tls_mandatory_protocols = SSLv3, TLSv1
smtpd_tls_mandatory_ciphers = medium
smtpd_tls_auth_only = yes
tls_random_source = dev:/dev/urandom

smtpd_tls_key_file = /etc/ssl/private/yourmail.domain.com.key
smtpd_tls_cert_file = /etc/ssl/certs/postfix.pem
smtpd_tls_CAfile = /etc/ssl/certs/cacert.pem

# Список таблиц, которым разрешено работать через proxymap (кеширует запросы и снижает нагрузку на БД)
proxy_read_maps = $local_recipient_maps $mydestination $smtpd_sender_login_maps $virtual_alias_maps $virtual_mailbox_domains $virtual_mailbox_maps $relay_recipient_maps $mynetworks

# Создаём классы:
smtpd_restriction_classes = verify_sender, rbl_cbl_abuseat_org, rbl_sbl_spamhaus_org, rbl_dul_ru, rbl_spamcop, white_client_ip, black_client_ip, block_dsl, helo_access, white_client, mx_access, helo_access_db

# Описание классов:
verify_sender = reject_unverified_sender, permit
rbl_cbl_abuseat_org = reject_rbl_client cbl.abuseat.org
rbl_dul_ru = reject_rbl_client dul.ru
rbl_sbl_spamhaus_org = reject_rbl_client sbl.spamhaus.org
rbl_spamcop = reject_rbl_client bl.spamcop.net

white_client_ip = check_client_access hash:/etc/postfix/config/white_client_ip
black_client_ip = check_client_access hash:/etc/postfix/config/black_client_ip
block_dsl = regexp:/etc/postfix/config/block_dsl
helo_access = check_helo_access pcre:/etc/postfix/config/helo_checks
helo_access_db = check_helo_access hash:/etc/postfix/config/helo_checks_db
white_client = check_sender_access pcre:/etc/postfix/config/white_client
mx_access = check_sender_mx_access cidr:/etc/postfix/config/mx_access

### Restrictions
# Проверки клиентского компьютера (или другого почтового сервера),
# который соединяется с сервером postfix для отправки письма
smtpd_client_restrictions = black_client_ip,
                            permit_mynetworks,
                            permit_sasl_authenticated,
                            reject_unauth_destination,
                            white_client_ip,
                            reject_unauth_pipelining,
                            helo_access,
                            block_dsl,
                            reject_unknown_address,
                            reject_unknown_recipient_domain,
                            reject_unknown_sender_domain,
                            rbl_dul_ru,
                            rbl_sbl_spamhaus_org,
                            rbl_spamcop,
                            rbl_cbl_abuseat_org,
                            permit

# временно убрал из-за кучи кривых серверов
smtpd_helo_restrictions = permit_mynetworks,
                          permit_sasl_authenticated,
                          helo_access,
                          helo_access_db,
                          reject_invalid_helo_hostname,
                          reject_non_fqdn_helo_hostname,
                          reject_unknown_helo_hostname,
                          permit

# Проверки исходящей или пересылаемой через нас почты
smtpd_sender_restrictions = reject_unknown_sender_domain,
                            permit

# Правила приема почты нашим сервером:
smtpd_recipient_restrictions = hash:/etc/postfix/config/access,
                               reject_unknown_sender_domain,
                               reject_unknown_recipient_domain,
                               reject_unauth_pipelining,
                               permit_mynetworks,
                               permit_sasl_authenticated,
                               reject_unauth_destination,
                               reject_multi_recipient_bounce,
                               permit

smtpd_data_restrictions = reject_unauth_pipelining,
                          reject_multi_recipient_bounce,
                          permit

# Пропустить серверы, которые приветствуют нас кодом состояния 5xx
smtp_skip_5xx_greeting = no

# Отклонение писем с несуществующим адресом отправителя
smtpd_reject_unlisted_sender = yes

# Отклонение писем с несуществующим адресом получателя
smtpd_reject_unlisted_recipient = yes

# Пересылка копии всех исходящих писем
sender_bcc_maps = hash:/etc/postfix/config/sender_bcc_maps
################################################################################
# Чтобы не возникало вопросов, «а как…»
# Пересылка копии всех входящих писем
#recipient_bcc_maps = hash:/etc/postfix/config/recipient_bcc_maps
#
# Пересылка всей исходящей и входящей почты
#always_bcc = sender@yourdomain.com
################################################################################

Создадим необходимые файлы, которые упоминаются в main.cf. Для пересылки копий всей исходящей почты создаём файл sender_bcc_maps


# nano /etc/postfix/config/sender_bcc_maps

Если нам надо копировать всю исходящую почту не взирая на лица и должности, тогда в файл добавим следующее содержимое


@yourdomain.com    sender@yourdomain.com

где

  • sender@yourdomain.com — специально созданный обыкновенный почтовый ящик с любым произвольным именем

Если же надо копировать исходящую почту только от определённых пользователей, то файл будет иметь следующий вид


user1@yourdomain.com    sender@yourdomain.com
user2@yourdomain.com    sender@yourdomain.com
user4@yourdomain.com    sender@yourdomain.com

где

  • sender@yourdomain.com — специально созданный обыкновенный почтовый ящик с любым произвольным именем

После любых изменений в файле sender_bcc_maps необходимо выполнить команду


# postmap /etc/postfix/config/sender_bcc_maps

Создадим файл исключающий доступ из-вне к тому или иному ящику, т.е. письмо отправленное на такой адрес, например, с mail.ru адресату не будет доставлено.


# nano /etc/postfix/config/access

Один адрес на одну строку


user1@domain.com    permit_mynetworks,reject
user2@domain.com    permit_mynetworks,reject
group1@domain.com   permit_mynetworks,reject

В header_checks мы запрещаем приём сообщений, в которых имеются исполняемых файлов, и которые, как правило, не пересылаются по электронной почте и чаще всего являются вирусами или троянскими программами. В последнее время обратил внимание, что мои пользователи стали по почте перекидывать мультимедиа файлы (в основном ) другу другу (даже сидя в одной комнате). Объяснять, что для обмена файлами подобного типа и не только, имеется «файлопомойка», устал. Поэтому проще сразу ограничить такую возможность.

Создадим файл /etc/postfix/config/header_checks, где напишем правила (одна строка для одного расширения). В последних шести строках написаны правила, блокирующее сообщения, содержащие определённые поля в заголовке.


/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.acm/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.ax/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.bat/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.bin/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.bpl/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.cat/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.chm/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.cmd/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.com/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.cpl/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.dat/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.dll/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.dpl/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.drv/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.exe/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.hlp/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.inf/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.ini/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.msc/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.nls/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.ocx/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.olb/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.pif/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.rom/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.scr/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.sys/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.tlb/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.vbs/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.vxd/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.669/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.aac/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.aif/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.aiff/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.amf/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.au/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.far/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.it/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.itz/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.kar/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.m3u/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.m4a/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.mdz/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.mid/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.midi/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.miz/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.mmf/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.mod/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.mp1/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.mp2/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.mp3/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.mp4/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.mtm/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.nsa/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.nst/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.ogg/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.okt/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.pls/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.ptm/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.rmi/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.s3m/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.s3z/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.snd/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.stm/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.stz/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.ult/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.voc/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.vaw/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.wma/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.xm/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.xmz/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.asf/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.avi/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.m2v/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.mov/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.mpeg/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.mpg/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.nsv/ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\./ REJECT
/^Content-(Type|Disposition):.*name[[:space:]]*=.*\.wmv/ REJECT
/^Bel-Tracking: .*/    REJECT
/^Hel-Tracking: .*/    REJECT
/^Kel-Tracking: .*/    REJECT
/^BIC-Tracking: .*/    REJECT
/^Lid-Tracking: .*/    REJECT
/^X-Mailer: Avalanche/ REJECT

Создадим файл /etc/postfix/config/mime_header_checks, который также должен содержать по одной строке для каждого типа расширения.


/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)acm)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)ax)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)bat)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)bin)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)bpl)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)cat)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)chm)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)cmd)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)com)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)cpl)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)dat)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)dll)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)dpl)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)drv)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)exe)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)hlp)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)inf)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)ini)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)msc)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)nls)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)ocx)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)olb)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)pif)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)rom)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)scr)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)sys)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)tlb)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)vbs)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)vxd)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)669)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)aac)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)aif)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)aiff)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)amf)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)au)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)far)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)it)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)itz)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)kar)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)m3u)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)m4a)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)mdz)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)mid)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)midi)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)miz)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)mmf)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)mod)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)mp1)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)mp2)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)mp3)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)mp4)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)mtm)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)nsa)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)nst)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)ogg)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)okt)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)pls)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)ptm)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)rmi)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)s3m)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)s3z)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)snd)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)stm)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)stz)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)ult)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)voc)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)vaw)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)wma)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)xm)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)xmz)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)asf)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)avi)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)m2v)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)mov)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)mpeg)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)mpg)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)nsv)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)qt)(\?=)?"?\s*$/ REJECT
/^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)wmv)(\?=)?"?\s*$/ REJECT

Создадим файл с чёрным списком клиентов /etc/postfix/config/black_client_ip. Этот список адресов будем всегда блокировать.


/111\.222\.333\.444/      REJECT
/555\.666\.777\.888/      REJECT

После каждой правки файла /etc/postfix/config/black_client_ip выполняем команду


# postmap /etc/postfix/config/black_client_ip

По аналогии с файлом чёрного списка, создадим файл с белым списком /etc/postfix/config/white_client_ip, в который добавляем IP-адреса надёжных и проверенных клиентов.


/111\.222\.333\.444/      OK
/555\.666\.777\.888/      OK

И после каждой правки файла /etc/postfix/config/white_client_ip выполняем команду


# postmap /etc/postfix/config/white_client_ip

Создадим файл /etc/postfix/config/block_dsl и добавим в него следующее содержимое


/^dsl.*\..*/i                   553 AUTO_DSL We aren't accept direct connection not from dedicated SMTP servers. Please use your internet provider SMTP Server.
/.*\.dsl\..*/i                  553 AUTO_DSL2 We aren't accept direct connection not from dedicated SMTP servers. Please use your internet provider SMTP Server.
/[a|x]dsl.*\..*\..*/i           553 AUTO_[A|X]DSL We aren't accept direct connection not from dedicated SMTP servers. Please use your internet provider SMTP Server.
/client.*\..*\..*/i             553 AUTO_CLIENT We aren't accept direct connection not from dedicated SMTP servers. Please use your internet provider SMTP Server.
/cable.*\..*\..*/i              553 AUTO_CABLE We aren't accept direct connection not from dedicated SMTP servers. Please use your internet provider SMTP Server.
/pool\..*/i                     553 AUTO_POOL We aren't accept direct connection not from dedicated SMTP servers. Please use your internet provider SMTP Server.
/.*dial(\.|-).*\..*\..*/i       553 AUTO_DIAL We aren't accept direct connection not from dedicated SMTP servers. Please use your internet provider SMTP Server.
/ppp.*\..*/i                    553 AUTO_PPP We aren't accept direct connection not from dedicated SMTP servers. Please use your internet provider SMTP Server.
/dslam.*\..*\..*/i              553 AUTO_DSLAM We aren't accept direct connection not from dedicated SMTP servers. Please use your internet provider SMTP Server.
/dslb.*\..*\..*/i               553 AUTO_DSLB We aren't accept direct connection not from dedicated SMTP servers. Please use your internet provider SMTP Server.
/node.*\..*\..*/i               553 AUTO_NODE We aren't accept direct connection not from dedicated SMTP servers. Please use your internet provider SMTP Server.
/.*\.dynamicIP\..*/i            553 AUTO_DYNAMIC We aren't accept direct connection not from dedicated SMTP servers. Please use your internet provider SMTP Server.
/[ax]dsl.*\..*\..*/i            REJECT Your message looks like SPAM 01
/\.dsl.*\..*\..*/i              REJECT Your message looks like SPAM 02
/cable.*\..*\..*/i              REJECT Your message looks like SPAM 03
/client.*\..*\..*/i             REJECT Your message looks like SPAM 04
/dhcp.*\..*\..*/i               REJECT Your message looks like SPAM 05
/dial.*\..*\..*/i               REJECT Your message looks like SPAM 06
/dialup.*\..*\..*/i             REJECT Your message looks like SPAM 07
/dslam.*\..*\..*/i              REJECT Your message looks like SPAM 08
/node.*\..*\..*/i               REJECT Your message looks like SPAM 09
/pool.*\..*\..*/i               REJECT Your message looks like SPAM 10
/ppp.*\..*\..*/i                REJECT Your message looks like SPAM 11
/user.*\..*\..*/i               REJECT Your message looks like SPAM 12
/[0-9]+-[0-9]+/                 REJECT Invalid hostname (D-D) (dsl)
/(modem|dia(l|lup)|cp[ce]|dsl|p[cp]p|cable|catv|poo(l|les)|pppoe|dhcp|client|customer|user|host|[0-9]{4,})(-|_|\.|[0-9])/ REJECT Invalid hostname (client)

Создадим файл /etc/postfix/config/helo_checks и добавим в него следующее содержимое


/^\[?10\.\d{1,3}\.\d{1,3}\.\d{1,3}\]?$/ REJECT Address in RFC 1918 private network
/^\[?192\.\d{1,3}\.\d{1,3}\.\d{1,3}\]?$/ REJECT Address in RFC 1918 private network
/^\[?172\.\d{1,3}\.\d{1,3}\.\d{1,3}\]?$/ REJECT Address in RFC 1918 private network
/\d{2,}[-\.]+\d{2,}/ REJECT Invalid hostname (D-D)
/^(((newm|em|gm|m)ail|yandex|rambler|hotbox|chat|rbc|subscribe|spbnit)\.ru)$/ REJECT Faked hostname ($1)
/^(((hotmail|mcim|newm|em)ail|post|hotbox|msn|microsoft|aol|news|compuserve|yahoo|google|earthlink|netscape)\.(com|net))$/ REJECT Faked hostname ($1)
/[^[] *[0-9]+((\.|-|_)[0-9]+){3}/ REJECT Invalid hostname (ipable)
/(modem|dia(l|lup)|cp[ce]|dsl|p[cp]p|cable|catv|poo(l|les)|pppoe|dhcp|client|customer|user|host|[0-9]{4,})(-|_|\.|[0-9])/ REJECT Invalid hostname (client)

Затем создадим файл /etc/postfix/config/mx_access и добавим в него следующее содержимое


127.0.0.1 DUNNO
127.0.0.2 550 Domains not registered properly. Can't assign requested address
0.0.0.0/8 REJECT Domain MX in broadcast network
10.0.0.0/8 REJECT Domain MX in RFC 1918 private network
127.0.0.0/8 REJECT Domain MX in loopback network
169.254.0.0/16 REJECT Domain MX in link local network
172.16.0.0/12 REJECT Domain MX in RFC 1918 private network
192.0.2.0/24 REJECT Domain MX in TEST-NET network
192.168.0.0/16 REJECT Domain MX in RFC 1918 private network
224.0.0.0/4 REJECT Domain MX in class D multicast network
240.0.0.0/5 REJECT Domain MX in class E reserved network
248.0.0.0/5 REJECT Domain MX in reserved network

И на последним создадим файл /etc/postfix/config/white_client, который будет у нас содержать списки доменов доверенных клиентов (по одному на строчку).


/.*@clientdomain\.com/i  OK
/user@domain\.com/i      OK

Выставим необходимые права доступа к файлам


# chown root:postfix /etc/postfix/config/*
# chmod o= /etc/postfix/config/*

Откроем файл /etc/postfix/master.cf и в самый конец добавим


dovecot     -       n       n       -       -       pipe
  flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/dovecot-lda -f ${sender} -d ${recipient}

Внимание! Перед flags=DRhu ДВА пробела.

Перегружаем dovecot и postfix


# invoke-rc.d dovecot restart
# invoke-rc.d postfix restart

На данном этапе почтовый сервер полностью работоспособен. Можно создавать пользователей, альясы, получать и отправлять письма. Но… Необходимо ещё организовать фильтрацию спама и проверку вложений на вирусы. Какую-то часть спама мы заблокировали, но спам всё равно попадает в ящики пользователей. Некоторые типы вложений мы уже отклоняем, но этого мало. В третьей части мы научим наш сервер отсекать спам, проверять вложения на вирусы, прикрутим -интерфейс для просмотра почты, а также настроим просмотр статистики использования нашего почтового сервера.

Часть Первая. Часть Третья.

Устанавливаем почтовый сервер. Часть вторая: 4 комментария

  1. # invoke-rc.d dovecot/restart

    поменять надо

    # invoke-rc.d dovecot restart

  2. virtual_mailbox_base

    virtual_uid_maps

    virtual_gid_maps

    virtual_minimum_uid

    в данном случае не нужны

    они для встроенного транспорта virtual, у вас же транспорт dovecot

Обсуждение закрыто.