SpamSnake · 14 min read · Dec 25, 2025

Идеальный SpamSnake - Ubuntu Jeos 10.10 Maverick Meerkat - Страница 4

14. KAM

vi /etc/cron.daily/kam.sh

Добавьте следующее содержимое и

chmod +x /etc/cron.daily/kam.sh
#!/bin/bash
   
 # Оригинальная версия, измененная Эндрю МаКлахланом ([email protected])
 # Добавлены дополнительные перезапуски MailScanner при первоначальной ошибке перезапуска
 # Сделал скрипт тихим для нормальной (успешной) работы
 # Увеличил UPDATEMAXDELAY до 900 с 600
 
 # Вставьте случайную задержку до этого значения, чтобы распределить обновления вирусов по
 # всему времени. 1800 секунд = 30 минут.
 # Установите это значение в 0, чтобы отключить его.
 UPDATEMAXDELAY=0
 if [ -f /opt/MailScanner/var/MailScanner ] ; then
 . /opt/MailScanner/var/MailScanner
 fi
 export UPDATEMAXDELAY
 
 if [ "x$UPDATEMAXDELAY" = "x0" ]; then
 :
 else
 logger -p mail.info -t KAM.cf.sh Задержка задания cron до $UPDATEMAXDELAY секунд
 perl -e "sleep int(rand($UPDATEMAXDELAY));"
 fi
 
 # JKF Получение KAM.cf
 #echo Получение KAM.cf...
 cd /etc/mail/spamassassin
 rm -f KAM.cf
 wget -O KAM.cf http://www.peregrinehw.com/downloads/SpamAssassin/contrib/KAM.cf > /dev/null 2>&1
 if [ "$?" = "0" ]; then
 #echo Это завершилось и что-то было получено
 if ( tail -10 KAM.cf | grep -q '^#.*EOF' ); then
 # echo Это успешно, поэтому сделайте резервную копию
 cp -f KAM.cf KAM.cf.backup
 else
 echo ОШИБКА: Не удалось найти маркер EOF
 cp -f KAM.cf.backup KAM.cf
 fi
 else
 echo Не удалось завершить корректно
 cp -f KAM.cf.backup KAM.cf
 fi
 #echo Перезагрузка конфигурационных правил MailScanner и SpamAssassin
 /etc/init.d/mailscanner reload > /dev/null 2>&1
 if [ $? != 0 ] ; then
 echo "Перезагрузка MailScanner не удалась - Повторная попытка..."
 /etc/init.d/mailscanner force-reload
 if [ $? = 0 ] ; then
 echo "Перезагрузка MailScanner удалась."
 else
 echo "Остановка MailScanner..."
 /etc/init.d/mailscanner stop
 echo "Ожидание минуты..."
 perl -e "sleep 60;"
 echo "Попытка запустить MailScanner..."
 /etc/init.d/mailscanner start
 fi
 
 fi 

15. ScamNailer

vi /usr/sbin/update_scamnailer

и

chmod +x /usr/sbin/update_scamnailer

Примечание: *Содержимое находится в scamnailer.doc.)

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

@daily /usr/sbin/update_scamnailer &> /dev/null #Обновить Scamnailer

16. Защита SpamSnake с помощью Firehol

Введение

Firehol - это конфигуратор фильтрации пакетов iptables с состоянием. Он абстрактен, расширяем, прост и мощен. Он может обрабатывать любые виды брандмауэра, но, что наиболее важно, он дает вам средства для его настройки так, как вы о нем думаете.

Установка Firehol

apt-get install firehol

Настройки Firehol:

vi /etc/default/firehol

и измените следующее:

START_FIREHOL=YES
vi /etc/firehol/firehol.conf

и добавьте следующее:

version 5
   # Принимать весь клиентский трафик на любом интерфейсе
   interface any internet
   protection strong
   server "icmp ping ICMP ssh http https telnet webmin dns dcc echo smtp" accept
 client all accept

