PostfixАdmin revamped (ViMbAdmin)

в 12:21, , рубрики: Doctrine ORM, dovecot, email, linux, postfix, метки: , , ,

ViMbAdmin

ViMbAdmin проект (vim/-be/-admin/) предоставляет веб-интерфейс администрирования виртуальных
почтовых ящиков, позволяя почтовым администраторам легко управлять доменами, и псевдонимами.
ViMbAdmin является свободным программным обеспечением, вы можете распространять или изменять его в соответствии с условиями GNU General Public License версии 3.

ViMbAdmin был написан на PHP с использованием нашего собственного web application framework, который включает Zend Framework, ORM Doctrina и система шаблонов Smarty с JQuery и Bootstrap.

ViMbAdmin размещается на отдельной странице проекта GitHub, где можно найти документацию,
просмотреть исходный код. GitHub

Стандартные и расширенные возможности от PostfixAdmin включают в себя:

— Супер-администратор с полным доступом;
— Администраторы имеющие доступ только к установленному домену и их почтовым ящикам и псевдонимам;
— Супер-администраторы могут создавать и изменять супер администраторов и администраторов;
— JQuery Datatable для быстрого поиска в браузере и нумерация страниц;
— Создание, изменение и удаление;
— Включение / выключение администраторов, доменов, почтовых ящиков и псевдонимов по нажатию одной кнопки;
— Полное логирование событий;
— Интерфейс для пользователей (владельцев почтовых ящиков), чтобы изменить свой пароль;

Дополнительные функции включают в себя:

— значения по умолчанию для квоты, количество почтовых ящиков и псевдонимов для создания домена;
— добавлены дополнительные столбцы в схему почтовых ящиков (в том числе UID, GID, домашний каталог и Maildir);
— шаблоны писем приветствия и настроек для пользователей;
— Поддержка на выбор plain или hashed или salted пароль почтового ящика;
— Таблицы паролей Администраторов с salted SHA;
— Password Reset функции для администраторов и почтовых ящиков;

PostfixАdmin revamped (ViMbAdmin)

PostfixАdmin revamped (ViMbAdmin)

PostfixАdmin revamped (ViMbAdmin)

PostfixАdmin revamped (ViMbAdmin)

PostfixАdmin revamped (ViMbAdmin)

PostfixАdmin revamped (ViMbAdmin)

PostfixАdmin revamped (ViMbAdmin)

PostfixАdmin revamped (ViMbAdmin)

PostfixАdmin revamped (ViMbAdmin)

PostfixАdmin revamped (ViMbAdmin)

PostfixАdmin revamped (ViMbAdmin)

PostfixАdmin revamped (ViMbAdmin)

инструкция по установке ViMbAdmin

github.com/opensolutions/ViMbAdmin/wiki/Installation-instructions

Установка и настройка:

Устанавливаем CentALT + EPEL репозитории:

rpm -Uhv http://centos.alt.ru/pub/repository/centos/6/x86_64/centalt-release-6-1.noarch.rpm
rpm -Uhv http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

устанавливаем почтовые программы:

yum install postfix dovecot dovecot-pigeonhole

Создаем пользователя и группу, которые будут отвечать за почтовые ящики:

groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -d /home/vmail -m

Создаем директорию, в которой будут храниться настройки подключения к MySQL:

mkdir /etc/postfix/mysql
touch /etc/postfix/mysql/virtual-alias-maps.cf

user = vimbadmin
password = password
hosts = 127.0.0.1
dbname = vimbadmin
query = SELECT goto FROM alias WHERE address = '%s' AND active = '1'
touch /etc/postfix/mysql/virtual-mailbox-domains.cf

user = vimbadmin
password = password
hosts = 127.0.0.1
dbname = vimbadmin
query = SELECT domain FROM domain WHERE domain = '%s' AND backupmx = '0' AND active = '1'
touch /etc/postfix/mysql/virtual-mailbox-maps.cf

user = vimbadmin
password = password
hosts = 127.0.0.1
dbname = vimbadmin
query = SELECT maildir FROM mailbox WHERE username = '%s' AND active = '1'

Приступаем к редактированию /etc/dovecot/dovecot.conf:

# 2.0.21: /etc/dovecot/dovecot.conf
auth_mechanisms = plain login
disable_plaintext_auth = no
log_timestamp = "%Y-%m-%d %H:%M:%S "
mail_location = maildir:/home/vmail/%d/%n
mail_privileged_group = mail
managesieve_notify_capability = mailto
managesieve_sieve_capability = fileinto reject envelope encoded-character vacation subaddress comparator-i;ascii-numeric relational regex imap4flags copy include variables body enotify environment mailbox date ihave
namespace {
  inbox = yes
  location =
  prefix =
  type = private
}
passdb {
  driver = pam
}
passdb {
  args = /etc/dovecot/dovecot-sql.conf
  driver = sql
}
protocols = imap pop3
service auth {
  unix_listener /var/spool/postfix/private/auth {
    group = postfix
    mode = 0660
    user = postfix
  }
  unix_listener auth-master {
    mode = 0600
    user = vmail
  }
  user = root
}
userdb {
  driver = passwd
}
userdb {
  args = uid=5000 gid=5000 home=/home/vmail/%d/%n allow_all_users=yes
  driver = static
}
protocol pop3 {
  pop3_uidl_format = %08Xu%08Xv
}
protocol lda {
  auth_socket_path = /var/run/dovecot/auth-master
  log_path = /home/vmail/dovecot-deliver.log
  postmaster_address = postmaster@myserver.com
}

