Blog of Khlebalin Dmitriy

(Дорогу осилит идущий…)

Postfix как шлюз для Exchange (часть 2).

Пришло время продолжить начатое. Об этом я писал здесь.

https://khlebalin.wordpress.com/category/linux-and-unix/page/2/

 Итак,  Postfix у нас стоит и работает. Но это всего лишь шлюз. Меня это никак не устраивает, хотелось бы еще, чтоб фильтровался спам и прикрутить антивирус. Этим и займемся.

Устанавливаим и настраиваем Clamav (Не забываем обновлять порты) .

# cd /usr/ports/security/clamav
# make install clean

Далее настраиваем Clamav — /usr/local/etc/clamd.conf

 ##

## config file for the Clam AV daemon
##

LogFile /var/log/clamav/clamd.log
LogFileMaxSize 0
LogTime yes
LogSyslog yes
PidFile /var/run/clamav/clamd.pid
DatabaseDirectory /var/db/clamav
LocalSocket /var/run/clamav/clamd.sock
FixStaleSocket yes
User clamav
AllowSupplementaryGroups yes
TCPSocket 3310
TCPAddr 127.0.0.1
MaxConnectionQueueLength 30
MaxThreads 50
ReadTimeout 300
ScanPDF yes
ScanPE yes
ScanELF yes
DetectBrokenExecutables yes
ScanOLE2 yes
ScanMail yes
ScanArchive yes
ArchiveBlockEncrypted no
#ArchiveMaxFileSize 5M

 Кидаем в загрузку и запускаем:

# echo 'clamav_clamd_enable="YES"' >> /etc/rc.conf
# /usr/local/etc/rc.d/clamav-clamd start

Далее необходимо обновить базы — для этого настраиваем /usr/local/etc/freshclam.conf

##

## config file for freshclam
##
DatabaseDirectory /var/db/clamav
UpdateLogFile /var/log/clamav/freshclam.log
PidFile /var/run/clamav/freshclam.pid
DatabaseOwner clamav
AllowSupplementaryGroups yes
DatabaseMirror db.ru.clamav.net
Checks 24
NotifyClamd /usr/local/etc/clamd.conf

Сначала добавим автозапуск cron:

Запускаем и прописываем в крон для ежедневного запуска обновления в 23:45:

# /usr/local/bin/freshclam
# crontab –e (здесь у меня шедулер открылся для редактирования с помощью vi, а не ее). Надо поправить это положение, можно просто поправить конфиг вот так: ee /etc/crontab

Пдробно про шедулер можно прочесть, например, здесь: http://daemony.org/freebsd/freebsd-cron-howto.html
Добавляем наше задание

45 23 * * * /usr/local/bin/freshclam

 Все Clamav настроен и работает.

 Теперь производим настройку и установку Spamassassin.

Установим  его из портов:

# cd /usr/ports/mail/p5-Mail-SpamAssassin
# make install clean

Ставим в загрузку

# echo 'spamd_enable="YES"' >> /etc/rc.conf

 и настраиваем /usr/local/etc/mail/spamassassin/local.cf

rewrite_header Subject *****SPAM*****
report_safe 1
required_score 7.0
use_bayes 1
bayes_auto_learn 1
bayes_ignore_header X-Bogosity
bayes_ignore_header X-Spam-Flag
bayes_ignore_header X-Spam-Status

и запускаем

/usr/local/etc/rc.d/sa-spamd start

 Выскочила вот такая ошибка

Надо разбираться: Смотрим, есть ли PID

Нет. Начал копать в интернете, навскидку решения найти не смог. Придется детально углубиться в траблешутинг этой проблемы.

Здесь придется не мало повозиться.

Для начала пересоберем ядро добавив следующие опции:

ee sys/i386/conf/GENERIC

Пересобираем ядро

cd /usr/src
make buildkernel KERNCONF=GENERIC

Теперь осталось в файле /etc/rc.conf включить поддержку spamd и пакетного фильтра pf (если он не был запущен ранее):

pf_enable=»YES»

pf_flags=»»

pflog_enable=»YES»

 pfspamd_enable=»YES»

pfspamd_flags=»-v»

И внести некоторые строки в файл /etc/pf.conf 
table persist
no rdr inet proto tcp from to any port 25
rdr pass inet proto tcp from any to any port 25 -> 127.0.0.1 port 8025
В таблицу будут попадать адреса, подтвердившие свою приверженность протоколу (этим они заслужили право соединяться непосредственно с 25-м портом). Остальные будут отданы на растерзание spamd (в идеале он должен быть 127.0.0.1).

Параллельно в spamd.conf добавим следующие строки:

# As of November 2004, a place to search for black lists is
#     http://spamlinks.net/filter-bl.htm 
all:\
        :uatraps:nixspam:china:korea: 
# University of Alberta greytrap hits
# Addresses stay in it for 24 hours from time they misbehave.
uatraps:\
        :black:\
        :msg="Your address %A has sent mail to a ualberta.ca spamtrap\n\
        within the last 24 hours":\
        :method=http:\
        :file=www.openbsd.org/spamd/traplist.gz
# Nixspam recent sources list.
# Mirrored from http://www.heise.de/ix/nixspam
nixspam:\
        :black:\
        :msg="Your address %A is in the nixspam list\n\
        See http://www.heise.de/ix/nixspam/dnsbl_en/ for details":\
        :method=http:\
        :file=www.openbsd.org/spamd/nixspam.gz
# Mirrored from http://www.okean.com/chinacidr.txt
china:\
        :black:\
        :msg="SPAM. Your address %A appears to be from China\n\
        See http://www.okean.com/asianspamblocks.html for more details":\
        :method=http:\
        :file=www.openbsd.org/spamd/chinacidr.txt.gz:
# Mirrored from http://www.okean.com/koreacidr.txt
korea:\
        :black:\
        :msg="SPAM. Your address %A appears to be from Korea\n\
        See http://www.okean.com/asianspamblocks.html for more details":\
        :method=http:\
        :file=www.openbsd.org/spamd/koreacidr.txt.gz:
# Whitelists are done like this, and must be added to "all" after each
# blacklist from which you want the addresses in the whitelist removed.
#
whitelist:\
        :white:\
        :method=file:\
        :file=/var/db/whitelist.txt: 
blacklist:\
        :black:\
        :method=file:\
        :file=/var/db/blacklist.txt:

Но все это хоть и необходимо, но не помогло исправить ошибку:

Придется разбираться дальше:

Вот здесь нашел решение проблемы

http://forum.lissyara.su/viewtopic.php?f=20&t=28375

Далее

Проверяем

В итоге проблема решена.

Осталось настроить ClamSMTP. Ставим из портов:

# cd /usr/ports/security/clamsmtp
# make install clean

Далее настраиваем /usr/local/etc/clamsmtpd.conf :

#
# config file for clamsmtpd
#

# The address to send scanned mail to.
# This option is required unless TransparentProxy is enabled
OutAddress: 10026

# The maximum number of connection allowed at once.
# Be sure that clamd can also handle this many connections
#MaxConnections: 64

# Amount of time (in seconds) to wait on network IO
#TimeOut: 180

# Keep Alives (ie: NOOP’s to server)
#KeepAlives: 0

# Send XCLIENT commands to receiving server
#XClient: off

# Address to listen on (defaults to all local addresses on port 10025)
#Listen: 0.0.0.0:10025
Listen: 127.0.0.1:10025

# The address clamd is listening on
#ClamAddress: /var/run/clamav/clamd
ClamAddress: /var/run/clamav/clamd.sock

# A header to add to all scanned email
Header: X-Virus-Scanned: ClamAV Scanned

# Directory for temporary files
TempDirectory: /tmp

# What to do when we see a virus (use ‘bounce’ or ‘pass’ or ‘drop’
Action: drop

# Whether or not to keep virus files
Quarantine: on

# Enable transparent proxy support
#TransparentProxy: off

# User to switch to
User: clamav

# Virus actions: There's an option to run a script every time a virus is found.
# !IMPORTANT! This can open a hole in your server's security big enough to drive
# farm vehicles through. Be sure you know what you're doing. !IMPORTANT!
#VirusAction: /path/to/some/script.sh

Вносим в rc.conf и и запускаем

# echo clamsmtpd_enable="YES"' >> /etc/rc.conf
# /usr/local/etc/rc.d/clamsmtpd start

:�}C9�.����one windowtext 1.0pt;mso-border-alt:none windowtext 0cm; padding:0cm’>
# /usr/local/etc/rc.d/clamsmtpd start

Теперь вносим изменения в настройки postfix, по умолчанию они находятся в /usr/local/etc/postfix

main.cf:
content_filter = scan:[127.0.0.1]:10025
receive_override_options = no_address_mappings

master.cf
# AV scan filter (used by content_filter)
scan unix — — n — 16 smtp
-o smtp_send_xforward_command=yes
-o smtp_enforce_tls=no

# For injecting mail back into postfix from the filter
127.0.0.1:10026 inet n — n — 16 smtpd
-o content_filter=
-o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
-o smtpd_helo_restrictions=
-o smtpd_client_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks_style=host
-o smtpd_authorized_xforward_hosts=127.0.0.0/8

# Check spam
smtp inet n — n — — smtpd
-o content_filter=spam:dummy

spam unix - n n - - pipe
flags=R user=virtual argv=/usr/local/bin/spamc -u virtual -e /usr/sbin/sendmail -f $sender $recipient

Осталось протестировать. Необходимо вставить в тело письма тестовые сигнатуры

Для определения вируса:
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*

Для определения спама:
Subject: Relax, be happy
XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X

Вот и все — все работает. Конечно полноценно потестить на тестовой среде не возможно на сколько корректно отбраковывается спам или вирус и при вводе в продакщин придется еще что-нибудь докрутить. Но как говорится: что есть, то есть.

 Продолжение следует…

Всем удачи !!!

03.05.2011 Posted by | linux and unix | Комментарии к записи Postfix как шлюз для Exchange (часть 2). отключены