CGP - Создаем почтовую систему

Table of Contents 

1. ЗАДАЧА

Создать полнофункциональную почтовую систему на 1000-1500 человек с защитой от вирусов, спама и нежелательного контента, с возможностью обучения фильтра пользователями.

Описываемая система работает на базе операционной системы SLES10 SP2 (ppc64) [1]< в логическом разделе LPAR [2]< на сервере IBM pSeries [3]<. Используется 32х-битная ppc-сборка CommuniGate 5.3

2. ЛИЦЕНЗИРОВАНИЕ

Описание политики лицензирования CommuniGate Pro и сопутствующего ПО<

3. УСТАНОВКА

Для начала следует удалить текущий почтовый пакет из системы. В SUSE это делается через YaST, удаляемый пакет: postfix

3.1. Communigate Pro

Следует помнить, что диск восстановления SUSE без вопросов меняет коммунигейтовский внутренний sendmail, после чего перестают уходить во внешний мир письма из локальной очереди.

Последнюю версию communigate под различные аппаратные платформы можно взять на сайте производителя по адресу: ftp://ftp.stalker.com/pub/CommuniGatePro/<

Установка из rpm-пакета:

cd /usr/local/src
 wget ftp://ftp.stalker.com/Pub/CommuniGatePro/CGatePro-Linux.ppc.rpm
 rpm -Uvh CGatePro-Linux.ppc.rpm
<

3.1.1. StartUp-скрипт

Startup скрипт Communigate Pro при установке в SUSE с VLAN's требует некоторой доработки. Открываем /etc/init.d/CommuniGate и находим строчку:

Required-Start:
<

Меняем ее на:

Required-Start: network $named
<

Выполняем в консоли:

insserv -r CommuniGate
insserv CommuniGate
<

Все! Теперь при перезагрузках системы Communigate будет подхватывать ip-адреса VLAN's

Добавление suse-like стиля rc к стартовому скрипту comunigate

ln -s /etc/init.d/CommuniGate /usr/sbin/rcCommuniGate
<

3.1.2. CLI.pm

Скачиваем perl-библиотеку CLI.pm [4]< с сайта http://www.stalker.com/CGPerl/CLI.pm< в директорию /usr/local/lib и делаем символическую ссылку в /usr/lib/perl5/{version}

Следует помнить, что при обновлении communigate следует вручную скачать новую версию библиотеки!

3.2. ClamAV

К сожалению (или счастью) авторам неизвестны коммерческие антивирусы, работающие на платформе POWER5 (ppc64)

RPM-пакет для SUSE можно взять по адресу: http://download.opensuse.org/repositories/security/< (Бинарный пакет для архитектуры PPC в репозитории отсутствует, зато .src.rpm прекрасно компилируется):

rm /usr/src/packages/RPMS/ppc/clamav*
cd /usr/local/src
wget ".../clamav-0.96.2-29.1.src.rpm"
rpmbuild --nodeps --rebuild --target=ppc clamav-0.96.1-28.1.src.rpm
rpm -Uvh /usr/src/packages/RPMS/ppc64/clamav*
<

Запуск демона при старте системы:

cd /etc/init.d
insserv clamd
<

Установка ежечасных автоматических обновлений вирусных баз:

cd /etc/cron.hourly
ln -s `which freshclam` clamav-update
<

3.3. SpamAssassin

Установка через CPAN:

perl -MCPAN -e shell
 install Mail::SpamAssassin
<

Дополнительно мы установили следующие модули:

HTML::Parser
Mail::SPF
IP::Country
Net::Ident
IO::Socket::INET6
IO::Socket::SSL
Mail::DKIM
LWP::UserAgent
HTTP::Date
IO::Zlib
Encode::Detect
<

Запуск демона при старте системы:

cd /etc/init.d
 insserv spamd
<

Настройка автообновлений правил идентификации спама из репозитория spamassassin:

/etc/cron.hourly/sa-update

sa-update && rcspamd restart
<

3.4. Фильтр для совместной работы cgp+clamav+spamassasin

Внешний фильтр cgpav для Communigate: http://program.farit.ru/doc/cgpav-rus.html<

Бесплатный Clamav, Kaspersky Anti-Virus (AVP), Sophos Anti-Virus, Trend Micro, Dr.Web и SpamAssassin внешний фильтр (плагин) для почтового сервера CommuniGate Pro. Используется для сканирования всех сообщений, которые проходят через почтовый сервер CommuniGate Pro www.stalker.com

tar xvfz cgpavXXX.tar.gz
 cd cgpavXXX
 ./configure --with-antivirus=clamav --with-spamassassin=yes --with-cgpro_dir=/var/CommuniGate 
 make && make install
<

По-умолчанию программа установится в каталог /var/Communigate; конфигурационный файл - /var/Communigate/Settings/cgpav.conf

3.5. Тестовый (лабораторный) вирус eicar

Описание находится по адресу: http://www.eicar.org/anti_virus_test_file.htm<

Нам для работы необходим файл http://www.eicar.org/download/eicar.com< Именно с его помощью мы в дальнейшем будем тестировать нашу почтовую систему.

4. НАСТРОЙКА

4.1. Модификация конфигурационных файлов

/etc/clamd.conf

PidFile /var/lib/clamav/clamd.pid
 # Локальный сокет необходим для работы с cgpav
 LocalSocket /var/lib/clamav/clamd-socket
 # Пользователь от которого работает демон
 User vscan
 # Так же необходимо разрешить использование дополнительных
 # групп для того, чтобы демон имел необходимые права
 # доступа к сообщениям в спулере communigate
 AllowSupplementaryGroups yes
<

/etc/group

mail:x:12:vscan
<

Добавляет пользователя vscan дополнительно в группу mail, чтобы демон имел возможность работы с каталогами /var/Communigate

/var/CommuniGate/Settings/cgpav.conf

# Не уведомляем отправителя о вирусе
 sender_notification = false
 # ...а получателя уведомляем...
 recipients_notification = true
 # ... и администратора тоже
 postmaster_notification = true
 # оригинальные заголовки письма помогают выяснить
 # от кого на самом деле пришел вирус
 original_message_headers = true
 clamd_socket = /var/lib/clamav/clamd-socket
 enable_spamassassin = true
 spam_scan_local = false
 spam_action = addheaderall
 spam_header = X-Spam-Flag: Yes
 spam_level_header = true
 extra_spam_action = none
 spamassassin_socket_type = unix
 spamassassin_socket = /var/run/spam
<

/etc/sysconfig/spamd

SPAMD_ARGS="-d -c -a -L --socketpath=/var/run/spam
<

4.2. CommuniGate

Все глобальные настройки осуществляются в административном веб-интерфейсе системы (http-порт 8010 или https-порт 9010 на почтовом сервере). Используется "экспертный" режим.

Настройки конкретных доменов, заведение и удаление пользователей производятся доменными администраторами из интерфейса управления домена: http://mail.example.com:8010/DomainAdmin/domain.name/<

4.2.1. Изменение портов пользовательского web-интерфейса

По-умолчанию communigate предоставляет доступ к web-интерфейсу пользователя на портах 8100 и 9100. Изменим их на стандартные 80 и 443:

Установки -> Услуги -> HTTPU -> Приемник

Меняем 8100 на 80 и 9100 на 443

4.2.2. robots.txt / favicon.ico

Чтобы поисковые роботы не индексировали почтовую службу, создаем на локальной машине файл robots.txt [5]< следущего содержания:

User-Agent: *
Disallow: /
<

Помещаем его в CommuniGate:

Пользователи -> Интерфейсы -> Загрузить файл

Теперь на запросы поисковых роботов cgp будет отдавать /robots.txt во всех доменах.

favicon.ico можно при желании загрузить таким же образом.

4.2.3. Подключение фильтра cgpav

Установки -> Общее -> Помощники

В разделе Фильтрация Данных добавляем правило с именем cgpav и пишем в Путь к Программе: cgpav

Теперь необходимо перейти в раздел: Установки -> Почта -> Правила

Добавляем правило с приоритетом 4, называем его virus_scan и нажимаем Изменить. Собираем правило:

  • Данные - Размер письма
  • Операция - Больше чем
  • Параметр - 1024
  • Действие - Внешний фильтр
  • Параметр - cgpav

Нажимаем Модифицировать

При желании можно исключить из проверки письма, приходящие из доверенных источников, к примеру с рабочих ПК предприятия, защищенных корпоративным антивирусом. В таком случае правило для подключения cgpav будет выглядеть следующим образом:

  • Данные - Размер письма
  • Операция - Больше чем
  • Параметр - 1024
  • Данные - Источник
  • Операция - Не среди
  • Параметр - trusted,authenticated
  • Действие - Внешний фильтр
  • Параметр - cgpav

4.2.4. Запрещение использования определенных типов файлов

Всвязи с трудоемкостью ручного добавления большого количества однотипных фильтров, была использована следующая схема: фильтры были сгенерированы sh-скриптом по шаблону, а получившийся результат вставлен в конфигурационный файл /var/CommuniGate/Settings/Rules.settings

