Настройка Mailscanner + Mailwatch, Spamassassin, Postfix + Mysql + Nginx, Php-FPM на FreeBSD 13.1
Я попытался собрать все варианты настроек в одной статье, чтобы все заработало с первого раза.
Настройка Nginx
Вариантов настроек Nginx множество и вы все их можете найти в интернете, я покажу вариант который подходил для меня и он рабочий.
user www; worker_processes 2; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; server { listen 80; server_name Domain or IP; index index.php; client_max_body_size 30M; access_log /var/log/nginx/access.log; error_log /var/log/nginx/server_error.log; root /usr/local/www/nginx; location ~* ^.+\.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ { access_log off; log_not_found off; expires max; } location / { try_files $uri $uri/ /index.php?$args; } location ~ \.php$ { fastcgi_pass unix:/var/run/php-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } #PhpМyАdmin location ~ ^/phpМyAdmin/(.*\.php)$ { fastcgi_pass unix:/var/run/php-fpm.sock; include fastcgi_params; fastcgi_param SCRIPT_FILENAME /usr/local/www/nginx-dist/phpMyAdmin/$1; fastcgi_param DOCUMENT_ROOT /usr/local/www/nginx-dist/phpMyAdmin; } #Mailscanner location ~ ^/mailscanner/(.*\.php)$ { fastcgi_pass unix:/var/run/php-fpm.sock; include fastcgi_params; fastcgi_param SCRIPT_FILENAME /usr/local/www/nginx-dist/mailscanner/$1; fastcgi_param DOCUMENT_ROOT /usr/local/www/nginx-dist/mailscanner; } } }
Настройка Php-fpm
Особых настроек в php не нужно но все же нужно выполнить несколько правильных настроек для нормальной работы MailWatch
# cd /usr/local/etc/
# cp php.ini-production php.ini
Отредактируем php.ini
safe_mode = Off register_globals = Off magic_quotes_gpc = Off magic_quotes_runtime = Off session.auto_start = 0
Также нужно будет активировать exec в Php-fpm
cd /usr/local/etc/php-fpm.d/
И отредактируем файл www.conf
Раскомментируем строчку:
clear_env = no
Настраиваем Clamav
cd /usr/local/etc
Редактируем freshclam.conf
Установите такие параметры
Checks 24
LogTime yes
LogVerbose yes
LogSyslog yes
LogTime yes
LogClean yes
LogSyslog yes
Конфигурация Postfix
cd /usr/local/etc/postfix
Отредактируем файл main.cf
compatibility_level = 2
queue_directory = /var/spool/postfix
command_directory = /usr/local/sbin
daemon_directory = /usr/local/libexec/postfix
data_directory = /var/db/postfix
mail_owner = postfix
myhostname = mail.domain.com
mydomain = domain.com
myorigin = $mydomain
inet_interfaces = INETIPSERVER, localhost, localIPYourServer
mydestination = $myhostname, localhost
unknown_local_recipient_reject_code = 550
mynetworks_style = subnet
mynetworks = 192.168.0.0/16, 127.0.0.0/8
relay_domains = /usr/local/etc/postfix/relay_domains
header_checks = regexp:/usr/local/etc/postfix/header_checks
hash_queue_depth = 2
hash_queue_names = incoming, hold defer deferred
debug_peer_level = 2
debugger_command =
PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
ddd $daemon_directory/$process_name $process_id & sleep 5
newaliases_path = /usr/local/bin/newaliases
mailq_path = /usr/local/bin/mailq
setgid_group = maildrop
html_directory = /usr/local/share/doc/postfix
manpage_directory = /usr/local/man
sample_directory = /usr/local/etc/postfix
readme_directory = /usr/local/share/doc/postfix
inet_protocols = ipv4
smtp_tls_CApath = /etc/ssl/certs
shlib_directory = /usr/local/lib/postfix
meta_directory = /usr/local/libexec/postfix
transport_maps = hash:/usr/local/etc/postfix/transport
Создадим файл
# touch transport
Отредактируем:
yourdomain.com smtp:[mail.domain.com]
yourdomain2.com smtp:[mail2.domain.com]
У меня сервер используется как Транспорт а в основе почтового сервера я использую Exchange, поэтому у меня запись выглядит как:
mydomain.com smtp:[local IP My Exchange]
Сохраняемся и создаем transport.db
# postmap transport
Также создадим если нет файла relay_domains и header_checks
Отредактируем:
# vi relay_domains
yourdomain.com
yourdomain2.com
# vi header_checks
/^Received:/ HOLD
Сразу дадим нужные разрешения для нормальной работы MailScanner на папки:
cd /var/spool/postfix
chown postfix:wheel hold
chown postfix:wheel incoming
Настройка Mysql
Переходим в cd /usr/local/etc/mysql
Переименуем my.cnf.sample
# cp my.cnf.sample my.cnf
запустим:
/usr/local/etc/rc.d/mysql-server start
Если все прошло без ошибок пробуем зайти и установим новый пароль:
# mysqladmin -u root password ‘НОВЫЙ ПАРОЛЬ для root’
# mysql -u root -p
# Enter password: вводим пароль для root
Совет: “Если видите такое сообщение: Access denied for user ‘root’@’localhost’ (using password: NO)“
Выполняем из пол root:
# /usr/local/etc/rc.d/mysql-server stop
# mysqld_safe --skip-grant-tables &
# mysql -u root
mysql> use mysql;
mysql> select * from user;
mysql> use mysql;
mysql> select * from user;
mysql> truncate table user;
mysql> flush privileges;
mysql> grant all privileges on *.* to root@localhost identified by 'YourNewPassword' with grant option;
mysql> select host, user from user;
mysql> quit;
# ps aux | grep mysqld_safe
Тут отобразится процесс, далее выполняем
# kill -KILL [PID of mysqld_safe]
# ps aux | grep mysqld
# kill -KILL [PID of mysqld]
# /usr/local/etc/rc.d/mysql-server start
Настройка Mailwatch
Мы скопировали файлы MailWatch в статье по Установке Mailscanner + Mailwatch, теперь давайте экспортируем Базу Данных Mysql.
Я использовал phpMyAdmin для удобства но можно воспользоваться и консолью.
Создадим Базу Данных
Когда вы скачали файл Mailwatch, там будет БД create.sql добавим ее:
Переходим в папку cd /root/download/MailWatch-1.2.18
mysql -u root -p < create.sql mysql -u root -p mysql> GRANT ALL ON mailscanner.* TO mailwatch@localhost IDENTIFIED BY '<password>'; mysql> GRANT FILE ON *.* TO mailwatch@localhost IDENTIFIED BY '<password>'; mysql> FLUSH PRIVILEGES; mysql> quit
Создадим пользователя для Веб Интерфейса WailWatch
mysql mailscanner -u mailwatch -p Enter password: ****** mysql> INSERT INTO users SET username = 'admin', password = MD5('yourpassword'), fullname = '', type = 'A'
Теперь из папки Mailscanner_perl_scripts копируем в /usr/local/share/MailScanner/perl следующие скрипты.
# cp MailWatchConf.pm /usr/local/share/MailScanner/perl/
# cp SQLBlackWhiteList.pm /usr/local/share/MailScanner/perl/
# cp SQLSpamSettings.pm /usr/local/share/MailScanner/perl/
Настроим сразу файлик MailWatchConf.pm
my ($db_name) = 'mailscanner';
my ($db_host) = 'localhost';
my ($db_user) = 'mailwatch';
my ($db_pass) = 'yourpassword';
Перейдем в папку куда распаковали Mailwatch у меня это путь:
cd /usr/local/www/nginx-dist/mailscanner/
И дадим нужные разрешения на папку /temp
chown root:www temp
Отредактируем Conf.php
Расскоментируем строчку, она нужна для обновления GEOIP, чтобы получить ID просто зарегестрируйтесь на сайте https://www.maxmind.com/ полученный ID вставьте в поле Ваш ID:
define('MAXMIND_LICENSE_KEY', 'Ваш ID');
define('DB_TYPE', 'mysql');
define('DB_USER', 'mailwatch');
define('DB_PASS', 'yourpassword');
define('DB_HOST', 'localhost');
define('DB_NAME', 'mailscanner');
define('MAILWATCH_HOME', '/usr/local/www/nginx/mailscanner');
define('MS_CONFIG_DIR', '/usr/local/etc/MailScanner/');
define('MS_SHARE_DIR', '/usr/local/share/MailScanner/'); // Path for ConfigDefs.pl file
define('MS_LIB_DIR', '/usr/local/lib/MailScanner/'); // Path for sophos-wrapper file
define('MS_EXECUTABLE_PATH', '/usr/local/sbin/MailScanner');
define('IMAGES_DIR', '/images/'); // Both leading and trailing slash needed
define('SA_DIR', '/usr/local/bin/');
define('SA_RULES_DIR', '/usr/local/share/spamassassin/');
define('SA_PREFS', MS_CONFIG_DIR . 'spamassassin.conf'); // spam.assassin.prefs.conf in V4, spamassassin.conf in V5
define('TEMP_DIR', '/tmp/');
Настройка Mailscanner
Редактируем файл MailScanner.conf
cd /usr/local/etc/Mailscanner
# vi Mailscanner.conf
%org-name% = yourname
%org-long-name% = your company name
%web-site% = www.mycompany.com
%etc-dir% = /usr/local/etc/MailScanner
Run As User = postfix
Run As Group = postfix
Incoming Queue Dir = /var/spool/postfix/hold
Outgoing Queue Dir = /var/spool/postfix/incoming
Incoming Work Dir = /var/spool/MailScanner/incoming
MTA = postfix
Incoming Work User = postfix
Incoming Work Group = wheel
Incoming Work Permissions = 0660
Quarantine User = postfix
Quarantine Group = wheel
Quarantine Permissions = 0660
Virus Scanning = yes
Virus Scanners = clamav
Clamd Port = 3310
Clamd Socket = /var/run/clamav/clamd.sock
Clamd Lock File = # /var/lock/subsys/clamd
Clamd Use Threads = yes
Filename Rules = %etc-dir%/filename.rules.conf
Filetype Rules = %etc-dir%/filetype.rules.conf
Is Definitely Not Spam = &SQLWhitelist
Is Definitely Spam = &SQLBlacklist
Use SpamAssassin = yes
Required SpamAssassin Score = 4
High SpamAssassin Score = 6
SpamAssassin Temporary Dir = /var/spool/MailScanner/incoming/SpamAssassin-Temp
SpamAssassin User State Dir = /usr/local/share/spamassassin
SpamAssassin Install Prefix = /usr/local/share/spamassassin
SpamAssassin Site Rules Dir = /usr/local/share/spamassassin
SpamAssassin Local Rules Dir = /usr/local/etc/mail/spamassassin
SpamAssassin Default Rules Dir = /usr/local/share/spamassassin
Always Looked Up Last = &MailWatchLogging
Lockfile Dir = /var/spool/MailScanner/incoming/Locks
Custom Functions Dir = /usr/local/share/MailScanner/perl/custom
Создаем папку bayes и даем разрешения:
# mkdir /usr/local/etc/Mailscanner/bayes
# chown root:www /usr/local/etc/Mailscanner/bayes
# chmod g+rws /usr/local/etc/Mailscanner/bayes
Настройка Spamassassin
Теперь давайте отредактируем файл spamassassin.conf
# vi spamassassin.conf
use_bayes 1
bayes_path /usr/local/etc/MailScanner/bayes/bayes
bayes_file_mode 0660
bayes_auto_learn 1
bayes_ignore_header Yourdomain-MailScanner
bayes_ignore_header Yourdomain-MailScanner-SpamCheck
bayes_ignore_header Yourdomain-MailScanner-SpamScore
bayes_ignore_header Yourdomain-MailScanner-Information
Создадим нужные папки:
cd /var/spool/
# mkdir Mailscanner
# cd /var/spool/Mailscanner
# mkdir incoming
# mkdir quarantine
# mkdir spamassassin
# chown -R postfix:wheel
# chown postfix:postfix spamassassin/
# cd incoming/
# chown -R postfix:postfix Locks
Запустим все службы:
# /usr/local/etc/rc.d/mailscanner start
# /usr/local/etc/rc.d/postfix start
# /usr/local/etc/rc.d/sa-spamd start
# /usr/local/etc/rc.d/clamav-clamd start
# /usr/local/etc/rc.d/php-fpm start
# /usr/local/etc/rc.d/nginx start
Смотрим логи
# tail -f /var/log/maillog
Если все провильно и по пунктам вы сделали, должно все запустится и заработать и вы увидите такой лог:
Jun 18 22:03:08 gate MailScanner[16665]: MailScanner Email Processor version 5.3.4 starting...
Jun 18 22:03:08 gate MailScanner[16665]: Reading configuration file /usr/local/etc/MailScanner/MailScanner.conf
Jun 18 22:03:08 gate MailScanner[16665]: Reading configuration file /usr/local/etc/MailScanner/conf.d/README
Jun 18 22:03:08 gate MailScanner[16665]: Read 868 hostnames from the phishing whitelist
Jun 18 22:03:08 gate MailScanner[16665]: Read 5807 hostnames from the phishing blacklists
Jun 18 22:03:08 gate MailScanner[16665]: Config: calling custom init function MailWatchLogging
Jun 18 22:03:08 gate MailScanner[16665]: MailWatch: Started MailWatch SQL Logging child
Jun 18 22:03:08 gate MailScanner[16665]: Config: calling custom init function SQLWhitelist
Jun 18 22:03:08 gate MailScanner[16665]: MailWatch: Starting up MailWatch SQL Allowlist
Jun 18 22:03:08 gate MailScanner[16665]: MailWatch: Read 3 allowlist entries
Jun 18 22:03:08 gate MailScanner[16665]: Config: calling custom init function SQLBlacklist
Jun 18 22:03:08 gate MailScanner[16665]: MailWatch: Starting up MailWatch SQL Blocklist
Jun 18 22:03:08 gate MailScanner[16665]: MailWatch: Read 110 blocklist entries
Jun 18 22:03:08 gate MailScanner[16665]: Using SpamAssassin results cache
Jun 18 22:03:08 gate MailScanner[16665]: Connected to SpamAssassin cache database
Jun 18 22:03:08 gate MailScanner[16665]: Enabling SpamAssassin auto-whitelist functionality...
Jun 18 22:03:12 gate MailScanner[16665]: Connected to Processing Attempts Database
Jun 18 22:03:12 gate MailScanner[16665]: Found 0 messages in the Processing Attempts Database
Jun 18 22:03:12 gate MailScanner[16665]: Using locktype = flock
Jun 18 22:03:13 gate MailScanner[16669]: MailScanner Email Processor version 5.3.4 starting...
Jun 18 22:03:13 gate MailScanner[16669]: Reading configuration file /usr/local/etc/MailScanner/MailScanner.conf
Jun 18 22:03:13 gate MailScanner[16669]: Reading configuration file /usr/local/etc/MailScanner/conf.d/README
Jun 18 22:03:13 gate MailScanner[16669]: Read 868 hostnames from the phishing whitelist
Jun 18 22:03:13 gate MailScanner[16669]: Read 5807 hostnames from the phishing blacklists
Jun 18 22:03:13 gate MailScanner[16669]: Config: calling custom init function MailWatchLogging
Jun 18 22:03:13 gate MailScanner[16669]: MailWatch: Started MailWatch SQL Logging child
Jun 18 22:03:13 gate MailScanner[16669]: Config: calling custom init function SQLWhitelist
Jun 18 22:03:13 gate MailScanner[16669]: MailWatch: Starting up MailWatch SQL Allowlist
Jun 18 22:03:13 gate MailScanner[16669]: MailWatch: Read 3 allowlist entries
Jun 18 22:03:13 gate MailScanner[16669]: Config: calling custom init function SQLBlacklist
Jun 18 22:03:13 gate MailScanner[16669]: MailWatch: Starting up MailWatch SQL Blocklist
Jun 18 22:03:13 gate MailScanner[16669]: MailWatch: Read 110 blocklist entries
Jun 18 22:03:13 gate MailScanner[16669]: Using SpamAssassin results cache
Jun 18 22:03:13 gate MailScanner[16669]: Connected to SpamAssassin cache database
Jun 18 22:03:13 gate MailScanner[16669]: Enabling SpamAssassin auto-whitelist functionality...
Jun 18 22:03:17 gate MailScanner[16669]: Connected to Processing Attempts Database
Jun 18 22:03:17 gate MailScanner[16669]: Found 0 messages in the Processing Attempts Database
Jun 18 22:03:17 gate MailScanner[16669]: Using locktype = flock
Сделаем еще проверку, чтобы убедится что связка MDBD::mysql работает правильно:
# perl -MStorable -MDBI -MDBD::mysql -e 'print "OK\n";'
# ОК #должны получить такое значение!
Перейдем в папку:
cd /usr/local/etc/Mailscanner/bayes и выполним
sa-learn --sync
Создадутся такие вот файлы
-rw-rw---- 1 root www 12 Jun 15 18:36 bayes.mutex
-rw-rw---- 1 root www 131072 Jun 15 18:36 bayes_seen
-rw-rw---- 1 root www 131072 Jun 15 18:36 bayes_toks
Перезапускаем Mailscanner
# /usr/local/etc/rc.d/mailscanner restart
Давайте зайдем в Web версию Mailwatch
http://yourdomain.com/mailscanner/
Вводим логин и пароль который мы задали когда настраивали Базу данных в MySQL
Если все провильно настроили то попадаем в Веб версию Mailwatch
Тестируем почтовик отправляет в обе стороны почту, и должны начать появляться логи!
Больше информации по установке читайте на майте Mailwatch!