Это фильтрует все входящие соединения, которые не связаны с вышеупомянутыми службами. Если вы хотите быть менее вежливыми, вы можете сбрасывать их, добавив следующее после ‘protection strong’: policy drop

vi /usr/sbin/get-iana

с следующим и

chmod +x /usr/sbin/get-iana
#!/bin/bash
 # $Id: get-iana.sh,v 1.13 2010/09/12 13:55:00 jcb Exp $
   #
 # $Log: get-iana.sh,v $
 # Revision 1.13 2010/09/12 13:55:00 jcb
 # Обновлено для последнего формата резервирования IANA.
 #
 # Revision 1.12 2008/03/17 22:08:43 ktsaou
 # Обновлено для последнего формата резервирования IANA.
 #
 # Revision 1.11 2007/06/13 14:40:04 ktsaou
 # * пустое сообщение журнала *
 #
 # Revision 1.10 2007/05/05 23:38:31 ktsaou
 # Добавлена поддержка внешних определений:
 #
 # RESERVED_IPS
 # PRIVATE_IPS
 # MULTICAST_IPS
 # UNROUTABLE_IPS
 #
 # в файлах с тем же именем в /etc/firehol/.
 # Только RESERVED_IPS является обязательным (firehol будет жаловаться, если его нет,
 # но он все равно будет работать без него), и это также единственный файл, который firehol
 # проверяет, насколько он стар. Если ему больше 90 дней, firehol снова будет жаловаться.
 #
 # Изменен предоставленный скрипт get-iana.sh для генерации файла RESERVED_IPS.
 # FireHOL также инструктирует пользователя использовать этот скрипт, если файл отсутствует
 # или слишком стар.
 #
 # Revision 1.9 2007/04/29 19:34:11 ktsaou
 # * пустое сообщение журнала *
 #
 # Revision 1.8 2005/06/02 15:48:52 ktsaou
 # Разрешено 127.0.0.1 быть в RESERVED_IPS
 #
 # Revision 1.7 2005/05/08 23:27:23 ktsaou
 # Обновлено RESERVED_IPS до текущих резервирований IANA.
 #
 # Revision 1.6 2004/01/10 18:44:39 ktsaou
 # Дальнейшая оптимизация и уменьшение PRIVATE_IPS с использованием:
 # http://www.vergenet.net/linux/aggregate/
 #
 # Предоставленный get-iana.sh использует .aggregate. если он находит его в пути.
 # (aggregate - это название этой программы, когда она установлена на Gentoo)
 #
 # Revision 1.5 2003/08/23 23:26:50 ktsaou
 # Ошибка #793889:
 # Изменить #!/bin/sh на #!/bin/bash, чтобы позволить FireHOL работать на системах, где
 # bash не связан с /bin/sh.
 #
 # Revision 1.4 2002/10/27 12:44:42 ktsaou
 # Тест CVS
 #
 #
 # Программа, которая загружает распределение адресного пространства IPv4 от IANA
 # и создает список всех зарезервированных адресных пространств.
 #
 IPV4_ADDRESS_SPACE_URL="http://www.iana.org/assignments/ipv4-address-space/ipv4-address-space.txt"
 # Программа будет сопоставлять все строки в файле, которые начинаются с числа, имеют слэш,
 # за которым следует другое число, для которых также будет соответствовать следующий шаблон на
 # тех же строках
 IANA_RESERVED="(RESERVED|UNALLOCATED)"
 # какие строки, которые соответствуют вышеуказанному, игнорировать
 # (т.е. не включать их в RESERVED_IPS)?
 #IANA_IGNORE="(Multicast|Private use|Loopback|Local  Identification)"
 IANA_IGNORE="Multicast"
 tempfile="/tmp/iana.$$.$RANDOM"
 AGGREGATE="`which aggregate 2>/dev/null`"
   if [ -z "${AGGREGATE}" ]
   then
   AGGREGATE="`which aggregate 2>/dev/null`"
   fi
 if [ -z "${AGGREGATE}" ]
   then
   echo >&2
   echo >&2
   echo >&2 "ПРЕДУПРЕЖДЕНИЕ"
   echo >&2 "Пожалуйста, установите 'aggregate', чтобы уменьшить список IP.
