В этой инструкции мы создадим почтовый сервер #Postfix с антивирусом #ClamAV и спам фильтром #SpamAssassin на базе сервера #ubuntu 20.04 в #яндекс облаке и всё это будет использовать в веб почте #Roundcube
Предварительная подготовка
Как создать виртуальную машину с Ubuntu можете посмотреть в этом посте.
Если в дальнейшем вы планируете так же установить почту с ClamAV, то вам потребуется 4GB RAM на виртуальной машине.
Заходим на консоль яндекс облако и при создании виртуальной машины меняем помять на 4 ГБ.
Ранее мы говорили как установить сайт WordPress, мы будем делать установку прямо на этот сервер. А в следующей статье, мы покажем как связать на сайт и почтовым сервером.
После подключения обновляем систему.
sudo apt update && sudo apt upgrade -y
Посмотрим какой у нас Публичный IPv4, его будет использовать в дальнейшем.
Postfix
Запустим установку Postfix
sudo apt-get install postfix -y
Сначала выбираем Internet Site.
Потом вписываем наш хост с ИП, которое мы посмотрели ранее 51.250.107.122.nip.io
Настройка postfix
Поменяем локальные домены mydestination
sudo sed -i 's/^mydestination = .*/mydestination = localhost.$mydomain, localhost/' /etc/postfix/main.cf
Добавим в конец настройки авторизации и доставку почты через dovecot.
sudo bash -c 'cat >> /etc/postfix/main.cf <<EOF
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
virtual_transport = lmtp:unix:private/dovecot-lmtp
virtual_mailbox_domains = /etc/postfix/virtual_mailbox_domains
EOF'
Добавим наш домен 51.250.107.122.nip.io
sudo bash -c 'echo "51.250.107.122.nip.io ok" > /etc/postfix/virtual_mailbox_domains'
sudo postmap /etc/postfix/virtual_mailbox_domains
Раскомментируем submission для приёма писем от почтовых клиентов.
sudo sed -i 's/^.submission/submission/' /etc/postfix/master.cf
Dovecot
Установим dovecot.
sudo apt install -y dovecot-core dovecot-imapd dovecot-pop3d dovecot-lmtpd
Создадим папку для приёма писем.
sudo mkdir -p /var/mail/vhosts/51.250.107.122.nip.io
Добавим пользователя vmail и дадим ему права на папки с почтой.
sudo groupadd -g 5000 vmail
sudo useradd -r -g vmail -u 5000 vmail -d /var/mail/vhosts -c "virtual mail user"
sudo chown -R vmail:vmail /var/mail/vhosts/
Поменяем авторизацию с системной на passwdfile.
sudo sed -i '/.*auth-system.conf.ext/d' /etc/dovecot/conf.d/10-auth.conf
sudo sed -i 's/^..include auth-passwdfile.conf.ext/!include auth-passwdfile.conf.ext/' /etc/dovecot/conf.d/10-auth.conf
Разрешим ssl подключения.
sudo sed -i 's/.*port = 993/ port = 993\n ssl = yes/' /etc/dovecot/conf.d/10-master.conf
sudo sed -i 's/.*port = 995/ port = 995\n ssl = yes/' /etc/dovecot/conf.d/10-master.conf
Меняем доставку почты lmtp на dovecot.
sudo sed -i 's/.*unix_listener lmtp.*/ unix_listener \/var\/spool\/postfix\/private\/dovecot-lmtp \{\n mode = 0600\n user = postfix\n group = postfix/' /etc/dovecot/conf.d/10-master.conf
Добавляем smtp авторизацию.
sudo sed -i 's/.*Postfix smtp-auth/ # Postfix smtp-auth\n unix_listener \/var\/spool\/postfix\/private\/auth \{\n mode = 0666\n user = postfix\n group = postfix\n }/' /etc/dovecot/conf.d/10-master.conf
Меняем файл схему и формат авторизации.
sudo sed -i 's/.*args = scheme.*/ args = scheme=PLAIN username_format=%u \/etc\/dovecot\/dovecot-users/' /etc/dovecot/conf.d/auth-passwdfile.conf.ext
sudo sed -i 'N;s/userdb.*driver = passwd-file/userdb {\n driver = static/' /etc/dovecot/conf.d/auth-passwdfile.conf.ext
sudo sed -i 's/.*args = username_format.*/ args = uid=vmail gid=vmail home=\/var\/mail\/vhosts\/%d\/%n/' /etc/dovecot/conf.d/auth-passwdfile.conf.ext
Добавляем почтовые ящики.
sudo bash -c 'cat >> /etc/dovecot/dovecot-users<<EOF
admin@51.250.107.122.nip.io:PASSWORD
info@51.250.107.122.nip.io:PASSWORD
EOF'
Меняем формат почтового ящика на maildir.
sudo sed -i 's/^mail_location.*/mail_location = maildir:\/var\/mail\/vhosts\/%d\/%n/' /etc/dovecot/conf.d/10-mail.conf
Перезапускаем сервисы.
sudo service postfix restart
sudo service dovecot restart
Проверяем подключение.
nikolai@postfix:~$ telnet localhost 110
Trying ::1...
Connected to localhost.
Escape character is '^]'.
+OK Dovecot (Ubuntu) ready.
user admin@51.250.107.122.nip.io
+OK
pass PASSWORD
+OK Logged in.
list
+OK 0 messages:
.
quit
+OK Logging out.
Connection closed by foreign host.
Roundcube
Устанавливаем Roundcube.
sudo apt install -y mysql-server roundcube
Настраиваем его для работы с базой данных: <Yes>
Прописываем пароль: PASSWORD
Ещё раз вводим пароль: PASSWORD
Добавляем Alias для подключения к почте в Apache.
sudo bash -c 'echo "Alias /mail /usr/share/roundcube" > /etc/apache2/sites-available/030-roundcube.conf'
sudo ln -s /etc/apache2/sites-available/030-roundcube.conf /etc/apache2/sites-enabled/030-roundcube.conf
sudo systemctl restart apache2.service
Подключаемся к почте http://51.250.107.122.nip.io/mail/
имя: admin@51.250.107.122.nip.io
пароль: PASSWORD
сервер: localhost
ClamAV
Устанавливаем ClamAV.
sudo apt install clamav-daemon clamav clamsmtp -y
Меняем права на папках антивируса.
sudo chown -R clamsmtp:clamsmtp /var/spool/clamsmtp/
sudo chown -R clamsmtp:clamsmtp /var/run/clamsmtp/
Перегружаем clamsmtp
sudo systemctl restart clamsmtp
Добавляем сканирование антивирусом в postfix.
sudo bash -c 'cat >>/etc/postfix/main.cf<<EOF
# Virusscanner
content_filter = scan:127.0.0.1:10026
receive_override_options = no_address_mappings
EOF'
sudo bash -c 'cat >>/etc/postfix/master.cf<<EOF
# Antivirus
scan unix - - n - 16 smtp
-o smtp_send_xforward_command=yes
# For injecting mail back into postfix from the filter
127.0.0.1:10025 inet n - n - 16 smtpd
-o content_filter=
-o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
-o smtpd_helo_restrictions=
-o smtpd_client_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks_style=host
-o smtpd_authorized_xforward_hosts=127.0.0.0/8
EOF'
sudo systemctl restart postfix
Настраиваем обновление базы вирусов.
sudo sed -i 's/^ScriptedUpdates yes/ScriptedUpdates no/' /etc/clamav/freshclam.conf
sudo sed -i '/DatabaseMirror/d' /etc/clamav/freshclam.conf
sudo bash -c ' echo "PrivateMirror https://tendence.ru/clamav" >>/etc/clamav/freshclam.conf'
Скачиваем базы.
sudo -u clamav wget -P /var/lib/clamav/ https://techplanet.pro/clamav/main.cvd
sudo -u clamav wget -P /var/lib/clamav/ https://techplanet.pro/clamav/daily.cvd
sudo -u clamav wget -P /var/lib/clamav/ https://techplanet.pro/clamav/bytecode.cvd
Перегружаем clamav.
sudo systemctl restart clamav-freshclam.service
sudo systemctl restart clamav-daemon
SpamAssassin
Устанавливаем SpamAssassin.
sudo apt install -y spamassassin spamc
Добавляем пользователя spamd.
sudo groupadd -g 5001 spamd
sudo useradd -u 5001 -g spamd -s /sbin/nologin -d /var/lib/spamassassin spamd
Создаём папку для SpamAssassin.
sudo mkdir /var/lib/spamassassin
sudo chown -R spamd:spamd /var/lib/spamassassin
Настраиваем SpamAssassin.
sudo sed -i 's/^OPTIONS=.*/OPTIONS="--create-prefs --max-children 5 --username spamd --helper-home-dir \/var\/lib\/spamassassin\/ -s \/var\/lib\/spamassassin\/spamd.log"/' /etc/default/spamassassin
sudo sed -i 's/^PIDFILE=.*/PIDFILE="\/var\/lib\/spamassassin\/spamd.pid"/' /etc/default/spamassassin
sudo sed -i 's/^CRON=.*/CRON=1/' /etc/default/spamassassin
sudo sed -i 's/^. report_safe.*/report_safe 0/' /etc/spamassassin/local.cf
sudo sed -i 's/^. use_bayes.*/use_bayes 1/' /etc/spamassassin/local.cf
sudo sed -i 's/^. bayes_auto_learn.*/bayes_auto_learn 1/' /etc/spamassassin/local.cf
sudo sed -i 's/^. bayes_ignore_header/bayes_ignore_header/' /etc/spamassassin/local.cf
sudo sed -i 's/^. rewrite_header.*/rewrite_header Subject [***** SPAM _SCORE_ *****]/' /etc/spamassassin/local.cf
sudo sed -i 's/^. required_score.*/required_score 2.0/' /etc/spamassassin/local.cf
sudo sed -i 's/^. required_score.*/required_score 2.0\nuse_bayes_rules 1\nskip_rbl_checks 0\nuse_razor2 0\nuse_dcc 0\nuse_pyzor 0/' /etc/spamassassin/local.cf
Запускаем и ставим в автозагрузку.
sudo systemctl enable spamassassin.service
sudo systemctl restart spamassassin
Добавляем проверку на спам в postfix.
sudo sed -i 's/^\Wsmtp .*/ -o content_filter=spamassassin:dummy/' /etc/postfix/master.cf
sudo bash -c 'cat >> /etc/postfix/master.cf <<EOF
# SpamAssassin
spamassassin unix - n n - - pipe
flags=DROhu user=spamd argv=/usr/bin/spamc -f -e /usr/sbin/sendmail -oi -f \${sender} \${recipient}
EOF'
Обновляем правила SpamAssassin.
sudo sa-update
Перегружаем сервисы.
sudo systemctl restart spamassassin
sudo systemctl restart postfix
Проверяем работу спам фильтра обязательно с внешнего почтового сервера. Отправляем почту:
Кому: admin@51.250.107.122.nip.io
Тема: тест спама
Сообщение: XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X
И получаем письмо с пометкой SPAM
Нажимаем справа Ещё -> Исходный текст и находим X-Spam-Flag.
Всё в порядке. X-Spam-Flag: YES и X-Spam-Status: Yes, score=999.8
Безопасность
Сделаем нашу систему немного безопаснее.
sudo sed -i 's/^ssl =.*/ssl = required\nssl_protocols = !SSLv3\nssl_min_protocol = TLSv1.1/' /etc/dovecot/conf.d/10-ssl.conf
sudo systemctl restart dovecot
Но подробнее об этом поговорим в другой статье. Так что не забудьте подписаться.