Правило использует заголовки письма, вставляемые дополнительным скриптом find-attachments.pl

Скрипт ~/bin/generate.sh для генерации правил:

#!/bin/bash

for i in ade adp bas cpl crt hlp inf ins isp lnk mdb mde msc msi msp mst pcd reg sct shs url\
 vb wsc bat chm cmd com exe hta jse pif scr shb vbe vbs vbx wsf wsh asd dllocx vxd 386 asp\
  asx bin cab cgi cil cpe cvp eml ex_ inp jar keyreg mda mdw mp3 nte nws pl pm pot pps slb\
  swf swt sys vir vmx wms wmz xlw xms htr app csh fxp ksh mdt ops prg sh dot adt btm cbt cla\
  clas class csc css drv email fon ini lib mht mhtm mhtml mso obj ov pgm smm xlw xl cbl

do

echo "  ("
echo "    5,"
echo "    kill_attachment_$i,"
echo "    ((\"Header Field\", in, \"X-AttachExt: $i\")),"
echo "    ("
echo "      ("
echo "        \"Reject with\","
echo "        \"Error: \\\".$i\\\" file attachment types not allowed\e\e\""
echo "      )"
echo "    )"
echo "  ),"
done

<

4.2.5. Создание сертификатов для защищенного ssl-соединения

По умолчанию Communigate использует тестовый метод ssl-авторизации. Для обеспечения нормальной работы ssl необходимо внести следующие правки: В административном интерфейсе Communigate выбираем следующую вкладку:

Пользователи -> Домены -> Домен -> Безопасность -> SSL/TLS

И в окне "Услуги PKI криптографии" меняем значение на "включено". Далее необходимо сгенерировать самоподписанный сертификат во внутреннем генераторе сертификатов.

Следует помнить, что имя-идентификатор сертификата должен соответствовать точному dns-имени сервера, на который заходят пользователи вашего домена.

4.2.6. Защита от DoS атак

Чтобы предотвратить появление ситуации типа "отказ в обслуживании", вызваные черезмерным количеством одновременно открытых tcp-сессий используются следующие параметры:

"Установки" -> "Почта" -> "SMTP" -> "Прием"

Устанавливаем параметр "Каналы" на значение 1000. Переходим по ссылке "Приемник" и устанавливаем параметры:

  • Ограничение на соединения с одного Адреса -> 100
  • Резерв соединений для Клиентов -> 300

4.2.7. Порт Submission (587)

Для клиентов, находящихся вне локальной сети предприятия, следуя RFC 2476< рекомендуется открыть порт 587 (Submission) [6]< [7]< на сервере и настроить почтовые клиенты на работу с SMTP с этим портом, вместо 25го, который все больше и больше провайдеров закрывают в своих сетях для борьбы со СПАМом.

Установки -> Почта -> SMTP -> Прием -> Приемник

  • Добавляем порт 587
  • Начальный SSL/TLS вкл.

4.2.8. Pronto!

В версии 5.3 в интерфейсе Pronto! появилась очень удобная кнопочка "Обратная связь", открывающая новое письмо с адресом получателя [email protected]. Логично заменить его на e-mail адрес своей техподдержки. Заходим в каталог /opt/CommuniGate/WebSkins/Pronto- (обратите внимание на "-" на конце) и выполняем следующую команду:

find ./ -type f -name "*.data"| xargs perl -pi -w -e 's/pronto-feedback\@communigate.com/support\@example.com/g;'
<

4.3. Локальные вспомогательные скрипты

Данные скрипты установлены в директории /usr/local/cgpro-scripts и имеют сиволические ссылки в /usr/local/bin Они помогут автоматизировать множество операций с почтовой системой.

  • spamassasin_spam_learner

Скрипт для автоматического обучения байесовского фильтра spamassassin со специальных аккаунтов learn-spam и learn-ham. Скрипт имеет символическую ссылку в /etc/cron.daily

#!/bin/bash

# Learn SPAM:
/usr/bin/sa-learn --showdots --mbox --spam /var/CommuniGate/Accounts/learn-spam.macnt/INBOX.mbox
/usr/bin/sa-learn --showdots --mbox --spam /var/CommuniGate/Accounts/learn-spam.macnt/SPAM.mbox

# Learn HAM:
/usr/bin/sa-learn --showdots --mbox --ham  /var/CommuniGate/Accounts/learn-ham.macnt/INBOX.mbox
/usr/bin/sa-learn --showdots --mbox --ham  /var/CommuniGate/Accounts/learn-ham.macnt/SPAM.mbox

# Rebuild bayes DB
sa-learn --sync --force-expire

# Kill all letters older than 1 day:
/usr/local/bin/oldmail_del.pl
<
  • oldmail_del.pl

Скрипт, используемый в связке с spamassasin_spam_learner, удаляет письма старше одного дня.

  • find-attachments.pl

Скрипт для поиска вложений в письмах и добавления специального заголовка, используется соввместно с фильтрами communigate

Подключение фильтра происходит следующим образом:

Установки -> Общее -> Помощники

В разделе Фильтрация Данных добавляем правило с именем Find_Attachments и пишем в Путь к Программе:"путь к инрерптитатору perl + путь к скрипту" (в нашем случае: /usr/bin/perl /usr/local/bin/find-attachments.pl)

Теперь необходимо перейти в раздел: Установки -> Почта -> Правила

Добавляем правило с приоритетом 6, называем его Find_Attachments и нажимаем Изменить. Собираем правило:

  • Данные - Размер письма
  • Операция - Больше чем
  • Параметр - 2048
  • Действие - Внешний фильтр
  • Параметр - Find_Attachments

Нажимаем Модифицировать

  • auto-delite-junk.pl

Скрипт для автоматического удаления писем из папки SPAM старше 14 дней

  • AddFilter.pl

Скрипт для автоматической настройки аккаунтов пользователей, добавляет каждому папку SPAM и правило, складывающее туда письма, помеченные spamassassin флагом X-Spam-Flag: Yes

4.4. Антиспамерские меры

4.4.1. CommuniGate

4.4.1.1. Задержка ответа сервера

Установки -> Почта -> SMTP -> Прием

В разделе ограничения: отложить ответ сервера на 7 сек.

Время задержки можно варьировать, однако мы не рекомендуем устанавливать задержку более, чем на 30 сек. несмотря на то, что по требованиям RFC задержка может составлять до 5 минут.

4.4.1.2. SPF проверка [8]< [9]<

Установки -> Почта -> SMTP -> Прием

Проверять SPF-записи: Включено

4.4.1.3. Ограничения

Установки -> Почта -> SMTP -> Прием

Отсоединить после: 15 ошибок и Заблокировать Доступ на: 60 мин.

4.4.1.4. Встречное соединение

Установки -> Почта -> SMTP -> Прием

Соединяться навстречу: Всегда

Так же возможно использования режима:

Соединяться навстречу: Добавлять поле

Режим "всегда" может привести к некорректной работе с серверами, использующими серые списки (greylisting) или внешние релеи для отправки почты. Добавляемые поля можно использовать при обработке spamassassin. Однако же при регулярном контроле лог-файлов режим "всегда" может быть использован, поскольку резко сокращает поток нежелательной корреспонденции.

Неиспользуемые (в настоящее время) значения полей:

X-Reverse-Check: Bad SMTP prompt at the host
<

Используемые значения полей:

X-Reverse-Check: address rejected with reverse-check
X-Reverse-Check: connection closed by peer
X-Reverse-Check: connection refused
X-Reverse-Check: no relay available
X-Reverse-Check: no response
X-Reverse-Check: read time-out
X-Reverse-Check: reverse check protocol error
<
4.4.1.5. Блокировки RFC Reader

Идем: Установки -> Почта -> RFCReader

Ставим правила, отклоняющие письма с pipe:

From: *<*|*@*>
From: *|*
Return-Path: *<|*@*>
Return-Path: *|*
<
4.4.1.6. Блокированные Сетевые Адреса

Установки -> Сеть -> Блокировки

; непонятный sip-спаммер
92.243.14.140
; descr:          OJSC Uralsvyazinform, Khanty-Mansiysk department
; descr:          For ADSL users
; country:        RU
90.150.32.0-90.150.47.255
; netname:        IS-Stafraen-Dreifing
; descr:          BTnet xDSL (via Netheimur/XNet)
; country:        IS
81.15.51.0-81.15.51.255
; Hijacked IP space for spammers, see google or slashdot
134.17.0.0-134.17.255.255
; netname:        KYBERNA-NET
; descr:          Dialin connector ip SDSL customers
88.82.103.0-88.82.103.255
; ADSL-CONNECTION-FIXIP
; remarks:      please send ABUSE complains to [email protected]
62.219.224.0-62.219.239.255
; netname:      SURTECH-PH
; country:      PH
; descr:        Surtech Philippines Inc
203.131.110.168-203.131.110.175
; netname:        B-ONE-NET
; descr:          One.com A/S
195.47.247.0-195.47.247.255
200.223.236.0-200.223.236.31
; generic ip's
58.140.121.239
212.150.181.58
211.226.197.165
220.225.224.4
89.239.140.54
84.22.142.140
217.145.194.104
69.10.44.198
68.16.247.24
89.189.128.245
82.179.222.9
77.223.95.84
209.62.55.82
74.55.237.114
67.43.10.51
62.42.230.12
80.243.7.117
86.55.81.251
201.41.156.6
193.222.191.154
122.217.190.101
82.114.103.10
190.40.16.227
195.239.212.46
189.74.80.220
190.67.249.69
85.105.133.115
58.8.170.242
92.244.41.105
208.36.224.25<
4.4.1.7. Использование блокировок по DNS-именам