"
   echo >&2
   echo >&2
   fi
 echo >&2
   echo >&2 "Получение IANA IPv4 адресного пространства, из:"
   echo >&2 "${IPV4_ADDRESS_SPACE_URL}"
   echo >&2
 wget -O - -proxy=off "${IPV4_ADDRESS_SPACE_URL}" |\
   egrep " *[0-9]+/[0-9]+.*${IANA_RESERVED}" |\
   egrep -vi "${IANA_IGNORE}" |\
   sed -e 's:^ *\([0-9]*/[0-9]*\).*:\1:' |\
   (
 while IFS="/" read range net
   do
   if [ ! $net -eq 8 ]
   then
   echo >&2 "Не могу обрабатывать сетевые маски из $net бит  ($range/$net)"
   continue
   fi
 first=`echo $range | cut -d '-' -f 1`
   first=`expr $first + 0`
   last=`echo $range | cut -d '-' -f 2`
   last=`expr $last + 0`
 x=$first
   while [ ! $x -gt $last ]
   do
   # test $x -ne 127 && echo "$x.0.0.0/$net"
   echo "$x.0.0.0/$net"
   x=$[x + 1]
   done
   done
   ) | \
   (
   if [ ! -z "${AGGREGATE}" -a -x "${AGGREGATE}" ]
   then
   "${AGGREGATE}"
   else
   cat
   fi
   ) >"${tempfile}"
 echo >&2
   echo >&2
   echo >&2 "НАЙДЕНЫ СЛЕДУЮЩИЕ ЗАРЕЗЕРВИРОВАННЫЕ IP ДИАПАЗОНЫ:"
   printf "RESERVED_IPS=\""
   i=0
   for x in `cat ${tempfile}`
   do
   i=$[i + 1]
   printf "${x} "
   done
   printf "\"\n"
 if [ $i -eq 0 ]
   then
   echo >&2
   echo >&2
   echo >&2 "Не удалось найти зарезервированные IP.
"
   echo >&2 "Возможно, формат файла изменился, или я не могу получить URL.
"
   echo >&2
 rm -f ${tempfile}
   exit 1
   fi
   echo >&2
   echo >&2
   echo >&2 "Различия между полученным списком и списком, установленным в"
   echo >&2 "/etc/firehol/RESERVED_IPS:"
 echo >&2 "# diff /etc/firehol/RESERVED_IPS  ${tempfile}"
   diff /etc/firehol/RESERVED_IPS ${tempfile}
 if [ $? -eq 0 ]
   then
   echo >&2
   echo >&2 "Различий не найдено."
   echo >&2
 rm -f ${tempfile}
   exit 0
   fi
 echo >&2
   echo >&2
   echo >&2 "Хотите сохранить этот список в  /etc/firehol/RESERVED_IPS"
   echo >&2 "чтобы FireHOL автоматически использовал его с этого момента?"
   echo >&2
   while [ 1 = 1 ]
   do
   printf >&2 "да или нет > "
   read x
 case "${x}" in
   yes) cp -f /etc/firehol/RESERVED_IPS /etc/firehol/RESERVED_IPS.old  2>/dev/null
   cat "${tempfile}" >/etc/firehol/RESERVED_IPS || exit 1
   echo >&2 "Новые RESERVED_IPS записаны в  '/etc/firehol/RESERVED_IPS'."
   echo "Firehol теперь будет перезапущен"
   sleep 3
   /etc/init.d/firehol restart
   break
   ;;
 no)
   echo >&2 "Ничего не сохранено."
   break
   ;;
 *) echo >&2 "Не могу понять '${x}'."
   ;;
 esac
   done
 rm -f ${tempfile}
vi /usr/sbin/update-iana

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

