Цикл статей по созданию идеального сервера для хостинга моих сайтов 😉 зреет довольно давно.
Помнится, когда я решился на переезд с виртуального хостинга на VPS я даже где-то делал заметки, что и как было настроено. Чтобы потом по ним написать тексты.
В предверьях выхода FreeBSD 10 я начал присматриваться к состоянию своей ОС. Не самое идеальное состояние, устаревшая версия FreeBSD 9.0, следы различных экспериментов и тому подобное. Поэтому я буду постепенно описывать то, что я сделал для приближения к своему видению идеального сервера.
Для хостинга VPS был выбран хостинг-провайдер ISPserver как наиболее проверенный по истечению большого срока работы с ним. Я пользуюсь его услугами уже не первый год и пути моих данных можно как-то так отобразить:
- VPS на виртуализации VDSmanager-FreeBSD
- VPS на виртуализации XEN
- Облачный хостинг
- VPS на виртуализации KVM
Если кому будет интересно (например мне =)) то я опишу подробней почему я так странно мигрировал и практически вернулся к истокам =)
И так, под сервер взят FreeBSD в минимальной конфигурации.
По умолчанию на FreeBSD используется почтовый сервер Sendmail. Но так как я использую для почты сервис от gmail, то в общем-то запущенный почтовый демон мне не к чему. Все мои сайты так же работают через SMTP-авторизацию с удаленными почтовыми серверами.
Но тем не менее, различные отчеты о состоянии сервера получать полезно и даже необходимо.
Было принято решение найти что-то менее тяжеловесное для использования исключительно на отсылку почтовых сообщений наружу.
Первым в руки попал ssmtp, да так и остался.
Перед установкой и настройкой ssmtp требуется отключить работу Sendmail. Для этого в файл /etc/rc.conf помещаем следующие строки:
sendmail_enable=”NO”
sendmail_submit_enable=”NO”
sendmail_outbound_enable=”NO”
sendmail_msp_queue_enable=”NO”
И аварийно завершаем работающий процесс sendmail командой:
killall -9 sendmail
После чего приступаем к установке ssmtp:
make all install replace clean -C /usr/ports/mail/ssmtp
Использование в команде параметра replace приведет к изменению файла /etc/mail/mailer.conf
По умолчанию он выглядит так:
# $FreeBSD: release/9.2.0/etc/mail/mailer.conf 93858 2002-04-05 04:25:14Z gshapiro $
#
# Execute the “real” sendmail program, named /usr/libexec/sendmail/sendmail
#
sendmail /usr/libexec/sendmail/sendmail
send-mail /usr/libexec/sendmail/sendmail
mailq /usr/libexec/sendmail/sendmail
newaliases /usr/libexec/sendmail/sendmail
hoststat /usr/libexec/sendmail/sendmail
purgestat /usr/libexec/sendmail/sendmail
После установки ssmtp он стал содержать следующие строки
# $FreeBSD: release/9.2.0/etc/mail/mailer.conf 93858 2002-04-05 04:25:14Z gshapiro $
#
# Execute the “real” sendmail program, named /usr/libexec/sendmail/sendmail
#
#sendmail /usr/libexec/sendmail/sendmail
#send-mail /usr/libexec/sendmail/sendmail
#mailq /usr/libexec/sendmail/sendmail
#newaliases /usr/libexec/sendmail/sendmail
#hoststat /usr/libexec/sendmail/sendmail
#purgestat /usr/libexec/sendmail/sendmail
sendmail /usr/local/sbin/ssmtp
send-mail /usr/local/sbin/ssmtp
mailq /usr/local/sbin/ssmtp
newaliases /usr/local/sbin/ssmtp
hoststat /usr/bin/true
purgestat /usr/bin/true
В целом на этом можно и остановиться, теперь ssmtp полностью заменил собой sendmail и письма стали вновь уходить наружу. С той разницей, что принять письма на сервер не получится и MTA не запущен. Не является дополнительной нагрузкой и потенциальной брешью в безопасности.
В качестве продолжения можно рассказать о том, что при установке ssmtp помимо бинарного файла устанавливается так же файлы документации и примеры конфигурационных файлов.
Они расположены в директории /usr/local/etc/ssmpt/
Для того, чтобы начать использовать конфигурационный файл с целью более тонкой настройки отправки следует переименовать файл /usr/local/etc/ssmtp/ssmtp.conf.sample в /usr/local/etc/ssmtp/ssmtp.conf. Это легко выполнить командой:
cp /usr/local/etc/ssmtp/ssmtp.conf.sample /usr/local/etc/ssmtp/ssmtp.conf
После этого ssmtp начнет использовать данные из файла конфигурации.
Для увеличения безопасности можно проделать следующие трюки:
Создаем непривилегированного пользователя ssmtp
pw useradd ssmtp -g nogroup -h – -s /sbin/nologin -d /nonexistent -c “ssmtp pseudo-user”
Эта команда создаст пользователя ssmtp, присвоит его к группе nogroups и отключит возможность удаленной авторизации под ним и использование парольной авторизации в вобщем.
После этого выставляем права доступа и владельца на файлы и директорию
cd /usr/local/etc/ssmtp
chown ssmtp:wheel .
chmod 4750 .
chown ssmtp:wheel . ssmtp.confchmod 640 ssmtp.conf
И последнее, указываем владельца и группу с уровнеем доступа для исполняемого файла ssmtp
chown ssmtp:nogroup /usr/local/sbin/ssmtp
chmod 4555 /usr/local/sbin/ssmtp
Как я упоминал выше, для писем я использую привязку домена на gmail, конфигурационный файл будет выглядеть работающим относительно этой ситуации, но заработает и в любой другой при незначительных изменениях.
Конфигурационный файл для работы с gmail выглядит следующим образом:
mailhub=smtp.sabini.ch:465
hostname=vps.sabini.ch
FromLineOverride=YES
UseTLS=YES
AuthUser=vadim@sabini.ch
AuthPass=<PASSWD>
Таким образом все отправленные с сервера письма будут уходить наружу через gmail.
Напомню, что этот метод работает при единоличном использовании сервера под исключительно свои нужны, в случае хостинга вместо ssmtp можно использовать DragonFly Mail Agent, который отсылает письма самостоятельно без авторизации на удаленном smtp-сервере.
Сначало хотел показать какой-нибудь смешной ролик, но решил остановиться на познавательном – история создания и использования настоящей голубиной почты