Установка корп. почтовой системы на базе Postfix+Exchange2007+etc

  • 11 April 2011
  • taku

Перешел на новую работу, а тут такое!
в начале было так стоял Exchange 2007 без антивиря с антиспамовой системой ORF
развернул Касперыча, после чего обнаружил, что в ORF заканчивается evalution период, задумка о разносе почтовой системы была сразу только много задач и руки не доходили, но когда осталось 3и дня до окончания evalutuon срока действи ORF меня подбило на ночную установку.
план
1) развернуть postfix на ubuntu 10.04 LTS
2) прописать в exchange транспорт
3) настроить почтовую защиту

Этап первый
1) убунту ставиться без проблем как говорили мои армейские товарищи сетуп-сетуп-ништяк-ништяк(
2) apt-get install openssh-server postfix mc

при установке он спросит чего какую систему хочешь, выбор пал за internet site
приступаем настройкам конфигов postfix
отредактируем my.cnf
приведу свой конфиг

myhostname = t1.mssz.ru#обязательно реальное имя сервера! иначе при дальнейших проверках будут проблемы с хождением почты!
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = mail.mssz.ru, ext.mssz.local, localhost.mssz.local, localhost, mssz.ru, mx.mssz.ru
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128, 192.168.100.0/23 # доверенные сети!
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
local_recipient_maps =
transport_maps = hash:/etc/postfix/transport # таблица маршрутов где пропишем в дальнейшем exchange

внесем изменения в transport

echo test.ru smtp:[192.168.100.4] > /etc/postfix/transport

где 192.168.100.4 это Exchange сервер
создадим бд

postmap transport

перезагрузим постфих

postfix restart

Второй этап Echange 207
создадим SMTP коннектор
для этого открываем exchange консоль

C:\>New-SendConnector -Name ‘OUT’ -Usage ‘Internet’ -AddressSpaces ‘smtp:*;1’ -DNSRoutingEnabled $false -SmartHosts ‘[192.168.100.2]’ -SmartHostAuthMechanism ‘None’ -SourceTransportServers ‘POST’

где POST- имя Exchange сервера, а 192.168.100.2 — Postfix сервер
Этап трети защита
тут я обобщил из уже ранних настроек своей почты.
1) установим spamassasin

apt-get install spamassassin

для автоматического старта делаем изменения в /etc/default/spamassassin
ENABLED=1
Создаем пользователя для запуска антиспама:

adduser —disabled-password —disabled-login —home /etc/spamassassin spamd

Приводим файл конфигурации антиспама /etc/spamassassin/local.cf к такому:

rewrite_header Subject *****SPAM*****
report_safe 0
required_score 5.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

создаем каталог

mkdir .spamassassin в /etc/spamassassin

меняем хозяина chown spamd:spamd на созданный ранее каталог это можно сделать через mc

Редактируем файл постфикса /etc/postfix/master.cf
Строку

smtp inet n — — — — smtpd

заменим на

smtp inet n — — — — smtpd -o content_filter=spamassassin

добавляем:

spamassassin unix — n n — — pipe user=spamd argv=/usr/bin/spamc -s 5120000 -f -e /usr/sbin/sendmail -oi -f ${sender} ${recipient}

Установим ClamAV

apt-get install clamsmtp

Редактируем /etc/clamsmtpd.conf :

OutAddress: 10026
Listen: 127.0.0.1:10025
ClamAddress: /var/run/clamav/clamd.ctl
Header: X-AV-Checked: ClamAV using ClamSMTP
TempDirectory: /tmp
PidFile: /var/run/clamsmtp/clamsmtpd.pid
Quarantine: off
TransparentProxy: off
User: clamsmtp

Редактируем конфиг постфикса /etc/postfix/main.cf :

content_filter = avscan:127.0.0.1:10025
receive_override_options = no_address_mappings

Добавляем в /etc/postfix/master.cf

avscan unix — — n — 10 smtp -o smtp_send_xforward_command=yes
127.0.0.1:10026 inet n — n — 10 smtpd -o content_filter=