chmod +x /usr/sbin/update-iana
#!/bin/sh
 /usr/sbin/get-iana  < /etc/firehol/get-iana-answerfile
vi /etc/firehol/get-iana-answerfile

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

yes

Запустите скрипт для обновления RESERVED_IPS:

/usr/sbin/update-iana

Теперь ваш сервер настроен на прием только соединений для разрешенных вами служб.

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

@monthly /usr/sbin/update-iana &> /dev/null #Обновить зарезервированные ips firehol

17. Применить получателей реле

Следующие инструкции предназначены для людей, использующих Microsoft Exchange 2000 или Microsoft Exchange 2003.

Эта страница описывает, как настроить ваш почтовый шлюз для периодического получения списка действительных адресов электронной почты получателей из вашей системы Exchange. Делая это, вы можете настроить свой сервер на автоматическое отклонение любых писем, адресованных недействительным адресам. Это уменьшит нагрузку на ваш сервер обмена, так как ему больше не нужно обрабатывать отчеты о недоставке, и это уменьшит нагрузку на ваш сервер postfix, так как ему не придется выполнять сканирование спама и вирусов на сообщении.

Установить зависимости

Установите модуль perl Net::LDAP:

perl -MCPAN -e shell  
install Net::LDAP
vi /usr/bin/getadsmtp.pl

с следующим:

#!/usr/bin/perl -T -w
   # Этот скрипт будет извлекать все SMTP-адреса пользователей из вашего Active Directory
   # (включая основные и вторичные адреса электронной почты) и перечислять их в
   # формате "[email protected] OK", который Postfix использует с relay_recipient_maps.
   # Обязательно дважды проверьте путь к perl выше.
   # Это требует установки Net::LDAP.  Чтобы установить Net::LDAP, в оболочке
   # введите "perl -MCPAN -e shell" и затем "install Net::LDAP"
   use Net::LDAP;
   use Net::LDAP::Control::Paged;
   use Net::LDAP::Constant ( "LDAP_CONTROL_PAGED" );
   # Введите путь/файл для вывода
   $VALID = "/etc/postfix/relay_recipients";
   open VALID, ">$VALID" or die "НЕ УДАЛОСЬ ОТКРЫТЬ $VALID $!";
   # Введите FQDN ваших контроллеров домена Active Directory ниже
   $dc1="domaincontroller1.example.com";
   $dc2="domaincontroller2.example.com";
   # Введите контейнер LDAP для вашей базы пользователей.
   # Синтаксис - CN=Users,dc=example,dc=com
   # Это можно найти, установив инструменты поддержки Windows 2000
   # затем запустив ADSI Edit.
   # В ADSI Edit разверните "Domain NC [domaincontroller1.example.com]" &
   # и вы увидите, например, DC=example,DC=com (это ваша база).
   # Контейнер пользователей будет указан в правой панели как
   # CN=Users в зависимости от вашей схемы (это ваш контейнер).
   # Вы можете дважды проверить это, щелкнув "Свойства" вашей папки пользователя
   # в ADSI Edit и изучив значение "Путь", например:
   # LDAP://domaincontroller1.example.com/CN=Users,DC=example,DC=com
   # что будет $hqbase="cn=Users,dc=example,dc=com"
   # Примечание:  Вы также можете использовать только $hqbase="dc=example,dc=com"
   $hqbase="cn=Users,dc=example,dc=com";
   # Введите имя пользователя и пароль для действительного пользователя в вашем Active Directory
   # с именем пользователя в форме cn=username,cn=Users,dc=example,dc=com
   # Убедитесь, что пароль пользователя не истекает.  Обратите внимание, что этому пользователю
   # не требуются специальные привилегии.
   # Вы можете дважды проверить это, щелкнув "Свойства" вашего пользователя в
   # ADSI Edit и изучив значение "Путь", например:
   # LDAP://domaincontroller1.example.com/CN=user,CN=Users,DC=example,DC=com
   # что будет $user="cn=user,cn=Users,dc=example,dc=com"
   # Примечание: Вы также можете использовать UPN вход: "user\@example.com"
   $user="cn=user,cn=Users,dc=example,dc=com";
   $passwd="password";
   # Подключение к контроллерам домена Active Directory
   $noldapserver=0;
   $ldap = Net::LDAP->new($dc1) or
   $noldapserver=1;
   if ($noldapserver == 1)  {
   $ldap = Net::LDAP->new($dc2) or
   die "Ошибка подключения к указанным контроллерам домена $@ \n";
   }
   $mesg = $ldap->bind ( dn => $user,
   password =>$passwd);
   if ( $mesg->code()) {
   die ("ошибка:", $mesg->error_text((),"\n"));
   }
   # Сколько результатов LDAP-запроса получить для каждого пакетного раунда
   # Установите менее 1000 для Active Directory
   $page = Net::LDAP::Control::Paged->new( size => 990 );
   @args = ( base     => $hqbase,
   # Играйте с этим, чтобы получить объекты, такие как Контакты, Публичные Папки и т.д.
   # Минимальный фильтр для пользователей с электронной почтой будет:
   # filter => "(&(sAMAccountName=*)(mail=*)))"
   filter => "(& (mailnickname=*) (| (&(objectCategory=person)
   (objectClass=user)(!(homeMDB=*))(!(msExchHomeServerName=*)))
   (&(objectCategory=person)(objectClass=user)(|(homeMDB=*)
   (msExchHomeServerName=*)))(&(objectCategory=person)(objectClass=contact))
   (objectCategory=group)(objectCategory=publicFolder) ))",
   control  => [ $page ],
   attrs  => "proxyAddresses",
   );
   my $cookie;
   while(1) {
   # Выполнить поиск
   my $mesg = $ldap->search( @args );
   # Фильтрация результатов для атрибутов proxyAddresses
   foreach my $entry ( $mesg->entries ) {
   my $name = $entry->get_value( "cn" );
   # Атрибуты LDAP имеют несколько значений, поэтому нам нужно напечатать каждое из них.
   foreach my $mail ( $entry->get_value( "proxyAddresses" ) ) {
   # Проверьте, начинается ли строка с одной из следующих строк:
   # proxyAddresses: [smtp|SMTP]:
   # и также отбросьте эту начальную строку, чтобы $mail был только
   # адресом без каких-либо других символов...
   if ( $mail =~ s/^(smtp|SMTP)://gs ) {
   print VALID $mail." OK\n";
   }
   }
   }
   # Продолжайте только при LDAP_SUCCESS
   $mesg->code and last;
   # Получите печенье из пакетного управления
   my($resp)  = $mesg->control( LDAP_CONTROL_PAGED ) or last;
   $cookie    = $resp->cookie or last;
   # Установите печенье в пакетном управлении
   $page->cookie($cookie);
   }
   if ($cookie) {
   # У нас был ненормальный выход, поэтому дайте серверу знать, что мы не хотим больше
   $page->cookie($cookie);
   $page->size(0);
   $ldap->search( @args );
   # Также было бы неплохо умереть несчастливо и проинформировать OP в этот момент
   die("LDAP-запрос не удался");
   }
   # Добавьте дополнительные ограничения, пользователей и т.д. в выходной файл ниже.
   #print VALID "user\@domain1.com OK\n";
   #print VALID "user\@domain2.com 550 Пользователь неизвестен.\n";
   #print VALID "domain3.com 550 Пользователь не существует.\n";
   close VALID;

Теперь установите разрешения на файл, чтобы разрешить его выполнение:

chmod +x /usr/bin/getadsmtp.pl

