|
|
www.lissyara.su
—> статьи
—> FreeBSD
—> почтовые системы
—> Postfix + Dovecot + Clamav + SpamAssasin + LDAP vs MYSQL
Postfix + Dovecot + SpamAssasin + Clamav с аворизацией в LDAP или MySQL
Автор: atrium.
Здравствуйте уважаемые читатели, сегодня мы будем реализовывать почтовый сервер на базе Postfix с авторизацие пользователей в OpenLdap или MySQL на Ваш выбор. Рассмотрим оба вида авторизации и соответствующие им настройки. Также я представлю скрипты для облегчения администрирования юзеров, доменов, алиасов и действующих на них ограничений в OpenLdap. Есть веб-морда для управления виртуальными пользователями Postfix, которые хранятся в OpenLDAP OLPostfix
Тестовый сервер настраивался на FreeBSD 7.0. Для работы на понадобятся следующие пакеты. Значение версий не имеют значения, но возможны некоторые изменения:
Port: dovecot-1.0.10
Path: /usr/ports/mail/dovecot
Info: Secure and compact IMAP and POP3 servers
Port: clamav-0.92.1_1
Path: /usr/ports/security/clamav
Info: Command line virus scanner written entirely in C
Port: clamsmtp-1.9
Path: /usr/ports/security/clamsmtp
Info: An ClamAV anti-virus SMTP Filter
Port: openldap-server-2.3.41
Path: /usr/ports/net/openldap23-server
Info: Open source LDAP server implementation
Port: postfix-2.3.13,1
Path: /usr/ports/mail/postfix23
Info: A secure alternative to widely-used Sendmail
Port: p5-Mail-SpamAssassin-3.2.3
Path: /usr/ports/mail/p5-Mail-SpamAssassin
Info: A highly efficient mail filter for identifying spam
Port: mysql-server-4.0.27
Path: /usr/ports/databases/mysql40-server
Info: Multithreaded SQL database (server)
| Также для работы postfix и dovecot мы будем использовать TLS, поэтому пакет openssl должен быть установлен.
Хотелось бы сделать уточнение, я бы выбрал авторизацию через LDAP по причине:
- вся адресная книга просматривается через стандартный Outlook в Windows XP, всего лишь необходимо подключиться к LDAP серверу
- при используемой схеме (postfix.schema - самописная) практически все поля адресной книги в Outlook заполнены, что позволяет использовать данную конфигурацию в большой организации
- репликация OpenLdap в случае организации отказоустойчивой конфигурации с несколькими серверами.
Поэтому рассмотрим первую конфигурацию с авторизацией в OpenLdap. Приступим :)
Первое что необходимо установить это OpenLdap, вся установка и настройка этого пакета выходит за рамки статьи, думаю, что в интернете Вы сможете найти немало статей. Я всего лишь приведу список схем, которые необходимо подключить в файле slpad.conf:
include /usr/local/etc/openldap/schema/core.schema
include /usr/local/etc/openldap/schema/pureftpd.schema
include /usr/local/etc/openldap/schema/cosine.schema
include /usr/local/etc/openldap/schema/inetorgperson.schema
include /usr/local/etc/openldap/schema/misc.schema
include /usr/local/etc/openldap/schema/nis.schema
include /usr/local/etc/openldap/schema/openldap.schema
include /usr/local/etc/openldap/schema/postfix.schema
| Последняя схема postfix.schema является самописной, в конце статьи прикреплёны архивы необходимые для работы с OpenLdap и эффективного управления записями.
После того как OpenLdap сервер настроен и прослушивается порт 389, можно производить настройку Dovecot.
Dovecot — свободный IMAP- и POP3-сервер, разрабатываемый в расчёте на безопасность. Особенности сервера Поддержка форматов почтовых ящиков mbox и Maildir, высокое быстродействие благодаря индексации содержимого ящиков. Честно говоря я очень доволен этой прогой!
Документация по Dovecot после его установки распологается в /usr/local/share/doc/dovecot или на сайте http://wiki.dovecot.org. Итак приступим.Собираем пакет из портов со следующими опциями:
[X] KQUEUE kqueue(2) support
[X] SSL SSL support
[X] POP3 POP3 support
[X] LDA LDA support
[X] LDAP OpenLDAP support
[X] MYSQL MySQL support
|
После сборки и установки пакета идём в /usr/local/etc и выполняем команды:
cp ./dovecot-example.conf dovecot.conf
cp ./dovecot-ldap-example.conf dovecot-ldap.conf
| И приступаем к редактированию конфига dovecot-ldap.conf:
hosts= ip_server_openldap
auth_bind= no
base= o=Reiffaisen
scope=subtree
user_attrs=homeDirectory=home,uidNumber=uid,gidNumber=gid
user_filter=(&(objectClass=posixAccount)(mail=%u))
pass_attrs = mail=user,userPassword=password
pass_filter = (&(objectClass=posixAccount)(mail=%u))
default_pass_scheme = LDAP-MD5
ldap_version=3
| Далее редактируем конфигурацию dovecot.conf. Советую проверить все пути и наличие сертификатов, так как в данной конфигурации поддерживается TLS. В рабочей конфигурации отключите всю отладку, т.е всё что касается опций debug:
#--------Базовая дирректория
base_dir = /var/run/dovecot/
#--------Поддерживаемые протоколы
protocols = imap pop3 pop3s imaps
#--------Описание протокола
protocol imap {
listen=IP:143
ssl_listen=IP:993
ssl_cert_file=/usr/local/etc/postfix/cert/imap_cert.pem
ssl_key_file=/usr/local/etc/postfix/cert/imap_key.pem
}
protocol pop3 {
listen=IP:110
ssl_listen=IP:995
ssl_cert_file=/usr/local/etc/postfix/cert/pop3d.pem
ssl_key_file=/usr/local/etc/postfix/cert/pop3d.pem
}
#--------Ведение логов
log_path=/var/log/dovecot.log
info_log_path=/var/log/dovecot-info.log
syslog_facility=mail
mail_debug=yes
mail_log_prefix="%Us(%u):"
#mail_log_max_lines_per_sec=10
verbose_proctitle=yes
auth_debug=yes
auth_debug_passwords=yes
auth_verbose=yes
verbose_ssl=yes
#--------SSL
disable_plaintext_auth = no
shutdown_clients = yes
ssl_disable=no
ssl_cert_file=/usr/local/etc/postfix/cert/postfix_public_cert.pem
ssl_key_file=/usr/local/etc/postfix/cert/postfix_private_key.pem
#ssl_ca_file = /usr/local/etc/postfix/cert/cakey.pem
ssl_verify_client_cert = yes
ssl_parameters_regenerate = 0
#---------Управление процессами авторизации
login_dir = /var/run/dovecot/login
login_user = dovecot
login_process_size = 10
#Обрабатывать каждое соединение своим процессом
login_process_per_connection = yes
#Один процесс занимает около 4 метров, поэтому ориентируйтесь на ОЗУ
login_processes_count = 5
login_max_processes_count = 90
login_max_connections = 180
#Приветствие
login_greeting = Hello users
login_log_format_elements = user=<%u> method=%m rip=%r lip=%l %c
login_log_format = %$: %s
#Пространство default, не трогать!
namespace private {
separator=/
prefix=
inbox=yes
}
#Сама папка не работает, необходимо создать подпапку
#Формат: .ИМЯ_ПАПКИ (не забудте назначить правильного владельца)
namespace public {
separator= /
prefix="pub_"
location= maildir:/var/mail/vhost/%d/public/
hidden=no
inbox=no
}
#----------Chroot
#Прцессы авторизации
login_chroot=yes
#Mail процессы
valid_chroot_dirs=/var/mail/vhost
mail_location=maildir:/var/mail/vhost/%h:INBOX=/var/mail/vhost/%h:CONTROL=/var/mail/vhost/%h
mail_extra_groups = mail
mail_full_filesystem_access = no
mmap_disable = yes
mmap_no_write = yes
fsync_disable = yes
lock_method = fcntl
#mail_drop_priv_before_exec = no
first_valid_uid = 1005
last_valid_uid = 1010
first_valid_gid = 1005
last_valid_gid = 1010
max_mail_processes = 200
mail_process_size = 25
#mail_max_keyword_length = 50
#mail_cache_fields =
#mail_never_cache_fields =
#mail_cache_min_mail_count = 0
#mailbox_idle_check_interval = 30
#mail_save_crlf = no
maildir_stat_dirs = no
#YES если параметр maildir_copy_with_hradlinks=yes
dotlock_use_excl=yes
maildir_copy_with_hardlinks = yes
maildir_copy_preserve_filename = yes
#----------Настройка протоколов
protocol imap {
login_executable = /usr/local/libexec/dovecot/imap-login
mail_executable = /usr/local/libexec/dovecot/imap
imap_max_line_length = 65536
mail_plugin_dir = /usr/local/lib/dovecot/imap
imap_client_workarounds = delay-newmail outlook-idle netscape-eoh tb-extra-mailbox-sep
mail_plugins=acl
}
protocol pop3 {
login_executable = /usr/local/libexec/dovecot/pop3-login
mail_executable = /usr/local/libexec/dovecot/pop3
pop3_no_flag_updates = no
pop3_enable_last = no
pop3_reuse_xuidl = no
pop3_lock_session = no
pop3_uidl_format = %08Xu%08Xv
pop3_logout_format = top=%t/%p, retr=%r/%b, del=%d/%m, size=%s
mail_plugin_dir = /usr/local/lib/dovecot/pop3
pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
}
protocol lda {
postmaster_address = postmaster@oskol.impexbank.ru
mail_plugin_dir = /usr/local/lib/dovecot/lda
sendmail_path = /usr/local/sbin/sendmail
auth_socket_path = /var/run/dovecot/auth-master
mail_plugins=acl
}
#---------Процессы авторизации
auth_executable = /usr/local/libexec/dovecot/dovecot-auth
auth_process_size = 6
auth_cache_size = 0
auth_cache_ttl = 3600
auth_username_chars = abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@
#auth_username_translation =
#auth_username_format =%Lud
#auth_master_user_separator =
#auth_anonymous_username = anonymous
auth_worker_max_count = 30
#---------Авторизация для pop, imap и smtp
auth default {
#Пользователь который имеет доступ к базе с паролями
user=postfix
#SSL
ssl_require_client_cert=no
ssl_username_from_cert=no
#Механизмы
mechanisms = plain login
#Извлечение пароля
passdb ldap {
args = /usr/local/etc/dovecot-ldap.conf
}
#Извлечение пользовательских данных
userdb ldap {
args = /usr/local/etc/dovecot-ldap.conf
}
#Сокет для авторизации в postfix
socket listen {
client {
path=/var/spool/postfix/private/auth
mode=0660
user=postfix
group=postfix
}
}
}
plugin {
# acl=vfile:/etc/dovecot-acls
}
| С настройкой Dovecot закончили :), далее необходимо поставить и настроить антивирус. У нас будет использоваться Clamav, поэтому приступим. Собираем пакет clamav со следующими опциями:
[X] ARC Enable arch archives support
[X] ARJ Enable arj archives support
[X] LHA Enable lha archives support
[X] UNRAR Enable rar archives support
[X] MILTER Compile the milter interface
[X] LDAP libmilter was built with LDAP
[X] ICONV Enable ICONV support
[X] STDERR Print logs to stderr instead of stdout
|
Далее устанавливаем пакет clamsmtp и собираем его со следующими опциями:
[X] LOCAL_CLAMAV RUN_DEPEND on security/clamav
|
После установки переходим в каталог /usr/local/etc и выполняем команды:
cp ./clamd.conf.default clamd.conf
cp ./clamsmtpd.conf-sample clamdsmtpd.conf
| И редактируем файл clamsmtpd.conf, обязательно проверьте все пути:
OutAddress: 10025
MaxConnections: 200
TimeOut: 180
KeepAlives: 0
Listen: 127.0.0.1:10023
ClamAddress: /var/run/clamav/clamd
Header: X-Virus-Scanned: ClamAV using ClamSMTP
TempDirectory: /tmp
Action: drop
Quarantine: on
User: clamav
VirusAction: /var/script/virus_action.sh
| VirusAction: /var/script/virus_action.sh - данный скрипт можно взят отсюда /usr/local/share/examples/clamsmtp.
Приступаем к редактированию файла clamd.conf, обязательно проверьте все пути:
LogFile /var/log/clamav/clamd.log
LogFileUnlock no
LogFileMaxSize 2M
LogTime yes
LogClean yes
LogSyslog yes
LogFacility LOG_MAIL
LogVerbose yes
PidFile /var/run/clamav/clamd.pid
TemporaryDirectory /var/tmp
DatabaseDirectory /var/db/clamav
LocalSocket /var/run/clamav/clamd
FixStaleSocket yes
#TCPSocket 3310
#TCPAddr 127.0.0.1
#MaxConnectionQueueLength 30
StreamMaxLength 1000M
#StreamMinPort 30000
#StreamMaxPort 32000
MaxThreads 20
ReadTimeout 120
IdleTimeout 60
MaxDirectoryRecursion 30
FollowDirectorySymlinks yes
FollowFileSymlinks yes
SelfCheck 1800
VirusEvent /bin/echo "Virus found: %v" >> /var/log/clamav/virus.log
User clamav
AllowSupplementaryGroups yes
#ExitOnOOM yes
#Foreground yes
Debug no
LeaveTemporaryFiles yes
DetectPUA yes
AlgorithmicDetection yes
ScanPE yes
ScanELF yes
DetectBrokenExecutables yes
ScanOLE2 yes
ScanPDF yes
ScanMail yes
MailFollowURLs no
MailMaxRecursion 128
PhishingSignatures yes
PhishingScanURLs yes
PhishingRestrictedScan yes
PhishingAlwaysBlockSSLMismatch no
PhishingAlwaysBlockCloak no
ScanHTML yes
ScanArchive yes
ArchiveMaxFileSize 0
ArchiveMaxRecursion 50
ArchiveMaxFiles 2000
ArchiveMaxCompressionRatio 0
ArchiveLimitMemoryUsage yes
ArchiveBlockEncrypted no
ArchiveBlockMax no
| Далее мы настроим спам-фильтер, все оценки спама я приводить не буду, потому что это довольно таки тонкие настройки и каждый сам их для себя сделает, мы только установим и свяжем спам-фильтер с Postfix'ом.
Отредактируем файл /usr/local/etc/mail/local.cf:
# lock_method flock
required_score 5.0
use_bayes 1
use_bayes_rules 1
bayes_auto_learn 1
lock_method flock
bayes_path /var/sa_bayes/bayes
bayes_min_spam_num 50
bayes_min_ham_num 50
bayes_ignore_header X-Bogosity
bayes_ignore_header X-Spam-Flag
bayes_ignore_header X-Spam-Status
ok_locales en ru
ok_languages en ru
| Устанавливаем Postfix со следующими опциями:
[X] PCRE Perl Compatible Regular Expressions
[X] SASL2 Cyrus SASLv2 (Simple Auth. and Sec. Layer)
[X] DOVECOT Dovecot SASL authentication method
[X] TLS Enable SSL and TLS support
[X] MYSQL MySQL maps (choose version with WITH_MYSQL_VER)
[X] OPENLDAP OpenLDAP maps (choose ver. with WITH_OPENLDAP_VER)
[X] VDA VDA (Virtual Delivery Agent)
[X] TEST SMTP/LMTP test server and generator
| Опцию [X] SASL2 Cyrus SASLv2 (Simple Auth. and Sec. Layer) можно и не использовать, так как у нас аутентификация будет производится через Dovecot. Это для тех кто захочет поэкспериментировать с SASL2 :)
Далее необходимо создать в каталоге с Postfix'ом дирректории ldap, mysql, conf, права на дирректории определяете сами, в соответствии со своей политикой безопасности.
Приступаем к редактированию файла /usr/local/etc/postfix/main.cf. Обязательно проверьте все пути и наличие сертификатов, так как приведённая конфигурация с поддержкой TLS:
#-------Временные интервалы (задержки). Все задержки в соответствии с RFC 2821
smtpd_timeout=5m
smtpd_starttls_timeout=5m
smtp_mail_timeout=5m
smtp_rcpt_timeout=5m
smtp_data_init_timeout=2m
smtp_data_xfer_timeout=3m
smtp_data_done_timeout=10m
maximal_queue_lifetime=4d
bounce_queue_lifetime=4d
queue_run_delay=30m
minimal_backoff_time=3h
maximal_backoff_time=5h
#-------Диспетчер очередей QMGR
allow_min_user=no
hash_queue_depth=1
hash_queue_names=deferred, defer
#------Сетевые настройки
inet_interfaces=$myhostname, localhost
inet_protocols=ipv4
mail_name=Sendmail
mail_release_date=20081113
mail_version=1.8.6
mydestination=$myhostname, localhost, localhost.$myhostname, localhost.$mydomain, $mydomain
mydomain=mydomain.ru
myorigin=$mydomain
myhostname=unix.mydomain.ru
mynetworks=127.0.0.0/24
smtp_helo_name=$myhostname
smtpd_banner=$mydomain ESMTP $mail_name ($mail_version)
#-----SMTPD Ограничения
#Классы ограничений
smtpd_restriction_classes=
MyUserSender
#Отправка только от доменных юзеров
MyUserSender=
permit_mynetworks
reject_unauthenticated_sender_login_mismatch
reject_non_fqdn_sender
reject_unlisted_sender
reject_unverified_sender
permit_sasl_authenticated
reject
#Не проверять существование отправителей для следующих
#Ограничения на команду HELO/EHLO
smtpd_helo_restrictions=
permit_mynetworks
check_helo_access pcre:$config_directory/conf/pcre_check_helo_access
reject_invalid_helo_hostname
#Раскоментить, с включённым параметром неправильно работает Outlook
#reject_non_fqdn_helo_hostname
#reject_unknown_helo_hostname
#Клиентское соединение
smtpd_client_restrictions=
permit_mynetworks
# IP or network. Если здесь вбит адрес, то все ограничения ниже не действуют
check_client_access ldap:$config_directory/ldap/virtual_sender_access.cf
permit_sasl_authenticated
permit_tls_all_clientcerts
#Ограничения на команду 'MAIL FROM'
smtpd_sender_restrictions=
permit_mynetworks
# Mail or domain. Если здесь вбит адрес, то все ограничения ниже не действуют
check_sender_access ldap:$config_directory/ldap/virtual_sender_access.cf
reject_non_fqdn_sender
reject_unknown_sender_domain
reject_unlisted_sender
reject_unverified_sender
check_sender_access ldap:$config_directory/ldap/virtual_myuser_sender.cf
#Ограничения на команду 'RCPT TO'
smtpd_recipient_restrictions=
permit_mynetworks
reject_non_fqdn_recipient
reject_unknown_recipient_domain
reject_unlisted_recipient
reject_unverified_recipient
permit_sasl_authenticated
reject_unauth_destination
#Ограеничения на команду 'DATA'
smtpd_data_restrictions=
permit_mynetworks
reject_multi_recipient_bounce
reject_unauth_pipelining
#Ограничения на команду ETRN
smtpd_etrn_restrictions=
permit_mynetworks
reject
strict_rfc821_envelopes=yes
smtpd_helo_required=yes
smtpd_reject_unlisted_sender=yes
smtpd_reject_unlisted_recipient=yes
disable_vrfy_command=yes
smtpd_delay_reject=yes
allow_percent_hack=no
address_verify_sender= <>
address_verify_map=btree:$config_directory/conf/verify
address_verify_negative_cache=yes
address_verify_poll_count=1
address_verify_positive_expire_time=31d
address_verify_positive_refresh_time=7d
address_verife_negative_expire_time=3d
address_verify_negative_refresh_time=2h
allow_untrusted_routing=no
resolve_null_domain=no
resolve_numeric_domain=no
smtpd_recipient_limit=1000
smtpd_recipient_overshoot_limit=$smtpd_recipient_limit
smtp_always_send_ehlo=yes
smtp_never_send_ehlo=no
smtp_quote_rfc821_envelope=yes
#-------Проверки
header_checks=pcre:$config_directory/conf/header_check
body_checks=pcre:$config_directory/conf/body_check
mime_header_checks=pcre:$config_directory/conf/mime_check
nested_header_checks=pcre:$config_directory/conf/nested_check
body_checks_size_limit=102400
message_size_limit=4194304
header_size_limit=102400
#------Фильтры
content_filter=clamsmtpd:[127.0.0.1]:10023
receive_override_options=no_address_mappings
#------Системные
default_process_limit=500
max_idle=100s
max_use=200
default_privs=nobody
mail_owner=postfix
#Время перезапуска демонов
daemon_timeout=60m
allow_mail_to_commands=alias,forward,include
allow_mail_to_files=alias,forward,include
debug_peer_level=2
#Список IP или файлы type:table
debug_peer_list=
#Файл ответа MAILER-DAEMOND
bounce_template_file=$config_directory/bounce.cf.default
hopcount_limit=50
notify_classes=resource, software
#--------Аутентификация
smtpd_sasl_auth_enable=yes
smtpd_sasl_security_options=noanonymous, mutual_auth, noactive, nodictionary
broken_sasl_auth_clients=yes
smtpd_sasl_path=private/auth
smtpd_sasl_type=dovecot
smtpd_sasl_authenticated_header=yes
smtpd_sasl_exceptions_networks=$mynetworks
#--------Защита TLS
#Не анонсировать возможность авторизации, если не используется TLS
smtpd_tls_auth_only=no
smtpd_use_tls=yes
smtpd_tls_key_file=$config_directory/cert/postfix_private_key.pem
smtpd_tls_cert_file=$config_directory/cert/postfix_public_cert.pem
smtpd_tls_CApath=$config_directory/cert/
#Поменять на 0
smtpd_tls_loglevel=2
tls_random_source=dev:/dev/urandom
smtpd_tls_received_header=yes
smtpd_tls_session_cache_database=btree:/var/tmp/smtpd_scache
smtpd_tls_session_cache_timeout=12h
smtpd_sasl_tls_security_options=$smtpd_sasl_security_options
#В yes, если вы хотите чтобы все использовали tls
smtpd_enforce_tls=no
smtpd_starttls_timeout=300s
#-------Пути
queue_directory=/var/spool/postfix
command_directory=/usr/local/sbin
daemon_directory=/usr/local/libexec/postfix
newaliases_path=/usr/local/bin/newaliases
sendmail_path=/usr/local/sbin/sendmail
config_directory=/usr/local/etc/postfix
mail_spool_directory=/var/mail
mailq_path=/usr/local/bin/mailq
html_directory=no
manpage_directory=/usr/local/man
sample_directory=/usr/local/etc/postfix
readme_directory=no
alias_database=hash:$config_directory/conf/aliases
alias_maps=hash:$config_directory/conf/aliases
#-------Управление соединениями
qmgr_message_active_limit=20000
qmgr_message_recipient_limit=20000
qmgr_message_recipient_minimum=10
smtpd_client_connection_rate_limit=20
smtpd_client_new_tls_session_rate_limit=20
smtpd_client_connection_count_limit=5
smtpd_client_message_rate_limit=6
#smtpd_client_recipient_rate_limit=
connection_cache_protocol_timeout=5s
connection_cache_status_update_time=600s
anvil_rate_time_unit=1m
anvil_status_update_time=60s
#Исключения, на кого не действуют ограничения
smtpd_client_event_limit_exceptions=$mynetworks
#-------Обработка ошибок и логи
smtpd_error_leep_time=0
smtpd_soft_error_limit=5
smtpd_hard_error_limit=10
syslog_name=postfix
syslog_facility=mail
backwards_bounce_logfile_compatibility=yes
helpful_warnings=yes
invalid_hostname_reject_code=501
non_fqdn_reject_code=504
plaintext_reject_code=450
reject_code=554
relay_domains_reject_code=554
unknown_address_reject_code=450
unknown_hostname_reject_code=450
unknown_client_reject_code=450
unknown_local_recipient_reject_code=550
unknown_relay_recipient_reject_code=550
unknown_virtual_alias_reject_code=550
unknown_virtual_mailbox_reject_code=550
unverified_recipient_reject_code=450
unverified_sender_reject_code=450
#----------Разное
#Добавлять заголовок X-Original-To
enable_original_recipient=yes
soft_bounce = no
setgid_group = maildrop
#-----Виртуальные домены и юзеры в MySQL
#-----Для работы с локальными пользователями использовать алиасы
virtual_transport=virtual
virtual_mailbox_base=/var/mail/vhost
virtual_mailbox_domains=ldap:$config_directory/ldap/virtual_domain.cf
virtual_minimum_uid=100
virtual_uid_maps=ldap:$config_directory/ldap/virtual_uid.cf
virtual_gid_maps=$virtual_uid_maps
virtual_mailbox_maps=ldap:$config_directory/ldap/virtual_mailbox_recipient.cf
virtual_alias_maps=ldap:$config_directory/ldap/virtual_aliases.cf
virtual_mailbox_limit=100000000
mailbox_transport=virtual
virtual_mailbox_limit_maps=ldap:$config_directory/ldap/virtual_quota.cf
virtual_mailbox_limit_inbox=no
virtual_mailbox_limit_override=yes
virtual_maildir_extended=yes
virtual_overquota_bounce=yes
virtual_maildir_limit_message="Sorry, maximum quota reached!"
virtual_create_maildirsize=yes
smtpd_sender_login_maps=ldap:$config_directory/ldap/virtual_sender_login.cf
transport_maps=ldap:$config_directory/ldap/transport.cf
| И далее редактируем файл /usr/local/etc/postfix/master.cf:
# ==============================================================================================
# service type private | unpriv | chroot wakeup | maxproc | command + args
# (yes) (yes) (yes) (never) (100)
# ==============================================================================================
#antivirus
clamsmtpd unix - - n - 16 smtp
-o smtp_data_done_timeout=1200s
-o disable_dns_lookups=yes
-o smtp_send_xforward_command=yes
-o max_use=50
127.0.0.1:10025 inet n - n - - smtpd
-o mynetworks=127.0.0.0/8
-o content_filter=
-o local_recipient_maps=
-o relay_recipient_maps=
-o smtpd_restriction_class=
-o smtpd_client_restrictions=permit_mynetworks,reject
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_data_restrictions=reject_unauth_pipelining
-o smtpd_end_of_data_restrictions=
-o strict_rfc821_envelopes=yes
-o smtpd_error_sleep_time=0
-o smtpd_soft_error_limit=1001
-o smtpd_hard_error_limit=1000
-o smtpd_client_connection_count_limit=0
-o smtpd_client_connection_rate_limit=0
-o receive_override_options=no_header_body_checks,no_unknown_recipient_checks,no_milters
-o local_header_rewrite_clients=
-o smtpd_use_tls=no
#SMTP
smtp inet n - n - - smtpd
-o content_filter=spam:dummy
spam unix - n n - - pipe
flags=Rq user=spamd argv=/usr/local/bin/spamc -u spamd -e /usr/local/sbin/sendmail -f $sender $recipient
#submission inet n - n - - smtpd
# -o smtpd_enforce_tls=yes
# -o smtpd_sasl_auth_enable=yes
# -o smtpd_client_restrictions=permit_sasl_authenticated,reject
#TLS
smtps inet n - n - - smtpd
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
#628 inet n - n - - qmqpd
etrn-only unix - - n - - smtp
pickup fifo n - n 60 1 pickup
cleanup unix n - n - 0 cleanup
qmgr fifo n - n 300 1 qmgr
#qmgr fifo n - n 300 1 oqmgr
tlsmgr unix - - n 1000? 1 tlsmgr
rewrite unix - - n - - trivial-rewrite
bounce unix - - n - 0 bounce
defer unix - - n - 0 bounce
trace unix - - n - 0 bounce
verify unix - - n - 1 verify
flush unix n - n 1000? 0 flush
proxymap unix - - n - - proxymap
smtp unix - - n - - smtp
# When relaying mail as backup MX, disable fallback_relay to avoid MX loops
relay unix - - n - - smtp
-o fallback_relay=
# -o smtp_helo_timeout=5 -o smtp_connect_timeout=5
showq unix n - n - - showq
error unix - - n - - error
retry unix - - n - - error
discard unix - - n - - discard
local unix - n n - - local
virtual unix - n n - - virtual
lmtp unix - - n - - lmtp
anvil unix - - n - 1 anvil
scache unix - - n - 1 scache
| Для нормальной работы создаём два файла в соответствии с конфигурацией main.cf:
mime_header_checks=pcre:$config_directory/conf/mime_check
check_helo_access pcre:$config_directory/conf/pcre_check_helo_access
| Файл mime_check:
/name=\"(.*)\.+?(exe|dll|vbs|pif|scr|bat|cmd|com|cpl|bas|vbe
|vb|reg|prg|pcd|ops|hlp|grp|fxp|emf|inf|ins|js
|jse|lnk|mda|mdb|mde|mdw|mdt|mdz|msc|msi|msp|mst
wmf|wsc|wsf|wsh|mim|b64|bhx|hqx|lha|cab|ole|bin)+?(.*)*?\"$/x REJECT Prohibit type file $1.$2.$3
| Файл pcre_check_helo_access:
/^\[11\.176\.3\.56\]$/ 550 Don't use my IP address
/^unix\.oskol\.impexbank\.ru$/ 550 Don't use my IP address
/^11\.176\.3\.56$/ 550 Don't use my IP address
| После всех произведённых настроек создаём в каталоге /usr/local/etc/postfix/ldap файлы с настройками для поиска в OpenLDAP необходимых данных. Имена файлов не имеют никакого значения, при смене имени, измените имя файла в main.cf:
1) Файлы transport.cf:
bind= no
server_host= ip_ldap_server
server_port= 389
search_base= vto=vTransport,o=Reiffaisen
query_filter= (&(vtAddress=%s)(vtStatus=1))
result_attribute= vtTransport
result_format= %s
| 2) Файл virtual_aliases.cf - поиск алиасов:
bind= no
server_host= ip_ldap_server
server_port= 389
search_base= vao=vAlias,o=Reiffaisen
query_filter= (&(vaName=%s)(vaStatus=1))
result_attribute= vaMail
result_format= %s
| 3) Фйал virtual_domain.cf - поиск доменов для которых наш почтовый сервер является конечным. Список доменов должен быть уникальным и все домены не должны присутствовать в параметре mydestination:
bind=no
server_host=ip_ldap_server
server_port=389
search_base=vdo=vDomain,o=Reiffaisen
query_filter=(&(vdName=%s)(vdStatus=1))
result_attribute=vdName
result_format=%s
version=2
scope=sub
| 4) Файл virtual_mailbox_recipient.cf - выбор пути к почтовому ящику пользователя:
bind= no
server_host= ip_ldap_server
server_port= 389
search_base= vuo=vUsers,o=Reiffaisen
query_filter= (&(mail=%s)(vuActive=1)(vuAuth=1))
result_attribute= homeDirectory
result_format= %s
| 5) Файл virtual_myuser_sender.cf[/b] - поиск пользователей для параметра smtpd_sender_login_mapsх:
bind= no
server_host= ip_ldap_server
server_port= 389
search_base= vdo=vDomain,o=Reiffaisen
query_filter=(&(vdName=%s)(vdStatus=1))
result_attribute=vdClasses
result_format=%s
| 6) Файл virtual_quota.cf - определение квоты на почтовый ящик для каждого пользователя:
bind= no
server_host= ip_ldap_server
server_port= 389
search_base= vuo=vUsers,o=Reiffaisen
query_filter= (&(mail=%s)(vuActive=1)(vuAuth=1))
result_attribute= vuQuota
result_format= %s
| 7) Файл virtual_sender_access.cf - поиск ограничений:
bind= no
server_host= ip_ldap_server
server_port= 389
search_base= vruo=vRRU,o=Reiffaisen
query_filter= (&(rrKey=%s)(rrStatus=1))
result_attribute= rrValue
result_format= %s
| 8) Фйал virtual_sender_login.cf - получение логина пользователя, который может отправлять почту. Так как у нас будет n-количество доменов, то в качестве имени выбираем e-mail пользователя:
bind= no
server_host= ip_ldap_server
server_port= 389
search_base= vuo=vUsers,o=Reiffaisen
query_filter= (&(mail=%s)(vuActive=1)(vuAuth=1))
result_attribute= mail
result_format= %s
| 9) Файл virtual_uid.cf - получение списка uid виртуальных юзеров:
bind= no
server_host= ip_ldap_server
server_port= 389
search_base= vuo=vUsers,o=Reiffaisen
query_filter= (&(mail=%s)(vuActive=1)(vuAuth=1))
result_attribute= uidNumber
resulet_format= %s
| Все основные файлы настроили, это самое главное :). Далее с помощью прилагаемого архива 'Скрипты для работы с OpenLDAP', которые можно скачать в конце статьи, Вы добавляете всю необходимую информацию в OpenLDAP и проверяете файлы, которые мы создали выше с помощью следующей команды (man postmap):
postmap -q 'key - то что необходимо найти' ldap:путь к каждому описанному файлу
| Хотелось бы сделать уточнения, прежде чем пользоваться скриптами, обязательно скачайте архив со схемой и внесите два файла top.ldif и organization.ldif в LDAP с помощью следующих команд (порядок следования файлов имеет значение!!!):
ldapadd -x -W -D "rootdn(берётся из конфига slapd.conf)" -f /путь к файлу/organization.ldif
ldapadd -x -W -D "rootdn(берётся из конфига slapd.conf)" -f /путь к файлу/top.ldif
| Если Вы не хотите использовать скрипты, то Вам необходимо изучить файлы, которые находятся в архиве 'Схема Postfix для OpenLDAP' и использовать команду ldapadd, обязательно почитайте следующие маны (ldapadd, ldapsearch, ldapdelete, ldapmodify).
Всё с настройкой Postfix в связке с OpenLDAP закончили, далее приступим к настройке Postfix в связке с MySQL, для этого создадим в каталоге с Postfix дирректорию mysql(права на каталог определяйте в соответствии со своей политикой безопасности):
mkdir /usr/local/etc/postfix/mysql
| После создания каталога приступаем к созданию файлов с помощью которых будем извлекать информацию из MySQL.
Имена файлов не имеют никакого значения, при смене имени, измените имя файла в main.cf:
1) Файлы transport.cf:
user=postfix
password=test
dbname=mail
table=virtual_transport
select_field=transport
where_field=value
additional_conditions=AND active='1'
hosts=localhost
| 2) Файл virtual_aliases.cf - поиск алиасов:
user=postfix
password=test
dbname=mail
table=virtual_aliases
select_field=virtual_user_email
where_field=alias
hosts=localhost
| 3) Фйал virtual_domain.cf - поиск доменов для которых наш почтовый сервер является конечным. Список доменов должен быть уникальным и все домены не должны присутствовать в параметре mydestination:
user=postfix
password=test
dbname=mail
table=virtual_domain
select_field=n_domain
where_field=n_domain
additional_conditions=AND d_active='1'
hosts=localhost
| 4) Файл virtual_mailbox_recipient.cf - выбор пути к почтовому ящику пользователя:
user=postfix
password=test
dbname=mail
table=virtual_users
select_field=virtual_mailbox
where_field=email
additional_conditions=and active='1'
hosts=localhost
| 5) Файл virtual_myuser_sender.cf[/b] - поиск пользователей для параметра smtpd_sender_login_mapsх:
user=postfix
password=test
dbname=mail
table=virtual_domain
select_field=classes
where_field=n_domain
additional_conditions=and d_active='1'
hosts=localhost
| 6) Файл virtual_quota.cf - определение квоты на почтовый ящик для каждого пользователя:
user=postfix
password=test
dbname=mail
table=virtual_users
select_field=quota
where_field=email
additional_conditions=and active='1'
hosts=localhost
| 7) Файл virtual_sender_access.cf - поиск ограничений:
user=postfix
password=test
dbname=mail
table=virtual_sender_access
select_field=s_value
where_field=s_key
additional_conditions=and s_active='1'
hosts=localhost
| 8) Фйал virtual_sender_login.cf - получение логина пользователя, который может отправлять почту. Так как у нас будет n-количество доменов, то в качестве имени выбираем e-mail пользователя:
user=postfix
password=test
dbname=mail
table=virtual_users
select_field=email
where_field=email
additional_conditions=and active='1'
hosts=localhost
| 9) Файл virtual_uid.cf - получение списка uid виртуальных юзеров:
user=postfix
password=test
dbname=mail
table=virtual_users
select_field=virtual_uid
where_field=email
hosts=localhost
| :
Настройка MySQL сервера выходит за рамки данной статьи, я думаю Вы найдёте достаточное количество статей по настройке сервера MySQL.
Далее нам необходимо произвести небольшие изменения в конфигурационном файле main.cf Postfix'a :)
Всего лишь необходимо заменить:
на
Т.е мы практически ничего не изменили в конфигурации, поменялось только место из которого извлекаются все данные :)
Изменим в файле dovecot.conf следующие параметры:
#Извлечение пароля
passdb ldap {
args = /usr/local/etc/dovecot-ldap.conf
}
#Извлечение пользовательских данных
userdb ldap {
args = /usr/local/etc/dovecot-ldap.conf
}
| на
#Извлечение пароля
passdb sql {
args = /usr/local/etc/dovecot-sql.conf
}
#Извлечение пользовательских данных
userdb sql {
args = /usr/local/etc/dovecot-sql.conf
}
| После изменения файла dovecot.conf выполняем следующую команду:
cp /usr/local/etc/dovecot-sql-example.conf /usr/local/etc/dovecot-sql.conf
| И отредактируем файл dovecot-sql.conf:
driver = mysql
connect = host=localhost dbname=mail user=postfix password=test
default_pass_scheme = PLAIN-MD5
password_query = SELECT userpassword AS password FROM virtual_users
WHERE email='%u' AND active='1' AND auth='1'
user_query = SELECT virtual_mailbox AS home, virtual_uid AS uid, virtual_gid AS gid
FROM virtual_users WHERE email = '%u' AND active='1' AND auth='1'
| С Dovecot закончили :)
Всё у нас получилась полностью рабочая конфигурация :)
Хотелось бы сделать несколько уточнений:
1) При данной конфигурации Postfix не возможности отправлять почту локальным пользователя, поэтому как выход могу посоветовать сделать alias на локальных пользователей!
2) Обязательно посмотрите документацию к Postfix она находится в пакете с Postfix - папка html.
3) Таблицы для работы с MySQL прикреплены в конце статьи, измените их в соответствии со своими нуждами.
В данной конфигурации таблицы были отредактированы, поэтому советую проверять все файлы, которые работают с MySQL.
4) В конфигурации Postfix отсутствую чёрные списки для спам доменов, поэтому добавте их в соответствии с вашими желаниями
5) Приведённые выше настройки являются тестовыми, поэтому возможно в реальной работе Вам необходимо будет что-то изменить.
6) Управление очередью Postfix осуществляется с помощью команд 'mailq' и 'postsuper'. Почитайте man по этим командам. Пример:
Удаление определённой очереди:
postsuper -d норер_очереди определённый с помощью команды mailq
| Удаление всех писем из очереди:
7) Есть такая ещё полезная команда как 'qshape'. Почитайте обязательно man. Показывает письма по очередям и их время нахождения в очереди.
Пример:
unix# qshape
T 5 10 20 40 80 160 320 640 1280 1280+
TOTAL 0 0 0 0 0 0 0 0 0 0 0
| Удачи!!
Список прилагаемых файлов:
Схема данных и примеры ldif файлов.
|
файл
|
скачан
|
размер
|
размещён
|
примечание
|
|
2059
|
3kb
|
2009-01-22
|
Схема и файлы для создания базы в OpenLDAP
|
|
-------------------
Скрипты для работы с OpenLDAP.
|
файл
|
скачан
|
размер
|
размещён
|
примечание
|
|
1531
|
4.8kb
|
2009-01-22
|
Скрипты для управления данными в OpenLDAP для Postfix
|
|
-------------------
Таблицы для связки Postfix с Mysql.
|
файл
|
скачан
|
размер
|
размещён
|
примечание
|
|
1658
|
10kb
|
2009-01-31
|
Таблицы для MySQL
|
|
размещено: 2009-01-16,
последнее обновление: 2009-03-20,
автор: atrium
|
|
|
|
2014-07-27, lissyara
gmirror
Удалённое создание софтверного зеркала средствами gmirror, на диске разбитом с использованием gpart. Использование меток дисков для монтирования разделов.
2013-08-20, zentarim
Scan+Print server FreeBSD 9
Настройка сервера печати и сервера сканирования под управлением операционной системы FreebSD 9 для МФУ Canon PIXMA MP540
2011-11-20, BlackCat
Разъём на WiFi-карту
Делаем съёмной несъёмную антену на WiFi-карте путём установки ВЧ-разъёма
2011-09-14, manefesto
Настройка git+gitosis
Настройка системы контроля версия исходного кода в связке git+gitosis+ssh
|
Комментарии пользователей [29 шт.]