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 приводится к следующему виду:
# 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
# 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:
# 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/
Добавить комментарий