Буде встановлено та налаштовано:
Postfix - агент передачі пошти (MTA - mail transfer agent), відправляє та доставляє електронні листи. SMTP-сервер.
Dovecot - агент доставки пошти (MDA - mail delivery agent), реалізує доступ до пошти. IMAP і POP3-сервер.
SpamAssassin - спам-фільтр, написаний на Perl. Працює із Postfix за допомогою демону spamass-milter.
ClamAV - антивірус. Підключається до SMTP-сервера через clamav-milter. Сканер листів на віруси.
Graylist - базовий спам-фільтр. Спосіб автоматичного блокування спаму, заснований на тому, що «поведінка» програмного забезпечення, призначеного для розсилки спаму, відрізняється від поведінки звичайних серверів електронної пошти. Якщо поштовий сервер одержувача відмовляється прийняти лист і повідомляє про «тимчасової помилку», сервер відправника зобов'язаний пізніше повторити спробу. Спамерське програмне забезпечення в таких випадках, зазвичай, не намагається цього робити.
AlterMIME - невелика програма, яка використовується для зміни mime-частин поштових вкладень (може додавати описи, видаляти при певних умовах вкладення чи їх заміняти). За допомогою AlterMIME ми будемо додавати до листів автоматичний підпис.
Vacation - скрипт для управліннями попередженнями щодо відпустки/відсутності на роботі. Його робота, установка попереджень про відсутність на робочому місці чи редагування повідомлення, буде керуватись через Postfix Admin.
Sieve/ManageSieve - мова опису правил фільтрації пошти, Sieve працює на стороні сервера і розкладає пошту в залежності від логіки, що задає користувач.
Postfix Admin - веб-панель адміністрування поштових скриньок.
Дещо прокоментую дану прекрасну схему. Mail-клієнт задля відсилки електронного повідомлення підключається до Postfix (SMTP-сервер). Лист, що надсилає клієнт, перевіряється mail-фільтрами (milters, mail filters) на віруси (clamav-milter) та на спам (spamass-milter та milter-greylist). У разі якщо поштова скринька отримувача не знаходится на сервері - лист пересилається на інший сервер, інакше через бібліотеку SASL проходить пошук користувача в MySQL-базі і в разі його знаходження лист передається демону Dovecot, котрий вже і кладе лист на диск в необхідну директорію в указаном форматі. В свою чергу Dovecot надає доступ до збережених листів mail-клієнту по протоколах IMAP та POP3. Для аутентифікації Dovecot використовує вбудовану SASL бібліотеку і перевіряє логіни/паролі в MySQL.
Для зручності управління діючими емейл-адресами та створення нових будемо користуватись Postfix Admin. У якості веб-кліента для пошти буде установлено Roundcube. Перший та другий буде використовувати зв'яку Nginx та Php-fpm.
Спочатку встановлюємо MySQL та всі необхідні залежності:
# apt-get install mysql-server mysql-client
Додаємо репозиторій для пакетів php5-fpm:
# vim /etc/apt/sources.list...
deb http://packages.dotdeb.org wheezy-php55 all
deb-src http://packages.dotdeb.org wheezy-php55 all
...
# wget http://www.dotdeb.org/dotdeb.gpg
# sudo apt-key add dotdeb.gpg
Встановлюємо Php5-fpm, Nginx та інші необхідні пакети:
# apt-get install php5-fpm php5-imap php5-mysql php5-mcrypt php5-intl nginx openssl ssl-cert
# mkdir -p /var/www/postfix-admin/{logs,tmp}
# mkdir -p /var/www/webmail/{logs,tmp}
Сворюємо конфігураційний файл для кожного із сайтів. Для http://webmail.my.com :
# vim /etc/nginx/sites-available/webmail.my.com.conf
server {
server_name webmail.my.com;
root /var/www/webmail;
index index.php index.html index.htm;
location ~ \.php$ {
fastcgi_pass unix:/etc/php5/fpm/socks/webmail.my.com.sock;
include fastcgi_params;
#fastcgi_param HTTPS on;
}
location ~ /\. {
deny all;
}
access_log /var/www/webmail.my.com/logs/access.log;
error_log /var/www/webmail.my.com/logs/error.log;
error_page 404 /404.html;
}
Для http://postfix-admin.my.com :
# apt-get install mysql-server mysql-client
Додаємо репозиторій для пакетів php5-fpm:
# vim /etc/apt/sources.list...
deb http://packages.dotdeb.org wheezy-php55 all
deb-src http://packages.dotdeb.org wheezy-php55 all
...
# wget http://www.dotdeb.org/dotdeb.gpg
# sudo apt-key add dotdeb.gpg
Встановлюємо Php5-fpm, Nginx та інші необхідні пакети:
# apt-get install php5-fpm php5-imap php5-mysql php5-mcrypt php5-intl nginx openssl ssl-cert
Після установки варто пересвідчитись, що Php5-fpm, Nginx та MySQL запущені та працюють коректно.
Створюємо директорії для RoundCube та адмін-панелі Postfix:
# mkdir -p /var/www/postfix-admin/{logs,tmp}
# mkdir -p /var/www/webmail/{logs,tmp}
Сворюємо конфігураційний файл для кожного із сайтів. Для http://webmail.my.com :
# vim /etc/nginx/sites-available/webmail.my.com.conf
server {
server_name webmail.my.com;
root /var/www/webmail;
index index.php index.html index.htm;
location ~ \.php$ {
fastcgi_pass unix:/etc/php5/fpm/socks/webmail.my.com.sock;
include fastcgi_params;
#fastcgi_param HTTPS on;
}
location ~ /\. {
deny all;
}
access_log /var/www/webmail.my.com/logs/access.log;
error_log /var/www/webmail.my.com/logs/error.log;
error_page 404 /404.html;
}
Для http://postfix-admin.my.com :
# vim /etc/nginx/sites-available/postfix-admin.my.com.conf
server {
server_name postfix-admin.my.com;
root /var/www/postfix-admin;
index index.php index.html index.htm;
location ~ \.php$ {
fastcgi_pass unix:/etc/php5/fpm/socks/postfix-admin.my.com.sock;
include fastcgi_params;
#fastcgi_param HTTPS on;
}
location ~ /\. {
deny all;
}
access_log /var/www/postfix-admin/logs/access.log;
error_log /var/www/postfix-admin/logs/error.log;
error_page 404 /404.html;
}
# ln -s /etc/nginx/sites-available/postfix-admin.my.com.conf /etc/nginx/sites-enabled/postfix-admin.my.com.conf
# nginx -t
# service nginx restart
Непоганою ідеєю є варіант сховати це все під https. Для цього необхідно або згенерувати самопідписні сертифікати, або замовити справжні.
Створюємо конфігураційний файл для FastCGI сервера, php-fpm пула для webmail.my.com:
[webmail.my.com]
listen = /etc/php5/fpm/socks/webmail.my.com.sock
user = www-data
group = www-data
pm = dynamic
pm.max_children = 50
pm.start_servers = 1
pm.min_spare_servers = 1
pm.max_spare_servers = 5
pm.max_requests = 0
php_admin_value[open_basedir]=/
php_admin_value[session.save_path]=/var/www/webmail/tmp
php_admin_value[upload_tmp_dir]=/var/www/webmail/tmp
php_admin_value[disable_functions]=dl
# vim /etc/php5/fpm/pool.d/postfix-admin.my.com.conf
[postfix-admin.my.com]
listen = /etc/php5/fpm/socks/postfix-admin.my.com.sock
user = www-data
group = www-data
pm = dynamic
pm.max_children = 50
pm.start_servers = 1
pm.min_spare_servers = 1
pm.max_spare_servers = 5
pm.max_requests = 0
php_admin_value[open_basedir]=/
php_admin_value[session.save_path]=/var/www/postfix-admin/tmp
php_admin_value[upload_tmp_dir]=/var/www/postfix-admin/tmp
php_admin_value[disable_functions]=dl
Також варто встановити коректний часовий пояс та перезапустити php5-fpm:
Також варто встановити коректний часовий пояс та перезапустити php5-fpm:
# vim /etc/php5/fpm/php.ini
...
Your timezone
...
# service php5-fpm restart
Створюємо базу та користувача для postfix:
mysql> CREATE DATABASE postfix;
mysql> GRANT ALL PRIVILEGES ON postfix.* TO 'postfix_admin'@'localhost' IDENTIFIED BY 'your_password_first';
mysql> GRANT SELECT ON postfix.* TO 'postfix'@'localhost' IDENTIFIED BY 'your_password_second';
mysql> FLUSH PRIVILEGES;
Інсталюємо Postfix Admin. Є два можливі варіанти це зробити: скористатись репозиторіями чи завантажити його із сайту проекта. Я обрав друге.
# cd /tmp
# wget http://sourceforge.net/projects/postfixadmin/files/postfixadmin/postfixadmin-2.3.7/postfixadmin-2.3.7.tar.gz/download -O postfixadmin-2.3.7.tar.gz
# tar xvfz postfixadmin-2.3.7.tar.gz# mv postfixadmin-2.3.7/* /var/www/postfix-admin
Редагуємо файл config.inc.php та змінюємо такі параметри:
...
$CONF['configured'] = true;
$CONF['postfix_admin_url'] = 'http://postfix-admin.my.com';
$CONF['database_type'] = 'mysqli';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfix_admin';
$CONF['database_password'] = 'your_password_first';
$CONF['database_name'] = 'postfix';
$CONF['domain_path'] = 'YES';
$CONF['domain_in_mailbox'] = 'NO';
$CONF['fetchmail'] = 'NO';
...
Відкриваємо в браузері http://postfix-admin.my.com/setup.php та вказуємо вгорі сторінки власний пароль адміна (будь-який) та тиснемо ‘Gererate password hash’. Згенероване значення додаємо до згаданого вище config.inc.php:
# vim /var/www/postfix-admin/config.inc.php
...
$CONF['setup_password'] = '<hash>';
...
Вигляд панелі редагування/додавання користувачів:
У якості альтернативи можна спробувати Vimbadmin, на сайті є зручна демка.
POSTFIX та SASL
Установлюємо пакети для SMTP-сервера Postfix та бібліотеки SASL:
# apt-get install postfix postfix-mysql libsasl2-modules libsasl2-modules-sql
З'явиться псевдографічний інтерфейс установщика Postfix і на запитання "General type of mail configuration" необхідно обрати "Internet Site":
Та "System mail name" - mail.my.com (домен для якого відбувається налаштування пошти)
Все інше можна обрати поки з дефолтними значеннями, пізніше ми їх виправимо.
Створюємо користувача і групу від яких працюватиме Postfix:
# groupadd -g 3000 vmail
# useradd -d /home/vmail -m -u 3000 -g 3000 vmail
Налаштовуємо Postfix. Встановлюємо такі параметри:
# vim /etc/postfix/main.cf
...
mydestination =
relayhost =
...
virtual_uid_maps = static:3000
virtual_gid_maps = static:3000
virtual_mailbox_base = /home/vmail
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
relay_domains = mysql:/etc/postfix/mysql_relay_domains.cf
virtual_transport = lmtp:unix:private/dovecot-lmtp
smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_non_fqdn_hostname,
reject_non_fqdn_sender,
reject_non_fqdn_recipient,
reject_unauth_destination,
reject_unauth_pipelining,
reject_invalid_hostname
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
milter_default_action = accept
smtpd_recipient_restrictions - це перелік обмежень (фільтрів), що запобігають використанню нашого сервера задля надсилання спаму. Були активовані такі перевірки:
permit_mynetworks - приймати всі листи з довіреної зони
permit_sasl_authenticated - приймати всі листи по з'єднанням з авторизацією
reject_non_fqdn_hostname - відкидати листи, якщо ім'я сервера відправника неповне
reject_non_fqdn_sender - відкидати листи від неповного домену відправника
reject_non_fqdn_recipient - відкидати листи для неповного домену отримувача
reject_unauth_destination - відкидати листи, які не відносяться до доменів, що ми
обслуговуємо
reject_invalid_hostname - відкидати листи, якщо неправильне ім'я сервера відправника
Існуючі адреси, списки розсилок і тд. Postfix буде переглядати в базі MySQL (вказані параметри virtual_mailbox_domains, virtual_mailbox_maps, virtual_alias_maps та ін.), тому створимо спочатку mysql_virtual_mailbox_domains.cf:
# vim /etc/postfix/mysql_virtual_mailbox_domains.cf
hosts = 127.0.0.1
user = postfix
password = your_password_second
dbname = postfix
query = SELECT domain FROM domain WHERE domain='%s' and backupmx = 0 and active = 1
Потім mysql_virtual_mailbox_maps.cf:
# vim /etc/postfix/mysql_virtual_mailbox_maps.cf
hosts = 127.0.0.1
user = postfix
password = your_password_second
dbname = postfix
query = SELECT maildir FROM mailbox WHERE username='%s' AND active = 1
mysql_virtual_alias_maps.cf (вони всі описані в основному конфігураційному файлі main.cf):
# vim /etc/postfix/mysql_virtual_alias_maps.cf
hosts = 127.0.0.1
user = postfix
password = your_password_second
dbname = postfix
query = SELECT goto FROM alias WHERE address='%s' AND active = 1
Та mysql_relay_domains.cf:
# vim /etc/postfix/mysql_relay_domains.cf
hosts = 127.0.0.1
user = postfix
password = your_password_second
dbname = postfix
query = SELECT domain FROM domain WHERE domain='%s' and backupmx = 1
Додаємо користувача postfix до sasl групи:
# adduser postfix sasl
Редагуємо master.cf і додаємо/розкоментовуємо рядки:
# vim /etc/postfix/master.cf
...
submission inet n - - - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
-o milter_macro_daemon_name=ORIGINATING
smtps inet n - - - - smtpd
-o syslog_name=postfix/smtps
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
-o milter_macro_daemon_name=ORIGINATING
...
Таким чином були дозволене з'єднання по захищеним smtp портам.
DOVECOT
# apt-get install dovecot-imapd dovecot-pop3d dovecot-mysql dovecot-lmtpd
Dovecot також звертається до бази задля отримання списку дійсних користувачів, тому створимо файл dovecot-mysql.conf.ext і запишемо в нього таке:
driver = mysql
connect = host=127.0.0.1 dbname=postfix user=postfix password=your_password_second
default_pass_scheme = MD5-CRYPT
user_query = SELECT '/home/vmail/%d/%n' as home, 3000 AS uid, 3000 AS gid FROM mailbox WHERE username = '%u'
password_query = SELECT password FROM mailbox WHERE username = '%u'
connect = host=127.0.0.1 dbname=postfix user=postfix password=your_password_second
default_pass_scheme = MD5-CRYPT
user_query = SELECT '/home/vmail/%d/%n' as home, 3000 AS uid, 3000 AS gid FROM mailbox WHERE username = '%u'
password_query = SELECT password FROM mailbox WHERE username = '%u'
# vim /etc/dovecot/conf.d/10-auth.conf
disable_plaintext_auth = no
auth_mechanisms = plain login
#!include auth-system.conf.ext
!include auth-sql.conf.ext
...
Описуємо адресу розміщення пошти:
...
mail_location = maildir:/home/vmail/%d/%n:INDEX=/home/vmail/%d/%n/indexes
...
Дозволяємо ssl:
# vim /etc/dovecot/conf.d/10-ssl.conf
...
ssl = yes
...
Максимальна кількість підключень із одного IP встановимо 20:
# vim /etc/dovecot/conf.d/20-imap.conf
...
mail_max_userip_connections = 20
...
Описуємо спосіб аутентифікації користувачів:
# vim /etc/dovecot/conf.d/auth-sql.conf.ext
...
passdb {
driver = sql
# Path for SQL configuration file, see example-config/dovecot-sql.conf.ext
args = /etc/dovecot/dovecot-mysql.conf.ext
}
userdb {
driver = sql
args = /etc/dovecot/dovecot-mysql.conf.ext
}
...
Редагуємо /etc/dovecot/conf.d/10-master.conf:
# vim /etc/dovecot/conf.d/10-master.conf
...
service lmtp {
unix_listener /var/spool/postfix/private/dovecot-lmtp {
mode = 0600
user = postfix
group = postfix
}
}
service auth {
unix_listener auth-userdb {
mode = 0604
user = vmail
group = vmail
}
# Postfix smtp-auth
unix_listener /var/spool/postfix/private/auth {
mode = 0666
}
}
...
І нарешті перезапускаємо сервіси.
# service dovecot restart
# service postfix restart
У разі помилок варто перевірити лог-файли:
# tail -f /var/log/auth.log /var/log/mail.log /var/log/syslog
CLAMAV
Почнемо з фільтра-антивіруса ClamAV. Установимо його:
# apt-get install clamav-milter clamav-unofficial-sigs
Оновимо антивірусні бази, виконавши команду:
# freshclam
Та запустимо сервіс:
# /etc/init.d/clamav-daemon start
# vim /etc/default/clamav-milter
...
SOCKET_RWGROUP=postfix
...
Створимо директорію для сокета clamav-milter:
Створимо директорію для сокета clamav-milter:
# mkdir /var/spool/postfix/clamav
# chown clamav /var/spool/postfix/clamav
# dpkg-reconfigure clamav-milter
І відповідаємо на питання приблизно таким чином:
User to run clamav-milter as --> clamav
Groups for clamav-milter (space-separated) --> none (empty field)
Communication interface with Sendmail --> /var/spool/postfix/clamav/clamav-milter.ctl
Group owner of clamav-milter local (UNIX) socket --> clamav
Creation mode for clamav-milter local (UNIX) socket --> 660
Remove stale socket after unclean shutdown? --> yes
Wait timeout for data coming from clamd --> 120
Should clamav-milter stay in foreground (not forking)? --> no
Chroot to directory: --> none (empty field)
PID file --> /var/run/clamav/clamav-milter.pid
Temporary directory path --> /tmp
Clamd socket to connect to for scanning --> unix:/var/run/clamav/clamd.ctl
Hosts excluded from scanning --> none (empty field)
Mail addresses whitelist --> none (empty field)
Action to perform on infected messages --> Reject
Action to perform on error conditions --> Defer
Specific rejection reason for infected messages --> Rejecting harmful e-mail: %v found.
Add headers to processed messages? -> Replace
Log file for clamav-milter --> /var/log/clamav/clamav-milter.log
Disable log file locking? --> no
Maximum size of the log file (MB) --> 0
Log time with each message? --> yes
Use system logger? --> yes
Log facility (type of syslog message) --> LOG_LOCAL6
Enable verbose logging --> no
Information to log on infected messages --> Basic
Information to log if no threat is found --> Off
Size limit for scanned messages --> 25
В результаті всі листи із вірусами будуть відхилятись із 500-ю помилкою. Відправник листа отримає відповідь від мейлсервера із причиною відхилення. Таку поведінку можна змінити, відповівши інакше на попередні питання.
Конфігуруємо Postfix на використання цього фільтру:
# postconf -e 'smtpd_milters = unix:/clamav/clamav-milter.ctl'
# postfix reload
Для перевірки роботи антивірусу раджу відіслати декілька тестових файлів EICAR, чи скористатись подібним сервісом.
Надалі, можливо, краще буде приховати header із інформацією щодо антивірусу, що використовується на сервері. Для цього необхідно відредагувати clamav-milter.conf:
# vim /etc/clamav/clamav-milter.conf
...
#AddHeader Replace
...
Раджу також встановити пакет clamav-unofficial-sigs (так він зветься в Ubuntu/Debian репозиторіях). Він включає додаткові сигнатури з Sanesecurity, MalwarePatrol та ін., що в свою чергу допоможе краще шукати віруси.
SPAMASSASSIN
Як я вже сказав вище, SpamAssassin - це спам-фільтр, тож будемо його використувувати для блокування небажаної пошти. Спочатку встановимо його:
# apt-get install spamass-milter
І відредагуємо конфігураційний файл фільтру:
І відредагуємо конфігураційний файл фільтру:
# vim /etc/default/spamass-milter
...
OPTIONS="-u spamass-milter -i 127.0.0.1 -m -r -1 -I"
...
-u - користувач від імені якого буде запущено фільтр
-i - мережі, листи від яких не варто перевіряти на спам
-m - не додавати/змінювати додаткові заголовки до листів
-r -1 - не приймати жодних листів, що будуть позначені як спам SpamAssassin-ом
-l - не сканувати листи, що були відправлені залогіненими на сервер користувачами
Тож після таких опцій в результаті всі листи, котрі SpamAssassin буде ідентифікувати як спам, будуть відкинуті і не потраплять до адресата.
Додамо окремого користувача для SpamAssassin:
# adduser --shell /bin/false --home /var/lib/spamassassin --disabled-password --disabled-login --gecos "" spamd
Та відредагуємо ще один конфіг:
...
ENABLED=1
OPTIONS="--create-prefs --max-children 5 --helper-home-dir=/var/lib/spamassassin -u spamd -g spamd"
CRON=1
...
# sa-update -v
# service spamassassin restart
Як результат додамо ще один milter до конфігураційного файлу SMTP-серверу:
# postconf -e 'smtpd_milters = unix:/clamav/clamav-milter.ctl, unix:/spamass/spamass.sock'
# postfix reload
Певні параметри можна також налагодити відредагувавши /etc/spamassassin/local.cf
Перевірити роботу SpamAssassin можна за допомогою тестового повідомлення GTUBE.
Згодом я дещо додав балів за листи від IP-адрес, що не проходять SPF-тест, тобто що зазвичай йдуть з "підставним" полем From:
# vim /etc/spamassassin/local.cf
...
# Mails with bad SPF goes to Junk
#
score SPF_SOFTFAIL 10.0
score SPF_FAIL 10.0
score SPF_HELO_FAIL 10.000
Перевірити роботу SpamAssassin можна за допомогою тестового повідомлення GTUBE.
Згодом я дещо додав балів за листи від IP-адрес, що не проходять SPF-тест, тобто що зазвичай йдуть з "підставним" полем From:
# vim /etc/spamassassin/local.cf
...
# Mails with bad SPF goes to Junk
#
score SPF_SOFTFAIL 10.0
score SPF_FAIL 10.0
score SPF_HELO_FAIL 10.000
...
GREYLIST
Встановимо останній фільтр milter-greylist. Логіка його роботи заснована на тому, що спамери, у разі неможливості відправити листа, на відміну віднормальних сервісів, не повторюють відправку.
# aptitude install milter-greylist
# vim /etc/milter-greylist/greylist.conf
...
# For sendmail use the following two lines
#socket "/var/run/milter-greylist/milter-greylist.sock"
#user "smmsp"
# For Postfix uncomment the following two lines and comment out the
# sendmail ones above.
socket "/var/spool/postfix/milter-greylist/milter-greylist.sock" 660
user "greylist"
...
...
ENABLED=1
SOCKET="/var/spool/postfix/milter-greylist/milter-greylist.sock"
...
# mkdir /var/spool/postfix/milter-greylist
# chmod 2755 /var/spool/postfix/milter-greylist
# chown greylist:postfix /var/spool/postfix/milter-greylist
# service milter-greylist restart
# postconf -e 'milter_connect_macros = i b j _ {daemon_name} {if_name} {client_addr}'
# postconf -e 'smtpd_milters = unix:/milter-greylist/milter-greylist.sock, unix:/clamav/clamav-milter.ctl, unix:/spamass/spamass.sock'
# postfix reload
# postfix reload
ROUNDCUBE
RoundCube - веб-клієнт для пошти. У якості альтернативи можна обрати щось інше, наприклад, Horde, SquirrelMail, Zimbra, Modoboa. На час написання статті майже стабільною стала версія 1.0, тому її і будемо встановлювати.
Нагадаю, що раніше ми налаштували віртуалхост webmail.my.com із root-директорією /var/www/webmail, тому саме в неї все і розпакуємо:
# wget http://sourceforge.net/projects/roundcubemail/files/roundcubemail-beta/1.0-RC/roundcubemail-1.0-rc.tar.gz
# tar xvfz roundcubemail-1.0-rc.tar.gz
# mv roundcubemail-1.0-rc/* /var/www/webmail
Ставимо необхідні права на директорію /var/www:
Створюємо окремого користувача до бази та заливаємо дефолтну структуру таблиць:
mysql> GRANT ALL PRIVILEGES ON roundcube.* TO roundcube@localhost IDENTIFIED BY 'your_password';
mysql> FLUSH PRIVILEGES;
# cd /var/www/webmail/
# mysql -u roundcube -p your_password < SQL/mysql.initial.sql
Відкриваємо браузер на сторінці http://webmail.my.com/installer і крок за кроком заповнюємо необхідні дані. На сторінці ‘Create config’ заповнюємо:
product_name: My webmail
support_url: your_help_page
database name: roundcube
database password: your_password
default_host: localhost
smtp_server: localhost
language: en_US
# rm -rf /var/www/webmail/installer
# vim /var/www/webmail/config/config.inc.php
...
// ----------------------------------
// PLUGINS
// ----------------------------------
// List of active plugins (in plugins/ directory)
//$config['plugins'] = array();
$config['plugins'] = array('managesieve', 'contextmenu', 'markasjunk2', 'keyboard_shortcuts', 'rholala_logo', 'bruteforcebreaker');
...
В прикладі приведені розширення, котрі я вважаю корисними. Також для автоматизації налаштування плагінів можна установити Composer.
Вигляд вебпошта має такий:
Вікно листів:
Вікно налаштувань:
SIEVE / MANAGESIEVE
Sieve - це мова опису фільтрації поштових повідомлень; фільтри, що працюють на стороні сервера і можуть бути налаштовані безпосередньо клієнтом. Тобто не важливо яким клієнтом користуватись - пошта буде завжди розкладуватись по правильним папкам. Як завжди все починається із установки пакетів:
# apt-get install dovecot-managesieved dovecot-sieve
Для налаштування необхідно відредагувати 15-lda.conf:
# vim /etc/dovecot/conf.d/15-lda.conf...
protocol lda {
# Space separated list of plugins to load (default is global mail_plugins).
mail_plugins = $mail_plugins sieve
}
...
Та 20-lmtp.conf:
# vim /etc/dovecot/conf.d/20-lmtp.conf
...
protocol lmtp {
# Space separated list of plugins to load (default is global mail_plugins).
mail_plugins = $mail_plugins sieve
}
...
Основні параметри налаштування демона фільтрації знаходяться в конфігураційному файлі 90-sieve.conf:
protocol lda {
# Space separated list of plugins to load (default is global mail_plugins).
mail_plugins = $mail_plugins sieve
}
...
Та 20-lmtp.conf:
# vim /etc/dovecot/conf.d/20-lmtp.conf
...
protocol lmtp {
# Space separated list of plugins to load (default is global mail_plugins).
mail_plugins = $mail_plugins sieve
}
...
Основні параметри налаштування демона фільтрації знаходяться в конфігураційному файлі 90-sieve.conf:
# cat /etc/dovecot/conf.d/90-sieve.conf
...
plugin {
sieve = /home/vmail/%d/%n/sieve/.dovecot.sieve
sieve_default = /var/lib/dovecot/sieve/default.sieve
sieve_dir = /home/vmail/%d/%n/sieve/
#sieve_before = /var/lib/dovecot/sieve/default.sieve
#sieve_after =
...
sieve_default - фільтр, що буде активним у випадку якщо не встановлено користувачем жодного власного правила.
sieve_dir - директорія, де зберігаються скрипти користувача
sieve_before - правила, що будуть запускатись перед фільтрами користувача
sieve_after - правила, що будуть запускатись лише вкінці всіх користувацьких правил. В мене закоментовано, тому що я ними не користуюсь
Попередньо я навів приклад налаштування спам-фільтра SpamAssassin на reject всіх повідомлень із хедером "X-Spam-Flag: YES". Припустимо що ми хочемо дещо змінити логіку обробки спам-повідомлень: не приймати повідомлення лиш із великим спам-рейтингом, а всі інші обережно класти в папку Junk і щоб це правило діяло для всіх користувачів не залежно від того чи було налаштовано користувацькі sieve-фільтри чи ні. Для цього спершу відредагуємо конфігураційний файл SpamAssassin-а:
# vim /etc/default/spamass-milter
...
OPTIONS="-u spamass-milter -i 127.0.0.1"
# Reject emails with spamassassin scores > 15.
OPTIONS="-r 15"
...
# vim /etc/dovecot/conf.d/90-sieve.conf
...
sieve_before = /var/lib/dovecot/sieve/default.sieve
...
А вміст скрипта default.sieve такий:
...
require "fileinto";
if header :contains "X-Spam-Flag" "YES" {
fileinto "Junk";
}
...
Тобто все що з флагом "X-Spam-Flag: YES" потрапить в Junk.
Проте також необхідно налаштувати Dovecot на автоматичне створення директорії Junk при створенні скриньки кожному новому користувачу, інакше Sieve не зможе перенаправити пошту в директорію, котрої не існує.
# vim /etc/dovecot/conf.d/15-mailboxes.conf
...
mailbox Junk {
auto=subscribe
special_use = \Junk
}
...
Нарешті перевантажуємо Dovecot і перевіряємо роботу скриптів:
# service dovecot restart
Для управління фільтрами з вебпошти необхідно установити managesieve плагін для RoundCube.
Та описати порт для managesieve:
# vim /var/www/webmail/config/config.inc.php
...
$config['managesieve_port'] = 4190;
...
Звісно, порт 4190 має бути відкритим.
Існує також плагін для Thunderbird, що має назву Sieve. Для останніх версій Thunderbird плагін краще встановлювати останній та звідси. Для того, щоб відредагувати фільтри в Thunderbird варто перейти Menu -> Message Filters -> Message Filters --> Server side filters:
VACATION AUTOREPLIES
Vacation - це невеличкий perl-скрипт, що дозволяє встановлювати причину відсутності на роботі. Тобто якщо відіслати повідомлення адресату, котрий встановив у себе перемикач Vacation, то у відповідь буде надіслана автовідповідь, що адресат відсутній на робочому місці.
Для його роботи необхідні додаткові пакети, котрі доступні в репозиторіях "main contrib non-free" тому варто перевірити їх наявність:
# vim /etc/apt/sources.list
...
deb http://ftp.ru.debian.org/debian wheezy main contrib non-free
deb-src http://ftp.ru.debian.org/debian stable main contrib non-free
...
Та установити необхідні пакети:
# apt-get update
# apt-get install libmail-sender-perl libdbd-mysql-perl libemail-valid-perl libmime-perl liblog-log4perl-perl liblog-dispatch-perl libgetopt-argvfile-perl libmime-charset-perl libmime-encwords-perl
Також потрібно додати користувача від якого все працюватиме та скопіювати скрипт, котрий йде в стандартному архіві Postfix Admin:
# groupadd -r -g 65501 vacation
# useradd -r -u 65501 -g vacation -d /var/spool/vacation -s /sbin/nologin vacation
# mkdir /var/spool/vacation
# cp /var/www/postfix-admin/VIRTUAL_VACATION/vacation.pl /var/spool/vacation/
# chown -R vacation:vacation /var/spool/vacation
# chmod -R 0700 /var/spool/vacation
Редагуємо права в MySQL:
# mysql -e 'GRANT INSERT,UPDATE ON postfix.vacation_notification TO "postfix_admin"@"localhost"'
Створюємо конфігураційний файл /var/www/postfix-admin/vacation.conf і описуємо в ньому такі параметри:
# vim /var/www/postfix-admin/vacation.conf
# db_type - uncomment one of these
our $db_type = 'mysql';
# leave empty for connection via UNIX socket
our $db_host = '';
# connection details
our $db_username = 'postfix_admin';
our $db_password = 'your_first_password';
our $db_name = 'postfix';
our $vacation_domain = 'autoreply.mail.my.com';
# Set to 1 to enable logging to syslog.
our $syslog = 1;
# 2 = debug + info, 1 = info only, 0 = error only
our $log_level = 1;
# notification interval, in seconds
# set to 0 to notify only once
# e.g. 1 day ...
#my $interval = 60*60*24;
# disabled by default
our $interval = 60*60*24;
# perl will crash if the imported script doesn't end with a positive value .... wth
1;
Тобто за допомогою опції "our $interval" було описано відсилання автовідповіді кожному користувачу лише раз в добу. Дещо більше опцій можна знайти в самому скрипті /var/spool/vacation/vacation.pl
Наразі його потрібно увімкнути для Postfix Admin, щоб ним легко було управляти:
# vim /var/www/postfix-admin/config.inc.php
...
$CONF['vacation'] = 'YES';
$CONF['vacation_domain'] = 'autoreply.mail.my.com';
...
Відредагуємо конфігураційний файл Postfix master.cf:
# vim /etc/postfix/master.cf
...
vacation unix - n n - - pipe
flags=Rq user=vacation argv=/var/spool/vacation/vacation.pl -f ${sender} ${recipient}
...
Та створимо /etc/postfix/transport з таким вмістом:
# vim /etc/postfix/transport
autoreply.mail.my.com vacation
Перевантажимо Postfix:
# postmap /etc/postfix/transport
# postconf -e 'vacation_destination_recipient_limit = 1'
# postfix reload
Управління автовідповідями через Postfix Admin виглядає наступним чином:
Vacation - це невеличкий perl-скрипт, що дозволяє встановлювати причину відсутності на роботі. Тобто якщо відіслати повідомлення адресату, котрий встановив у себе перемикач Vacation, то у відповідь буде надіслана автовідповідь, що адресат відсутній на робочому місці.
Для його роботи необхідні додаткові пакети, котрі доступні в репозиторіях "main contrib non-free" тому варто перевірити їх наявність:
# vim /etc/apt/sources.list
...
deb http://ftp.ru.debian.org/debian wheezy main contrib non-free
deb-src http://ftp.ru.debian.org/debian stable main contrib non-free
...
Та установити необхідні пакети:
# apt-get update
# apt-get install libmail-sender-perl libdbd-mysql-perl libemail-valid-perl libmime-perl liblog-log4perl-perl liblog-dispatch-perl libgetopt-argvfile-perl libmime-charset-perl libmime-encwords-perl
Також потрібно додати користувача від якого все працюватиме та скопіювати скрипт, котрий йде в стандартному архіві Postfix Admin:
# groupadd -r -g 65501 vacation
# useradd -r -u 65501 -g vacation -d /var/spool/vacation -s /sbin/nologin vacation
# mkdir /var/spool/vacation
# cp /var/www/postfix-admin/VIRTUAL_VACATION/vacation.pl /var/spool/vacation/
# chown -R vacation:vacation /var/spool/vacation
# chmod -R 0700 /var/spool/vacation
Редагуємо права в MySQL:
# mysql -e 'GRANT INSERT,UPDATE ON postfix.vacation_notification TO "postfix_admin"@"localhost"'
Створюємо конфігураційний файл /var/www/postfix-admin/vacation.conf і описуємо в ньому такі параметри:
# vim /var/www/postfix-admin/vacation.conf
# db_type - uncomment one of these
our $db_type = 'mysql';
# leave empty for connection via UNIX socket
our $db_host = '';
# connection details
our $db_username = 'postfix_admin';
our $db_password = 'your_first_password';
our $db_name = 'postfix';
our $vacation_domain = 'autoreply.mail.my.com';
# Set to 1 to enable logging to syslog.
our $syslog = 1;
# 2 = debug + info, 1 = info only, 0 = error only
our $log_level = 1;
# notification interval, in seconds
# set to 0 to notify only once
# e.g. 1 day ...
#my $interval = 60*60*24;
# disabled by default
our $interval = 60*60*24;
# perl will crash if the imported script doesn't end with a positive value .... wth
1;
Тобто за допомогою опції "our $interval" було описано відсилання автовідповіді кожному користувачу лише раз в добу. Дещо більше опцій можна знайти в самому скрипті /var/spool/vacation/vacation.pl
Наразі його потрібно увімкнути для Postfix Admin, щоб ним легко було управляти:
# vim /var/www/postfix-admin/config.inc.php
...
$CONF['vacation'] = 'YES';
$CONF['vacation_domain'] = 'autoreply.mail.my.com';
...
Відредагуємо конфігураційний файл Postfix master.cf:
# vim /etc/postfix/master.cf
...
vacation unix - n n - - pipe
flags=Rq user=vacation argv=/var/spool/vacation/vacation.pl -f ${sender} ${recipient}
...
Та створимо /etc/postfix/transport з таким вмістом:
# vim /etc/postfix/transport
autoreply.mail.my.com vacation
Перевантажимо Postfix:
# postmap /etc/postfix/transport
# postconf -e 'vacation_destination_recipient_limit = 1'
# postfix reload
Управління автовідповідями через Postfix Admin виглядає наступним чином:
За допомогою alterMIME ми будемо додавати текст до всіх листів, нехай, це буде прохання про необхідність збереження комерційної таємниці. Проте за допомогою alterMIME також можна додавати в
транзитну пошту довільні заголовки, змінювати вміст існуючих заголовків, видаляти і замінювати вкладення в залежності від імені файлу і типу контенту.
Установимо програму:
# aptitude install altermime
Для запуску altermime-фільтрів будемо користуватись окремим користувачем:
# useradd -r -c "Postfix Filters" -d /var/spool/filter filter
# mkdir /var/spool/filter
# chown filter:filter /var/spool/filter
# chmod 750 /var/spool/filter
Створюємо скрипт /etc/postfix/disclaimers/disclaimer для запуску alterMIME, взявши за основу готовий приклад, який є в комплекті:
# mkdir /etc/postfix/disclaimers
# cp /usr/share/doc/altermime/examples/postfix_filter.sh /etc/postfix/disclaimers/disclaimer
# chgrp -R filter /etc/postfix/disclaimers
# chmod 750 /etc/postfix/disclaimer
За замовчуванням скрипт не розрізняє вхідні та вихідні листи, для того щоб
додавати повідомлення лише в вихідні листи скрипт потрібно трохи модифікувати:
# vim /etc/postfix/disclaimers/disclaimer
#!/bin/sh
INSPECT_DIR=/var/spool/filter
SENDMAIL=/usr/sbin/sendmail
DISCLAIMER_ADDRESSES=/etc/postfix/disclaimers/disclaimer_addresses
# Exit codes from <sysexits.h>
EX_TEMPFAIL=75
EX_UNAVAILABLE=69
# Clean up when done or when aborting.
trap "rm -f in.$$" 0 1 2 3 15
# Start processing.
cd $INSPECT_DIR || { echo $INSPECT_DIR does not exist; exit $EX_TEMPFAIL; }
cat >in.$$ || { echo Cannot save mail to file; exit $EX_TEMPFAIL; }
# obtain From address
from_address=`grep -m 1 "From:" in.$$ | cut -d "<" -f 2 | cut -d ">" -f 1`
if [ `grep -wi ^${from_address}$ ${DISCLAIMER_ADDRESSES}` ]; then
/usr/bin/altermime --input=in.$$ \
--disclaimer=/etc/postfix/disclaimers/disclaimer.txt \
--disclaimer-html=/etc/postfix/disclaimers/disclaimer.html \
--xheader="X-Copyrighted-Material: Please visit http://www.company.com/privacy.htm" || \
{ echo Message content rejected; exit $EX_UNAVAILABLE; }
fi
$SENDMAIL "$@" <in.$$
exit $?
--disclaimer, --disclaimer-html - адреси до файлів, в котрих записано що саме додавати до повідомлень.
Створюємо список адрес, для котрих має бути активним цей підпис:
# vim /etc/postfix/disclaimers/disclaimer_addresses
test1@example.com
test2@example.com
Текст додаткового повідомлення поміщаємо в /etc/postfix/disclaimers/disclaimer.txt та /etc/postfix/disclaimers/disclaimer.html. В html-версію можна додати картинки і тд, тобто всі радості, що підтримує HTML.
Налаштовуємо Postfix для виклику alterMIME, в /etc/postfix/master.cf додаємо в рядок "smtp":
# vim /etc/postfix/master.cf
...
-o content_filter=dfilt:
...тобто маємо отримати в результаті:
smtp inet n - - - - smtpd
-o content_filter=dfilt:
Та в кінець файлу додаємо:
dfilt unix - n n - - pipe
flags=Rq user=filter argv=/etc/postfix/disclaimers/disclaimer -f ${sender} -- ${recipient}
Не забуваємо перевантажувати Postfix після подібних змін:
# /etc/init.d/postfix restart
Для заміни або видалення вкладення необхідно змінити скрипт
/etc/postfix/disclaimer, використавши інші опції запуску altermime:
"- remove = ім'я файлу" (видалення вкладення),
"- replace = ім'я файлу - with = файл для заміни" (заміна вкладення),
"- removeall" (видалення всіх вкладень),
"- alter-header = заголовок - alter-with = заміни - alter-mode = replace" (заміна заголовка),
"- xheader = заголовок" (додавання заголовка)
Посилання:
https://lelutin.ca/posts/installing_postfix_-_clamav_-_spamassassin_-_dovecot_-_postfixadmin_on_debian_squeeze/
http://www.xenlens.com/debian-wheezy-mail-server-postfix-dovecot-sasl-mysql-postfixadmin-roundcube-spamassassin-clamav-greylist-nginx-php5/
http://serion.co.nz/howto/howto-setup-mailserver-using-postfix-mysql-dovecot-postfixadmin-amavis-new
http://wiki2.dovecot.org/Pigeonhole/Sieve/Configuration
http://www.productionmonkeys.net/guides/qmail-server/content-filtering/sieve/sieve-plugins-roundcube
http://www.rosehosting.com/blog/how-to-set-up-server-side-email-filtering-with-dovecot-sieve-and-roundcube-on-a-centos-6-vps/
http://thelinuxforce.org/article/7
http://www.ussr.kiev.ua/ru/sortirovka-pisem-v-roundcube
http://wiki2.dovecot.org/MailboxSettings
http://www.opennet.ru/tips/info/2444.shtml
http://www.howtoforge.com/how-to-automatically-add-a-disclaimer-to-outgoing-emails-with-altermime-postfix-on-debian-squeeze
http://spamassassin.apache.org/full/3.1.x/doc/Mail_SpamAssassin_Conf.html
http://yakim.org.ua/images/stories/articles/SYakimchuck-MailServer.pdf
Немає коментарів:
Дописати коментар