Отредактируйте файл, чтобы настроить его для вашего конкретного домена. Поскольку файл доступен только для чтения, вам нужно будет использовать :w! для сохранения файла в vi.

  1. Установите $dc1 и $dc2 на полностью квалифицированные доменные имена или IP-адреса 2 ваших контроллеров домена.
  2. Установите $hqbase равным LDAP-пути к контейнеру или организационной единице, которая содержит учетные записи электронной почты, для которых вы хотите получить адреса электронной почты.
  3. Установите $user и $passwd, чтобы указать, какая учетная запись пользователя должна использоваться для доступа к этой информации. Эта учетная запись должна быть только членом домена, поэтому было бы неплохо настроить учетную запись специально для этого.

Попробуйте запустить скрипт. Если он работает правильно, он создаст /etc/postfix/relay_recipients.

Обратите внимание, что если ваш сервер postfix отделен от контроллеров активного каталога брандмауэром, вам нужно будет открыть TCP-порт 389 от сервера postfix к ADC.

getadsmtp.pl

На этом этапе вы можете отредактировать /etc/postfix/relay_recipients и удалить любые нежелательные адреса электронной почты, так как этот скрипт импортирует все.

Постмап файла для создания хэш db

postmap /etc/postfix/relay_recipients  
postfix reload

Наконец, вы можете настроить задание cron для периодического обновления и создания файла /etc/postfix/relay_recipients.db. Вы можете настроить скрипт под названием /usr/bin/update-relay-recipients.sh: (Необязательно)

vi /usr/bin/update-relay-recipients.sh

с следующим и

chmod +x /usr/bin/update-relay_recipients.sh
#!/bin/sh
/usr/bin/getadsmtp.pl
postmap /etc/postfix/relay_recipients
postfix reload

Не забудьте убедиться, что следующее есть в вашем файле /etc/postfix/main.cf:

relay_recipient_maps = hash:/etc/postfix/relay_recipients

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

30 2 * * * /usr/bin/update-relay-recipients.sh #синхронизировать relay_recipients с адресами Active Directory

:Обратите внимание, что эта задача cron будет выполняться каждый день в 2:30 утра для обновления файла базы данных. Вы можете захотеть запустить свою более часто или нет, в зависимости от того, как часто вы добавляете новых пользователей электронной почты в свою систему.

18. Установите Webmin (необязательно):

apt-get install perl libnet-ssleay-perl libauthen-pam-perl libio-pty-perl apt-show-versions  
cd /tmp && wget http://mirrors.kernel.org/ubuntu/pool/universe/libm/libmd5-perl/libmd5-perl_2.03-1_all.deb  
dpkg -i libmd5-perl_2.03-1_all.deb  
wget http://downloads.sourceforge.net/project/webadmin/webmin/1.520/webmin_1.520_all.deb  
dpkg --install webmin_1.520_all.deb

19. Автоматически добавлять отказ от ответственности к исходящим электронным письмам с помощью alterMIME (необязательно)

Этот учебник показывает, как установить и использовать alterMIME. alterMIME - это инструмент, который может автоматически добавлять отказ от ответственности к электронным письмам. В этой статье я объясню, как установить его в качестве фильтра Postfix на Ubuntu.

Установка alterMIME:

apt-get install altermime

Затем мы создаем фильтр пользователя с домашним каталогом /var/spool/filter - alterMIME будет запущен от имени этого пользователя:

useradd -r -c "Postfix Filters" -d /var/spool/filter filter  
mkdir /var/spool/filter  
chown filter:filter /var/spool/filter  
chmod 750 /var/spool/filter

После этого мы создаем скрипт /etc/postfix/disclaimer, который выполняет alterMIME. Пакет alterMIME для Ubuntu поставляется с образцом скрипта, который мы можем просто скопировать в /etc/postfix/disclaimer:

cp /usr/share/doc/altermime/examples/postfix_filter.sh /etc/postfix/disclaimer  
chgrp filter /etc/postfix/disclaimer  
chmod 750 /etc/postfix/disclaimer

Теперь проблема с этим скриптом заключается в том, что он не различает входящие и исходящие электронные письма - он просто добавляет отказ от ответственности ко всем письмам. Обычно вы хотите, чтобы отказы от ответственности были только для исходящих электронных писем, и даже тогда не для всех адресов отправителей. Поэтому я немного изменил скрипт /etc/postfix/disclaimer - мы к этому вернемся через минуту.

