Установка сервера · 6 min read · Oct 13, 2025

Идеальный SpamSnake - Ubuntu Jeos 12.04 LTS Precise Pangolin

Идеальный SpamSnake - Ubuntu Jeos 12.04 LTS Precise Pangolin

Автор: Rocky
Версия: 5

Postfix с байесовской фильтрацией, Postscreen, вызов получателей Postfix (пересылка получателей через предварительный просмотр, необязательно), Nginx/Uwsgi, Mysql, Dnsmasq, MailScanner (Spamassassin, ClamAV, Pyzor, Razor, DCC-Client), Baruwa, проверки SPF, FuzzyOcr, подписи Sanesecurity, Greyfix, KAM, Scamnailer, FireHOL (фаервол Iptables), скрипт получателей пересылки (необязательно), Webmin (необязательно), исходящий отказ с alterMIME (необязательно)

Этот учебник показывает, как настроить сервер на базе Ubuntu Jeos в качестве спам-фильтра в режиме шлюза. В конце вы получите шлюз SpamSnake, который будет пересылать чистые электронные письма вашему MTA. Вы также сможете просматривать вашу входящую очередь, обучать ваш SpamSnake и выполнять несколько более сложных операций через Baruwa.

Я не могу гарантировать, что это сработает для вас так же, как это работает для меня.

Я буду использовать следующее программное обеспечение:
• Веб-сервер: Nginx v1.1.19/Uwsgi v1.0.3
• Сервер базы данных: MySQL v5.5.28
• Почтовый сервер: Postfix v2.9.3
• Кэшируемый DNS-сервер: Dnsmasq 2.59
• Фильтр: MailScanner v4.84.5-3
• Фронтенд: Baruwa v1.1.2-4sn

Благодарности парням из HowToForge и разработчикам MailScanner, Baruwa, Clamav, Nginx/Uwsgi, Mysql, Postfix, Spamassassin, Razor/Pyzor/DCC и Firehol.

БАЗОВАЯ УСТАНОВКА

  1. Установите минимальный вариант vm
    Установите имя хоста на server1
  2. Метод разбиения по умолчанию
  3. Настройка пользователя:
    u: администратор
    p: пароль
    Без шифрования
  4. Без автоматических обновлений
  5. Установите OpenSSH

ПОСЛЕ УСТАНОВКИ

1. Получите права root

Включите вход root, выполнив следующее и задав пароль для root. Затем вы сможете войти как root:

sudo passwd root

2. Настройте сеть

Поскольку установщик Ubuntu настроил нашу систему для получения сетевых настроек через DHCP, нам нужно изменить это, так как сервер должен иметь статический IP-адрес. Отредактируйте /etc/network/interfaces и настройте его в соответствии с вашими потребностями (в этом примере я буду использовать IP-адрес 192.168.0.100):

vi /etc/network/interfaces

и сделайте его выглядеть следующим образом:

# Этот файл описывает сетевые интерфейсы, доступные на вашей системе
# и как их активировать. Для получения дополнительной информации смотрите interfaces(5).
# Интерфейс сетевого цикла
auto lo
iface lo inet loopback
# Основной сетевой интерфейс
auto eth0
iface eth0 inet static
        address 192.168.0.100
        netmask 255.255.255.0
        network 192.168.0.0
        broadcast 192.168.0.255
        gateway 192.168.0.1
        dns-nameservers 192.168.0.1

Затем перезапустите вашу сеть:

/etc/init.d/networking restart
vi /etc/hosts

и сделайте его выглядеть так:

127.0.0.1       localhost.localdomain   localhost
192.168.0.100   server1.example.com     server1
# Следующие строки желательны для хостов, поддерживающих IPv6
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

Теперь выполните:

echo server1.example.com > /etc/hostname  
reboot now

После этого выполните:

hostname  
hostname -f

Оба должны показать server1.example.com сейчас.

3. Измените оболочку по умолчанию

/bin/sh является символической ссылкой на /bin/dash, однако нам нужна /bin/bash, а не /bin/dash. Поэтому мы делаем следующее:

dpkg-reconfigure dash

Установить dash как /bin/sh? <– Нет

Установите несколько пакетов и требований, которые понадобятся позже:

apt-get install binutils cpp fetchmail flex gcc libarchive-zip-perl libc6-dev libcompress-raw-zlib-perl libdb4.8-dev libpcre3 libpopt-dev lynx m4 make ncftp nmap openssl perl perl-modules unzip zip zlib1g-dev autoconf automake1.9 libtool bison autotools-dev g++ build-essential telnet wget gawk -y

4. Кэширование Dnsmasq

apt-get install dnsmasq -y
vi /etc/dnsmasq.conf

и заставьте Dnsmasq слушать на localhost:

listen-address=127.0.0.1

5. Установите Mysql

apt-get install mysql-client mysql-server libdbd-mysql-perl -y 

Вам будет предложено ввести пароль для пользователя root MySQL - этот пароль действителен для пользователя root@localhost, а также [email protected], поэтому нам не нужно указывать пароль root MySQL вручную позже:

Новый пароль для пользователя MySQL “root”: <– вашпарольmysql
Повторите пароль для пользователя MySQL “root”: <– вашпарольmysql

6. Установите Postfix:

apt-get install postfix postfix-mysql postfix-doc procmail -y

Вам будет задано два вопроса. Ответьте следующим образом:

Общий тип конфигурации почты: –> Интернет-сайт
Системное имя почты: –> server1.example.com

Остановите Postfix:

postfix stop
vi /etc/postfix/master.cf

и сделайте его выглядеть следующим образом:

pickup    fifo  n       -       -       60      1       pickup
         -o content_filter=
         -o receive_override_options=no_header_body_checks

Отредактируйте main.cf:

vi /usr/src/postfix.sh

со следующим содержимым:

#!/bin/sh
postconf -e "alias_maps = hash:/etc/aliases"
newaliases
postconf -e "myorigin = domain.tld"
postconf -e "myhostname = server1.domain.tld"
postconf -e "mynetworks = 127.0.0.0/8, 192.168.0.0/24"
postconf -e "message_size_limit = 10485760"
postconf -e "local_transport = error:No local mail delivery"
postconf -e "mydestination = "
postconf -e "local_recipient_maps = "
postconf -e "relay_domains = mysql:/etc/postfix/mysql-relay_domains.cf"
postconf -e "relay_recipient_maps = mysql:/etc/postfix/mysql-relay_recipients.cf"
postconf -e "transport_maps = mysql:/etc/postfix/mysql-transports.cf"
postconf -e "virtual_alias_maps = hash:/etc/postfix/virtual"
postconf -e "disable_vrfy_command = yes"
postconf -e "strict_rfc821_envelopes = no"
postconf -e "smtpd_banner = $myhostname ESMTP SpamSnake"
postconf -e "smtpd_delay_reject = yes"
postconf -e "smtpd_recipient_limit = 100"
postconf -e "smtpd_helo_required = yes"
postconf -e "smtpd_client_restrictions = permit_sasl_authenticated, permit_mynetworks, permit"
postconf -e "smtpd_helo_restrictions = permit_sasl_authenticated, permit_mynetworks, permit"
postconf -e "smtpd_sender_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_sender, reject_unknown_sender_domain, permit"
postconf -e "smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unknown_recipient_domain, reject_unauth_destination, whitelist_policy, grey_policy, rbl_policy, spf_policy, permit"
postconf -e "smtpd_data_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_pipelining"
postconf -e "smtpd_restriction_classes = spf_policy, grey_policy, whitelist_policy"
postconf -e "spf_policy = check_policy_service unix:private/policy-spf"
postconf –e "policy-spf_time_limit = 3600s"
postconf -e "rbl_policy = reject_rbl_client zen.spamhaus.org, reject_rbl_client bl.spamcop.net"
postconf -e "grey_policy = check_policy_service unix:private/greyfix"
postconf -e "whitelist_policy = check_client_access mysql:/etc/postfix/mysql-global_whitelist.cf, check_sender_access mysql:/etc/postfix/mysql-global_whitelist.cf"
postconf -e "header_checks = regexp:/etc/postfix/header_checks"
touch /etc/postfix/virtual
echo "root [email protected]" >> /etc/postfix/virtual && echo "abuse [email protected]" >> /etc/postfix/virtual && echo "postmaster [email protected]" >> /etc/postfix/virtual
postmap /etc/postfix/virtual
touch /etc/postfix/header_checks
echo "/^Received:/ HOLD" >> /etc/postfix/header_checks
postmap /etc/postfix/header_checks
cat > /etc/postfix/mysql-global_whitelist.cf < /etc/postfix/mysql-relay_domains.cf < /etc/postfix/mysql-relay_recipients.cf < /etc/postfix/mysql-transports.cf <

Примечание: На этом этапе убедитесь, что вы заменили [email protected], example.com и @example.com на реальные значения, соответствующие вашей настройке.

Сделайте его исполняемым и выполните:

chmod +x /usr/src/postfix.sh
./usr/src/postfix.sh

*Примечание: Пользователь/пароль для файлов cf должны совпадать с пользователем/паролем, которые вы будете использовать с вашей настройкой базы данных Baruwa позже. Убедитесь, что вы изменили все, что выделено красным, перед запуском скрипта.

Вызов получателя Postfix (необязательно)

Эта функция запрашивает сервер получателя, чтобы узнать, существует ли получатель. Если нет, он отвечает с ошибкой 550 серверу отправителя и разрывает соединение. Если пользователь действительно существует, SpamSnake продолжит обрабатывать электронное письмо. Это просто еще один метод предотвращения обратного рассеяния, но он имеет свою цену. Ознакомьтесь с ним на http://www.postfix.org/ADDRESS_VERIFICATION_README.html. Вы можете пропустить этот метод и использовать метод скрипта (позже в этом руководстве), если решите, что он замедлит ваш сервер.

vi /etc/postfix/main.cf и добавьте следующее:

verify_recipient = reject_unknown_recipient_domain, reject_unverified_recipient  
look_ahead = check_recipient_access hash:/etc/postfix/access  
unverified_recipient_reject_code = 550  
address_verify_map = btree:/var/lib/postfix/verify

Добавьте это в ваши smtpd_restriction_classes:

verify_recipient, look_ahead

Добавьте это в smptd_recipient_restrictions:

smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, look_ahead, whitelist_policy, grey_policy, rbl_policy, spf_policy, permit

Создайте файл доступа:

touch /etc/postfix/access

Добавьте ваши домены:

cat > /etc/postfix/access <#mysql-transports
example.com verify_recipient
example2.com verify_recipient
EOF

*Примечание: Убедитесь, что вы добавили действительные домены, которые вы фильтруете.

Postmap его:

postmap /etc/postfix/access

Финальный взгляд на установку Postfix:

less /etc/postfix/main.cf

Проверьте содержимое файла на наличие ошибок и исправьте их при необходимости. Запустите Postfix:

postfix start

Проверьте, что Postfix отвечает:

telnet 127.0.0.1 25

Вы должны увидеть:

220 [вашFQDNздесь] ESMTP Postfix (Ubuntu)
Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.