Установка и настройка sSMTP - инструкция -

УСТАНОВКА И НАСТРОЙКА SSMTP

Инструкция по установке и настройке sSMTP и его привязке к аккаунту gmail.

Установка и настройка

Все действия производятся на Linux Debian 9.

  • Удаление (или переименование) sendmail:
    $ sudo mv /usr/sbin/sendmail /usr/sbin/sendmail.org # переименование sendmail
    $ sudo apt-get purge sendmail # удаление sendmail
  • Установка ssmtp:
    $ sudo apt-get install ssmtp # установка ssmtp
    $ sudo ln -s /usr/sbin/ssmtp /usr/sbin/sendmail # symlink на sendmail, если не был создан автоматически
  • Установка bsd-mailx или mailutils (необязательный пункт, нужен для работы команды mail):
    $ sudo apt-get install bsd-mailx
  • Настройка конфигурационного файла (на примере Gmail):
    $ sudo cp /etc/ssmtp/ssmtp.conf /etc/ssmtp/ssmtp.conf.org # бэкап
    $ sudo nano /etc/ssmtp/ssmtp.conf # конфиг

    root=gmail-login@gmail.com
    
    mailhub=smtp.gmail.com:587
    
    UseTLS=YES
    UseSTARTTLS=YES
    AuthUser=gmail-login
    AuthPass=gmail-password
    AuthMethod=LOGIN
    
    # Are users allowed to set their own From: address?
    # YES - Allow the user to specify their own From: address
    # NO - Use the system generated From: address
    FromLineOverride=YES ### (не работает c Gmail).
  • Проверка:
    $ /usr/sbin/ssmtp john@example.com < /etc/hosts
    $ /usr/sbin/sendmail john@example.com < /etc/hosts
    $ mail john@example.com < /etc/hosts # Если устанавливали bsd-mailx

Меры безопасности

Пароль почтового аккаунта в файле конфигурации хранится в открытом виде, так что необходимо принять некоторые меры безопасности:

Вариант 1:

  • Установка прав доступа к файлу /etc/ssmtp/ssmtp.conf:
    $ sudo chown root:mail /etc/ssmtp/ssmtp.conf
    $ sudo chmod 640 /etc/ssmtp/ssmtp.conf
  • Добавление в группу mail требуемых пользователей:
    $ sudo usermod -aG mail <username>

В результате такой настройки успешно отправлять почту с ssmtp смогут только пользователи входящие в группу mail.

Вариант 2:

  • Создание псевдо-пользователя (без возможности входа в систему) ssmtp :
    $ sudo useradd -g nogroup -M -s /usr/sbin/nologin -d /nonexistent -N -c "sSMTP pseudo-user" ssmtp
  • Установка права доступа:
    $ sudo chown ssmtp:wheel /etc/ssmtp
    $ sudo chmod 4750 /etc/ssmtp
    $ sudo chown -R ssmtp:wheel /etc/ssmtp
    $ sudo chmod 640 /etc/ssmtp/ssmtp.conf # Чтение только владельцем и группой
    $ sudo chown ssmtp:nogroup /usr/sbin/ssmtp # ssmtp будет запускаться от имени ssmtp:nogroup
    $ sudo chmod 4555 /usr/sbin/ssmtp # suid - позволяет запускать файл всем пользователям

В результате такой настройки ssmtp смогут запускать все пользователи, при этом не имея доступа к файлу /etc/ssmtp/ssmtp.conf. Что такое группа wheel можно почитать здесь, но если вкратце, то после выполнения этих манипуляций, повышение прав пользователя запуском команды su будет доступно только пользователям состоящим в группе wheel. В контектсте настройки ssmtp это может быть и другая группа, к примеру mail.

Я использую немного изменённый вариант, где группы wheel и nogroup заменены группой mail:

  • Псевдо-пользователь ssmtp содан как клон пользователя mail (с тем же uid) и добавлен в группу mail:
    sudo useradd -g mail -o -u 8 -N -M -s /usr/sbin/nologin -d /nonexistent -N -c "sSMTP pseudo-user" ssmtp
  • Соответсвенно изменены настройки владельцев и прав доступа:
    $ sudo chown ssmtp:mail /etc/ssmtp # владелец:группа - ssmtp:mail
    $ sudo chmod 4750 /etc/ssmtp
    $ sudo chown -R ssmtp:mail /etc/ssmtp
    $ sudo chmod 640 /etc/ssmtp/ssmtp.conf
    $ sudo chown ssmtp:mail /usr/sbin/ssmtp
    $ sudo chmod 4555 /usr/sbin/ssmtp

Дополнительные возможности

Структура конфигурационных файлов sSMTP не подразумевает работы с несколькими почтовыми аккаунтами, так что все письма отправляемые с помощью команды mail будут приходить с одного адреса. Для решения этой проблемы нужно создать несколько конфигурационных файлов и отправлять почту с помошью команды ssmtp, указывая путь к нужному файлу конфиграции при помощи параметра -C:
/usr/sbin/ssmtp -C ~\.my-ssmtp.conf john@example.com < /etc/hosts

Также ssmtp не умеет в alias (или я не смог найти подходящего решения), так что отправка сообщений локальным пользователям средствами ssmtp недоступна. Сделать это можно с помощью команд mail и mailx из пакета bsd-mailx (одноименные программы из пакета mailutils этого не умеют). После установки bsd-mailx нужно изменить (или создать) файл /etc/mail.rc:

set ask askcc append dot save crt
ignore Received Message-Id Resent-Message-Id Status Mail-From Return-Path Via Delivered-To

alias username1 username1<username1@example.com>
alias username2 username2<username2@example.com>
alias root username3<username3@example.com>

В результате можно будет отправлять сообщения локальным пользователям:
$ echo "message" | mail -s "message for username1" username1

PHP mail()

  • Создаём php скрипт:
    $ touch testmail.php
    $ nano testmail.php
<?php
    $to_email = 'example@gmail.com';
    $subject = 'Simple Email Test via PHP';
    $body = 'Hi, this is PHP Mail test';
    $headers = 'From: example@gmail.com';

    if (mail($to_email, $subject, $body, $headers)) {
        echo "Email successfully sent to $to_email...";
    } else {
        echo 'Email sending failed...';
    }
  • Проверяем работу PHP mail():
    $ php testmail.php

Ссылки

SSMTP: A Simple Alternative To Sendmail
wiki.archlinux.org
wiki.debian.org
wiki.freebsd.org
askubuntu.com
askubuntu.com

Blog Comments powered by Disqus.