Прямо сейчас мы создаем файл /etc/postfix/disclaimer_addresses, который содержит все адреса электронной почты отправителей (по одному на строку), для которых alterMIME должен добавить отказ от ответственности:

vi /etc/postfix/disclaimer_addresses
[email protected]
[email protected]
[email protected]

Теперь мы открываем /etc/postfix/disclaimer и изменяем его следующим образом (я отметил части, которые я изменил):

vi /etc/postfix/disclaimer
#!/bin/sh
# Локализуйте это.
INSPECT_DIR=/var/spool/filter
SENDMAIL=/usr/sbin/sendmail
####### Изменено из оригинального скрипта #######
DISCLAIMER_ADDRESSES=/etc/postfix/disclaimer_addresses
####### Изменено из оригинального скрипта КОНЕЦ #######
# Код выхода из 
EX_TEMPFAIL=75
EX_UNAVAILABLE=69
# Очистка по завершении или при прерывании.
trap "rm -f in.$$" 0 1 2 3 15
# Начать обработку.
cd $INSPECT_DIR || { echo $INSPECT_DIR не существует; exit
$EX_TEMPFAIL; }
cat >in.$$ || { echo Не удается сохранить почту в файл; exit $EX_TEMPFAIL; }
####### Изменено из оригинального скрипта #######
# получить адрес от
from_address=`grep -m 1 "From:" in.$$ | cut -d "<" -f 2 | cut -d ">" -f 1`
if [ `grep -wi ^${from_address}$ ${DISCLAIMER_ADDRESSES}` ]; then
  /usr/bin/altermime --input=in.$$ \
                   --disclaimer=/etc/postfix/disclaimer.txt \
                   --disclaimer-html=/etc/postfix/disclaimer.txt \
                   --xheader="X-Copyrighted-Material: Пожалуйста, посетите http://www.company.com/privacy.htm" || \
                    { echo Содержимое сообщения отклонено; exit $EX_UNAVAILABLE; }
fi
####### Изменено из оригинального скрипта КОНЕЦ #######
$SENDMAIL "$@" 

Затем нам нужен текстовый файл /etc/postfix/disclaimer.txt, который содержит текст нашего отказа от ответственности. Пакет alterMIME для Ubuntu поставляется с образцом текста, который мы можем использовать на данный момент (конечно, вы можете изменить его, если хотите):

cp /usr/share/doc/altermime/examples/disclaimer.txt /etc/postfix/disclaimer.txt

Наконец, мы должны сказать Postfix, что он должен использовать скрипт /etc/postfix/disclaimer для добавления отказов от ответственности к исходящим электронным письмам. Откройте /etc/postfix/master.cf и добавьте -o content_filter=dfilt: к строке smtp:

vi /etc/postfix/master.cf
#
# Конфигурационный файл процесса master Postfix.  Для получения подробной информации о формате
# файла смотрите страницу руководства master(5) (команда: "man 5 master").
#
# ========================================================================== 
# тип службы  частный непривилегированный  chroot  пробуждение  maxproc команда + аргументы
#               (да)   (да)   (да)   (никогда) (100)
# ========================================================================== 
smtp      inet  n       -       -       -       -       smtpd
   -o content_filter=dfilt:
[...] 

В конце того же файла добавьте следующие две строки:

[...] 
dfilt     unix    -       n       n       -       -       pipe
    flags=Rq user=filter argv=/etc/postfix/disclaimer -f ${sender} -- ${recipient} 

Перезапустите Postfix после этого:

/etc/init.d/postfix restart

Вот и все! Теперь отказ от ответственности должен добавляться к исходящим электронным письмам, отправленным с адресов, перечисленных в /etc/postfix/disclaimer_addresses.

20. Скриншоты

Поздравляем

Теперь у вас должен быть полностью работающий SpamSnake со всеми удобствами :-)

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.