Установка и настройка Postfix+Dovecot+Clamav+Spamassassin+Amavis на Centos 5
1.Установка и настройка Postfix и Dovecot
1 |
<b>yum install postfix dovecot </b> |
1 |
<b>yum remove sendmail</b> |
[root@guk5 ~]# rpm -qa | grep «postfix\|dovecot»
postfix-2.3.3-6.el5
dovecot-1.0.7-7.el5_7.1
1 |
Как вариант можно установить system-switch-mail |
1 |
Через <b>yum install system-switch-mail</b> |
И после этого запустить этот инструмент и выбрать Postfix как MTA по умолчанию
Включение Sasl и TLS здесь описывать не буду(хотя конфиг уже включает их поддержку)
Приводим /etc/postfix/main.cf к виду
[root@guk5 ~]# postconf -n
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
broken_sasl_auth_clients = yes
command_directory = /usr/sbin
config_directory = /etc/postfix
content_filter = amavisfeed:[127.0.0.1]:10024
daemon_directory = /usr/libexec/postfix
debug_peer_level = 2
header_checks = regexp:/etc/postfix/header_checks
html_directory = no
inet_interfaces = all
mail_owner = postfix
mailq_path = /usr/bin/mailq.postfix
manpage_directory = /usr/share/man
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mydomain = kama.dnsalias.com
myhostname = guk5.kama.dnsalias.com
mynetworks = 127.0.0.0/8
myorigin = $mydomain
newaliases_path = /usr/bin/newaliases.postfix
queue_directory = /var/spool/postfix
readme_directory = /usr/share/doc/postfix-2.3.3/README_FILES
sample_directory = /usr/share/doc/postfix-2.3.3/samples
sendmail_path = /usr/sbin/sendmail.postfix
setgid_group = postdrop
smtp_use_tls = yes
smtpd_banner = $myhostname ESMTP $mail_name
smtpd_delay_reject = yes
smtpd_helo_required = yes
smtpd_helo_restrictions = permit_mynetworks, reject_non_fqdn_helo_hostname, reject_invalid_helo_hostname, permit
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination reject_unauth_pipelining, reject_non_fqdn_recipient, reject_unknown_recipient_domain, reject_rbl_client zen.spamhaus.org, reject_rbl_client bl.spamcop.net, permit
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $mydomain
smtpd_sasl_security_options = noanonymous
smtpd_sender_restrictions = permit_mynetworks, reject_non_fqdn_sender, reject_unknown_sender_domain, permit
smtpd_tls_CAfile = /etc/postfix/smtpd.pem
smtpd_tls_auth_only = no
smtpd_tls_cert_file = /etc/postfix/smtpd.pem
smtpd_tls_key_file = /etc/postfix/smtpd.pem
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
smtpd_use_tls = yes
tls_random_source = dev:/dev/urandom
unknown_local_recipient_reject_code = 550
[root@guk5 ~]#
Включение Sasl и TLS здесь описывать не буду(хотя конфиг уже включает их поддержку)
Файл /etc/postfix/master.cf к виду
[root@guk5 ~]# cat /etc/postfix/master.cf
smtp inet n — n — — smtpd
#submission inet n — n — — smtpd
# -o smtpd_enforce_tls=yes
# -o smtpd_sasl_auth_enable=yes
# -o smtpd_client_restrictions=permit_sasl_authenticated,reject
smtps inet n — n — — smtpd
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
# -o smtpd_client_restrictions=permit_sasl_authenticated,reject
#628 inet n — n — — qmqpd
pickup fifo n — n 60 1 pickup
cleanup unix n — n — 0 cleanup
qmgr fifo n — n 300 1 qmgr
#qmgr fifo n — n 300 1 oqmgr
tlsmgr unix — — n 1000? 1 tlsmgr
rewrite unix — — n — — trivial-rewrite
bounce unix — — n — 0 bounce
defer unix — — n — 0 bounce
trace unix — — n — 0 bounce
verify unix — — n — 1 verify
flush unix n — n 1000? 0 flush
proxymap unix — — n — — proxymap
smtp unix — — n — — smtp
relay unix — — n — — smtp
-o fallback_relay=
# -o smtp_helo_timeout=5 -o smtp_connect_timeout=5
showq unix n — n — — showq
error unix — — n — — error
discard unix — — n — — discard
local unix — n n — — local
virtual unix — n n — — virtual
lmtp unix — — n — — lmtp
anvil unix — — n — 1 anvil
scache unix — — n — 1 scache
maildrop unix — n n — — pipe
flags=DRhu user=vmail argv=/usr/local/bin/maildrop -d ${recipient}
old-cyrus unix — n n — — pipe
flags=R user=cyrus argv=/usr/lib/cyrus-imapd/deliver -e -m ${extension} ${user}
cyrus unix — n n — — pipe
user=cyrus argv=/usr/lib/cyrus-imapd/deliver -e -r ${sender} -m ${extension} ${user}
uucp unix — n n — — pipe
flags=Fqhu user=uucp argv=uux -r -n -z -a$sender — $nexthop!rmail ($recipient)
ifmail unix — n n — — pipe
flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
bsmtp unix — n n — — pipe
flags=Fq. user=foo argv=/usr/local/sbin/bsmtp -f $sender $nexthop $recipient
Проверка синтаксиса Postfix
postfix check
Файл /etc/dovecot.conf к виду
[root@guk5 ~]# dovecot -n
# 1.0.7: /etc/dovecot.conf
base_dir: /var/run/dovecot/
protocols: pop3 pop3s imap imaps
login_dir: /var/run/dovecot//login
login_executable(default): /usr/libexec/dovecot/imap-login
login_executable(imap): /usr/libexec/dovecot/imap-login
login_executable(pop3): /usr/libexec/dovecot/pop3-login
mail_executable(default): /usr/libexec/dovecot/imap
mail_executable(imap): /usr/libexec/dovecot/imap
mail_executable(pop3): /usr/libexec/dovecot/pop3
mail_plugin_dir(default): /usr/lib/dovecot/imap
mail_plugin_dir(imap): /usr/lib/dovecot/imap
mail_plugin_dir(pop3): /usr/lib/dovecot/pop3
auth default:
passdb:
driver: pam
userdb:
driver: passwd
Добавляем в /etc/aliases
root: test (почта для рута будет приходить на test@<имя_домена>
newaliases
Установка в автозагрузку и старт сервисов
chkconfig —level 345 postfix on
chkconfig —level 345 dovecot on
/etc/init.d/postfix start
/etc/init.d/dovecot start
2.Фильтрация спама средствами Postfix
1 |
Добавляем в <b>/etc/postfix/main.cf</b> |
# HELO restrictions:
smtpd_delay_reject = yes
smtpd_helo_required = yes
smtpd_helo_restrictions =
permit_mynetworks,
reject_non_fqdn_helo_hostname,
reject_invalid_helo_hostname,
# reject_unknown_helo_hostname
permit
# Sender restrictions:
smtpd_sender_restrictions =
permit_mynetworks,
reject_non_fqdn_sender,
reject_unknown_sender_domain,
permit
# Recipient restrictions:
smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination
reject_unauth_pipelining,
reject_non_fqdn_recipient,
reject_unknown_recipient_domain,
# check_sender_access hash:/etc/postfix/sender_access,
reject_rbl_client zen.spamhaus.org,
reject_rbl_client bl.spamcop.net,
# check_policy_service unix:postgrey/socket,
permit
[root@guk5 ~]# postfix check
[root@guk5 ~]# postfix reload
postfix/postfix-script: refreshing the Postfix mail system
[root@guk5 ~]#
Для понимания, что к чему
[root@guk5 ~]# telnet 192.168.1.16 25
Trying 192.168.1.16…
Connected to kama.dnsalias.com (192.168.1.16).
Escape character is ‘^]’.
1 |
220 guk5.kama.dnsalias.com ESMTP Postfix # <-smtp_client_restrictions |
1 |
HELO guk5.kama.dnsalias.com # <-smtp_helo_restrictions |
250 guk5.kama.dnsalias.com
1 |
MAIL FROM:<a href="mailto:test@kama.dnsalias.com">test@kama.dnsalias.com</a> # <-smtp_sender_restrictions |
250 2.1.0 Ok
1 |
RCPT TO:<a href="mailto:bob@kama.dnsalias.com">bob@kama.dnsalias.com</a> # <-smtp_recipient_restrictions |
250 2.1.5 Ok
1 |
DATA # <-smtp_data_restrictions |
354 End data with <CR><LF>.<CR><LF>
1 |
To:<a href="mailto:bob@kama.dnsalias.com">bob@kama.dnsalias.com</a> # <-header_checks |
From:<test@kama.dnsalias.com>
Subject:SMTP Test
1 |
This is a test message # <-body_checks |
.
250 2.0.0 Ok: queued as 1D1EF5EB29
quit
221 2.0.0 Bye
Connection closed by foreign host.
3.Установка и настройка Clamav,Spamassassin,Amavis
yum install clamav amavisd-new spamassassin
Добавить пользователя,от которго запускает Clamd(у меня это clam в группу amavis)
gpasswd -a clam amavis
Основное внимание на такие настройки
Сlamav
/etc/clamd.conf
LogFile /var/log/clamav/clamd.log
TemporaryDirectory /var/tmp
DatabaseDirectory /var/lib/clamav
LocalSocket /var/run/clamav/clamd.sock
User clam
Spamassassin я даже не настравивал(работает из коробки,но донастроить более точно желтельно)
Amavis
/etc/amavisd/amavisd.conf
# @bypass_virus_checks_maps = (1); # uncomment to DISABLE anti-virus code
# @bypass_spam_checks_maps = (1); # uncomment to DISABLE anti-spam code
Т.е по умолчанию уже включена проверка на вирусы и спам
$max_servers = 2;
$daemon_user = ‘amavis’;
$daemon_group = ‘amavis’;
$mydomain = ‘kama.dnsalias.com’;
$MYHOME = ‘/var/spool/amavisd’;
$TEMPBASE = «$MYHOME/tmp»;
$ENV{TMPDIR} = $TEMPBASE;
$QUARANTINEDIR = undef;
# $quarantine_subdir_levels = 1;
# $daemon_chroot_dir = $MYHOME;
# $db_home = «$MYHOME/db»;
$helpers_home = «$MYHOME/var»; # Необходимо вручную создать папку var
$lock_file = «/var/run/amavisd/amavisd.lock»;
$pid_file = «/var/run/amavisd/amavisd.pid»;
$inet_socket_port = 10024;
$sa_tag_level_deflt = 2.0;
$sa_tag2_level_deflt = 6.31;
$sa_kill_level_deflt = 6.31;
$sa_dsn_cutoff_level = 10;
$mailfrom_notify_admin = «virusalert\@$mydomain»;
$mailfrom_notify_recip = «virusalert\@$mydomain»;
$mailfrom_notify_spamadmin = «spam.police\@$mydomain»;
$mailfrom_to_quarantine = »;
$myhostname = ‘guk5.kama.dnsalias.com’;
# $notify_method = ‘smtp:[127.0.0.1]:10025’;
# $forward_method = ‘smtp:[127.0.0.1]:10025’;
$final_virus_destiny = D_DISCARD; #зараженное письмо отклонять с уведомлением на #virusalert-пользователя
$final_banned_destiny = D_BOUNCE;
#$final_spam_destiny = D_DISCARD;
$final_spam_destiny = D_PASS; #spam-письмо просто помечать и доставлять #получателю
$final_bad_header_destiny = D_BOUNCE;
@av_scanners = (
# ### http://www.clamav.net/
[‘ClamAV-clamd’,
\&ask_daemon, [«CONTSCAN {}\n», «/var/spool/amavisd/clamd.sock»],
qr/\bOK$/, qr/\bFOUND$/,
qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ],
);
@av_scanners_backup = (
[‘ClamAV-clamscan’, ‘clamscan’,
«—stdout —no-summary -r —tempdir=$TEMPBASE {}»,
[0], qr/:.*\sFOUND$/, qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ],
);
1; # insure a defined return
В /etc/aliases добавляем
virusalert: root
spam.police: root
Перечитываем базу алиасов
newaliases
4.Привязка Amavis к Postfix
В /etc/postfix/master.cf добавляем
amavisfeed unix — — n — 2 lmtp
-o lmtp_data_done_timeout=1200
-o lmtp_send_xforward_command=yes
-o disable_dns_lookups=yes
-o max_use=20
127.0.0.1:10025 inet n — n — — smtpd
-o content_filter=
-o smtpd_delay_reject=no
-o smtpd_client_restrictions=permit_mynetworks,reject
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o smtpd_data_restrictions=reject_unauth_pipelining
-o smtpd_end_of_data_restrictions=
-o smtpd_restriction_classes=
-o mynetworks=127.0.0.0/8
-o smtpd_error_sleep_time=0
-o smtpd_soft_error_limit=1001
-o smtpd_hard_error_limit=1000
-o smtpd_client_connection_count_limit=0
-o smtpd_client_connection_rate_limit=0
-o receive_override_options=no_header_body_checks,no_unknown_recipient_checks,no_milters,no_address_mappings
-o local_header_rewrite_clients=
-o smtpd_milters=
-o local_recipient_maps=
-o relay_recipient_maps=
[root@guk5 ~]# postfix check
[root@guk5 ~]# postfix reload
postfix/postfix-script: refreshing the Postfix mail system
Настройка
clamd
.
amavis
nano
/
etc
/
sysconfig
/
clamd
.
amavisd
CLAMD_CONFIGFILE=/etc/clamd.d/amavisd.conf
CLAMD_SOCKET=/var/spool/amavisd/clamd.sock
CLAMD_OPTIONS=
nano /etc/clamd.d/amavisd.conf
LogSyslog yes
LogFacility LOG_MAIL
PidFile /var/run/amavisd/clamd.pid
FixStaleSocket yes
user (clamd must be started by root).
User amavis
LocalSocket /var/spool/amavisd/clamd.sock
Постановка в атозагрузку необходимых сервисом и и их запуск
Важно!!! Spamassassin в автозагрузку не добавляем и не запускаем его(он работает у нас не как демон,а как модуль к Amavis)
[root@guk5 ~]# chkconfig —level 345 clamd on
[root@guk5 ~]# chkconfig —level 345 amavisd on
[root@guk5 ~]# chkconfig —level 345 clamd.amavisd on
/etc/init.d/clamd start
/etc/init.d/amavisd start
/etc/init.d/clamd.amavisd start
5.Тестирование
cd /usr/share/doc/amavisd-new-2.4.5/
perl -pe ‘s/./chr(ord($&)^255)/sge’ <sample.tar.gz.compl | zcat | tar xvf –
1 |
perl -pe 's/./chr(ord($&)^255)/sge' <sample.tar.gz.compl | zcat | tar xvf - |
Отправка с командной строки тестового вируса
sendmail -i bob@kama.dnsalias.com < sample-virus-simple.txt
Отправка с командной строки тестового спама
sendmail -i bob@kama.dnsalias.com < sample-spam-GTUBE-junk.txt
Логии смотрим в /var/log/maillog
Источники:
- http://wiki.centos.org/HowTos/postfix
- http://wiki.centos.org/HowTos/postfix_restrictions
- http://wiki.centos.org/HowTos/Amavisd
Полезные ссылки:
1.http://wiki.centos.org/HowTos/postfix_sasl
http://wiki.centos.org/HowTos/postgrey
http://www.it-net.com.ua/blogs/nastrojka-sasl-i-tls-v-postfix/
Примечание
Т.к у меня не работала при этом авторизация с системных пользователей,то я изменил
в /etc/postfix/main.cf
#mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mydestination = localhost.$mydomain, localhost
Потом создал через postfixadmin вирт домен(kama.dnsalialias.com) и пару почтовых ящиков
Для работы с таким вирт доменом в отличии от системного,необходимо подкорректировать настройки почт.клиента(у меня Thunderbird,как для POP3/IMAP-сервера, так и для SMTP-сервера,а именно необходимо изменить имя пользователя с краткого(просто test) на полное имя_польз@имя_домена(test@kama.dnsalias.com)
Установка и настройка squirrelmail
yum install squirrelmail php-pear-DB
Проверяем наличие и содержимое файла
nano /etc/httpd/conf.d/squirrelmail.conf
Alias /webmail /usr/share/squirrelmail
/etc/init.d/httpd restart
Выбираем Dovecot как IMAP-сервер
/usr/share/squirrelmail/config/conf.pl
D→Dovecot→S→Q
http://192.168.1.16/webmail/src/configtest.php — проверка конфига через Web-интерфейс
Если все в порядке,тогда логинимся
http://192.168.1.16/webmail/src/login.php