Настройка Mailscanner + Mailwatch, Spamassassin, Postfix + Mysql + Nginx, Php-FPM на FreeBSD 13.1

0
84

Настройка Mailscanner + Mailwatch, Spamassassin, Postfix + Mysql + Nginx, Php-FPM на FreeBSD 13.1

Я попытался собрать все варианты настроек в одной статье, чтобы все заработало с первого раза.

  1. Nginx 
  2. php-fpm
  3. Clamav
  4. Postfix
  5. Mysql 
  6. Mailwatch 
  7. Mailscanner
  8. Spamassassin

Настройка 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/

 Веб Версия Mailwatch

Вводим логин и пароль который мы задали когда настраивали Базу данных в MySQL 

Если все провильно настроили то попадаем в Веб версию Mailwatch

Тестируем почтовик отправляет в обе стороны почту, и должны начать появляться логи! 

Больше информации по установке читайте на майте Mailwatch!

Оставить комментарий