перед

spamassassin unix — n n — — pipe user=spamd argv=/usr/bin/spamc -s 5120000 -f -e /usr/sbin/sendmail -oi -f ${sender} ${recipient}

добавим black-dns в main.cf

smtpd_helo_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unknown_hostname,reject_invalid_hostname
smtpd_sender_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unknown_sender_domain
smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_non_fqdn_recipient,reject_unknown_recipient_domain,reject_unauth_destination,reject_unauth_pipelining,reject_rbl_client bl.spamcop.net,reject_rbl_client cbl.abuseat.org,reject_rbl_client opm.blitzed.org,reject_rbl_client blackholes.mail-abuse.org,reject_rbl_client dialups.mail-abuse.org,reject_rbl_client dul.ru,reject_rbl_client dul.dnsbl.sorbs.net,reject_rbl_client sbl.spamhaus.org,reject_rbl_client dnsbl.njabl.org,reject_rbl_client combined.njabl.org,reject_rbl_client ackholes.mail-abuse.org

все готово можем либо рестартануть службы или если не критично сервер.
и еще не все впереди установка системы статистики.

в продолжение темы установил статистику вывода работы почтового сервера по средствам программы mailgraph и rrdtool
т.к. статистику будем выводить на web то ставим apache

apt-get install apache2 libapache2-mod-perl2

сконфигурируем apache на выполнение cgi-bin
mcedit /etc/apache2/apache2.conf
добавим в конец конфига следующее:

ScriptAlias /cgi-bin/ /var/www/cgi-bin/
< Directory /var/www/cgi-bin/>
Options ExecCGI
AddHandler cgi-script cgi pl
< /Directory >

установим mailgraph и rrdtool

apt-get install rrdtool mailgraph

пропишем автозапуск mailgraph в /etc/rc.local

/usr/sbin/mailgraph -v -d

запустим mailgraph /usr/sbin/mailgraph -v -d

заходим на http://youserver/cgi-bin/mailgraph.cgi
и наблюдаем за статистикой.

Система мониторинга логов
подзадача такова
грепить mail.log каждый раз когда что то кому то нужно рассказать, мне не очень то хочется.
поэтому нашел в инете статейку каким образом можно собирать весь лог в единое целое и как потом из этого целого вытаскивать в веб интерфейсе все это называется mailstat
поехали:
1) создаем БД сперва создадим фаил и внесем в него нижеприведенную информацию
#nano maillogs.sql
со следующими параметрами

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

 

--
-- Структура таблицы `calendar`
--

CREATE TABLE IF NOT EXISTS `calendar` (
`num` int(2) NOT NULL default '0',
`month` char(3) NOT NULL default '',
`mesyc` varchar(20) NOT NULL default ''
) ENGINE=MyISAM DEFAULT CHARSET=koi8r;

--
-- Дамп данных таблицы `calendar`
--

INSERT INTO `calendar` (`num`, `month`, `mesyc`) VALUES
(1, 'Jan', 'Январь'),
(2, 'Feb', 'Февраль'),
(3, 'Mar', 'Март'),
(4, 'Apr', 'Апрель'),
(5, 'May', 'Май'),
(6, 'Jun', 'Июнь'),
(7, 'Jul', 'Июль'),
(8, 'Aug', 'Август'),
(9, 'Sep', 'Сентябрь'),
(10, 'Oct', 'Октябрь'),
(11, 'Nov', 'Ноябрь'),
(12, 'Dec', 'Декабрь');

-- --------------------------------------------------------

--
-- Структура таблицы `mails`
--

CREATE TABLE IF NOT EXISTS `mails` (
`id` int(16) NOT NULL default '0',
`year` int(4) NOT NULL default '0',
`month` varchar(10) NOT NULL default '',
`day` char(2) NOT NULL default '',
`time` time NOT NULL default '00:00:00',
`ip` varchar(255) NOT NULL default '',
`mailfrom` varchar(255) NOT NULL default '',
`rcptto` varchar(255) NOT NULL default '',
`size` int(32) default NULL,
PRIMARY KEY (`month`,`day`,`time`)
) ENGINE=MyISAM DEFAULT CHARSET=koi8r;

