Почтовый сервер с хранением данных в PostgreSQL (окончание)

от автора

В этом посте будет заключительная серия по настройке почтового сервера с хранением сообщений в базе данных. В ней будет рассмотрены настройка антиспам фильтра на базе Spamassassin, утилиты RKhunter, предназначенной для поиска вредоносов путем проверки MD5 сумм, контроля неверных прав доступа и сигнатур закладок в модулях ядра, а также затронута настройка подсистемы аудита Auditd.

6 Антиспам фильтр на базе Spamassassin

6.1 Установка и настройка Spamassassin

Куда уж теперь без него? Иногда несусветно одолевают окоянные своими предложениями, просьбами, увещеваниями и прочей фигнёй. В качестве средства борьбы с этой напастью взят распространённый и уже проверенный временем Spamassassin.
Установка пакета Spamassassin:

yum install spamassassin 

На совете в Филях было принято решение спам-фильтру работать с хранением информации по аналогии с почтовой программой, в смысле хранить данные в СУБД, поэтому с сайта были скачаны исходники таблиц awl_pg.sql, bayes_pg.sql, userpref_pg.sql для работы с PostgreSQL.
Для возможности работы с СУБД необходимо установить дополнительный модуль на Перл perl-DBD-Pg со всеми вытекающими по зависимостям, а так же модуль для нормальной работы Perl скриптов с UserAgent — perl-libwww-perl:

yum install -y perl-DBD-Pg perl-libwww-perl 

Теперь можно создать пользователя, базы данных антиспама, саму базу данных и заполнить таблицы:

su postgres psql -U postgres CREATE USER zigzag WITH ENCRYPTED PASSWORD 'utiputi'; CREATE DATABASE paprica WITH OWNER zigzag; GRANT ALL ON DATABASE paprica TO zigzag; \q  psql -U zigzag -h localhost paprica < /opt/spamassassin/awl_pg.sql psql -U zigzag -h localhost paprica  < /opt/spamassassin/bayes_pg.sql psql -U zigzag -h localhost paprica  < /opt/spamassassin/userpref_pg.sql 

Основной конфигурационный файл Spamassassin приводится к следующему виду:

Содержимое файла /etc/mail/spamassassin/local.cf

# These values can be overridden by editing ~/.spamassassin/user_prefs.cf  # (see spamassassin(1) for details)   # These should be safe assumptions and allow for simple visual sifting  # without risking lost emails.    required_hits 5  report_safe 0  rewrite_header Subject [SPAM]   ok_locales en ru internal_networks 192.168.0.0/24 trusted_networks 192.168.0. trusted_networks 192.168.17. required_score 9.0  # Enable Bayes system use_bayes 1 use_bayes_rules 1  # Autowhitelist use_auto_whitelist 1  # Enable auto-learn Bayes system bayes_auto_learn 1  # Enable and bisable checks network skip_rbl_checks 1 bayes_auto_expire 1  # Connect to data base PostgreSQL bayes_store_module Mail::SpamAssassin::BayesStore::SQL  auto_whitelist_factory Mail::SpamAssassin::SQLBasedAddrList user_awl_dsn DBI:Pg:dbname=paprica;host=localhost user_awl_sql_username zigzag user_awl_sql_password utiputi user_awl_sql_table awl  bayes_store_module Mail::SpamAssassin::BayesStore::PgSQL bayes_sql_dsn DBI:Pg:dbname=paprica;host=localhost bayes_sql_username zigzag bayes_sql_override_username zigzag bayes_sql_password utiputi  user_scores_dsn DBI:Pg:dbname=paprica;host=localhost user_scores_sql_username zigzag user_scores_sql_password utiputi  ## Optional Score Increases score SPF_FAIL 10.000 score SPF_HELO_FAIL 10.000 score BAYES_99 6.000 score BAYES_95 4.500 score BAYES_80 4.000  # White list from whitelist_from localhost whitelist_from *@kremlin.ru  whitelist_from *@test.com whitelist_from *@fbi.cn  # Black list to blacklist_to designer@test.com blacklist_to postmaster@test.com blacklist_to webmaster@test.com blacklist_to mdaemon@test.com blacklist_to root@test.com blacklist_to info@test.com blacklist_to secretar@test.com blacklist_to Mailer-Daemon@test.com blacklist_to system@test.com blacklist_to support@test.com blacklist_to director@test.com  # Black list from blacklist_from designer@test.com blacklist_from postmaster@test.com blacklist_from webmaster@test.com blacklist_from mdaemon@test.com blacklist_from info@test.com blacklist_from secretar@test.com blacklist_from Mailer-Daemon@test.com blacklist_from *@domosedam.net  blacklist_from *@trade.su blacklist_from *@qip.ru blacklist_from *@email.ru blacklist_from *@subcribe.ru 