В административном интерфейсе Communigate открываем следующую вкладку:

Установки -> Сеть -> Блокировки

Включаем "Вычислять Блокированные по DNS-именам". Мы используем следующие поля общего вида:

*.adsl.*
*.dsl.*
*.xdsl.*
*.pool.*
*.cable.*
*.dial.*
*.dip.*
*.adsl-dhcp.*
*.dynamic.*
*.pppoe.*
*.cable-modem.*
*.dsl-nat.*
*.broadband*.*
*.adsl-access.*
*.*.*.*.*.*
*-*-*-*.*.*
host-*.*.*
*.unused-addr.*
*.pppool.*
ppp-*.*.*
*gprs.*.*
*.dhcp.*
*.ppp.*
pppoe-*
adsl-*
dsl-*
*-homeuser-*.*.*
dynamic-*.*.*
bredband.*.*.*
broad.*.*.*
catv.*.*.*
cdma*.*.*
client.*.*.*
dlup.*.*.*
dslam.*
dyndsl.*
modem.*
*.ftth.*
*.ddns.*
*.in-addr.*.*
*-xdsl-dynamic.*
pptp.*
*.dsl-dynamic.*
*.xdsl-line.*
unnasigned-reverse-*
sdn.*.*.*
wdsl.*
wifi.*.*.*
wlan.*.*.*<

Поля по конкретным операторам:

*.dyn.optonline.net
*.setardsl.aw
*.dsl-verizon.net
*.rima-tde.net
user.*.satfilm.net.pl
*.inturbo.lt
*.fios.verizon.net
pool-*.verizon.net
adsl*.etb.net.co
*.rdsnet.ro
adsl*.simnet.is
real-*.kvidex.ru
*.business.telecomitalia.it
cust-*.ontelecoms.gr
*.web2k.net
*.adslplus.ch
*.cl.metrocom.ru
*.Home-Lan.fastnet.lv
*.ttnet.net.tr
*.access.telenet.be
*.rr.com
*.users.intility.com
*.cableonda.net
*.netspace.net.au
*.cablesurf.de
*.customer-*.uninet-ide.com.mx
*.tukw.qwest.net
host*.gudzonserver.com
*.v.shared.ru
*.interlain.lv
*.cbcast.com
*.b-one.net
*.websiteactive.com
clt-*.vdnet.lt
*.giga-dns.com
*.netverk.com.ar
*.telecom.net.ar
*.btc-net.bg
*.net.upc.cz
*.client*.youtele.com
dyn*.pacific.net.sg
host*.butovo.com
homeuser*.perm.ru
*.isp.belgacom.be
*.cpe.netcabo.pt
*.ewe-ip-backbone.de
*.dyn.centurytel.net
*-*.*.cn.ru
*-*.wispnet.net
*.onocable.ono.com
*.cablep.bezeqint.net
*.cgocable.net
*.fibertel.com.ar
*.internetdsl.tpnet.pl
*.shawcable.net
*.asm.bellsouth.net
*.abo.wanadoo.fr
*.charter.com
*.*.fairgamemail.us
*.*.virtua.com.br
*.ad.jp
*.asianet.co.th
*.customer.alfanett.no
*.maxonline.com.sg
*.telpol.net.pl
*.user.veloxzone.com.br
*dynip.superkabel.de
*homenet.master.ru
*yahoobb.*.bbtec.net
*.bb.sky.com
*.bdsl.sk
*.bsb.vectranet.pl
*.claranet.co.uk
*.elb.vectranet.pl
*.customers.tvtnet.ch
*.sbcis.sbc.com
*.turktelekom.com.tr
*.uninet.lv
*.versanet.de
*.wanadoo.co.uk
a.*.sub.*.net.*.udm.net
b-internet.*.snt.ru
*.cust.bluewin.ch
*.lan.sify.net
*.is.co.za
client-*.*.satelnet.ro
*.fbx.proxad.net
duser-*-*.popnet.sk
dxb-*.alshamil.net.ae
host.*.rusmedia.ru
kabelnet-*-*.juropnet.hu
leased-line-*.telecom.by
*.comcast.net
nat-altair.*.netbynet.ru
nn.*.excitenetwork.com
p*-*.cust.nbox.cz
p*.mp*.aaanet.ru
p-.*.powernet.bg
public-gprs*.centertel.pl
customer-*.millicom.com
*.hkcable.com.hk
net*.omskdom.ru
*.live.blueyonder.co.uk
*.dsl-w.verizon.net
kns-*.kansstel.ru
*.pools.arcor-ip.net
*.uio.satnet.net
net*.e-kirov.ru
CLIENT-*.dialog.net.pl
*.fastportnet.cz
customers-*.dnet.dp.ua
free-*.net1.bg
segment-*.sify.net
*.sovintel.spb.ru
*.redes.acens.net
pc-*.vtr.net
*.dyn.*.awesomenet.net
*.optusnet.com.au
*.tlt.ru
cust-*.tsnet.ru
*-dsl.qfast.net
*.speedy.telkom.net.id
station*.unionjv.ru
koel-*-*.koelnet.com
bd*.virtua.com.br
node*-*.network.is.nl
*.comcastbusiness.net
*.wlan.rz.tu-bs.de
ppp*-*.global-ts.ru
cblmdm*.buckeyecom.net
*.hsi.kabelbw.de
*-dynamic.*.telecomitalia.it
*.ll.kw.ua
public*.cdma.*
user-*.msk.pl
*.codetel.net.do
dsl*.ttnet.net.tr
cable-*.blue-cable.de
*-*.rev.gaoland.net
cliente-*.iberbanda.es
*.onlinehome-server.com
*.retail.ttk.ru
vh*.hoster.by
host*.*.prov.ru
host*.tijo.3s.pl
*.ketnet.cz
*.digiweb.com.br
ns*.ovh.net
rps*.ovh.net
*.bereopelos.ru
ks*.kimsufi.com
*.cvdnet.pl<

Так же при желании можно добавить строку вида

  • (host name is unknown)

для того, что бы заблокировать все сетевые адреса которые не имеют обратных (PTR) записей в DNS [10]< (отсутствие PTR является нарушением Секции 1.2 RFC 1912< и Секции 3.6 RFC 2821<)

4.4.1.8. Использование блокирующих DNS-Серверов (RBL)

В административном интерфейсе Communigate открываем следующую вкладку:

Установки -> Сеть -> Блокировки

Включаем "Использовать Блокирующие DNS-Сервера (RBL)" и записываем адреса днс в графы. Мы используем следующие адреса:

Устанавливаем значение "Блокировать" в разделе "Письма с Блокированных Адресов"

4.4.1.9. Неблокируемые Адреса (Белые Дыры)
; mail.rustest.ru
213.79.68.66
; mail.belkult.ru (no PTR)
82.151.110.147
; mail.tspu.tula.ru (no PTR)
94.25.83.201
; mx1.vspu.ru (no PTR)
83.167.86.3
; ns.vgta.vrn.ru (no PTR)
93.88.139.1
; csr.csrs.ru (no PTR)
77.108.127.27
; post.rsreu.ru (no PTR)
82.179.89.3
; LiveJournal
208.93.0.128
208.93.0.50<
4.4.1.10. Неблокируемые по DNS-именам

Установки -> Сеть -> Блокировки

Включаем "Вычислять Неблокируемые по DNS-именам"

*.rsu.edu.ru
*.amazon.com
*.freshmeat.net
*.intel.com
*.gmail.com
*.gnu.org
*.mail.ru
*.yandex.ru
*.mail.yandex.net
*.rambler.ru
*.subscribe.ru
*.ibm.com
*.hotmail.com
*.sotcom.ru
*.ryazan.su
*.ryazan.ru
*.novell.com
*.sun.com
*.livejournal.com
*.vkontakte.ru
*.pochta.ru
*.udsu.ru
*.rsr-online.ru
*.post.rzn.ru
*.nsu.ru
*.mac.com
*.rustest.ru
*.nnm.ru
*.icq.com
*.neweurasia.ru
*.ministry.ru
*.zhivagobank.ru
mail.fudan.edu.cn,
*.prometeus.ru
*.mgimo.ru
*.vspu.ru
*.google.com
*.cisco.com
*.bsu.edu.ru
*.goethe.de
*.goethe.org
*.msu.ru
*.masterbank.ru
*.gapm.ru
*.mfpa.ru
*.mpsinst.ru
*.yahoo.com
*.pinro.ru
*.sunrav.ru
*.vgta.vrn.ru
*.rosim.ru<
4.4.1.11. Использование механизма SpamTrap

