Почтовый сервер · 7 min read · Oct 23, 2025
Настройка домашнего почтового сервера, защищенного от спама (в несколько альтернативном варианте) (Debian Squeeze)
Настройка домашнего почтового сервера, защищенного от спама (в несколько альтернативном варианте) (Debian Squeeze)
Введение
Спам в электронной почте — это огромная проблема. Я нашел для себя довольно простое решение, однако потребуется некоторое время, чтобы полностью “мигрировать” на него.
Решение заключается в создании уникального адреса электронной почты каждый раз, когда мне нужно предоставить адрес электронной почты кому-то другому или какому-то веб-сайту для регистрации. Если я хочу создать аккаунт в Twitter, я использую “[email protected]”. Для веб-сервисов я использую полное доменное имя, включая поддомен (www) слева от @ (некоторые плохо спроектированные веб-сайты не распознают www как действительный адрес электронной почты, для таких я просто оставляю его).
Для людей я использую формат вроде этого: “[email protected]”. Вы также можете использовать “[email protected]”. Хорошая новость в том, что левая сторона @ для адресов электронной почты почти “неограничена”.
Поскольку я генерирую уникальные адреса электронной почты для каждого контакта, я могу легко выяснить, где мой адрес электронной почты был скомпрометирован, и затем я могу легко его удалить.
Этот гид настроит полностью функционирующий почтовый сервер с соответствующими скриптами для упрощения управления электронной почтой. Он также включает часть настройки DNS — даже если у вас динамический адрес — например, если вы хотите запустить свой собственный небольшой почтовый сервер из дома.
Резюме
В этом руководстве я использую Debian Squeeze в качестве сервера. Для других дистрибутивов Linux вам придется внести соответствующие изменения самостоятельно.
Краткое резюме того, что будет сделано в этом руководстве:
- Получение доменного имени
- Обработка динамического IP — если необходимо
- Обработка DNS и маршрутизации
- Настройка Postfix
- Настройка Procmail
- Настройка Dovecot
- Настройка веб-сервера для управления адресами электронной почты
- Настройка Thunderbird с дополнением
Благодарности
В этом руководстве я также опираюсь на несколько других руководств здесь — особенно касающихся настройки BIND и почтового сервера. Для этого я более или менее скопировал из руководств Фалко по идеальному серверу Debian. Также раздел о реле электронной почты был заимствован из руководства здесь от sjau. Без них я, вероятно, не смог бы это настроить.
Получение доменного имени
Прежде чем вы сможете начать запускать свой собственный почтовый сервер, вам нужно доменное имя, для которого вы также можете установить MX-записи. Я не хочу делать никаких предложений, так как существует множество регистраторов доменных имен. Один из самых дешевых, о котором я знаю, это GoDaddy.
Я сам не использую GoDaddy, но, насколько я слышал, они предоставляют надежный сервис.
Обработка динамических IP
Еще одной проблемой, с которой придется столкнуться, является то, как обрабатывать вещи на динамическом IP-адресе. Если у вас нет выделенного сервера, арендованного где-то, а вы используете свое домашнее интернет-соединение, то, скорее всего, у вас нет статического IP.
В интернете важно иметь статический IP, чтобы другие всегда знали, как с вами связаться. Однако есть сервисы, которые помогают вам с этим.
Один из сервисов, который я использую, это EveryDNS. Они позволяют мне хостить DNS для доменного имени.
На данный момент они все еще предлагают услугу бесплатно. Хотя их купили в 2010 году, обещание было таковым, что тогдашние клиенты, которые пожертвовали деньги, могут также в будущем использовать систему бесплатно. На их веб-странице они пока не упоминают, что новые клиенты должны платить — но я не знаю этого точно.
Причина использования EveryDNS заключается в том, что они также предлагают небольшой perl-скрипт, который можно использовать для обновления DNS. Это необходимо, так как ваш IP-адрес меняется со временем, если у вас нет статического IP-адреса. Вы можете получить perl-скрипт отсюда.
Когда у вас есть доменное имя, сначала перейдите на What Is My IP. Он покажет вам ваш текущий публичный IP-адрес. Затем создайте аккаунт на EveryDNS и сделайте как минимум следующие записи, где MYDOMAIN.COM будет вашим доменным именем:
(1) Создайте запись типа “A”, установите как полностью квалифицированное доменное имя “MYDOMAIN.COM” и установите в качестве значения ваш публичный IP-адрес.
(2) Создайте запись типа “CNAME”, установите как полностью квалифицированное доменное имя “*.MYDOMAIN.COM” и установите как “MYDOMAIN.COM”.
(3) Создайте запись типа “MX”, установите как полностью квалифицированное доменное имя “MYDOMAIN.COM”, установите в качестве значения “MYDOMAIN.COM” и установите как “MX Value” “10”.
Что мы только что сделали, это настроили DNS для домена. Основной домен находится по вашему IP-адресу (a-запись), все остальные домены также находятся там (звездочка в записи cname указывает на основной домен), и мы также управляем почтовым сервером там (mx-запись).
Пользователь root
Следующие действия выполняются от имени пользователя root — если не указано иное.
Обновление динамического IP
Как уже упоминалось, если у вас нет статического IP-адреса, вам нужно будет регулярно обновлять информацию о DNS.
(1) Получите perl-скрипт и сделайте его исполняемым
cd /root
wget http://www.everydns.net/eDNS.pl
chmod 0755 eDNS.pl(2) Создайте bash-скрипт, который вызывает perl-скрипт (есть и другие способы, но я нашел это самым простым):
touch eDNS.sh
echo "#!/bin/bash" > eDNS.sh
echo "perl /root/eDNS.pl -u USERNAME -p PASSWORD -d MYDOMAIN.COM" >> eDNS.shЗамените USERNAME и PASSWORD на ваши учетные данные для входа в EveryDNS.
(3) Настройте cron для регулярного выполнения
Мне нравится работать с файлом cron.txt, который содержит все cron-задачи. Я думаю, что так намного проще поддерживать.
Сначала вам нужно проверить, есть ли уже запись cron:
crontab -lЕсли записи cron еще нет, просто выполните следующие команды:
touch cron.txt
chmod 0700 cron.txt
echo "*/5 * * * * /root/eDNS.sh >/dev/null 2>&1" > cron.txtЕсли уже есть записи cron, скопируйте их, создайте файл cron.txt и вставьте их, а также добавьте следующую команду:
*/5 * * * * /root/eDNS.sh >/dev/null 2>&1 Теперь мы загружаем cron.txt как cron:
crontab cron.txtИ проверяем, было ли это добавлено правильно:
crontab -lLAN/Маршрутизация/BIND
Следующей проблемой, с которой мы сталкиваемся, является то, как разрешить домен в вашей локальной сети. Если ваш почтовый сервер находится за маршрутизатором, то, вероятно, у него будет локальный IP, такой как 192.168.0.x или 10.0.0.x.
Если вы находитесь за маршрутизатором, вам нужно будет перенаправить следующие порты на ваш сервер: 25, 80, 143, 443, 991. Возможно, потребуется больше портов, таких как 587.
Также мы сталкиваемся с проблемой, как разрешить доменное имя изнутри локальной сети. Снаружи локальной сети у вас есть запись DNS, которая должна указывать на ваш текущий IP-адрес. Однако, когда вы находитесь внутри локальной сети и делаете DNS-запрос, он вернет только ваш публичный IP, и обычно это приведет к сбою.
Существует несколько решений этой проблемы — если такая проблема вообще существует.
Один из способов — использовать dnsmasq в маршрутизаторах (например, dd-wrt или tomato-wrt). Однако, поскольку я не могу гарантировать, что это сработает, единственным другим вариантом, который я вижу, является настройка полноценного DNS-сервера на вашем почтовом сервере.
В этом руководстве я буду использовать chrooted Bind9, так как я с ним наиболее знаком. Для других DNS-серверов вы найдете множество документации в интернете.
(1) Установите программное обеспечение и остановите его
apt-get install bind9
/etc/init.d/bind9 stop(2) Измените конфигурацию /etc/default/bind9 так, чтобы строка options выглядела следующим образом:
OPTIONS="-u bind -t /var/lib/named" (3) Создайте необходимые директории в /var/lib:
mkdir -p /var/lib/named/etc
mkdir /var/lib/named/dev
mkdir -p /var/lib/named/var/cache/bind
mkdir -p /var/lib/named/var/run/bind/run(4) Затем переместите директорию конфигурации из /etc в /var/lib/named/etc:
mv /etc/bind /var/lib/named/etc(5) Создайте символическую ссылку на новую директорию конфигурации из старого местоположения (чтобы избежать проблем, когда BIND будет обновлен в будущем):
ln -s /var/lib/named/etc/bind /etc/bind(6) Создайте устройства null и random и исправьте права доступа к директориям:
mknod /var/lib/named/dev/null c 1 3
mknod /var/lib/named/dev/random c 1 8
chmod 666 /var/lib/named/dev/null /var/lib/named/dev/random
chown -R bind:bind /var/lib/named/var/*
chown -R bind:bind /var/lib/named/etc/bind(7) Отредактируйте файл /etc/rsyslog.d/bind-chroot.conf и добавьте
$AddUnixListenSocket /var/lib/named/dev/log (8) Перезапустите службы
/etc/init.d/rsyslog restart
/etc/init.d/bind9 startи проверьте /var/log/syslog на наличие ошибок.
Теперь мы настроили Bind9 в chroot-окружении. Следующее, что нужно сделать, это фактически добавить файл зоны для вашего домена.
(9) Отредактируйте /etc/bind/named.conf.local и добавьте
zone "MYDOMAIN.COM" IN {
type master;
file "/etc/bind/zones/MYDOMAIN.COM.db";
allow-update { none; };
};(10) Создайте папку зоны и файл зоны
mkdir /etc/bind/zones
touch /etc/bind/zones/MYDOMAIN.COM.db
chown -R bind:bind /etc/bind/zones/MYDOMAIN.COM.db(11) Добавьте информацию о вашей зоне в MYDOMAIN.COM.db
$TTL 86400
@ IN SOA @ MYDOMAIN.COM. (
1 ; serial
2600 ; refresh
15M ; retry
3600 ; expiry
360 ) ; minimum
@ IN NS ns.MYDOMAIN.COM.
ns IN A LOCALIP
www IN A LOCALIP
MYDOMAIN.COM. IN A LOCALIP
MYDOMAIN.COM. IN MX 10 LOCALIPКонечно, замените MYDOMAIN.COM на ваше фактическое доменное имя, а LOCALIP на ваш статический локальный IP-адрес. В основном мы здесь говорим, что сервер имен для этого домена размещен на “ns.MYDOMAIN.COM”, и “ns.MYDOMAIN.COM” можно найти по статическому локальному IP-адресу.
(12) Перезапустите Bind9
/etc/init.d/bind9 restart(13) Измените разрешение NS маршрутизатора
Пока Bind9 настроен, есть еще одна последняя вещь, которую нужно сделать. На вашем маршрутизаторе вам нужно изменить порядок разрешения серверов имен. Первый сервер имен теперь должен быть вашим “почтовым сервером” с соответствующим статическим локальным IP. В противном случае вся настройка bind9 была бы напрасной. В качестве второго сервера имен введите значение, которое уже было в качестве первого. В зависимости от вашего маршрутизатора это может быть немного сложнее.
Get new posts in your inbox
No spam. Unsubscribe anytime.