1.Установка имени хоста
1 |
# hostnamectl set-hostname mail.example.com |
1 |
# nano /etc/hostname |
1 |
mail.example.com |
1 |
# nano /etc/hosts |
1 |
192.168.1.102 mail.example.com mail |
1 |
# systemctl restart systemd-hostnamed |
1 |
# hostname |
1 |
mail.example.com |
2.Установка и настройка Nginx
1 |
# nano /etc/yum.repos.d/nginx.repo |
1 2 3 4 5 |
[nginx] name=nginx repo baseurl=http://nginx.org/packages/centos/7/$basearch/ gpgcheck=0 enabled=1 |
1 |
# yum update |
1 |
# yum install nginx |
1 |
# nano nginx.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
user nginx; worker_processes 1; worker_rlimit_nofile 1024; worker_priority -5; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; use epoll; multi_accept on; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; tcp_nopush on; tcp_nodelay on; server_tokens off; keepalive_timeout 65; types_hash_max_size 2048; gzip on; gzip_static on; gzip_comp_level 5; gzip_min_length 1024; gzip_proxied any; gzip_vary on; gzip_types text/plain text/xml application/xml application/x-javascript text/javascript text/css text/json font/ttf font/opentype application/vnd.ms-fontobject image/svg+xml; gzip_disable "msie6"; open_file_cache max=5000 inactive=20s; open_file_cache_valid 30s; open_file_cache_min_uses 2; open_file_cache_errors on; fastcgi_buffer_size 128k; fastcgi_buffers 4 256k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; fastcgi_connect_timeout 90; fastcgi_send_timeout 90; fastcgi_read_timeout 90; client_max_body_size 100m; client_body_buffer_size 8K; include /etc/nginx/conf.d/*.conf; } |
Настройка виртуального хоста по умолчанию
1 |
# nano /etc/nginx/conf.d/default.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
server { listen 192.168.1.102:80 default_server; server_name localhost; root /usr/share/nginx/html; #charset koi8-r; access_log /var/log/nginx/default-access.log main; error_log /var/log/nginx/default-error.log warn; location / { try_files $uri $uri/ /index.php?$args; index index.php index.html index.htm ; } #include common/postfixadmin.conf; #include common/roundcube.conf; location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+?\.php)(/.*)?$; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } location ~ /\.ht { deny all; } } |
1 |
# systemctl restart nginx |
1 |
# systemctl enable nginx |
3.Установка и настройка PHP-FPM
1 |
# yum install php php-fpm php-mysql php-imap php-mbstring php-common php-pdo php-xml |
1 |
# nano /etc/php.ini |
1 2 3 4 5 6 7 8 |
expose_php = Off max_execution_time = 300 max_input_time = 600 memory_limit = 256M post_max_size = 100M cgi.fix_pathinfo=0 upload_max_filesize = 100M date.timezone = Europe/Kiev |
1 |
# nano php-fpm.conf |
1 2 3 4 |
emergency_restart_threshold = 10 emergency_restart_interval = 1m process_control_timeout = 10s daemonize = yes |
1 |
# nano /etc/php-fpm.d/www.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
listen.owner = nginx listen.group = nginx listen.mode = 0660 user = nginx group = nginx pm = dynamic pm.max_children = 50 pm.start_servers = 5 pm.min_spare_servers = 5 pm.max_spare_servers = 35 request_terminate_timeout = 350 request_slowlog_timeout = 3s slowlog = /var/log/php-fpm/www-slow.log catch_workers_output = yes security.limit_extensions = .php .php3 .php4 .php5 php_admin_value[error_log] = /var/log/php-fpm/www-error.log php_admin_flag[log_errors] = on php_admin_value[memory_limit] = 256M php_value[session.save_handler] = files php_value[session.save_path] = /var/lib/php/session |
1 |
# chgrp -R nginx /var/lib/php/session/ |
1 |
# php-fpm -t |
1 |
# systemctl restart php-fpm |
1 |
# systemctl enable php-fpm |
4.Установка и настройка MySQL
1 |
# yum install mariadb-server mariadb |
1 |
# nano /etc/my.cnf |
1 2 3 |
[mysqld] ……………… bind-address = 127.0.0.1 |
1 |
# systemctl start mariadb |
1 |
# systemctl enable mariadb |
1 |
# /usr/bin/mysql_secure_installation |
5.Установка и настройка Postixadmin
1 |
# cd /tmp/ |
1 |
# wget -O postfizadmin.tar.gz http://downloads.sourceforge.net/project/postfixadmin/postfixadmin/postfixadmin-2.93/postfixadmin-2.93.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fpostfixadmin%2Ffiles%2Fpostfixadmin%2Fpostfixadmin-2.93%2F&ts=1445686222&use_mirror=freefr |
1 |
# tar xvfz postfizadmin.tar.gz |
1 |
# mv postfixadmin-2.93 /usr/share/postfixadmin |
1 |
# rm -rf postfizadmin.tar.gz |
1 |
# chown -R nginx:nginx /usr/share/postfixadmin |
1 |
# nano /usr/share/postfixadmin/config.inc.php |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
$CONF['configured'] = true; $CONF['database_type'] = 'mysqli'; $CONF['database_host'] = 'localhost'; $CONF['database_user'] = 'postfix'; $CONF['database_password'] = 'ubooh7AeCh7OoMae9tha'; $CONF['database_name'] = 'postfix'; $CONF['smtp_server'] = 'localhost'; $CONF['smtp_port'] = '25'; $CONF['encrypt'] = 'md5crypt'; $CONF['dovecotpw'] = "/usr/bin/doveadm pw"; $CONF['default_aliases'] = array ( 'abuse' => 'abuse@example.com', 'hostmaster' => 'hostmaster@example.com', 'postmaster' => 'postmaster@example.com', 'webmaster' => 'webmaster@example.com' |
Настройка Nginx для использования Postfixadmin
1 |
# nano /etc/nginx/common/postfixadmin.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
location /postfixadmin { auth_basic "Restricted"; auth_basic_user_file /etc/nginx/.htpasswd; root /usr/share/; index index.php index.html index.htm; location ~ ^/postfixadmin/(.+\.php)$ { try_files $uri =404; root /usr/share/; fastcgi_pass unix:/var/run/php5-fpm.sock; include /etc/nginx/fastcgi_params; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_buffer_size 128k; fastcgi_buffers 256 4k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; fastcgi_intercept_errors on; } location ~* ^/postfixadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { root /usr/share/; } } |
1 |
# nano /etc/nginx/conf.d/default.conf |
После
1 2 3 |
location / { ………………… } |
добавляем подключение postfixadmin
1 |
include common/postfixadmin.conf; |
Создаем пользователя для базовой аутентификации в Nginx
1 |
# htpasswd -c /etc/nginx/.htpasswd myuser |
1 |
# nginx -t |
1 |
# systemctl reload nginx |
После чего продолжаем установку через WEB-интерфейс
1 |
http://192.168.1.102/postfixadmin/setup.php |
Вводим пароль, получаем hash-пароля типа
1 |
e725c04cd27d0495fc9e4134cafd0e2b:882fc4087004f645aaf068810667dd039034a3e3 |
и вводим его в конфигурацинном файле postfixadmin
1 |
# nano /usr/share/postfixadmin/config.inc.php |
1 |
$CONF['setup_password'] = 'e725c04cd27d0495fc9e4134cafd0e2b:882fc4087004f645aaf068810667dd039034a3e3'; |
После чего по ссылке
1 |
http://192.168.1.102/postfixadmin/setup.php |
Вводим установочный пароль в строке Setup password
В строке Administrator – вводим учетную запись админиcтратора admin@example.com
В строках пароль и подтверждение пароля вводим пароль админской учетки
После чего заходим под админской учеткой
1 |
http://192.168.1.102/postfixadmin/setup.php |
После чего удаляем установочный файл postfixadmin
1 |
# rm /usr/share/postfixadmin/setup.php |
6.Установка и настройка Dovecot
1 |
# yum install dovecot dovecot-mysql |
1 |
# cp /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf~ |
Узнаем UID, под которым работает exim
1 |
# cat /etc/passwd | grep exim |
1 |
exim:x:93:93::/var/spool/exim:/sbin/nologin |
1 |
# nano /etc/dovecot/dovecot.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
base_dir = /var/run/dovecot/ disable_plaintext_auth = no 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 autocreate } 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 = root@example.com } |
1 |
# nano /etc/dovecot/dovecot-mysql.conf |
1 2 3 4 5 |
driver = mysql connect = host=localhost dbname=postfix user=postfix password=ubooh7AeCh7OoMae9tha 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' |
1 |
# mkdir /var/vmail |
1 |
# chown exim:exim -R /var/vmail/ |
1 |
# chown -R exim:exim /var/spool/exim/ |
1 |
# systemctl start dovecot |
1 |
# systemctl enable dovecot |
Логи смотри в /var/log/maillog
1 |
# tail -f /var/log/maillog |
7.Установка и настройка Exim
1 |
# yum install exim exim-mysql |
1 |
# cp /etc/exim/exim.conf /etc/exim/exim.conf~ |
1 |
# nano /etc/exim/exim.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 |
# имя хоста, будет использоваться при HELO primary_hostname = mail.example.com # Параметры доступа к MySQL # hide - не выводить при выполнении проверки конфигурации exim -bV # Формат - адрес/база/пользователь/пароль hide mysql_servers = localhost/postfix/postfix/ubooh7AeCh7OoMae9tha # Cписок IP-адресов интерфейсов, на которых ожидаются запросы. #local_interfaces = 127.0.0.1 87.98.221.102 # список локальных доменов, будет использоваться в виде +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 # задаём имена ACL для проверок почты acl_smtp_rcpt = acl_check_rcpt acl_smtp_mime = acl_check_mime acl_smtp_data = acl_check_data # acl_smtp_helo = acl_check_helo # Указываем, что на порту 465 будет TLS-шифрование. # tls_on_connect_ports = 465 # Перечисляем, для каких хостов будет доступно TLS-шифрование. # tls_advertise_hosts = * # SSL/TLSпубличный сертификат и приватный ключ # tls_certificate = /etc/exim/ssl/example.com.pem # tls_privatekey = /etc/exim/ssl/example.com.pem # домен, добавляемый при отправке локальной почты; # например письма от root будут вида root@example.com qualify_domain = example.com # домен для локальный получателей, противоположность пункта выше; # если не указать - будет использоваться значение из qualify_domain qualify_recipient = example.com # принимать ли почту с доменов, состоящих из IP т.е вида вида имя_пользователя@IP-адрес; allow_domain_literals = false # пользователь, под которым будет работать Exim exim_user = exim exim_group = exim # В целях безопасности запрещаем работу от root-а never_users = root # Когда доставка сообщения откладывается, Exim посылает предупреждающее # письмо отправителю, с указанными интервалами. #delay_warning = 4h:8h:24h:48h # отключаем запросы идентификации хоста по RFC 1413 # т.к. у многих отправителей с этим проблемы rfc1413_query_timeout = 0s # На каких портах будет слушать запросы Exim # daemon_smtp_ports = 25 : 465: 587 daemon_smtp_ports = 25 # Unqualified names - адреса отправителей, # для которых домен указан без "завершающей части"; # - точки, например - root@example # разрешаем только для списка 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 = root@example.com # список хостов, которым не делаем проверку корректности HELO/EHLO helo_accept_junk_hosts = 127.0.0.0/8 # timeout перед попыткой отправки замороженного # (недоставленного с первой попытки) письма auto_thaw = 1h # приветственное сообщение сервера smtp_banner = "$primary_hostname, ESMTP EXIM" # макс. количество одновременных подключений для отправки smtp_accept_max = 50 # макс. кол-во писем за одно подключение smtp_accept_max_per_connection = 25 # макс. подключений с одного хоста smtp_accept_max_per_host = 10 # Класть в очередь, при большем числе сообщений за одну сесию. smtp_accept_queue_per_connection = 30 # установите true, что бы письма обрабатывались # в очереди по мере их поступления - # "раньше пришло - раньше ушло"; # иначе используется случайный порядок отправки; # нельзя использовать если след. опция true queue_run_in_order = false # если установлено в true - Exim будет разбивать очередь # по отдельным поддиректориям (62 штуки) в /var/spool/exim/, # вместо создания одного списка на отправку; # все директории будут обрабатываться в случайном порядке # полезно в плане производительности если много почты split_spool_directory = true # Максимальное количество SMTP-доставок на одно сообщение 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 # ставим дефолтовую задержку в 30 секунд set acl_m0 = 30s accept hosts = +relay_from_hosts:127.0.0.0/8 # ставим задержку в 0 секунд для своих сетей 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_mime: # Запрещаем вложения определенных типов deny message = Blacklisted file extension detected ($mime_filename) condition = ${if match \ {${lc:$mime_filename}} \ {\N(\.exe|\.pif|\.bat|\.scr|\.lnk|\.com|\.vbs|\.cpl)$\N}{1}{0}} accept # ACL проверки "тела" письма acl_check_data: # deny malware = * # message = "Your message contains viruses: $malware_name" accept begin routers # Поиск маршрута к хосту в DNS. Не проверяются 0.0.0.0 и 127.0.0.0/8 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}'}} # data = ${lookup{$local_part}lsearch{/etc/exim/alias}} 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 |
1 |
# exim –bV |
8.Отключение и удаление Postfix, запуск и добавление Exim в автозагрузку
1 |
# alternatives --config mta |
1 2 3 4 5 6 |
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 |
1 |
# systemctl disable postfix |
1 |
# systemctl stop postfix |
1 |
# yum remove postfix |
1 |
# systemctl enable exim |
1 |
# systemctl start exim |
Логи смотрим в
1 |
# tail -f /var/log/exim/main.log |
9.Настройка TLS/SSL в Dovecot/Exim
1 |
# mkdir /etc/exim/ssl |
1 |
# cd /etc/exim/ssl |
1 |
# openssl req -new -nodes -x509 -out example.com.pem -keyout example.com.pem -days 3650 |
Настройка Dovecot на использование TLS/SSL
1 |
# nano /etc/dovecot/dovecot.conf |
1 2 3 4 5 6 |
ssl = yes ssl_cert = </etc/exim/ssl/example.com.pem ssl_key = </etc/exim/ssl/example.com.pem ssl_verify_client_cert = no ssl_protocols = !SSLv2 !SSLv3 ssl_cipher_list = ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS |
1 |
# systemctl restart dovecot |
Настройка Exim на использование TLS/SSL
1 |
# nano /etc/exim/exim.conf |
1 2 3 4 5 |
daemon_smtp_ports = 25 : 465: 587 tls_on_connect_ports = 465 tls_advertise_hosts = * tls_certificate = /etc/exim/ssl/example.com.pem tls_privatekey = /etc/exim/ssl/example.com.pem |
Проверк синтаксиса конфигурационного файла
1 |
# exim -bV |
1 |
# systemctl restart exim |
Проверка работы Postfix/Dovecot через telnet
Получение писем
1 |
# telnet 192.168.1.102 110 |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Trying 192.168.1.102... Connected to 192.168.1.102. Escape character is '^]'. +OK Dovecot ready man. user user4@example.com +OK pass NooNg5aizoh3Laeleewu +OK Logged in. list +OK 2 messages: 1 656 2 996 . |
Отправка писем
1 |
# telnet 192.168.1.102 25 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Trying 192.168.1.102... Connected to 192.168.1.102. Escape character is '^]'. 220 mail.example.com, ESMTP EXIM 4.84 helo example.com 250 mail.example.com Hello example.com [192.168.1.102] mail from: user4@example.com 250 OK rcpt to: username@mail.ru 250 Accepted data 354 Enter message, ending with "." on a line by itself Hi there . 250 OK id=1Zq09r-0006Ws-6J quit 221 mail.example.com closing connection Connection closed by foreign host. |
В логах
1 |
# tail -f /var/log/exim/main.log |
1 2 3 |
2015-10-24 16:51:05 1Zq09r-0006Ws-6J <= user4@example.com H=(example.com) [192.168.1.102] I=[192.168.1.102]:25 P=smtp S=222 from <user4@example.com> for username@mail.ru 2015-10-24 16:51:12 1Zq09r-0006Ws-6J > username@mail.ru R=dnslookup T=remote_smtp H=mxs.mail.ru [94.100.180.150] X=TLSv1.2:AES256-GCM-SHA384:256 C="250 OK id=1Zq0He-0001h6-Kd" 2015-10-24 16:51:12 1Zq09r-0006Ws-6J Completed |
10.Установка и настройка Roundcube
1 |
MariaDB [(none)]> create database roundcube; |
1 |
MariaDB [(none)]> grant all privileges on roundcube.* to roundcube@'localhost' identified by 'kohWie0yiesh6wooGei4'; |
1 |
MariaDB [(none)]> flush privileges; |
1 |
# cd /tmp/ |
1 |
# wget -O roundcube.tar.gz http://downloads.sourceforge.net/project/roundcubemail/roundcubemail/1.1.3/roundcubemail-1.1.3-complete.tar.gz?r=&ts=1445700245&use_mirror=freefr |
1 |
# tar xvfz roundcube.tar.gz |
1 |
# mv roundcubemail-1.1.3 /usr/share/roundcube |
1 |
# rm /tmp/roundcube.tar.gz |
1 |
# cd /usr/share/roundcube/ |
1 |
# chown -R nginx:nginx /usr/share/roundcube/ |
1 |
# mysql -u root roundcube < SQL/mysql.initial.sql |
1 |
# nano /etc/nginx/common/roundcube.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
location /roundcube { auth_basic "Restricted"; auth_basic_user_file /etc/nginx/.htpasswd; root /usr/share/; index index.php index.html index.htm; location ~ ^/roundcube/(.+\.php)$ { try_files $uri =404; root /usr/share/; fastcgi_pass unix:/var/run/php5-fpm.sock; include /etc/nginx/fastcgi_params; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_buffer_size 128k; fastcgi_buffers 256 4k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; fastcgi_intercept_errors on; } location ~* ^/roundcube/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { root /usr/share/; } } |
1 |
# nano /etc/nginx/conf.d/default.conf |
После строки
include common/postfixadmin.conf;
добавляем подключение Roundcube-конфигурационного файла
1 |
include common/roundcube.conf; |
1 |
# nginx -t |
1 |
# systemctl reload nginx |
Установку Roundcube продолжаем через WEB-интерфейс
1 |
http:// 192.168.1.102/roundcube/installer/ |
После окончания установки удляем каталог с файлами для установки
1 |
# rm -rf /usr/share/roundcube/installer |
Источник:
http://rtfm.co.ua/centos-ustanovka-i-nastrojka-dovecot-2-exim-clamav-postfixadmin/
http://linuxforum.ru/post/444485#p444485