Установка выполняется на:
# cat /etc/redhat-release CentOS release 6.5 (Final)
Предполагается, что MySQL и Apache HTTP уже установлены.
Создаём базу для доменов и почтовых ящиков:
mysql> create database vexim; Query OK, 1 row affected (0.00 sec)
Создаём пользователя и даём доступ к этой базе:
mysql> grant all on vexim.* to vexim@localhost identified by 'PassWord'; Query OK, 0 rows affected (0.00 sec)
Устанавливаем всё необходимое для Postfixadmin:
# yum -y install php-imap php-mbstring php-common php-pdo php-mysql php-cli
Содержание
Установка Posfixadmin
Качаем архив:
# wget http://sourceforge.net/projects/postfixadmin/files/postfixadmin/postfixadmin-2.91/postfixadmin-2.91.tar.gz ... 2014-07-12 09:14:03 (540 KB/s) - “postfixadmin-2.91.tar.gz” saved [2489702/2489702] # tar xpf postfixadmin-2.91.tar.gz # mv postfixadmin-2.91 /var/www/vhosts/postfixadmin.domain.org.ua # chown -R setevoy:setevoy /var/www/vhosts/postfixadmin.domain.org.ua # rm postfixadmin-2.91.tar.gz # cd /var/www/vhosts/postfixadmin.domain.org.ua
В файле config.inc.php
настраиваем доступ к созданной базе:
$CONF['configured'] = true; $CONF['database_type'] = 'mysql'; $CONF['database_host'] = 'localhost'; $CONF['database_user'] = 'vexim'; $CONF['database_password'] = 'PassWord'; $CONF['database_name'] = 'vexim';ar.gz
Установка ClamAV
Требуется репозиторий Epel или RPMForge:
# yum -y install clamd
Редактируем /etc/clamd.conf
:
# Run as another user (clamd must be started by root for this option to work) # Default: don't drop privileges User exim
Редактируем /etc/freshclam.conf
:
# By default when started freshclam drops privileges and switches to the # "clamav" user. This directive allows you to change the database owner. # Default: clamav (may depend on installation options) DatabaseOwner exim
Меняем владельца:
# chown -R exim:exim /var/log/clamav # chown -R exim:exim /var/run/clamav/
Запускаем:
# service clamd start
Установка Exim и Dovecot
# yum -y install dovecot dovecot-mysql exim exim-mysql ... Installed: dovecot.x86_64 1:2.0.9-7.el6_5.1 dovecot-mysql.x86_64 1:2.0.9-7.el6_5.1 exim.x86_64 0:4.72-5.el6 exim-mysql.x86_64 0:4.72-5.el6
Проверяем:
# yum list installed | grep -E "exim|dovecot" dovecot.x86_64 1:2.0.9-7.el6_5.1 dovecot-mysql.x86_64 1:2.0.9-7.el6_5.1 exim.x86_64 4.72-5.el6 @epel exim-mysql.x86_64 4.72-5.el6 @epel
Наcтройка Dovecot
Получаем UID пользователя exim (от него у нас будут работать и ClamAV, и Dovecot и сам Exim):
# cat /etc/passwd | grep exim exim:x:93:93::/var/spool/exim:/sbin/nologin
Редактируем файл /etc/dovecot/dovecot.conf
, и приводим его к такому виду (было желание описать все подробно – но их слишком много, см. ссылки в конце статьи):
base_dir = /var/run/dovecot/ disable_plaintext_auth = no # задаём UID пользователя first_valid_uid = 93 listen = * login_greeting = Dovecot ready man. login_log_format_elements = user=<%u> method=%m rip=%r lip=%l %c mail_location = maildir:/var/vmail/%d/%u passdb { args = /etc/dovecot/dovecot-mysql.conf driver = sql } protocols = imap pop3 service auth { unix_listener auth-master { group = exim mode = 0660 user = exim } user = root } service imap-login { chroot = client_limit = 256 process_limit = 128 process_min_avail = 3 service_count = 1 vsz_limit = 64 M } service pop3-login { chroot = client_limit = 256 process_limit = 128 process_min_avail = 3 service_count = 1 vsz_limit = 64 M } ssl = no userdb { driver = passwd } userdb { args = /etc/dovecot/dovecot-mysql.conf driver = sql } protocol imap { imap_client_workarounds = tb-extra-mailbox-sep mail_plugins = quota imap_quota } protocol pop3 { pop3_client_workarounds = outlook-no-nuls oe-ns-eoh pop3_uidl_format = %08Xu%08Xv } protocol lda { auth_socket_path = /var/run/dovecot/auth-master postmaster_address = [email protected] }
Создаём файл с описанием подключения к MySQL – /etc/dovecot/dovecot-mysql.conf
:
driver = mysql connect = host=localhost dbname=vexim user=vexim password=PassWord default_pass_scheme = MD5-CRYPT password_query = SELECT `username` as `user`, `password` FROM `mailbox` WHERE `username` = '%n@%d' AND `active`='1' user_query = SELECT 93 AS `uid`, 93 AS `gid` FROM `mailbox` WHERE `username` = '%n@%d' AND `active`='1'
Проверим базу (вообще мы пользователя создадим позже, тут просто для примера) – найдём пользователя:
mysql> use vexim; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed
mysql> SELECT 93 AS `uid`, 93 AS `gid` FROM `mailbox` WHERE `username` = '[email protected]' AND `active`='1'; +-----+-----+ | uid | gid | +-----+-----+ | 93 | 93 | +-----+-----+ 1 row in set (0.00 sec)
Хеш пароля:
mysql> SELECT `username` as `user`, `password` FROM `mailbox` WHERE `username` = '[email protected]' AND `active`='1'; +---------------------+------------------------------------+ | user | password | +---------------------+------------------------------------+ | [email protected] | $1$eae4d3fb$80IltPiRe52/deAF3hmlO. | +---------------------+------------------------------------+ 1 row in set (0.00 sec)
Создаём директорию:
# mkdir /var/vmail # chown exim:exim -R /var/vmail # chown exim:exim -R /var/spool/exim
Запускаем и проверяем:
# service dovecot start Starting Dovecot Imap: [ OK ]
# tail /var/log/maillog ... Jul 12 09:53:38 venti dovecot: master: Dovecot v2.0.9 starting up (core dumps disabled)
Запустился, пока без ошибок.
Настройка Exim
# mv /etc/exim/exim.conf /etc/exim/exim.conf.default
Создаём новый /etc/exim/exim.conf
:
# имя хоста, будет использоваться при HELO primary_hostname = mx0.domain.org.ua # Параметры доступа к MySQL # hide - не выводить при выполнении проверки конфигурации exim -bV # Формат - адрес/база/пользователь/пароль hide mysql_servers = localhost/vexim/vexim/PassWord # если есть несколько внешних IP/интерфейсов - указываем какой слушать # local_interfaces = 77.***.***.20 # список локальных доменов, будет использоваться в виде +local_domains # например для отключения проверок; # тут включаем все домены из "своей базы" # можно добавить список через двоеточие domainlist local_domains = ${lookup mysql{SELECT `domain` FROM `domain` WHERE `domain`='${quote_mysql:$domain}' AND `active`='1'}} # список доменов, к которым разрешаем релей почты domainlist relay_to_domains = ${lookup mysql{SELECT `domain` FROM `domain` WHERE `domain`='${quote_mysql:$domain}' AND `active`='1'}} # список сетей, из которых разрешён релей hostlist relay_from_hosts = localhost:127.0.0.0/8:77.***.***20 # задаём имена ACL для проверок acl_smtp_rcpt = acl_check_rcpt acl_smtp_data = acl_check_data # acl_smtp_helo = acl_check_helo # подключаем ClamAV av_scanner = clamd:/var/run/clamav/clamd.sock # Проверка на спам; подключим позже # spamd_address = /var/run/spamd.sock # TLS, тоже подключим позже # SSL/TLSпубличный сертификат и приватный ключ # tls_certificate = /etc/ssl/certs/mail.pem # tls_privatekey = /etc/ssl/certs/mail.pem # tls_advertise_hosts = * # tls_on_connect_ports=465 # домен, добавляемый при отправке локальной почты; # например письма от root будут вида [email protected] qualify_domain = domain.org.ua # домен для локальный получателей, противоположность пункта выше; # если не указать - будет использоваться значение из qualify_domain qualify_recipient = domain.org.ua # принимать ли почту с доменов, состоящих из IP; # не вижу адекватных серверов, которые бы так отправляли - запрещаем; # по-умолчанию тоже false allow_domain_literals = false # пользователь, под которым будет работать Exim exim_user = exim exim_group = exim never_users = root # отключаем запросы идентификации хоста по RFC 1413 # т.к. у многих отправителей с этим проблемы rfc1413_query_timeout = 0s # если смысл указать только при использовании нестандартных портов; # и при настройке TLS/SSL; # у меня провайдер блокирует 25, поэтому на сервере добавил 250; daemon_smtp_ports = 25 : 250 # Unqualified names - адреса отправителей, # для которых домен указан без "завершающей части"; # - точки, например - root@domain # разрешаем только для списка relay_from_hosts sender_unqualified_hosts = +relay_from_hosts # то же, но для получателей recipient_unqualified_hosts = +relay_from_hosts # timeout, после которого удаляем недоставленные bounce message: # Non-Delivery Report (NDR), Delivery Status Notification (DSN), # Non-Delivery Notification (NDN) ignore_bounce_errors_after = 45m # timeout, после которого недоставленное письмо будет удалено из очереди timeout_frozen_after = 7d # адрес, на который будут отправляться уведомления о недоставленных письмах freeze_tell = [email protected] # список хостов, которым не делаем проверку корректности HELO/EHLO helo_accept_junk_hosts = 127.0.0.0/8 # timeout перед попыткой отправки замороженного # (недоставленного с первой попытки) письма auto_thaw = 1h # приветственное сообщение сервера smtp_banner = "$primary_hostname, ESMTP EXIM $version_number" # макс. количество одновременных подключений для отправки smtp_accept_max = 50 # макс. кол-во писем за одно подключение smtp_accept_max_per_connection = 25 # макс. подключений с одного хоста smtp_accept_max_per_host = 10 # установите true, что бы письма обрабатывались # в очереди по мере их поступления - # "раньше пришло - раньше ушло"; # иначе используется случайный порядок отправки; # нельзя использовать если след. опция true queue_run_in_order = false # если установлено в true - Exim будет разбивать очередь # по отдельным поддиректориям (62 штуки) в /var/spool/exim/, # вместо создания одного списка на отправку; # все директории будут обрабатываться в случайном порядке # полезно в плане производительности если много почты split_spool_directory = true remote_max_parallel = 15 return_size_limit = 70k message_size_limit = 64M # разрешаем символ "_" в сообщении HELO от клиентов helo_allow_chars = _ # принудительная синхронизация с клиентом при обмене сообщениями/командами # может быть проблема с некоторыми почтовыми клиентами, например с Thunderbird smtp_enforce_sync = true # формат лога # + - писать в лог; # - - не писать в лог; # +all_parents - записывать все промежуточные хосты (?); # +connection_reject - разорванные соединения; # +incoming_interface - интерфейс (реально - IP); # +lost_incoming_connections - потерянные входящие соединения; # +received_sender - отправитель; # +received_recipients - получатель; # +smtp_confirmation - подтверждения SMTP?; # +smtp_syntax_error - ошибки синтаксиса SMTP; # +smtp_protocol_error - ошибки протокола SMTP; # -queue_run - работа очереди (замороженные сообщения); # полный список и вообще про логгирование: # http://www.exim.org/exim-html-current/doc/html/spec_html/ch-log_files.html log_selector = +all_parents +connection_reject +incoming_interface +lost_incoming_connection +received_sender +received_recipients +smtp_confirmation +smtp_syntax_error +smtp_protocol_error -queue_run # должен отключать формат даты syslog-а в логе exim-а, но разницы не увидел syslog_timestamp = false # правила проверки почты по ACL begin acl # проверяем адрес получателя - блок ACL acl_check_rcpt # acl_check_rcpt: accept hosts = : # некорректные символы в адресе (кроме "своих" доменов из списка local_domains) deny message = "incorrect symbol in address" domains = !+local_domains local_parts = ^[./|] : ^.*[@%!] : ^.*/../ # принимать почту для ящиков postmaster в доменах из списка local_domains # в данном случае не нужно # accept local_parts = postmaster # domains = +local_domains # отклоняем, если нет HELO/EHLO deny message = "HELO/EHLO required by SMTP RFC" condition = ${if eq{$sender_helo_name}{}{yes}{no}} # отклоняем отправителей, у которых IP вместо домена # исключение - список relay_from_hosts deny message = "Your IP in HELO - access denied!" hosts = * : !+relay_from_hosts condition = ${if eq{$sender_helo_name} {$sender_host_address}{true}{false}} # отклоняем, если в HELO наш собственный IP deny condition = ${if eq{$sender_helo_name} {$interface_address}{yes}{no}} hosts = !127.0.0.1 : !localhost : * message = "My IP in your HELO! Access denied!" # отклоняем, если в EHLO наше имя хоста deny message = Message was delivered by ratware - own condition = ${if match_domain{sender_helo_name} {$primary_hostname:+local_domains:+relay_to_domains} {true}{false}} log_message = remote host used our name in EHLO/HELO. # отклоняем отправителей с именем хоста только из цифр deny condition = ${if match{$sender_helo_name} {N^d+$N}{yes}{no}} hosts = !127.0.0.1 : !localhost : * message = "Incorrect HELO string" # отклонять отправителей, у которых в имени хоста adsl/dialup и т.д. # не используется в данном случае # deny message = "your hostname is bad (adsl, poll, ppp & etc)." # condition = ${if match{$sender_host_name} # {adsl|dialup|pool|peer|dhcp} # {yes}{no}} # задаём задержку при подключении клиента # спам-боты как правило не дожидаются ответа сервера # требуется smtp_enforce_sync = true set acl_m0 = 30s accept hosts = +relay_from_hosts:127.0.0.0/8 set acl_m0 = 0s delay = $acl_m0 # проверяем в спам-базах # сервера спам-баз опрашиваются по очереди # сверху вниз, если не отправитель не найден на первом, то # запрашивается второй, и т.д.; # если не найден ни в одном # из списка - то почта пропускается deny message = "you in blacklist - $dnslist_domain --> $dnslist_text; $dnslist_value" log_message = REJECT: Listed in $dnslist_domain hosts = !+relay_from_hosts dnslists = cbl.abuseat.org : dul.dnsbl.sorbs.net : sbl-xbl.spamhaus.org # проверяем наличие получателя в локальных доменах accept domains = +local_domains verify = recipient # принимаем почту от локальных доменов accept hosts = +relay_from_hosts # пропускаем прошедшим авторизацию accept authenticated = * # если письмо не попало не под одно правило в списке - отклоняем его deny message = "Access deny - this not open relay!" log_message = REJECT: We aren't an open relay acl_check_data: deny malware = * message = "Your message contains viruses: $malware_name" # тут потом добавим фильтры антиспама accept begin routers dnslookup: driver = dnslookup domains = ! +local_domains transport = remote_smtp ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8 no_more system_aliases: driver = redirect allow_fail allow_defer data = ${lookup mysql{SELECT `goto` FROM `alias` WHERE `address`='${quote_mysql:$local_part@$domain}' OR `address`='${quote_mysql:@$domain}'}} dovecot_user: driver = accept condition = ${lookup mysql{SELECT `goto` FROM `alias` WHERE `address`='${quote_mysql:$local_part@$domain}' OR `address`='${quote_mysql:@$domain}'}{yes}{no}} transport = dovecot_delivery begin transports remote_smtp: driver = smtp dovecot_delivery: driver = pipe command = /usr/libexec/dovecot/deliver -d $local_part@$domain message_prefix = message_suffix = delivery_date_add envelope_to_add return_path_add log_output user = exim address_pipe: driver = pipe return_output address_reply: driver = autoreply begin retry * * F,2h,15m; G,16h,1h,1.5; F,4d,6h begin rewrite begin authenticators auth_plain: driver = plaintext public_name = LOGIN server_prompts = Username:: : Password:: server_condition = "${if crypteq{$2}{${lookup mysql{SELECT `password` FROM `mailbox` WHERE `username` = '${quote_mysql:$1}'}}}{yes}{no}}" server_set_id = $1 auth_login: driver = plaintext public_name = PLAIN server_condition = "${if crypteq{$3}{${lookup mysql{SELECT `password` FROM `mailbox` WHERE `username` = '${quote_mysql:$2}'}}}{yes}{no}}" server_prompts = : server_set_id = $2 auth_cram_md5: driver = dovecot public_name = CRAM-MD5 server_socket = /var/run/dovecot/auth-client server_set_id = $auth1
Проверяем синтаксис конфига:
# exim -bV Exim version 4.72 #1 built 13-Jun-2014 12:17:50 Copyright (c) University of Cambridge, 1995 - 2007 Berkeley DB: Berkeley DB 4.7.25: (September 9, 2013) Support for: crypteq iconv() IPv6 PAM Perl Expand_dlfunc TCPwrappers OpenSSL Content_Scanning DKIM Old_Demime Lookups (built-in): lsearch wildlsearch nwildlsearch iplsearch cdb dbm dbmnz dnsdb dsearch ldap ldapdn ldapm nis nis0 nisplus passwd sqlite Authenticators: cram_md5 cyrus_sasl dovecot plaintext spa Routers: accept dnslookup ipliteral manualroute queryprogram redirect Transports: appendfile/maildir/mailstore/mbx autoreply lmtp pipe smtp Fixed never_users: 0 Size of off_t: 8 OpenSSL compile-time version: OpenSSL 1.0.1e-fips 11 Feb 2013 OpenSSL runtime version: OpenSSL 1.0.1e-fips 11 Feb 2013 Configuration file is /etc/exim/exim.conf
Ошибка будет выглядеть так (оставим незакрытую скобку { для примера):
# exim -bV Exim version 4.72 #1 built 13-Jun-2014 12:17:50 Copyright (c) University of Cambridge, 1995 - 2007 Berkeley DB: Berkeley DB 4.7.25: (September 9, 2013) Support for: crypteq iconv() IPv6 PAM Perl Expand_dlfunc TCPwrappers OpenSSL Content_Scanning DKIM Old_Demime Lookups (built-in): lsearch wildlsearch nwildlsearch iplsearch cdb dbm dbmnz dnsdb dsearch ldap ldapdn ldapm nis nis0 nisplus passwd sqlite Authenticators: cram_md5 cyrus_sasl dovecot plaintext spa Routers: accept dnslookup ipliteral manualroute queryprogram redirect Transports: appendfile/maildir/mailstore/mbx autoreply lmtp pipe smtp Fixed never_users: 0 Size of off_t: 8 OpenSSL compile-time version: OpenSSL 1.0.1e-fips 11 Feb 2013 OpenSSL runtime version: OpenSSL 1.0.1e-fips 11 Feb 2013 2014-07-13 09:29:08 Exim configuration error in line 72 of /etc/exim/exim.conf: option setting expected: {
Устанавливаем права доступа:
# chmod -Rf g+w /var/spool/exim # chmod -Rf g+s /var/spool/exim
Отключаем и удаляем Postfix:
# alternatives --config mta There are 2 programs which provide 'mta'. Selection Command ----------------------------------------------- *+ 1 /usr/sbin/sendmail.postfix 2 /usr/sbin/sendmail.exim Enter to keep the current selection[+], or type selection number: 2
Устанавливаем 2 (sendmail.exim
) вместо 1 (sendmail.postfix
) – таким образом MTA по-умолчанию у нас будет Exim.
# chkconfig postfix off
# service postfix stop Shutting down postfix: [ OK ]
# yum -y remove postfix
Добавляем в автозагрузку Exim:
# chkconfig exim on # chkconfig dovecot on
Запускаем его:
# service exim start Generating exim certificate: [ OK ] Starting exim: [ OK ]
Проверяем порты:
# netstat -anpt | grep 25 tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 10962/exim tcp 0 0 0.0.0.0:250 0.0.0.0:* LISTEN 10962/exim
Проверяем лог:
# tail /var/log/exim/main.log 2014-07-12 10:10:33 exim 4.72 daemon started: pid=10217, -q1h, listening for SMTP on port 25 (IPv6 and IPv4)
Настройка Postfixadmin
Настраиваем виртуалхост для Postfixadmin (Apache HTTP установлен по этой>>> статье).
Создаём файлы логов:
# touch /var/log/httpd/postfixadmin.domain.org.ua-access.log # touch /var/log/httpd/postfixadmin.domain.org.ua-access.log
Создаём директорию для php
-обработчика:
# mkdir /var/www/php-cgi/postfixadmin.domain.org.ua/
Копируем файлы:
# cp -r /var/www/php-cgi/domain.org.ua/* /var/www/php-cgi/postfixadmin.domain.org.ua/ # chown -R setevoy:setevoy /var/www/php-cgi/postfixadmin.domain.org.ua/
Обязательно проверяем права:
# ls -l /var/www/php-cgi/postfixadmin.domain.org.ua/ total 4 -rwxr-xr-x 1 setevoy setevoy 117 Jul 12 10:18 php.cgi
Создаём конфиг /etc/httpd/conf.d/postfixadmin.domain.org.ua.conf
:
<VirtualHost 127.0.01:8080> DocumentRoot /var/www/vhosts/postfixadmin.domain.org.ua ServerName postfixadmin.domain.org.ua ServerAlias www.postfixadmin.domain.org.ua CustomLog /var/log/httpd/postfixadmin.domain.org.ua-access.log combined ErrorLog /var/log/httpd/postfixadmin.domain.org.ua-error.log <IfModule mod_fcgid.c> SuexecUserGroup setevoy setevoy <Directory /var/www/vhosts/postfixadmin.domain.org.ua> Options +ExecCGI AllowOverride All AddHandler fcgid-script .php FCGIWrapper /var/www/php-cgi/postfixadmin.domain.org.ua/php.cgi .php Order allow,deny Allow from all </Directory> </IfModule> </VirtualHost>
Проверяем конфиг Apache HTTP:
# httpd -t Syntax OK
Перезапускаем:
# service httpd restart Stopping httpd: [ OK ] Starting httpd: [ OK ]
Создаём конфиг для NGINX:
# cp /etc/nginx/conf.d/domain.org.ua.conf /etc/nginx/conf.d/postfixadmin.domain.org.ua.conf
Редактируем /etc/nginx/conf.d/postfixadmin.domain.org.ua.conf
:
server { listen 80; server_name postfixadmin.domain.org.ua wwww.postfixadmin.domain.org.ua; location ~ /.ht { deny all; } location ~* .(jpg|swf|jpeg|gif|png|css|js|ico)$ { root /var/www/vhosts/postfixadmin.domain.org.ua; } location / { proxy_pass http://127.0.0.1:8080; } }
Проверяем, перезапускаем:
# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
# service nginx restart Stopping nginx: [ OK ] Starting nginx: [ OK ]
Открываем страницу http://postfixadmin.domain.org.ua/setup.php и внизу задаём пароль установки (обязательное условие – минимум 2 цифры в пароле):
Редактируем файл /var/www/vhosts/postfixadmin.domain.org.ua/config.inc.php
, добавляем:
$CONF['setup_password'] = '35e58ee76c4ac888d0573cdfeedea346:9edaacb88681bdcc64cd0ed5cbd229695b60442b';
Где строка символов (хеш пароля) – та же, что и на странице.
Создаём аккаунт “root“:
Теперь переходим в саму панель управления http://postfixadmin.domain.org.ua/login.php:
Добавляем новый домен:
Создаём ящик:
Т.к. мы не снимали галочку “Отправить приветственное письмо” – Exim должен был отправить его на созданный ящик.
Проверяем лог /var/log/exim/main.log
:
2014-07-12 11:54:51 Delay 0s for localhost [127.0.0.1] with HELO=venti.domain.org.ua. Mail from [email protected] to [email protected]. 2014-07-12 11:54:51 1X5t51-0002q7-4d <= [email protected] H=localhost (venti.domain.org.ua) [127.0.0.1] I=[127.0.0.1]:25 P=esmtp S=531 from <[email protected]> for [email protected] 2014-07-12 11:54:51 1X5t51-0002q7-4d => root <[email protected]> R=dovecot_user T=dovecot_delivery 2014-07-12 11:54:51 1X5t51-0002q7-4d Completed
Проверяем каталог:
# ls -l /var/vmail/domain.org.ua/[email protected]/new/
# cat /var/vmail/domain.org.ua/[email protected]/new/1405155291.M318313P10925.venti.domain.org.ua,S=646,W=664 Return-path: <[email protected]> Envelope-to: [email protected] Delivery-date: Sat, 12 Jul 2014 11:54:51 +0300 Received: from localhost ([127.0.0.1] helo=venti.domain.org.ua) by mx0.domain.org.ua with esmtp (Exim 4.72) (envelope-from <[email protected]>) id 1X5t51-0002q7-4d for [email protected]; Sat, 12 Jul 2014 11:54:51 +0300 To: [email protected] From: [email protected] Subject: =?utf-8?Q?=D0=94=D0=BE=D0=B1=D1=80=D0=BE_=D0=BF=D0=BE=D0=B6=D0=B0=D0=BB?= =?utf-8?Q?=D0=BE=D0=B2=D0=B0=D1=82=D1=8C!?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Hi, Welcome to your new account.
Письмо есть, всё работает.
Настраиваем IPTABLES:
# iptables -I INPUT 6 -p tcp --dport 25 -m state --state NEW -j ACCEPT # iptables -I INPUT 6 -p tcp --dport 250 -m state --state NEW -j ACCEPT # iptables -I INPUT 6 -p tcp --dport 143 -m state --state NEW -j ACCEPT # iptables -I INPUT 6 -p tcp --dport 110 -m state --state NEW -j ACCEPT
# service iptables save iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]
Подключаемся внешним почтовым клиентом, проверяем лог /var/log/maillog
:
Jul 12 12:06:10 venti dovecot: imap-login: Login: user=<[email protected]>, method=PLAIN, rip=37.***.***.56, lip=77.***.***.20
Заодно, можно увидеть работу dnsblacklist
:
2014-07-13 19:35:34 H=(gmail.com) [222.100.140.4] I=[77.***.***.20]:25 F=<[email protected]> rejected RCPT <support@setevoy.kiev.ua>: REJECT: Listed in cbl.abuseat.org
Проверим с помощью telnet
, для большей наглядности:
$ telnet 77.***.***.20 110 Trying 77.***.***.20... Connected to 20.***.***.77.colo.static.dc.***.com. Escape character is '^]'. +OK Dovecot ready man. user [email protected] +OK pass PassWord +OK Logged in. list +OK 8 messages: 1 664 2 664 3 664 4 664 5 664 6 717 7 938 8 1938 .
Отправка:
$ telnet 77.***.***.20 25 Trying 77.***.***.20... Connected to 20.***.***.77.colo.static.dc.***.com. Escape character is '^]'. 220 mx0.domain.org.ua, ESMTP EXIM 4.72 helo domain.kiev.ua 250 mx0.domain.org.ua Hello domain.kiev.ua [77.***.***.40] mail from:[email protected] 250 OK rcpt to:[email protected] 250 Accepted data 354 Enter message, ending with "." on a line by itself Hello, username! . 250 OK id=1X5tp3-0002z2-NK quit 221 mx0.domain.org.ua closing connection Connection closed by foreign host.
На сервере проверяем:
# cat /var/vmail/domain.org.ua/[email protected]/cur/1405158157.M75523P11478.venti.domain.org.ua,S=352,W=362:2,Sb Return-path: <[email protected]> Envelope-to: [email protected] Delivery-date: Sat, 12 Jul 2014 12:42:37 +0300 Received: from [77.***.***.40] (helo=domain.kiev.ua) by mx0.domain.org.ua with smtp (Exim 4.72) (envelope-from <[email protected]>) id 1X5tp3-0002z2-NK for [email protected]; Sat, 12 Jul 2014 12:42:36 +0300 Hello, username!
Позже надо будет добавить Greylisting, Spamassassin и поддержку шифрования по TLS.
Exim debugging
Несколько команд для проверки работы Exim.
Проверить отправку можно так:
# exim -v [email protected] ... From: [email protected] To: [email protected] Subject: Testing Exim This is a test message. LOG: MAIN <= [email protected] U=root P=local S=369 # Loading lookup modules from /usr/lib64/exim/4.72-5.el6/lookups Loaded "mysql.so" (1 lookup types) Loaded 1 lookup modules delivering 1X6Dtu-00050z-Tr LOG: MAIN => root <[email protected]> R=dovecot_user T=dovecot_delivery LOG: MAIN Completed
Проверить работу антивируса:
# exim -bmalware /path-to-virus-file
Посмотреть количество писем в очереди на отправку:
# exim -bpc
Посмотреть саму очередь:
# exim -bp
Узнать, чем занят Exim в настоящий момент:
# exiwhat ... 19244 daemon: -q1h, listening for SMTP on port 25 (IPv6 and IPv4) port 250 (IPv6 and IPv4)
Проверить маршрут отправки письма:
# exim -bt [email protected] [email protected] router = dnslookup, transport = remote_smtp host mx0.remotedomain.kiev.ua [77.***.***.40] MX=10
Сымитировать SMTP-активность с заданного адреса, с отображением задействованных фильтров и т.п.:
# exim -bh 77.***.***.40
Вывести все опции Exim из файлов конфигурации (активные/неактивные):
# exim -bP
Вывести только опцию smtp_enforce_sync
:
# exim -bP smtp_enforce_sync
Посмотреть статистику работы сервера:
# eximstats /var/log/exim/main.log | less
Ссылки по теме