Содержимое файла v310.pre

# DCC - perform DCC message checks.  #  # DCC is disabled here because it is not open source.  See the DCC  # license for more details.  #  #loadplugin Mail::SpamAssassin::Plugin::DCC   # Pyzor - perform Pyzor message checks.  #  ###loadplugin Mail::SpamAssassin::Plugin::Pyzor   # Razor2 - perform Razor2 message checks.  #  ###loadplugin Mail::SpamAssassin::Plugin::Razor2   # SpamCop - perform SpamCop message reporting  #  loadplugin Mail::SpamAssassin::Plugin::SpamCop   # AntiVirus - some simple anti-virus checks, this is not a replacement  # for an anti-virus filter like Clam AntiVirus  #  #loadplugin Mail::SpamAssassin::Plugin::AntiVirus   # AWL - do auto-whitelist checks  #  loadplugin Mail::SpamAssassin::Plugin::AWL   # AutoLearnThreshold - threshold-based discriminator for Bayes auto-learning  #  loadplugin Mail::SpamAssassin::Plugin::AutoLearnThreshold   # TextCat - language guesser  #  loadplugin Mail::SpamAssassin::Plugin::TextCat   # AccessDB - lookup from-addresses in access database  #  loadplugin Mail::SpamAssassin::Plugin::AccessDB   # WhitelistSubject - Whitelist/Blacklist certain subject regular expressions  #  loadplugin Mail::SpamAssassin::Plugin::WhiteListSubject   #################################################################### # experimental plugins   # DomainKeys - perform DomainKeys verification  #  # This plugin has been removed as of v3.3.0.  Use the DKIM plugin instead,  # which supports both Domain Keys and DKIM.   # MIMEHeader - apply regexp rules against MIME headers in the message  #  loadplugin Mail::SpamAssassin::Plugin::MIMEHeader   # ReplaceTags  #  loadplugin Mail::SpamAssassin::Plugin::ReplaceTags 

Файл /etc/sysconfig/spamassassin приводится к следущему виду:

## Options to spamd (default) SPAMDOPTIONS="-d -c -m5 -H -l -q -Q -x -s /var/log/spamassassin.log --round-robin --socketpath=/var/run/spamassassin/spamd.sock" 

Остальные конфигурационные файлы Spamassassin без изменений.

6.2 Настройки SELinux для Spamassassin

Поскольку Spamassassin будет использовать подключение к сети для соединения с СУБД и с МТА, в правилах SELinux разрешаем использовать сеть:

setsebool -P spamassassin_can_network on 

Т. к. использование дополнительных приложений к Spamassassin таких как Razor и Pazor не предполагается, то доступ к файловой системе (пользовательским папкам этих приложений) будет лишним:

setsebool -P spamd_enable_home_dirs off 

Запуск и, если всё прошло нормально:

/etc/init.d/spamassassin start 

Где-то под руками имелась небольшая коллекция спама, который сразу же пошёл в дело на обучение:

sa-learn --spam -u zigzag /opt/spamassassin/spam/ Learned tokens from 1467 message(s) (1532 message(s) examined) 

И небольшая горстка нормальных (не спам) писем:

sa-learn --ham -u zigzag /opt/spamassassin/ham/ Learned tokens from 743 message(s) (743 message(s) examined) 

Если никаких нареканий не выскакивало, можно добавить спам-фильтр в автозагрузку:

chkconfig --level 35 spamassassin on 

7 Rkhunter

Казалось бы, имеется сервер на базе ОС Linux (CentOS), имеются небольшие вкрапления настроечек SELinux и даже есть антиспам… И теперь можно спать (за рабочим столом) спокойно. Но увы. Разбойники со злодеями всех компьютерных мастей так и норовят преподнести неприятный сюрприз. Чтобы сей подарок не был таким уж внезапным, а так же не было скучно, решено установить специализированную утилиту rootkit детектор Rkhunter:

yum install rkhunter 

В конфигурационном файле следует указать почтовый адрес, на который должны сыпаться предупреждения. То есть исправить строку в файле /etc/rkhunter.conf:

MAIL-ON-WARNING="<п/я>" 

Для пущего счастья в том же файле можно раскомментировать строки:

TMPDIR=/var/lib/rkhunter/tmp DBDIR=/var/lib/rkhunter/db LANGUAGE=en LOGFILE=/var/log/rkhunter.log SSH_CONFIG_DIR=/etc/ssh 

Создать директорию /var/lib/rkhunter/tmp с красивым контекстом:

mkdir /var/lib/rkhunter/tmp chcon -u system_u /var/lib/rkhunter/tmp restorecon -v /var/lib/rkhunter/tmp 

Обновить базу утилиты:

rkhunter --update 

Выполнить проверку системы:

rkhunter -c --update --noappend-log --vl 

Во время проверки будут появляться приглашения нажать Enter. Смотрим на вывод в консоли и делаем выводы в голове.
Можно добавить в cron обновление базы утилиты rkhunter и проверку системы:

0  23  *  *  1 /usr/bin/sudo rkhunter --update --cronjob 30 23 *  *  * /usr/bin/sudo rkhunter --check --cronjob 

8 Настройка системы аудита

Как бы не было много утилит для обеспечения безопасности, всё равно требуется вести учёт изменений в системе. Аудит производится на уровне системных вызовов. Простая настройка системы аудита осуществляется в файле /etc/audit/audit.rules:

Содержимое файла audit.rules

# This file contains the auditctl rules that are loaded # whenever the audit daemon is started via the initscripts. # The rules are simply the parameters that would be passed # to auditctl.  # First rule - delete all -D  # Increase the buffers to survive stress events. # Make this bigger for busy systems -b 8192  # Feel free to add below this line. See auditctl man page  # Что делать в чрезвычайной ситуации, например, если все буферы будут заполнены  # (1 – поместить сообщение в dmesg) -f 1  # System files -w /etc/audit/ -w /etc/audit/auditd.conf -p wa -w /etc/audit/audit.rules -p wa -w /etc/passwd -p wa -w /etc/group -p wa -w /etc/shadow -p wa -w /etc/libaudit.conf -p wa -w /etc/localtime -p wa -w /etc/sysctl.conf -p wa -w /etc/modprobe.d/ -w /etc/sysconfig/ -w /etc/pam.d/ -w /etc/pki/ -w /etc/exim/ -w /etc/exim/exim.conf -p wa -w /etc/exim/trusted-configs -w /etc/crontab -p wa -w /etc/dbmail.conf -p wa -w /etc/mdadm.conf -p wa -w /etc/rkhunter.conf -p wa -w /etc/sestatus.conf -p wa  # Services -w /etc/rc.d/init.d/ -w /etc/rc.d/init.d/auditd -p wa -w /etc/ssh/sshd_config -p wa  # Network -w /etc/rc.d/init.d/iptables -p wax -w /etc/hosts -p wa  # Logs files -w /var/log/audit/ -w /var/log/audit/audit.log -p wa -w /var/log/secure -p wa -w /var/log/rkhunter/rkhunter.log -p wa -w /var/log/maillog -p wa -w /var/log/messages -p wa 

Запустить сервис и добавить в автозагрузку:

/etc/init.d/auditd start chkconfig auditd on 

Если есть какие-то свои представления, то можно добавить своих правил и ещё подкрутить настройки в файле /etc/audit/audit.conf.
Теперь можно использовать для анализа зловредстования SELinux данные из файла аудита. Например, посмотреть какие в системе есть блокировки и чем они вызваны:

audit2allow -w -a -r -v 

Если вывод довольно большой и имеется множество блокировок от различных процессов, то для рассмотрения блокировки какого-то из процессов применить команду grep:

grep exim /var/log/audit/audit.log | audit2allow -w -a -r -v 

Чтобы посмотреть правило Type Enforcement разрешающее блокированный доступ:

audit2allow -a 

Для применения правила, показанного командой audit2allow -a, выполнить команду:

audit2allow -a -M <имя модуля> 

Опцией -М будет создан файл типа Type Enforcement (.te) в текущем каталоге с указанным именем модуля. Помимо этого audit2allow скомпилирует правила Type Enforcement в пакет политики (.pp). Теперь для инсталляции модуля следует выполнить команду:

semodule -i <имя модуля> 

Проверка работы после инсталляции модуля выполняется с помощью утилиты из пакета setools-libs-tcl:

seaudit-report /var/log/audit/audit.log 

Если требуется создать индивидуальную политику для определённого процесса, для сужения вывода от выполнения команды audit2allow можно использовать команду grep:

grep exim /var/log/audit/audit.log | audit2allow -M exim 

Здесь следует обратить внимание на тот момент, что модули созданные с помощью утилиты audit2allow могут предоставлять больше доступа чем требуется и даже иногда носить совершенно инопланетный характер. Поэтому лучше её работу дополнять утилитой ausearch. Например, посмотреть те же блокировки exim за последние 10 минут:

ausearch -m avc -ts recent -c exim 

Для перезагрузки политик SELinux, чтобы не перезапускать компьютер следует выполнить:

semodule -R 

ссылка на оригинал статьи http://habrahabr.ru/post/224487/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *