Любой админ рано или поздно сталкивается с вопросом создания своего почтового сервера. А современные реалии таковы, что Интернет давно уже не место группки учёных, которые, как в космосе, пытаются найти друг друга. Современный Интернет - это вывел сервер во внешнюю сеть и тебе боты, хакеры и другие нехорошие сущности тут же пытаются напихать грязных писек по самые помидоры. Один из бичей почтового протокола - это спам.
Самая лучшая статья по борьбе со спамом, на мой взгляд, это статья, мною уважаемого Маламута, Фильтрация спама на уровне SMTP протокола. Я его статью здесь не буду цитировать и приводить куски. Лучший вариант - перейти по ссылке и прочесть. Главная мысль и я с ней согласен на 200%, что защита от спама - это не какие-то списки спамеров, которым мы будем делать атата и не давать писа́ть нам письма. Лучшая защита - бить спамеров на подлёте. Спамеры, запуская свои спам-машины, в которых вы одна из миллионов строк в базе данных, долбятся в наши почтовые сервера, торопясь и нарушая стандарты. Этим можно и нужно пользоваться. В своё время, прочитав статью Маламута и доверившись ему, я сделал всё, что он описал в своей статье, вдумчиво прочитав про каждый параметр Postfix, который упоминался в статье. Благодаря фильтрации на уровне SMTP, количество спама уменьшилось в разы. В помощь протоколу SMTP, как Чип и Дейл, спешат протокол Sender Policy Framework (SPF) и грейлистинг. А-а-а, попался, скажет внимательный читатель, всё-таки есть списки! Нет, скажу я вам, нету списков. SPF помогает отсеивать спамеров, которые прикрываются чужими почтовыми доменами. Спамер лезет со своего IP адреса, подставляя что он дескать mail.google.com, но проверка SPF записи выявит, что у mail.google.com другие IP адреса и сразу же можно резать данного лицемера-спамера. Грейлистинг (серые списки) с помощью Postgrey - это демон, который "просит" адресата при полнейшем соблюдении стандарта отправить письмо попозже. Будет ли спамер отсылать вам письмо попозже? Думаю вряд ли, учитывая многомиллионные базы у спамеров и нагрузку на их почтовые очереди.
И вот на этом этапе, когда всё вроде успокоилось и устаканилось, родилась гениальная мысль! Нужно всех спамеров, что долбятся в мой почтовый сервер занести в чёрный список аппаратного файрвола Cisco ASA (Adaptive Security Appliance), который защищает периметр DMZ.
Извините за мой подход в виде скриптов, но вот так я себе помогаю в работе. Нужен первый скрипт log2sql.sh, который будет парсить лог postfix и заносить в базу данных IP адрес спаммера и количество его попыток втюхать вам спам.
Комментарии по скрипту:
#!/bin/sh # vasilisc.com # log 2 sql # заносим в БД спамеров, чтобы облегчить жизнь Postfix USERNAME="userlogin" PASSWORD="password2your_bd" HOST="127.0.0.1" DATABASE="postfix" DATEEVENT=`LANG=en_US /bin/date '+%b %e %H'` # берём строки за текущий час текущего дня и месяца /bin/grep -F "${DATEEVENT}" /var/log/mail.log | \ # проверка лога на строки идентифицирующие спамеров /bin/grep -F --file=maska_spammers.txt | \ # проверка на всякий случай чтобы в логах ничего не мелькнуло похожее на нас # чтобы не занести сами себя в чёрные списки /bin/grep -vE "(127.0.0.1|192.168.|172.16.|10.0.|localhost|81.21.|176.97.)" | \ # находим IP адреса и кол-во их повторов /bin/grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' | /usr/bin/sort | /usr/bin/uniq -c > spammers2.log while read countip ip do echo $countip" - "$ip # дополнительная проверка - есть ли у IP доменное имя? a=$(dig -x ${ip} +short @1.1.1.1) if [ -z "$a" ]; then echo "FAILURE"; # нет у него записи A - реально спамер! /bin/echo "INSERT INTO spammers SET ip='${ip}', countip=${countip} ON DUPLICATE KEY UPDATE countip=countip + ${countip}" | /usr/bin/mysql --user=${USERNAME} --host=${HOST} --database=${DATABASE} fi done < spammers2.log exit 0
Теперь у нас в БД есть IP адреса, которых у меня уже накопилось ~400 000 штук, количество попыток и мы можем средствами БД сортировать моральных уродов от особо рьяных до вялотекущих. Но база данных нам нужна не только, чтобы лицезреть спам-машины, но и заносить их из БД в чёрный список (всё-таки есть список!) специализированного, аппаратного файрвола Cisco ASA под названием shun. В этом shun находятся все атакующие хосты, которые сочла своим долгом занести туда автоматически Cisco ASA. По словам нашего сетевого администратора по умолчанию все хосты из shun автоматически удаляются ею через 40 дней, что для меня вполне достаточно.
Я не знаю программный интерфейс для общения с устройствами Cisco ASA. Если вы в курсе как программно общаться с такими железяками, то отпишитесь в комментариях. Поэтому мужайтесь! Ещё один, последний скрипт sql2shun.sh, который использует expect для имитации действий человека и автоматизации команд в терминале.
#!/bin/bash
# заносим спамеров из бд в shun cisco asa
# vasilisc.com
USERNAME="user"
PASSWORD="password2bd"
HOST="127.0.0.1"
DATABASE="postfix"
# применяем голову-шаблон
/bin/cp -f shun_ip_template.sh shun_ip.sh
# берём из базы спаммеров
for IPSPAMMER in `/usr/bin/mysql --user=${USERNAME} --host=${HOST} --password=${PASSWORD} --database=${DATABASE} --skip-column-names --silent --execute 'SELECT ip FROM spammers WHERE countip>50 ORDER BY countip DESC LIMIT 20'`
do
echo "expect -re \"#\"" >> shun_ip.sh
echo "send \"shun ${IPSPAMMER}\r\"" >> shun_ip.sh
/usr/bin/mysql --user=${USERNAME} --host=${HOST} --password=${PASSWORD} --database=${DATABASE} --skip-column-names --silent --execute "UPDATE spammers SET countip=0 WHERE ip='${IPSPAMMER}'"
done
echo "expect -re \"#\"" >> shun_ip.sh
echo "send \"exit\r\"" >> shun_ip.sh
echo "expect -re \"#\"" >> shun_ip.sh
echo "send \"exit\r\"" >> shun_ip.sh
/usr/bin/expect shun_ip.sh
exit 0
Что делает скрипт?:
#!/usr/bin/expect -f
set timeout 60
set env(TERM)
spawn ssh -c des -1 user_access_ciscoasa@IP-address-cisco-asa
expect assword {send Password2CiscoASA\r}
expect -re ">"
send "enable\r"
expect assword {send Password2CiscoASA\r}
expect -re "#"
send "configure terminal\r"
А в конце хочется заметить, что вначале статьи я писал, что не возлагаю на списки основную роль в борьбе со спамом. Основная нагрузка ложится на правила Postfix, которые проверяют во время почтовой сессии множество параметров на соответствие требованиям RFC SMTP протокола. И всё-таки в конце статьи появляется список, который обрывает для спамеров всякую надежду на соединение с моим почтовым сервером, по крайней мере на 40 дней. Есть ли тут противоречие? Нет! Админы, которые делают упор на списки, используют DNSBL и возлагают надежды на контентную фильтрацию типа SpamAssassin. Я использую SpamAssassin и Clamav для проверки спама и вирусов, но они (проверки) идут самыми последними после правил Postfix, SPF и PostGrey. И в этом тонкая, но важная грань!
UPD от 17.07.2015
С октября 2014 года, после введения данной схемы в БД оказалось 566048 различных IP адресов, с которых были произведены массовые отправки спам-писем. В течение времени, в shun побывало 30508 IP адресов на срок 40 дней.
Утилита pflogsumm выдаёт примерные результаты за 1 неделю:
Grand Totals ------------ messages 16365 received 27945 delivered 1 forwarded 32 deferred (435 deferrals) 97 bounced 33293 rejected (54%)
UPD 16.11.2020
В таблице записей 2149244. Схема за многие годы показала себя эффективной и дала моральное удовлетворение. Спамеры автоматом лезут к почтовому серверу и автоматом получают люлей уже от аппаратного файрвола CiscoASA. Легче становится почтовику и серверу антиспама с антивирусом.
UPD 26.12.2023
UserGate стал системой, выводящей всех и вся в Интернет. Помимо Postfix, ещё и Kaspersky Linux Mail Server стал подготавливать списки кто пытается отправить вирус, сделать фишинговую атаку и т.д. UserGate умеет забирать списки по http для конкретных правил, чем я и воспользовался.
Связанные материалы:
Оптимизация виртуальных серверов.
Инструмент Cisco ASDM с Ubuntu.
Сотрудничество Cisco и Canonical.
Файрвол iptables и его 21 пример использования.
Главная
Новости
Ворох бумаг
Видео Linux
Игры в Linux
Безопасность
Статьи об Astra Linux
Статьи о FreeBSD
Статьи об Ubuntu
Статьи о Snappy
Статьи об Ubuntu Phone
Статьи о Kubuntu
Статьи о Xubuntu
Статьи о Lubuntu
Статьи об Open Source
Карта сайта
1С под Linux. Ускорение Ubuntu. 21 пример iptables. Цикл статей о Ceph. Убунту в дикой среде. Ubuntu Linux на SSD. Ubuntu для блондинок. Поддержка железа в Linux. BTSync на службе у админа. Андроид программы в Ubuntu. Прокидывание портов для p2p. Анти СПАМ в Postfix. Инсталл ЛТД - пигтейл sc недорого.