Установка сервера · 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.
БАЗОВАЯ УСТАНОВКА
- Установите минимальный вариант vm
Установите имя хоста на server1 - Метод разбиения по умолчанию
- Настройка пользователя:
u: администратор
p: пароль
Без шифрования - Без автоматических обновлений
- Установите OpenSSH
ПОСЛЕ УСТАНОВКИ
1. Получите права root
Включите вход root, выполнив следующее и задав пароль для root. Затем вы сможете войти как root:
sudo passwd root2. Настройте сеть
Поскольку установщик 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 restartvi /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 -y4. Кэширование Dnsmasq
apt-get install dnsmasq -yvi /etc/dnsmasq.confи заставьте Dnsmasq слушать на localhost:
listen-address=127.0.0.15. Установите 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 stopvi /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 <
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)Get new posts in your inbox
No spam. Unsubscribe anytime.