Также отредактируем /etc/dovecot/dovecot-sql.conf:

driver = mysql
connect = host=127.0.0.1 dbname=vimbadmin user=vimbadmin password=password
default_pass_scheme = PLAIN-MD5
password_query = SELECT username as user, password FROM mailbox WHERE username = '%u'

Переходим к настройке Postfix.
/etc/postfix/main.cf

# Директория с дополнительными файлами конфигурации
additional_config_dir = /etc/postfix/config
# Сообщение, которое будет появляться при входе на наш SMTP
smtpd_banner = $myhostname ESMTP Xbox
# Не использовать biff программу, которая 
# позволяет пользователям узнать, что им пришла почта.
biff = no
# Appending .domain is the MUA's job.
append_dot_mydomain = no
# Документация
readme_directory = /usr/share/doc/postfix

# TLS parameters
# Расположение файла сертификата сервера
smtpd_tls_cert_file = /etc/ssl/certs/postfix.pem
# Расположение файла ключа сервера
smtpd_tls_key_file = /etc/ssl/private/postfix.pem
# Сообщать ли клиентам о возможности использования TLS
smtpd_use_tls = yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

# Соответствует полному доменному имени (FQDN)
myhostname = mail.server.com
# Список доменов, для которых почта будет доставляться локально, а не
# пересылаться на другой хост
mydestination = $myhostname, localhost, localhost.$mydomain, $myhostname.$mydomain
# Доверенные сети
mynetworks = 127.0.0.0/8
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mailbox_command = procmail -a "$EXTENSION"
# Размер почтового ящика в байтах. Если 0 - неограничено
mailbox_size_limit = 0
# Сетевые интерфейсы, на которых будет работать Postfix
inet_interfaces = all
# Документация в html
html_directory = /usr/share/doc/postfix/html
# Требуем, чтобы удаленный SMTP клиент представлял себя в начале SMTP сессии
# с помощью команды HELO или EHLO
smtpd_helo_required = yes
# Всегда отправлять EHLO вначале SMTP сессии
smtp_always_send_ehlo = yes
# Отключает SMTP команду VRFY. В результате чего, невозможно определить
# существование определенного ящика. Данная техника (применение команды VRFY)
# используется спамерами для сбора имен почтовых ящиков
disable_vrfy_command = yes
# Поддержки старых версий почтовых клиентов, например Microsoft Outlook Express 4
# и Microsoft Exchange 5, использующих другую форму команды AUTH
broken_sasl_auth_clients = yes
# Содержит имена обслуживаемых доменов
virtual_mailbox_domains = mysql:/etc/postfix/mysql/virtual-mailbox-domains.cf
# Карта расположения почтовых ящиков
virtual_mailbox_maps = mysql:/etc/postfix/mysql/virtual-mailbox-maps.cf
# Карта алиасов
virtual_alias_maps = mysql:/etc/postfix/mysql/virtual-alias-maps.cf
# Карта UID-ов виртуальных пользователей
virtual_uid_maps = static:5000
# Карта GID-ов виртуальных пользователей
virtual_gid_maps = static:5000
virtual_transport = dovecot
# Поддержку sasl авторизации
smtpd_sasl_auth_enable = yes
# Тип sasl авторизации
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
dovecot_destination_recipient_limit = 1

# Ограничения
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,
                            black_client,
                            mx_access

# Описание классов:
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
# IP адреса, которые нужно пропускать, не смотря ни на что
white_client_ip      = check_client_access pcre:$additional_config_dir/white_client_ip
# IP адреса, которые нужно блокировать не смотря ни на что
black_client_ip      = check_client_access pcre:$additional_config_dir/black_client_ip
# E-mail, которые нужно пропускать не смотря ни на что
white_client         = check_sender_access pcre:$additional_config_dir/white_client
# E-mail, которые нужно блокировать не смотря ни на что
black_client         = check_sender_access pcre:$additional_config_dir/black_client
# Правила для блокировки dsl/модемных пулов, с которых подключаются клиенты.
block_dsl            = regexp:$additional_config_dir/block_dsl
# Соблюдение документа RFC 2821
helo_access          = check_helo_access pcre:$additional_config_dir/helo_checks
# Содержит список приватных сетей, которые по всем канонам глобальной сети интернет
# не могут быть использованы в качестве IP для MX записей
mx_access            = check_sender_mx_access cidr:$additional_config_dir/mx_access

