На правах комментария — почему postfix, собственно почему бы и нет, тот же функционал может исполнять любой из популярных почтовых серверов, но postfix популярен, прост в настройке и установке, безопасен.
Выполняем следующую команду:
cd /usr/ports/mail/postfix
Если в ответ Вы получите сообщение /usr/ports/mail/postfix: No such file or directory. Значит жадные создатели сервера установили вам систему без портов (файлов, которые описывают, где искать исходные тексты программ, как их видоизменять), тогда выполняем следующую команду:
portsnap fetch && portsnap extract
На самом деле это две команды, первая из них закачает на ваш VPS актуальное дерево портов, вторая положит его в нужные папки. Команда долгая (зависит от скорости сети и жесткого диска), так что время попить кофе у вас есть, если порты есть (не было вывода об ошибке) — сразу идем дальше.
Просим при сборке не приставать к нам с лишними вопросами - набираем:
make -DBATCH install clean
и собрать все по умолчанию (умолчания для нас — удачны). Собственно опять время пить кофе или заниматься работой - минут 10 минимум эта команда будет исполняться, а на бюджетном VPS и час. Следить за процессом компиляции необязательно.
По окончании процесса компиляции выключим запуск почтового сервера по умолчанию (sendmail) и скажем стартовать по умолчанию postfix:
echo -e " sendmail_enable="NO"n sendmail_submit_enable="NO"n
sendmail_outbound_enable="NO"n
sendmail_msp_queue_enable="NO"npostfix_enable="YES"n " >> /etc/rc.conf
Сейчас самое время написать письмо провайдеру, который поддерживает ваши DNS зоны (описание вашего домена - где какой сервер) , что вы просите создать запись inmx.domain.tld типа A с IP адресом вашего VPS сервера (domain.tld заменяете на ваш домен) и провайдеру вашего VPS с просьбой занести соответствующую обратную запись IP адреса на inmx.domain.tld. (возможно в одном или обоих случаях вы можете сделать это самостоятельно через панель управления). Заставим самосознание сервера запомнить это имя:
echo hostname=inmx.domain.tld.>> /etc/rc.conf
Пока провайдеры читают письма и исполняют поручение, установим очень простое, и в то же самое время эффективное решение для борьбы со спамом - "серые листы" (postgree). Действует это следующим образом, когда кто — то первый раз за несколько дней пишет вам письмо, то его письмо не принимается с сообщением, имеющим смысл «у нас что — то не так работает, повторите посылку через несколько минут». Трюк в том, что большинство спаммерских программ не повторяют посылку. Если через 5 или более минут тот же сервер, перешлет письмо тому же получателю от имени того же клиента, то это письмо нормально пройдет (технологию можно будет отключить для тех адресов, владельцы которых достаточно нервны, чтобы не подождать лишние 5-10 минут важного письма и для постоянных партнеров, указав их в специальном файле). Укажем собирать и разрешить автостарт:
cd /usr/ports/mail/postgrey/ && make install clean && echo postgrey_enable="YES" >> /etc/rc.conf
Создадим минимальный стартовый конфиг постфикса в качестве сервера, передающего почту на наш сервер: вам придется изменить этот конфиг, возможно ввести в него некоторые изменения (пояснения о том, что менять — ниже):
smtpd_client_message_rate_limit = 10
smtpd_client_connection_rate_limit = 10
default_process_limit = 100
bounce_queue_lifetime = 2h
queue_directory = /var/spool/postfix
command_directory = /usr/local/sbin
daemon_directory = /usr/local/libexec/postfix
data_directory = /var/db/postfix
mail_owner = postfix
transport_maps = hash:/usr/local/etc/postfix/transport
myhostname = inmx.domain.tld
inet_interfaces = all
local_recipient_maps = unix:passwd.byname $alias_maps
unknown_local_recipient_reject_code = 550
mynetworks_style = host
relay_domains = /usr/local/etc/postfix/relay-domains
smtpd_recipient_restrictions=
reject_rbl_client bl.spamcop.net
reject_rbl_client b.barracudacentral.org
reject_unauth_pipelining,
reject_non_fqdn_recipient,
reject_unknown_recipient_domain,
reject_invalid_hostname,
reject_non_fqdn_hostname,
reject_unauth_destination,
check_policy_service inet:127.0.0.1:10023
reject_unknown_sender_domain,
reject_unknown_recipient_domain,
Что и когда следует менять в тексте:
- (обязательное изменение) .
Cтрока myhostname = inmx.domain.tld надо заменить на:
myhostname = «имя хоста, которое Вы писали провайдеру»; - Параметры фильтрации спама (просто удаляйте строку, если Вы считаете, что эта опция вам не нужна). Если строчка не описана — она является обязательной для «простого» конфига.
reject_rbl_client bl.spamcop.net — запрет попыток работы с хостами, которые внесены в базу спаммерских активных сервисом spamcop.net. Попадание нормального (не взломанного спаммерами и не лояльного к ним сервера в эту базу) крайне редкий случай;
reject_rbl_client b.barracudacentral.org — то же, что предыдущий пункт, но иная база (базы частично пересекаются);
reject_unknown_sender_domain, — не принимать почту в тех случаях, когда отправитель указал как обратный адрес несуществующий почтовый домен;
reject_invalid_hostname - не принимать почту от серверов, которые не верно представляются (указывают не корректное доменное имя).
Составив текст выполните следующие команды:
cd /usr/local/etc/postfix&& rm main.cf; ee main.cf
Вы окажетесь в простейшем текстовом редакторе, куда надо скопировать ваш текст, чтобы выйти из редактора — нажмите ESC и «Save chanches»
Теперь заполним второй конфиг: куда передавать почту после ее приема:
rm transport; ee transport ; postmap trasport
Файл заполняется так: domain.tld smtp:[office.domain.tld]
где domain.tld — Ваш домен, а office.domain.tld — Интернет имя Вашей машины в офисе (domain.tld может быть разным для двух случаев). Строка повторяется для каждого домена, почта которого должна проходить через этот сервер (один домен — одна строка).
Следующим этапом правим конфиги Серых списков (точнее обнуляем исключения):
cat /dev/null > /usr/local/etc/postfix/postgrey_whitelist_clients && cat /dev/null > /usr/local/etc/postfix/postgrey_whitelist_recipients
Убиваем базу соответствий:
cd /etc/ && cat /dev/null > /etc/aliases && echo abuse:root > aliases && postalias aliases
Первичная настройка закончена. Отправьте машину в перезагрузку:
shutdown -r now
После перезагрузки (обычно для VPS это 2-3 минуты), надо проверить, что вся эта конструкция работает. На своей Windows машине (в офисе) выполняем команду:
telnet имя_созданного_сервера.ru
Там набираем команду:
HELO
в ответ получим: 250 имя вашего сервера
MAIL FROM: ttt@test.com.
Ответ должен быть: OK ....
RCPT TO: user@domain.tld.
В ответ вы должны получить что-то вроде: 450
В случае ответа: 4.2.0 <ttt@test.com>: Recipient address rejected: Greylisted, see http://postgrey.schweikert.ch/help/
следует понимать, что сработал "серый список", в базу занесено, что была попытка вашего IP послать письмо от пользователя ttt@test.com пользователю user@domain.tld. Если попытка будет повторена через 5 или более минут — серый лист пропустит письмо. Набираем:
QUIT
Ждем 5 минут и повторяем попытку. Теперь после команды RCPT TO: user@domain.tld, вы должны увидеть ответ: 250 OK.
После чего наберите команду:
DATA
Ответ должен быть: 354 End data with <CR><LF>.<CR><LF>.
На следующей строке — одну "точку" и Enter:
.
Сервер должен ответить: 250 2.0.0 Ok: queued as 75F752E123.
Вводите команду QUIT и проверяйте свой ящик (тот который user@domain.tld) — там должно быть пустое письмо от ttt@test.com. Если так — со спокойной совестью просите провайдера (или меняете сами через панель) поменять MX запись для вашего домена (т. е. указание сервера, отвечающего за почту) на inmx.domain.tld (то есть имя сервера, которое Вы создали).
Осталось немного рассказать о простейшей диагностике и донастройке под требования антиспама 🙂