Также к дополнению к предыдущим методам, можно использовать Spamtrap. Communigate Pro имеет встроенный механизм "ловушек для спама", который заключается в создании нескольких ящиков-переадресаторов на специальный служебный адрес "spamtrap". Письма, приходящие на этот ящик будут автоматически распознаваться как спам и удаляться из всех аккаунтов пользователей. Для эффективной работы этого механизма стоит размещать ссылку на этот адрес на тех же ресурсах, где находятся реально существующие ящики пользователей, чтобы спам-боты индексировали их одновременно.

При наличии пары-тройки лишних доменов можно указать пересылать почту для неизвестных на spamtrap'ы. Это позволяет эффективно блокировать спамеров, подбирающих почтовые ящики пользователей по словарям.

Посмотреть на какие spamtrap'ы приходит больше всего писем можно командой:

grep spamtrap /var/CommuniGate/SystemLogs/*.log | awk '{ print $11; }' | sort | uniq -c | sort -n -r | head
<

4.4.2. SpamAssassin

Набор правил для русскоязычного спама: http://sa-russian.narod.ru/<

4.4.2.1. Первоначальный тюнинг

По совету из конфигурационного файла cgpav.cfg ставим следующий параметр:

score MIME_MISSING_BOUNDARY 0
<

Необходимость отключения данной проверки вызвана тем, что cgpav обрезает большие письма до 50K (по-умолчанию) перед передачей фильтру spamassassin, что приводит к ложному срабатыванию и, иногда, ложной классификацией писем со вложениями в качестве спам-сообщений.

Добавим больше доверия прошедшим spf-проверку

score SPF_PASS -2.0
<
4.4.2.2. Auto-whitelist

Настраиваем auto_whitelist, что в терминологии spamassassin означает, что будут высчитываться средние оценки дл отправителя.

В коносли делаем следущее:

# mkdir /etc/mail/spamassassin/auto-wl/
# chmod 777 /etc/mail/spamassassin/auto-wl/
# touch /etc/mail/spamassassin/auto-wl/auto-whitelist
# chmod 666 /etc/mail/spamassassin/auto-wl/auto-whitelist
<

Прописываем в конфигурационном файле:

auto_whitelist_path        /etc/mail/spamassassin/auto-wl/auto-whitelist
auto_whitelist_file_mode   0666
<

Если что-то неправильно с правами доступа, то в файле /var/log/mail появятся такие строчки:

mail spamd[582]: auto-whitelist: open of auto-whitelist file failed: auto-whitelist: 
cannot open auto_whitelist_path /etc/mail/spamassassin/auto-wl/auto-whitelist: Permission denied
<
4.4.2.3. Исключения для рассылок и важных доменов
whitelist_from  *@subscribe.ru
whitelist_from  *@rustest.ru
whitelist_from  *@neweurasia.ru                                                 
whitelist_from  *@mac.com                                                       
whitelist_from  *@staff.mesi.ru                                                 
whitelist_from  *@transtk.ru                                                    
whitelist_from  *@col.ru                                                        
whitelist_from  *@rsr-online.ru                                                 
whitelist_from  *@post.rzn.ru                                                   
whitelist_from  *@zhivagobank.ru                                                
whitelist_from  *.sovcombank.ru                                                 
whitelist_from  *@bti.secna.ru                                                  
whitelist_from  *@rcic.altai.ru                                                 
whitelist_from  *.nsu.ru                                                        
whitelist_from  *@sgu.ru                                                        
whitelist_from  *@dspl.ru                                                       
whitelist_from  *@csu.ru                                                        
whitelist_from  *@psu.ru                                                        
whitelist_from  *@vsu.by                                                        
whitelist_from  *@sgap.ru                                                       
whitelist_from  *.rsu.ru                                                        
whitelist_from  *.udsu.ru  
whitelist_from  *@ministry.ru
<
4.4.2.4. Правила для проверки результатов встречного соединения (reverse connect)

/etc/mail/spamassassin/local.cf

header REV_CHECK_DROPPED X-Reverse-Check =~ /connection closed by peer/
describe REV_CHECK_DROPPED Reverse check connection of sender mail address closed by remote server
score REV_CHECK_DROPPED 4

header REV_CHECK_FAILED X-Reverse-Check =~ /address rejected with reverse-check/
describe REV_CHECK_FAILED Reverse check of sender mail address rejected by remote server
score REV_CHECK_FAILED 4.5

header REV_CHECK_NORELAY X-Reverse-Check =~ /no relay available/
describe REV_CHECK_NORELAY No relay available for reverse check
score REV_CHECK_NORELAY 4.5

header REV_CHECK_NORESP X-Reverse-Check =~ /no response/
describe REV_CHECK_NORESP No response from remote server to reverse check of sender mail address
score REV_CHECK_NORESP 4

header REV_CHECK_PROTOERR X-Reverse-Check =~ /reverse check protocol error/
describe REV_CHECK_PROTOERR Reverse check protocol error on remote server
score REV_CHECK_PROTOERR 4

header REV_CHECK_REFUSED X-Reverse-Check =~ /connection refused/
describe REV_CHECK_REFUSED Reverse check of sender mail address refused by remote server
score REV_CHECK_REFUSED 4.5

header REV_CHECK_TIMEOUT X-Reverse-Check =~ /read time-out/
describe REV_CHECK_TIMEOUT Reverse check of sender mail address timed out
score REV_CHECK_TIMEOUT 4<
4.4.2.5. DNSWL

При желаниии можно включить данный сервис

Сервис DNSWL [14]< представляет собой т.н. анти-rbl: список известных легитимных почтовых серверов. Сервис используется для уменьшения процента ложных срабатываний при обработке почты анитиспам-фильтрами. Сервера интернета делятся на 4 зоны:

  • High никогда не пересылали спам
  • Medium черезвычайно редкие спам-рассылки, быстро реагируют
  • Low изредка рассылают спам, реагируют в приемлимое время
  • None легитимные сервера, которые кроме писем так же могут рассылать спам

Модификация /etc/mail/spamassassin/local.cf:

header __RCVD_IN_DNSWL          eval:check_rbl('dnswl-firsttrusted', 'list.dnswl.org.')

header RCVD_IN_DNSWL_LOW        eval:check_rbl_sub('dnswl-firsttrusted', '127.0.\d+.1')
describe RCVD_IN_DNSWL_LOW      Sender listed at http://www.dnswl.org/, low trust
tflags RCVD_IN_DNSWL_LOW        nice net

header RCVD_IN_DNSWL_MED        eval:check_rbl_sub('dnswl-firsttrusted', '127.0.\d+.2')
describe RCVD_IN_DNSWL_MED      Sender listed at http://www.dnswl.org/, medium trust
tflags RCVD_IN_DNSWL_MED        nice net

header RCVD_IN_DNSWL_HI         eval:check_rbl_sub('dnswl-firsttrusted', '127.0.\d+.3')
describe RCVD_IN_DNSWL_HI       Sender listed at http://www.dnswl.org/, high trust
tflags RCVD_IN_DNSWL_HI         nice net

score RCVD_IN_DNSWL_LOW         -1
score RCVD_IN_DNSWL_MED         -10
score RCVD_IN_DNSWL_HI          -100
<
4.4.2.6. Другие правила в local.cf

Полный список наших правил:

auto_whitelist_path        /etc/mail/spamassassin/auto-wl/auto-whitelist
auto_whitelist_file_mode   0666 

# Our university
whitelist_from_rcvd *@rsu.edu.ru rsu.edu.ru
whitelist_from_rcvd *@rspu.ryazan.ru rsu.edu.ru
whitelist_from_rcvd *@ttc.ryazan.ru rsu.edu.ru
whitelist_from_rcvd *@www.rsu.edu.ru rsu.edu.ru
whitelist_from_rcvd *@proxy.rsu.edu.ru rsu.edu.ru

# whitelist subscribe.ru:
whitelist_from_rcvd *@subscribe.ru subscribe.ru

whitelist_from_rcvd *@sura.ru mail.sura.ru

# Удмуртский госуниверситет
whitelist_from_rcvd *@uni.udm.ru udsu.ru

# Novell
whitelist_from_rcvd *@novell.com novell.com

# N-Link
whitelist_from_rcvd *@nlink.ru nlink.ru

# Рязанская электросвязь
whitelist_from_rcvd *@mail.ryazan.ru mail.ryazan.ru

# Полярный институт
whitelist_from_rcvd *@pinro.ru pinro.ru

# Мейлру
whitelist_from_rcvd *@mail.ru mail.ru

# Яндекс
whitelist_from_rcvd *@yandex.ru yandex.ru
whitelist_from_rcvd *@narod.ru yandex.ru

# Рамблер
whitelist_from_rcvd *@rambler.ru rambler.ru

# Гуголь
whitelist_from_rcvd *@gmail.com google.com

# Hotmail
whitelist_from_rcvd *@hotmail.com hotmail.com

# Yahoo!
whitelist_from_rcvd *@yahoo.com yahoo.com

# SourceForge
whitelist_from_rcvd *@lists.sourceforge.net lists.sourceforge.net

# SunRav
whitelist_from_rcvd *@sunrav.ru kyoto.hostforweb.net

# Воронежская Государственная Технологическая Академия
whitelist_from_rcvd *@vgta.vrn.ru vgta.vrn.ru

whitelist_from_rcvd *@forest.ru mail.forest.ru
whitelist_from_rcvd *@biodiversity.ru mail.biodiversity.ru

whitelist_from  *@rustest.ru

whitelist_from  *.neweurasia.ru
whitelist_from  *@neweurasia.ru
whitelist_from  *@mac.com
whitelist_from  *@staff.mesi.ru
whitelist_from  *@transtk.ru
whitelist_from  *@col.ru
whitelist_from  *@rsr-online.ru
whitelist_from  *@post.rzn.ru
whitelist_from  *@zhivagobank.ru
whitelist_from  *.sovcombank.ru
whitelist_from  *@bti.secna.ru
whitelist_from  *@rcic.altai.ru
whitelist_from  *.nsu.ru
whitelist_from  *@sgu.ru
whitelist_from  *@dspl.ru
whitelist_from  *@csu.ru
whitelist_from  *@psu.ru
whitelist_from  *@vsu.by
whitelist_from  *@sgap.ru
whitelist_from  *.rsu.ru
whitelist_from  *@ministry.ru
whitelist_from  *.ministry.ru
whitelist_from  *.bsu.edu.ru
whitelist_from  *@bsu.edu.ru
whitelist_from  *.ibm.ru
whitelist_from  *.ibm.com
whitelist_from  *@teletesting.ru

# CommuniGate Pro "Pronto!" web-interface
header PRONTO X-Mailer =~ /CommuniGate\ Pro\ Pronto/
describe PRONTO Pronto msiler is good
score PRONTO -2.5

# Верим ребятам, сумевшим прописать у себя корректный SPF
header SPF_OK Received-SPF =~ /pass/
describe SPF_OK SPF test passed
score SPF_OK -1.0

# Гуголь
header GOOG Received =~ /.google.com/
describe GOOG google.com is good
score GOOG -4

# Яндекс
header YNDX Received =~ /.yandex.ru/
describe YNDX Yandex is good
score YNDX -4

# Яндекс 2
header YNDX2 Received =~ /.yandex.net/
describe YNDX2 Yandex is good
score YNDX2 -4

# Укаинский релей
header ONLINE_UA Received =~ /mail.online.ua/
describe ONLINE_UA mail.online.ua is a SPAM relay
score ONLINE_UA 4

# Питерский релей
header INTERZET Received =~ /mail.interzet.ru/
describe INTERZET mail.interzet.ru is a SPAM relay
score INTERZET 4

# 99% спама и 1% уродских прог шлют почту без заголовка "To:" в header'ах
header HAVE_TO_HEADER exists:To
meta NO_TO_HEADER !HAVE_TO_HEADER
describe NO_TO_HEADER There is no To header
score NO_TO_HEADER 4

# Релей smtp[0-9]+.orange.fr, спама 90%, smtp-сервер
# для половины Франции.
header ORANGE_FR Received =~ /.orange.fr/
describe ORANGE_FR smtp.orange.fr is a SPAM relay
score ORANGE_FR 4

# This test works badly with cgpav, who cuts messages larger than 50K
score MIME_MISSING_BOUNDARY 0

# Cool rule, checking if both of sender & receiver of message are not in our domain
header WOOD_FROM From =~ /rsu.edu.ru/i
header WOOD_TO1 To =~ /rsu.edu.ru/i
header WOOD_TO2 To =~ /rspu.ryazan.ru/i
header WOOD_TO3 To =~ /ttc.ryazan.ru/i
#meta WITHOUT_OUR_DOMAIN !WOOD_FROM && (!WOOD_TO1 || !WOOD_TO2 || !WOOD_TO3)
meta WITHOUT_OUR_DOMAIN !WOOD_FROM && !(WOOD_TO1 || WOOD_TO2 || WOOD_TO3)
describe WITHOUT_OUR_DOMAIN Sender and receiver are not in our domain 
score WITHOUT_OUR_DOMAIN 2.5 

# CGP [email protected] ruleset - dozen of spammers use this address to spam
header LOCAL_TO_BA To =~ /blacklist-admin\@cgp\.rsu\.edu\.ru/i
describe LOCAL_TO_BA Mail to [email protected], probably SPAM
score LOCAL_TO_BA 4.5

# Rulestet for checking reverse connection feature of CGP
# ---------------------------------------------------------------
header REV_CHECK_DROPPED X-Reverse-Check =~ /connection closed by peer/
describe REV_CHECK_DROPPED Reverse check connection of sender mail address closed by remote server
score REV_CHECK_DROPPED 4

header REV_CHECK_FAILED X-Reverse-Check =~ /address rejected with reverse-check/
describe REV_CHECK_FAILED Reverse check of sender mail address rejected by remote server
score REV_CHECK_FAILED 4.5

header REV_CHECK_NORELAY X-Reverse-Check =~ /no relay available/
describe REV_CHECK_NORELAY No relay available for reverse check
score REV_CHECK_NORELAY 4.5

header REV_CHECK_NORESP X-Reverse-Check =~ /no response/
describe REV_CHECK_NORESP No response from remote server to reverse check of sender mail address
score REV_CHECK_NORESP 4

header REV_CHECK_PROTOERR X-Reverse-Check =~ /reverse check protocol error/
describe REV_CHECK_PROTOERR Reverse check protocol error on remote server
score REV_CHECK_PROTOERR 4

header REV_CHECK_REFUSED X-Reverse-Check =~ /connection refused/
describe REV_CHECK_REFUSED Reverse check of sender mail address refused by remote server
score REV_CHECK_REFUSED 4.5

header REV_CHECK_TIMEOUT X-Reverse-Check =~ /read time-out/
describe REV_CHECK_TIMEOUT Reverse check of sender mail address timed out
score REV_CHECK_TIMEOUT 4

# DNSBL
# -----------------------------------------------------------------
# URL: http://www.barracudacentral.org/rbl/ 
header __RCVD_IN_BRBL eval:check_rbl('brbl', 'b.barracudacentral.org') 
describe __RCVD_IN_BRBL received via a relay in b.barracudacentral.org 
header RCVD_IN_BRBL_RELAY eval:check_rbl_sub('brbl', '127.0.0.2') 
tflags RCVD_IN_BRBL_RELAY net 
describe RCVD_IN_BRBL_RELAY received via a relay rated as poor by Barracuda 
score RCVD_IN_BRBL_RELAY 3.00<

Проверка наличия ошибок в правилах:

spamassassin --lint
<

4.4.3. Кнопки спам/не спам в веб-интерфейсе CGP

Скачиваем скрипты с сервера Stalker: ftp://ftp.stalker.com/pub/stuff/noarch/SpamPackage-scripts.tar.gz< и устанавливаем по инструкции.

В административном веб-интерфейсе идем Пользователи -> Центральный Справочник, находим "Дополнительные Установки Пользователя" и в группу "Системные" добавляем 2 занчения:

SpamFilterEnabled
SpamFilterLevel
<

Редактируем скрипты из пакета SpamPackage, устанавливаем корректный пароль Postmater'a и редактируем название папки для спама, а так же меняем адерса для жалоб на локальные ящики SpamAssassin

Дальше, создаем папку и устанавливаем права:

# mkdir /var/CommuniGate/CGI
# chown root:mail /var/CommuniGate/CGI
<

Копируем в нее указанные скрипты с правами 0755

В административном веб-интерфейсе идем Установки -> Услуги -> HTTPU и добавляем в раздел "CGI Программы":

  • CGI Каталог: /var/CommuniGate/CGI
  • Расширение имени файла: pl
  • Программа-Интерпретатор: /usr/bin/perl -w

В папке /opt/CommuniGate/WebSkins/Simplex находим файл strings.data и меняем следующие параметры:

4.5. LDAP

4.5.1. Аутентификация пользователей на прокси-сервере Squid

Communigate можно использовать в связке с proxy-сервером squid

В настойках communigate:

Включаем Управление Пользователями через LDAP:

Пользователи -> Центральный справочник

Управление Пользователями через LDAP: Включено

Проверка:

squid_ldap_auth -b "cn=domain.name" cgp-server.com
<

Должно выдавать OK/ERR на plaintext-строку "имя пароль"

В конфигурационном файле squid.conf:

# (CommuniGate LDAP) 
auth_param basic program /usr/sbin/squid_ldap_auth -b "cn=example.com" cgp.example.com
auth_param basic children 10
auth_param basic realm RSU proxy-server
auth_param basic credentialsttl 2 minutes
<

(Подробнее: Настройка_SQUID#CommuniGate_Pro<)

4.6. Firewall

На роутере (SLES) для белой сети для каждого из ip-адресов, назначенных серверу:

/etc/sysconfig/SuSEfirewall2

FW_FORWARD="0/0,91.203.180.144/28,tcp,25 \
            0/0,91.203.180.144/28,tcp,80 \
            0/0,91.203.180.144/28,tcp,119 \
            0/0,91.203.180.144/28,tcp,443 \
            0/0,91.203.180.144/28,tcp,465 \
            0/0,91.203.180.144/28,tcp,587 \
            0/0,91.203.180.144/28,tcp,993 \
            0/0,91.203.180.144/28,tcp,3478 \
            0/0,91.203.180.144/28,udp,3478 \
            0/0,91.203.180.144/28,tcp,3479 \
            0/0,91.203.180.144/28,udp,3479 \
            0/0,91.203.180.144/28,tcp,5060 \
            0/0,91.203.180.144/28,udp,5060 \
            0/0,91.203.180.144/28,tcp,5061 \
            0/0,91.203.180.144/28,udp,5061 \
            0/0,91.203.180.144/28,tcp,5222 \
            0/0,91.203.180.144/28,udp,5222 \
            0/0,91.203.180.144/28,tcp,5223 \
            0/0,91.203.180.144/28,udp,5223 \
            0/0,91.203.180.144/28,tcp,5269 \
            0/0,91.203.180.144/28,udp,5269 \
            0/0,91.203.180.144/28,tcp,11024:11025 \
            0/0,91.203.180.144/28,tcp,60000:60099 \
            0/0,91.203.180.144/28,udp,60000:60999 \<

Подробнее о портах:

  • 25 и 587 - SMTP
  • 993 - IMAP (ssl)
  • 80 и 443 - веб-интерфейс пользователя http, https
  • 3478 и 3479 - STUN
  • 5060, 5061 - SIP
  • 5222, 5223, 5269 - Jabber/XMPP
  • 11024:11025 и 60000:60999 - голосовой трафик RTP

4.7. Почта к нам и от нас

4.7.1. Общие рекомендации

Чтобы почта с сервера доходила до адресатов в интернете:

  • все ip-адреса почтовых релеев должны быть обязательно прописаны в обратной dns-зоне;
  • "Greeting name" почтового сервера должен соответсвовать его dns-имени;
  • необходимо читать сообщения, приходящие на [email protected], и своевременно на них реагировать;
  • уменьшить время повторов посылки и увеличить количество попыток хотя бы для первого часа, это поможет уменьшить задержки до севреров, использующих greylisting. При времени повтора 1 час и выше почта рискует быть доставленной не за одни сутки;

В качестве рекомендуемой меры можно зарегистировать свою сеть (или конкретно почтовые сервера) в DNSWL< и EmailReg.org<

Однако следует понимать, что всегда в интернете найдется сервер который не захочет принимать почту от нас. Авторам в свое время попался американский почтовый сервер, возвращавший письма с объяснением вида "550 E-mail from Russia. Bye!"

4.7.2. Стандартные e-mail адреса

Для взаимодействия с сетью интернет серверу крайне желательно содержать определенное число стандартных адресов (RFC 2142<)

В нашем случае используются адреса:

4.7.3. SPF< записи в DNS

Для домена:

example.com.     IN TXT          "v=spf1 mx ~all"
<

Для почтового сервера:

mail            IN TXT          "v=spf1 a -all"
<

Это поможет пользователям получать почту от нас

4.7.4. Как посмотреть на какие домены шлют почту пользователи?

Просто список доменов (для скриптов):

grep 'SMTP.\+sent to.\+got:250' /var/CommuniGate/SystemLogs/*.log | awk -F "[ ,(,)]" '{ print $4; }' | sort | uniq
<

Список доменов, наглядный с числом отосланных писем (для отчетов):

grep 'SMTP.\+sent to.\+got:250' /var/CommuniGate/SystemLogs/*.log | awk -F "[ ,(,)]" '{ print $4; }' | sort | uniq -c | sort -r
<

Десятка самых популярных доменов:

grep 'SMTP.\+sent to.\+got:250' /var/CommuniGate/SystemLogs/*.log | awk -F "[ ,(,)]" '{ print $4; }' | sort | uniq -c | sort -r | awk '{ print $2; }' | head
<

4.7.5. Как посмотреть куда ломятся вирусы и спамботы?

grep 'SMTPI.\+unknown user account' /var/CommuniGate/SystemLogs/*.log | awk '{ print $5; }' | sort | uniq -c | sort -d
<


То же самое но десятка лидеров:

grep 'SMTPI.\+unknown user account' /var/CommuniGate/SystemLogs/*.log | awk '{ print $5; }' | sort | uniq -c | sort -d | head
<

4.7.6. С каких серверов чаще всего письма приходят в СПАМ

Внимание! Команда неоптимизирована и выполняется достаточно долго. Другие варианты приветствуются на странице обсуждения статьи.

find /var/CommuniGate/Domains/example.com/ -type f |grep "SPAM.mdir"| xargs head -n 30 | grep "Received: from "|awk '{ print $3; }'|sort|uniq -c | sort -r
<

4.7.7. Как проверить, какие MX не хотят принимать почту от нас

grep "Expected 25x <id>, got:550" /var/CommuniGate/SystemLogs/* | awk -F "[(,)]" '{ print $2; }' | sort | uniq -c | sort -n -r
<

4.7.8. Проверка ip-адреса почтового сервера на наличие в RBL

В сети интернет существует большое число утилит для удобной проверки адресов на попадание в RBL. Можно воспользоваться как одним из on-line сервисов вроде OpenRBL< так и скриптами, выполняемыи непосредственно на сервере, к примеру RBLLookup Version 1<. Для работы программы необходимы prel-модули

  • Net::DNS
  • Term::ANSIColor

которые легко устанавливаются через CPAN.

Программа работает следующим образом, из командной строки указываем какой адрес проверить:

# ./rbl.pl 198.51.100.92
<

и ждем результата.

Так же существуют плагины для подключения к Nagios

4.7.9. Проверка сервера на Open Relay

Для проверки сервера на открытый релей можно пользоваться сайтом http://www.nettools.ru/<

4.8. Решение проблем

4.8.1. Коды ошибок почтовых серверов

RFC 3463< регламентирует номер кодов ошибок, которыми почтовая система информирует отправителя о недоставке [15]< письма получателю, к примеру:

  • 5.1.1 (Unknown user),
  • 5.2.2 (Mailbox full)
  • 5.7.1 (Rejected by security policy/mail filter)

http://www.answersthatwork.com/Download_Area/ATW_Library/Networking/Network__3-SMTP_Server_Status_Codes_and_SMTP_Error_Codes.pdf<

4.8.2. "docx" файлы открываются как zip-папки

Необходимо добавить следующие mime-типы в разделе Установки — Услуги — HTTPU — MIME-типы :

".manifest", "application/manifest"
".xaml", "application/xaml+xml", 
".application",  "application/x-ms-application", 
".deploy", "application/octet-stream"
".xbap", "application/x-ms-xbap"

".docm","application/vnd.ms-word.document.macroEnabled.12" 
".docx","application/vnd.openxmlformats-officedocument.wordprocessingml.document" 
".dotm","application/vnd.ms-word.template.macroEnabled.12" 
".dotx","application/vnd.openxmlformats-officedocument.wordprocessingml.template" 
".potm","application/vnd.ms-powerpoint.template.macroEnabled.12" 
".potx","application/vnd.openxmlformats-officedocument.presentationml.template" 
".ppam","application/vnd.ms-powerpoint.addin.macroEnabled.12" 
".ppsm","application/vnd.ms-powerpoint.slideshow.macroEnabled.12" 
".ppsx","application/vnd.openxmlformats-officedocument.presentationml.slideshow" 
".pptm","application/vnd.ms-powerpoint.presentation.macroEnabled.12" 
".pptx","application/vnd.openxmlformats-officedocument.presentationml.presentation" 
".xlam","application/vnd.ms-excel.addin.macroEnabled.12" 
".xlsb","application/vnd.ms-excel.sheet.binary.macroEnabled.12" 
".xlsm","application/vnd.ms-excel.sheet.macroEnabled.12" 
".xlsx","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" 
".xltm","application/vnd.ms-excel.template.macroEnabled.12" 
".xltx","application/vnd.openxmlformats-officedocument.spreadsheetml.template"<

5. Коммуникации реального времени

Медиа плагин для браузеров Internet Explorer, Firefox, Chrome и Safari доступен по адресу: http://www.communigate.com/MediaPlugin/<

5.1. Хитрости Маршрутизатора

Выделяем целый домен под spamtrap's:

M:<*@example.com> = spamtrap
<

Маршрутизация телефонии:

<[email protected]*>       = [email protected]  ; 911: NA emergency
<[email protected]*>       = [email protected]  ; 112: EU emergency
<[email protected]*>        = [email protected]  ; 01:  RU emergency
S:<emergency> = emergency#pbx        ; start 'emergency' app
<7(2d)@*>     = pbx{*}#pbx           ; 7nn calls go to PBX

<(4d)@*> = *@telnum ; пусть нумерация 4-значными будет сквозной
<(6d)@*> = +74912*@telnum ; костылик для 6-значных
<(10d)@*> = +7*@telnum ; считаем 10-значные российскими
<+(5-15d)@*> = +*@telnum

<+(d)@*> = +*@telnum ; прямой +номер в e164 домен "telnum" 
<8(10d)@*> = +7*@telnum ; костыль для звонящих через 8-ку
telnum = e164.arpa.enum ; прямой +номер в e164.arpa 
S:e164.arpa.noenum = pstn

S:<+7(10d)@pstn> = gatewaycaller{8*,nlink}#[email protected]
S:<8(10d)@pstn> = gatewaycaller{8*,nlink}#[email protected]
S:<(5-15d)@pstn> = gatewaycaller{*,nlink}#[email protected]

S:<(4d)@pstn> = pbx#[email protected]
<

Входящие телефонные звонки

5.2. E.164

https://mail.istu.ru/Guide/russian/Router.html#ENUM<

Подключаем ENUM-домены:

  • e164.arpa
  • e164.org
  • e164.info
  • enum.org

Правим маршрутизатор:

<+(d)@*> = +*@telnum ; прямой +номер в e164 домен "telnum" 
<8(10d)@*> = +7*@telnum ; костыль для звонящих через 8-ку
telnum = e164.arpa.enum ; прямой +номер в e164.arpa 
S:e164.arpa.noenum = pstn<

Проверить работоспособность номеров в E.164 можно при помощи сервиса http://enumquery.com/<

5.3. Входящие звонки

В Маршрутизаторе укажем, что входящий звонок с многоканального номера перенаправляем на PBX нужного домена:

<[email protected]_domain_ip> =  pbx{*}#[email protected]
<

Создаем в интересующем нас домене пользователя pbx с псевдонимами 200 и conference. Даем ему права доступа:

  • Может менять установки Этого Домена и его Пользователей
  • Полный доступ ко всем Файлам
  • Может выступать от имени других

Во вкладке Real-Time добавляем правило PBX Center starter со следющим содержимым:

Данные --- 
Равно:
Действие: Перенаправить к
Параметр: #pbx
<

Во вкладке Прочее выбираем параметры Directory Prefix равным числу, с которого начинаются внутренние тлф. номера пользователй и Directory Digits равным общему числу цифр во внутреннем номере.

Программирование PBX-приложений на CG/PL:

5.4. QoS

5.4.1. Procurve 5304xl

Для SIP-трафика в консоли свитча:

conf
qos tcp-port 5060 priority 6
qos udp-port 5060 priority 6
<

Проверка:

sh qos tcp-udp-port-priority
<

Выбираем VLAN для голосового трафика и поднимаем ему приоритет:

conf
vlan XX
qos priority 6
<

Проверка:

sh qos vlan-priority
<

Записываем изменения во flash-память:

write mem
<

5.5. SIP/Jabber

DNS records are a common source of misconfiguration for SIP and XMPP.

Like e-mail and MX records, there is a special type of DNS record for SIP and XMPP routing and prioritization. This record is called the Service Record or "SRV" record.

Using DNS resolver tools such as "dig", "nslookup", or others, one can query these records to better understand SIP and XMPP routing. The syntax can be a little odd at first, as it uses both an application protocol (_sip) and IP protocol (_udp) component:

Code:

$ dig SRV _sip._udp.versature.com


;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31515
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 9, ADDITIONAL: 10

;; QUESTION SECTION:
;_sip._udp.versature.com. IN SRV

;; ANSWER SECTION:
_sip._udp.versature.com. 6611 IN SRV 10 0 5060 login.versature.com.
<

For this example, note that the response contains (at least) three important pieces of information: 10 - the priority of the server as compared to possible other servers for the same record 5060 - the port to which to connect login.versature.com - the server hostname

Multiple records are also possible:

Code:

$ dig SRV _sip._udp.communigate.com


;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40722
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 4, ADDITIONAL: 7

;; QUESTION SECTION:
;_sip._udp.communigate.com. IN SRV

;; ANSWER SECTION:
_sip._udp.communigate.com. 3600 IN SRV 0 0 5060 post.communigate.com.
_sip._udp.communigate.com. 3600 IN SRV 1 0 5060 site.communigate.com.
<

For this example, the server "post.communigate.com" has a priority of "0" and is therefore *higher* priority than the server site.communigate.com. SIP UDP clients should attempt to connect to post.communigate.com first, then to site.communigate.com.

The following is an example of a full DNS entry for SIP and XMPP for a fictional "example.com" domain, using BIND syntax:

Code:

example.com IN SOA ns.example.com. postmaster.example.com. (
2007042300 ; Serial
36000 ; Refresh
9000 ; Retry
3600000 ; Expire
36000) ; Minimum

; SIP
_sip._udp 3600 IN SRV 10 0 5060 mail.example.com.
_sip._tcp 3600 IN SRV 10 0 5060 mail.example.com.
_sips._tcp 3600 IN SRV 10 0 5061 mail.example.com.
_sips._udp 3600 IN SRV 10 0 5061 mail.example.com.
; XMPP
_xmpp-server._tcp 3600 IN SRV 10 0 5269 mail.example.com.
_xmpp-server._udp 3600 IN SRV 10 0 5269 mail.example.com.
_xmpp-client._tcp 3600 IN SRV 10 0 5222 mail.example.com.
_xmpp-client._udp 3600 IN SRV 10 0 5222 mail.example.com.
_jabber._tcp 3600 IN SRV 10 0 5269 mail.example.com.
_jabber._udp 3600 IN SRV 10 0 5269 mail.example.com.
_jabber-client._tcp 3600 IN SRV 10 0 5222 mail.example.com.
_jabber-client._udp 3600 IN SRV 10 0 5222 mail.example.com.
<

5.5.1. IP-телефоны Linksys

Основная статья: Linksys<

5.5.2. Софтофоны

Основная статья: IP-телефон_на_ПК_(Софтофон)<

5.5.3. Софтофон веб-клиента Pronto!

TODO

6. ТЕСТИРОВАНИЕ

6.1. Способности SpamAssasin распознавать спам

spamassassin -t < sample-spam.txt > /tmp/sample-spam.txt
 spamassassin -t < sample-nonspam.txt > /tmp/sample-nonspam.txt
<

6.2. Работа clamav через cgpav

Скопируйте тестовый вирус eicar.com в директорию /var/CommuniGate и запустите cgpav:

cd /var/Communigate
 wget "http://www.eicar.org/download/eicar.com"
 ./cgpav
<

Появится консоль ввода фильтра.

Введите:

1 FILE eicar.com
<

cgpav работает нормально если вы видите

1 ERROR "WARNING! Your message was infected by VIRUS: EICAR-AV-Test"
<

Или же, программа может по каким-то причинам не найти вирусов

1 OK
<
1 REJECTED "Antiviral filter unavailable. Will try later"
<

7. Отказоустойчивость

В целях надежного прохождения почты и уменьшения перебоев, связанных с авариями на каналах связи, почтовый сервер подключен к двум независимым провайдерам и имеет 2 белых ip-адреса. В DNS внесены оба адреса в качестве mx-записей домена.

7.1. Насторойка ОС

Порядок действий для SLES 9 SP3:

Добавляем 2 строчки в файл /etc/iproute2/rt_tables

9       viainet1
10      viainet2
<

Создаем в /etc/sysconfig/network каталог iproute2, в него кладем файл iproute2_custom (chmod +x):

#!/bin/bash

IP2=xxx.xxx.xxx.xxx       # ip от провайдера 1
IP3=yyy.yyy.yyy.yyy       # ip от провайдера 2

P1=iii.iii.iii.iii        # дефолтный шлюз
P2=jjj.jjj.jjj.jjj        # шлюз провайдера 1
P3=kkk.kkk.kkk.kkk        # шлюз провайдера 2

ip route replace default via $P2 table viaesv
ip route replace default via $P3 table viacttc

ip rule add from $IP2 table viainet1
ip rule add from $IP3 table viainet2

#ну и дефолтный маршрут:
ip route add default via $P1
<

Делаем символическую ссылку на этот файл в каталоге /etc/sysconfig/network/if-up.d:

ln -s /etc/sysconfig/network/iproute2/iproute2_custom /etc/sysconfig/network/if-up.d/iproute2_custom
<

Теперь машина отвечает на пинги по на оба внешних ip.

8. АДМИНИСТРИРОВАНИЕ

8.1. Приветственное письмо новым пользователям системы

Идем в Пользователи -> Домены -> (домен) -> Объекты -> Шаблон и по инструкции< создаем шаблон письма для пользователей, чтобы они помнили о нашей заботе и опеке.

Следует помнить, что напрямую русские символы в заголовках письма использовать нельзя TODO

8.2. Смотрим, какие сервера используются RPOP

grep "RPOP-" /var/CommuniGate/SystemLogs/*.log | awk -F "[ ,(,)]" '{ print $4; }'|sort|uniq -c
<

8.3. Миграция пользователей со старой платформы

Старая почтовая система авторов построена на базе Postfix+Courier-IMAP с доступом пользователей через pop/smtp/imap и web-интерфейс squirrelmail. Информация о пользователях хранится в БД MySQL.

Процесс миграции включает в себя:

  • Экспорт информации о аккаунтах старой системы в текстовый файл
  • Создание аккаунтов пользоватей по шаблону на новой системе
  • Миграция дерева папок IMAP и почтовых сообщений со старого сервера на новый
  • Изменение dns-зон

Итак, приступим:

Экспорт информации о аккаунтах старой системы в текстовый файл

Формат импорта/экспорта communigate предполагает поля, разделенные знаком табуляции. В первой строчке указываются наименования полей.

Скрипт:

#!/bin/bash

 MHOST="127.0.0.1"
 LOGIN="sqllogin"
 PASS="sqlpass"

 QUERY=" SELECT login, name, password
         FROM users;"

 mysql -h $MHOST --execute="$QUERY" --database="dbname" --user="$LOGIN" --password="$PASS" | \
 awk -F "|" \
 'BEGIN { \
     print "Name" "\t" "RealName" "\t" "Password" \
 } { printf("%s\t%s\t%s\n",$1,$2,$3);  }' | iconv -f koi8-r -t utf-8 > account_list.txt
<

Создание аккаунтов пользоватей по шаблону на новой системе

В административном интерфейсе communigate:

Пользователи -> Домены -> Имя_домена -> Объекты

Выбираем "Импортировать" указав путь к файлу

Миграция дерева папок IMAP и почтовых сообщений со старого сервера на новый

Communigate предоставляет утилиты для миграции. Они находятся в каталоге /opt/CommuniGate/Migration:

Команда:

./MoveAccounts --IMAP account_list.txt old_imap_ip communigate_domain_ip
<

Через некоторое время вся информация пользователей будет перенесена.

8.4. Модификация интерфейса Pronto!

Можно при необходимости заменить логотипы Communigate на свои собственные загрузив в папку со скином Pronto следующие файлы [16]<:

  • loginlogoimage.png

The main logo on the login page. Size: 350x117 pixels, background: transparent.

  • loginimage.png

Login page "screenshot image". Size: 440x340 pixels, background: opaque.

  • logosmallimage.png

The main screen logo in the top left corner. Size: 90x30 pixels, background: transparent.

  • customlogosmall.png

Rotates with the CommuniGate Pro logo in the right bottom corner of the main screen. Size: 90x30 pixels, background: transparent.

  • customlogomedium.png

Rotates with the CommuniGate Pro logo on the login page. Size: 145x50pixels, background: transparent.

8.5. Рутина

8.5.1. Управление аккаунтами

Управление аккаунтами пользователей осуществляется администраторами домена при помощи внешнего java-приложения. java-библиотека и описание функций работы представлены на сайте производителя по адресу: http://www.stalker.com/CGJava/<

8.5.1.1. Вспомогательные perl-скрипты

Сброс всем пользователям размера почтового ящика на установленный "По-умолчанию" в домене

#!/usr/bin/perl -w

use CLI;

my $cli = new CGP::CLI( { PeerAddr => 'cgp.example.com',
                        PeerPort => 106,
                        login    => 'postmaster',
                        password => 'abc123'
                        } )
        || die "Can't login to CGPro: ".$CGP::ERR_STRING."\n";

my $domList=$cli->ListDomains() || die "can't list domains";

foreach $domain (sort @$domList) {
  $AccountList = $cli->ListAccounts($domain)
                 || die "Error: ".$cli->getErrMessage.", quitting";
  foreach(keys %$AccountList) {
    $address = "$_\@$domain";
    print "$address\n";
   
    $cli->UpdateAccountSettings($address,{MaxAccountSize => 'Default'})
        || die "Error: ".$cli->getErrMessage.", quitting";
  }
}

$cli->Logout;
<

8.5.2. Работа с пользователями

FAQ для пользователей: CommuniGate_FAQ<

 


FAQ по использованию сервиса от компании Zenon N.S.P. http://www.go.ru/faq.html<

Еще о том-же для администраторов сервисов: http://www.host.ru/support/mail/<

FAQ почтовой службы Rambler: http://help.rambler.ru/project.html?s=103<

Примеры документации для пользователей (нужное!!!): http://unixgeek.nm.ru/guides.html<

8.5.3. Настройка клиентских машин

9. Ссылки по теме

Communigate

SIP/PBX

Списки рассылки

Adobe AIR

Скрипты для cgp

cgpav

SpamAssasin

ClamAV

Механизм проверки SPF

Проверка на наличие адреса в RBL

Разное

RFC

10. Всякое

10.1. PBX

ngrep -W byline port 5060
<

Смотрим, кто вообще пользуется IP-телефонией:

grep sip-gw.address * | grep PBXLEG|awk -F "impersonate=" '{ print $2; }'|awk -F ";" '{ print $1; }'|sort|uniq -c|sort -n
<

10.2. Why am I seeing the following error concerning LDAP access after upgrading CommuniGate Pro to version 5.1.8 or later?

LDAP-XXXXXXX([XX.XX.XX.XX]) search failed. Error Code=insufficient directory access rights

By default the newer versions of CommuniGate Pro do not allow anonymous access to the Directory. Aside from the log entry in this question, you will most likely also see a log entry for this same transaction that shows an attempt to bind to the Directory as 'anyone', thus anonymous access. If you want to allow 'anyone' to browse the directory, you will need to modify the LDAP access rights within the CGP Admin interface. If you go to the Directory | Access rights section, you will most likely see a 'ReadAll' right. If you change the BindDN for this right from '*' to 'anyone', then anonymous directory access should work.

Security note: Anonymous access to the directory means that anyone can connect to your server and browse the contents of your Directory via LDAP. Please take this into consideration when configuring the settings above.

10.3. Automatic redirect from http to https

This can be done by modifying your login page (login.wssp) - Put this at the very beginning of the file:

< !--%%IF NOT(secureChannel)--><REDIRECT>https://yourdomain:9100< !--%%ELSE-->
... rest of login page
< !--%%ENDIF-->
<

But you don't have to redirect and serve the login page through https. You can simply modify the Form action attribute for the login data to be sent through https (and the webmail session to continue in httpd mode). Just search for the <form> declaration in login.wssp and change its action, something like

<form action="https://yourdomain:9100" ... >
<

10.4. Perl

# ConvTime(string)
# This procedure converts CGPro textual date/time string into UNIX format
# (the number of seconds since 00:00:00 UTC, January 1, 1970).

sub ConvTime {
  my ($sec,$min,$hour,$mday,$month,$year);
  my %mNames=qw(Jan 0 Feb 1 Mar 2 Apr 3 May 4 Jun 5
                Jul 6 Aug 7 Sep 8 Oct 9 Nov 10 Dec 11);
  if($_[0] =~ /(\d{1,2}).(\w\w\w).(\d\d\d\d).(\d\d):(\d\d):(\d\d)/) {
    $mday=$1;
    $month=$mNames{$2};
    $year=$3-1900;
    $hour=$4;
    $min=$5;
    $sec=$6;
  } elsif($_[0] =~ /(\d\d)-(\d\d)-(\d\d\d\d).(\d\d):(\d\d):(\d\d)/) {
    $mday=$1;
    $month=$2-1;
    $year=$3-1900;
    $hour=$4;
    $min=$5;
    $sec=$6;
  } elsif($_[0] =~ /#T(\d\d)-(\d\d)-(\d\d\d\d)_(\d\d):(\d\d):(\d\d)/) {
    $mday=$1;
    $month=$2-1;
    $year=$3-1900;
    $hour=$4;
    $min=$5;
    $sec=$6;
  } else {
   die "Unknown date format: \"$_[0]\", quitting";
  }
  return POSIX::mktime($sec,$min,$hour,$mday,$month,$year);
}<

10.5. BIND NAPTR DNS Configuration for ENUM with Extensions

here's the content for the x.x.x.x.e164.arpa file

$TTL 1800
@ IN SOA ns.core.at. hostmaster.xx.xx. (
                2007070801
                10000
                3600
                604800
                1800)


@               IN NS  ns.xx.xx.
                IN NS  ns2.xx.xx.

@ IN NAPTR 5 10 U E2U+sip "!^.*$!sip:[email protected]!".
@ IN NAPTR 5 15 U E2U+email:mailto  "!^.*$!mailto:[email protected]!".
@ IN NAPTR 5 20 U E2U+web:http "!^.*$!http://www.xxx.com!".
@ IN NAPTR 10 10 U E2U+tel "!^.*$!tel:\+43xxxxxx!".
*.0.1.0.1.0.8.0.8.7.3.4.e164.arpa. IN NAPTR 5 10 U E2U+sip "!^\\+43xxxxxx([0-9][0-9])$!sip:\\[email protected]!".
*.0.1.0.1.0.8.0.8.7.3.4.e164.arpa. IN NAPTR 10 10 U E2U+tel "!^\\+43xxxxxx([0-9][0-9])$!tel:\+43xxxxxx\\1!".
<

replace SIPHOST with the FQDN of your server (for example sip.core.at) replace +43xxxxx with your enum-number (+43780801010)

with this config you've got extension 01 to 99 - if you need more then add one time [0-9] at the NAPTR-record.

  • https://support.communigate.com/forum/showthread.php?t=16