-- --------------------------------------------------------

--
-- Структура таблицы `userlist`
--

CREATE TABLE IF NOT EXISTS `userlist` (
`id` int(11) NOT NULL auto_increment,
`user` varchar(255) NOT NULL default '',
`pass` varchar(255) NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=koi8r AUTO_INCREMENT=1 ;

сохраняем и выходим
2) запускаем mysql
mysql -u root -p
вводим пароль от mysql

Создаём базу для хранения сведений:
CREATE DATABASE maillogs DEFAULT CHARACTER SET koi8r COLLATE koi8r_general_ci;

Добавляем пользователя:
* Вводим одной сторокой

GRANT ALL PRIVILEGES ON maillogs.* TO mailuser@localhost
IDENTIFIED BY 'mailuser';

вносим инфу в созданную бд

mysql> use maillogs;
Database changed
mysql> show tables;
Empty set (0.00 sec)

mysql> SET NAMES koi8r;
Query OK, 0 rows affected (0.00 sec)

mysql> SET character_set_database=koi8r;
Query OK, 0 rows affected (0.00 sec)

mysql> SET character_set_server=koi8r;
Query OK, 0 rows affected (0.00 sec)

mysql> \. maillogs.sql

Если всё хорошо, то увидем:

Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.01 sec)
Query OK, 12 rows affected (0.00 sec)
Records: 12 Duplicates: 0 Warnings: 0
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)

3) заходим в бд
mysql -u mailuser -p
вводим пароль
показываем нашу бд
show databases;

Должный увидеть:

+———-+
| Database |
+———-+
| maillogs |
+———-+
1 row in set (0.00 sec)

Подключаемся к базе:
use maillogs;
Database changed

Теперь просим показать таблицы:
show tables;
Если всё хорошо, то видем:

+———————+
| Tables_in_maillogs |
+———————+
| calendar |
| mails |
| userlist |
+———————+
3 rows in set (0.00 sec)

Добавляем пользователя, который будет заходить в Web

INSERT INTO `userlist` (`id`, `user`, `pass`) VALUES (1, ‘admin’, ‘1234567’);

проверяем на наличие созданного юзера
select * from userlist;
вывод того что есть в таблице

+—-+——-+———-+
| id | user | pass |
+—-+——-+———-+
| 1 | admin | 1234567 |
+—-+——-+———-+
1 row in set (0.00 sec)

создаем скрипт для сбора агрегатирования информации из лога
mkdir /scripts
nano /scripts/maillog.pl
maillog.pl

Делаем его исполняемым:
chmod 770 /scripts/maillog.pl
запускаем
если в БД ничего не попало то обнуляем лог
echo > /var/log/mail.log
отправляем с сервера письма
и проверяем работоспособность в mysql
select * from mails;

Мы увидем данные!
запускаем кронтаб
crontab -e
*/30 * * * * /scripts/maillog.pl

делаем Веб доступ
качаем statmail
разархивируем и скопируем на web сервер
все можно заходить мониторить статистику
пример запуска
http://t1/statmail/index.php
как выглядит поиск
так выглядит главная

Update 09.07.2011
для уменьшения спама прикручиваем postgrey задержка первых писем на 5ть минут с выдаче ошибки «450»
apt-get install postgrey
смотрим на каком порту висит postgrey через ps ax |grep postgrey
далее правим main.conf(main.cf) в зависимости от системы может называться по разному, но main будет по любому.
Вносим изменения в smtpd_recipient_restriction в конец записей после черного списка dns серверов chek_policy_service inet:127.0.0.1:10023
после данных телодвижений спама будет в разы меньше!

Комментарии

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

Plain text

  • HTML-теги не обрабатываются и показываются как обычный текст
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Строки и абзацы переносятся автоматически.