# Далее restrictions

# Проверки клиентского компьютера (или другого почтового сервера),
# который соединяется с сервером postfix для отправки письма
smtpd_client_restrictions = 
                            white_client_ip,
                            black_client_ip,
                            white_client,
                            black_client,
                            helo_access,
                            block_dsl,
                            rbl_dul_ru,
                            rbl_sbl_spamhaus_org,
                            rbl_spamcop,
                            rbl_cbl_abuseat_org
                            # Принимать письма от клиентов локальной сети
                            permit_mynetworks,
                            # Пропускать письма от авторизованных пользователей
                            permit_sasl_authenticated,
                            # Если клиент не из mynetworks оценивает
                            # reject_unauth_destination. Отклоняется попытки пересылки,
                            # если получатель сообщения не относится к доменам места
                            # назначения и доменам пересылки, указанным в ваших настройках
                            reject_unauth_destination,
                            # Отвергает запрос, когда клиент отправляет команды SMTP
                            # раньше времени, еще не зная, поддерживает ли Postfix конвейерную
                            # обработку команд ESMTP
                            reject_unauth_pipelining,
                            # Блокируем клиентов с адресами from, домены которых
                            # не имеют A/MX записей
                            reject_unknown_address,
                            # Блокирует почту от несуществующих доменов
                            reject_unknown_recipient_domain,
                            # Проверяем домен на записи типа A и MX в DNS.
                            # Если нет, то отклоняем
                            reject_unknown_sender_domain

# Проверки исходящей или пересылаемой через нас почты
smtpd_sender_restrictions = 
                            white_client,
                            white_client_ip,
                            black_client_ip,
                            # Отклоняет сообщения в не существующие домены
                            reject_unknown_recipient_domain,
                            reject_unknown_sender_domain,
                            # Если имя получателя не соответствует FQDN то отклоняем
                            reject_non_fqdn_recipient,
                            # Если имя отправителя не соответствует FQDN - отклоняем
                            reject_non_fqdn_sender,
                            permit_sasl_authenticated,
                            permit_mynetworks,
                            mx_access,
                            # Отклонение писем с несуществующим адресом отправителя
                            reject_unlisted_sender,
                            reject_unauth_destination

# Правила приема почты нашим сервером
smtpd_recipient_restrictions = 
                               verify_sender
                               white_client,
                               helo_access,
                               reject_unknown_recipient_domain,
                               reject_unknown_sender_domain,
                               reject_non_fqdn_recipient,
                               reject_non_fqdn_sender,
                               reject_unauth_pipelining,
                               permit_sasl_authenticated,
                               permit_mynetworks,
                               reject_unlisted_recipient,
                               reject_unknown_address,
                               reject_unauth_destination,
                               # Отказ в приеме сообщениям с пустым именем отправителя
                               # конверта, предназначенным нескольким получателям
                               reject_multi_recipient_bounce

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

Теперь в конец файла /etc/postfix/master.cf добавляем:

dovecot   unix  -       n       n       -       -       pipe
  flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -d ${recipient}
mkdir /etc/postfix/config
touch /etc/postfix/config/black_client
touch /etc/postfix/config/black_client_ip
touch /etc/postfix/config/block_dsl
touch /etc/postfix/config/helo_checks
touch /etc/postfix/config/mx_access
touch /etc/postfix/config/white_client
touch /etc/postfix/config/white_client_ip

Редактируем /etc/postfix/config/black_client:

#Значение                #Команда      #Сообщение при reject'е
# Отбрасывать все письма с ящиков mail.ru
#/^.*@mail.ru$/        REJECT        Your e-mail was banned!

Редактируем /etc/postfix/config/black_client_ip:

#Значение                #Команда      #Сообщение при reject'е
# Забанить IP (в данном примере 123.45.67.89)
#/123.45.67.89/       REJECT        Your IP was banned!
# Забанить подсеть (в данном примере 123.45.0-255.0-255)
#/123.45/               REJECT        Your IP-range was banned!
# Забанить домен (в данном примере xyz.ua)
#/xyz.ua/               REJECT        Your Domain was banned!
# Забанить домен (в данном примере cc.zxc.ua)
#cc.zxc.ua/            REJECT        Your Domain was banned!

Редактируем /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
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:

# Принимать все письма c ящиков mail.ru
#/^.*@mail.ru$/        PERMIT

Редактируем /etc/postfix/config/white_client_ip:

# Принимать письма с SMTP-сервера 91.214.209.5
#/91.214.209.5/        PERMIT

Открываем лог и смотрим чтобы небыло ошибок:

tail -f /var/log/mail.log

И запускаем почтовэ сервисы:

/etc/init.d/dovecot restart
/etc/init.d/postfix restart

©
debian.asy.org.ua/5-postfix-postfixadmin-dovecot-ssl-roundcube.html
www.opensolutions.ie/open-source/vimbadmin

Автор: redbutcold

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js