Мы — долго запрягаем, быстро ездим, и сильно тормозим.

FreeBSD
  настройка
  подсчёт трафика
  программы
  почтовые системы
  FreeBSD Mail Howto
  exim & dovecot
  exim & courier-imap
  squirrelmail
  exim + saslauthd + courier-imap
  postfix -> exim
  sendmail -> exim
  imapsync
  Postfix + LDAP
  maildrop & postfix
  DSPAM
  Exim + LDAP
  ISPmanager
  Backup MX
  exim + exchange
  exim + dovecot + win2003 AD
  RoundCube
  qmail-ldap + AD
  spamooborona
  exim&dovecot + fetchmail + SSL
  Postfix + DBMail
  Mailgraph
  smfsav
  Exim+PgSQL
  Postfix + Dovecot + Clamav + SpamAssasin + LDAP vs MYSQL
  Simplemail Admin
  MTA qmail full install
  OpenLDAP адресная книга
  POSTFIX Статистики
  Backup MX (exim)
  Exim + dovecot + PgSQL + web
  Exim+dovecot2+dspam
  Возможности Dovecot 2
  Dovecot2 configfiles RUS
  Почтовый сервер по шагам ч.1
  Почтовый сервер по шагам ч.2
  Почтовый сервер по шагам ч.3
  Шелезяки
  Мелочи
  Файловая система
  WWW
  Security
  system
  Games Servers
  X11
  Programming
Очумелые Ручки
OpenBSD
Cisco


www.lissyara.su —> статьи —> FreeBSD —> почтовые системы —> POSTFIX Статистики

POSTFIX Ведение Статистики

Автор: fox.


Добрый день, Дамы и Господа!
Поднял я как то почтовый сервер на FreeBSD под POSTFIX. По мотивам вот этой статьи:
link
А потом потребовало руководство той организации что я обслуживал, что бы я им выдавал сведенья куда ходят письма, сколько, кто, ёмкость писем из внутри или с наружи, в общем очередная идея КГБ начальства)))
Ну хорошо, погуглил я немного и не нашел по этому поводу не чего адекватного…
Ну и да ладно, значит сделаем сами!
Надо из лог файла (а там все сведенья кто, куда, сколько, откуда, во сколько) перегонять в базу Муськи)
Ну хорошо, снова погуглил на www.opennet.ru нашёл стрёмненькую статью и скрипт под PERL причём так себе не год не определяет не id в базу не вбивает...
Пришлось поправить скрипт, естественно базу немного изменить, ну а затем самому ручками написать адекватную Web – Мордочку)))

Что надо нам для этого:
1) Apache
2) MySQL
3) PHP

Ну в принципе если вы по давече упомянутой статье подымали почтовик то всё это хозяйство у вас имеется!

Начнём по шагово:

1) Нам нужно создать базу в муське:
Копируйте отсюда код:

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 ;

Затем не хитрые действия:

touch maillogs.sql
затем
ee maillogs.sql

В открытый пустой файл заливаем скопрированый код, комбинацией клавиш Shift + Insert
Сохроняем Esc -> а -> а
Заходим в муську:
mysql -u root -p

Вводим пароль рута MySQL:
Enter password:

Создаём базу для хранения сведений:
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)

Проверяем!
Заходим в муську, только теперь вод так:
mysql -u mailuser -p

Вводим пароль: mailuser
Enter password:

Просим показать базы:
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)

Значет GOOD!)))
И так мы справились с созданием базы!)))

2) Приступим к следующему этапу, в нём мы создадим скрипт который будет лопатить лог!
Например, ну где вы храните скрипты, или например прямо в руте создаём папочку для скрипта и кладём его туда:

mkdir /root/scripts
touch /root/scripts/maillog.pl
ee /root/scripts/maillog.pl

И вставляем вод этот код скрипта:
файл скачан размер размещён примечание
maillog.pl.example
1497 1.7kb 2009-12-12 PERL Скрипт для выборки данных из лога Postfix!

Сохроняемб закрываем: Esc -> a -> a
Делаем его исполняемым:
chmod 770 /root/scripts/maillog.pl

И пробуем, запускаем его:
/root/scripts/maillog.pl

Может в базу не чего не добавиться, так как изначально этот скрипт не мой я его только редактировал, то тогда надо обнулить лог postfix-а, делаем это так:
echo > /var/log/maillog

Отправляем почту с нашего сервера, или на него присылаем, и снова проверяем теперь будет работать, в этом казусе у меня не было времени ковыряться, увы, если кто-то сможет и поправит, буду рад)
Если база набивается, а проверить можно подключившись выше упомянуто к базе и сделать запрос:
select * from mails;

Мы увидем данные!
А если иначе, значит, что то не так...(
Ну если всё хорошо, теперь автоматизируем, добавим в крон вод такую строку:

cat /etc/crontab
*/59    *       *       *       *       root    /root/scripts/maillog.pl

Здесь сказано, что раз в час крон (планировщик), запускает скрипт лопатить лог, но если надо чаще сделать то поменяйте параметры, принципе меня устраивало и так но всё зависит от индивидуального случая!
Перезапускаем крон:
/etc/rc.d/cron restart

Со временем в логах появиться должно вод это:

cat /var/log/cron | grep maillog.pl
Jul 11 00:59:00 fortero /usr/sbin/cron [1986]:(root)CMD \ 
(/root/scripts/maillog.pl) 

3) Если вы дошли до этого этапа без казусов и у вас всё работает то можно порадоваться, остался кульминационный этап, Web – Мордочка))
Качаем мордочку:
файл скачан размер размещён примечание
statmail.tar.bz2
1096 163.3kb 2009-12-12 Web Морда для статистики Postfix!

Закидываем её на сервер в директорию
/usr/local/www/data
Распаковываем:
bzip2 -d statmail.tar.bz2
tar -xf statmail.tar

Теперь правим конф ДНС если нужно присвоить имя типа statmail.localdomain или
Можно обойтись без этого просто править хост файл на удалённой машине, это вы сами решите…
А вот apache я вам помогу поправить, идём вот сюда /usr/local/etc/apache
И правим конф httpd.conf
Добавим в конф:
<VirtualHost 192.168.64.254:80>
    ServerAdmin admin@muzdrama.com
    DocumentRoot /usr/local/www/data/statmail
    ServerName statmail.dram.lh
    <Directory "/usr/local/www/data/statmail">
         Options none
         AllowOverride Limit
         Order Deny,Allow
         Deny from all
         Allow from 127.0.0.1 192.168.0.0/16
         DirectoryIndex index.php
    </Directory>
</VirtualHost>

Примерно вод так, ну каждый под себя подгоняет имя страницы, айпи, путь и т.д.
После чего перезапускаем apache:
/usr/local/etc/rc.d/apache.sh restart

Лезем в конф админки:
ee /usr/local/www/data/statmail/config.php

И читаем, там описано, принципе нам достаточно только указать логин и пароль postfix сервера для подключения к базе, а всё остальное по дефолту!
Теперь проверяем, если всё получилось, то зайдя в браузере на нашу страничку мы пройдём логин пароль и увидим примерно это:




Ну вот и всё, это моя первая статья здесь, по этому не судите меня строга за ошибки, и может быть это особо не кому и не надо, но жалко творение пропадает из-за одной организации!)))
Пишите всем постараюсь ответить и помочь, фиксить ошибки!


Спасибо за внимание! :-)



Ссылка на обсуждение: http://forum.lissyara.su/viewtopic.php?f=14&t=19080.

размещено: 2009-12-12,
последнее обновление: 2012-08-31,
автор: fox

оценить статью:

0dmin, 2009-12-15 в 7:19:24

Can't locate DBI.pm in @INC (@INC contains: /usr/local/lib/perl5/5.10.0/BSDPAN
/usr/local/lib/perl5/site_perl/5.10.0/mach
/usr/local/lib/perl5/site_perl/5.10.0
/usr/local/lib/perl5/5.10.0/mach
/usr/local/lib/perl5/5.10.0 .) at ./mailog2stat.pl line 3.
BEGIN failed--compilation aborted at ./mailog2stat.pl line 3.


блин че за херь с перлом???

fox, 2009-12-15 в 13:49:16

Тут у тебя не с паролем дело, а скорей всего с perl или даже со скриптами которые идут к муське, какая версия у тебя муськи?

fox, 2009-12-15 в 13:51:55

Информация для всех, проблемы пожалусто на форум а то Лис будет злиться! :-) Потом в перловском скрипте пресутствуют проблемы, но у меня на трёх серверах он работал отлично, хоть и ругался, база чотко набивалась инфа не задваивалась и не терялась, просто были строки с ругнёй, но база чотко  набивалась, если не работает то капайте в сторону perl и скриптов муськи!

Anton Lysenok, 2009-12-24 в 23:13:38

0dmin, установи p5-DBI.

make install clean -C /usr/ports/databases/p5-DBI

Purge, 2010-02-16 в 14:30:25

fox - статья отличная. интересно, что можно использовать по статистике файрволлов pf или ipfw, с веб-мордой чтоб.

fox, 2010-02-17 в 20:27:06

Спасибо, что оценили!
Но честно говоря, статья написана поскудно, плохо не стилистики не грамотности... По статистики именно фаера? Или считывать интерфейсы? Пакеты проходящии через них?

ergollory, 2010-03-09 в 18:29:50

Нууу, батенька, грамотность никто не отменял. Даже хороший материал написанный безграмотно, отторгается умом.

Сергей, 2010-05-18 в 17:02:32

подскажите, а как етот скрипт изменить, что бы он ещё и статус письма из лога вытаскивал? может кто делал уже такое? прошу помочь, плиз=) аська 292579961

Начинающий админ, 2012-08-31 в 13:08:08

Поправте пожалуста ссылку на статью по которой делали. ссылка в слове link не работает, или битая!

iceman, 2015-06-04 в 18:58:42

при чуть большей нагрузке, чем в примере, появляются Duplicate entry


Оставьте свой комментарий:
Ваше имя:   *
e-mail:  
жирный
наклонный
подчёркнутый
ссылка
цвет
Нынешний год:   *
 


Хостинг HOST-FOOD

2014-07-27, lissyara
gmirror

Удалённое создание софтверного зеркала средствами gmirror, на диске разбитом с использованием gpart. Использование меток дисков для монтирования разделов.
2013-08-20, zentarim
Scan+Print server FreeBSD 9

Настройка сервера печати и сервера сканирования под управлением операционной системы FreebSD 9 для МФУ Canon PIXMA MP540
2011-11-20, BlackCat
Разъём на WiFi-карту

Делаем съёмной несъёмную антену на WiFi-карте путём установки ВЧ-разъёма
2011-09-14, manefesto
Настройка git+gitosis

Настройка системы контроля версия исходного кода в связке git+gitosis+ssh
2011-08-14, zentarim
Wi-FI роутер + DHCP + DNS

Настройка Wi-Fi роутера на Freebsd 8 + DNS сервер + DHCP сервер: чтобы Wi-Fi клиенты были в одной подсети с проводными, проводные и беспроводные клиенты получали адреса автоматически по DHCP, кэширующ
2011-06-15, -ZG-
Охранная система на FreeBSD+LPT

В этой статье описана попытка реализации простой охранной системы на базе FreeBSD с подключением к ней охранных устройтсв на LPT порт и видеорегистрацией.
2011-03-13, terminus
ng_nat

Описание работы ng_nat, практическое использование, достоинства и недостатки в сравнении с ipfw nat
2011-02-20, Капитан
Nagios+Digitemp

Статья описывает создание системы оповещения о превышении температуры в специальных помещениях на основе Nagios с использованием программы Digitemp.
2011-02-17, Le1
Zyxel Configuration

Скрипт для массового изменения конфига свичей Zyxel. Берет из файла iplist список ip-шек, заходит последовательно на каждый и выполняет комманды из файла commands, записывая происходящее в лог файл.
2011-02-16, fox
hast carp zfs ucarp cluster

HAST (Highly Available Storage), CARP, UCARP, ZFS, Cluster настройка и одаптация плюс личные размышления…
2011-02-04, BlackCat
Восстановление ZFS

История о том, как был восстановлен развалившийся RAIDZ ZFS-пул (перешедший в FAULTED) с помощью скотча и подручных средств. Или о том, какие приключения ожидают тех, кто не делает резервных копий.
2011-02-03, Капитан
1-Wire

Статья описывает самостоятельное изготовление контроллера DS9097 для съёма показаний с датчиков температуры DS1820 с помощью программы Digitemp.
2011-01-28, Капитан
Температура в серверной

Статья описывает построение системы наблюдения за температурой в помещении серверной с использованием программы Digitemp и выводом графиков в MRTG
2011-01-21, m4rkell
Syslog server

Как то буквально на днях, у нас завалилось, что то в еве) или не в еве не суть. Суть в том, что когда захотели снять логи с хостов esx обнаружили, что хранят эти негодяи логии только за последнии сутк
2011-01-07, lissyara
Canon/gphotofs

Монтирование цифровых фотоаппаратов Canon (PTP) как файловой системы, автоматизация этого процесса через события devd и внешние скрипты.
2010-12-13, Al
IPSec

Описание принципов работы IPSEC и способов аутентификации.
2010-12-07, manefesto
FreeBSD on flash

Было принято решении переехать на USB Flash и установить минимальный джентельменский набор для работы своего роутера. Делаем =)
2010-12-05, Fomalhaut
root ZFS, GPT

Инструкция по установке FreeBSD с использованием в качестве таблицы разделов GPT и в качестве основной файловой системы - ZFS
2010-09-05, Cancer
Настройка аудиоплеера на ximp3

Цели: Простенький аудиоплеер, для того что бы тетя продавец в магазине утром пришла нажала на кнопку Power и заиграла в зале музыка, так же был доступ по сети, общая шара куда можно заливать музыку, к
2010-08-31, Cancer
Установка и настройка OpenVPN

На днях появилась задача - объединить головной офис и 3 филиала в одну сеть через интернет посредством OpenVPN, чтобы люди могли подключаться через RDP к базам 1С на серверах.
2010-08-25, manefesto
freebsd lvm

Использование linux_lvm для работы с LVM разделами из-под FreeBSD. Проблемы которые возники при монтирование lvm раздела
2010-04-30, gonzo111
proftpd file auth&quota

Proftpd - квоты и авторизация из файлов, без использования базы данных и/или системных пользователей
2010-04-22, lissyara
tw_cli

Пошаговая инструкция по восстановлению RAID на контроллере 3ware, из которого выпал один диск. Настройка мониторинга состояния рейда и отчётов о его состоянии на email.
2010-04-14, fox
MySQL Master+Master

MySQL (Master Master) and (Master Slave) Как настроить репликацию…
2010-03-09, terminus
DNS zones

Краткий ликбез про управление DNS зонами. Примеры проведения делегирования прямых и обратных DNS зон.
2010-03-09, aspera
Squid+AD (group access)

Настройка прокси сервера SQUID с автроризацией пользователей в AD. Разделение пользователей на группы
2010-03-02, BlackCat
Шлюз: Часть 4

Настройка дополнительных сервисов: синхронизация времени (OpenNTPD), клиент DynDNS.org.
2010-03-01, BlackCat
Шлюз: Часть 3

Настройка DHCP и DNS серверов для работы внутри частной сети, c поддержкой внутренних (частных зон) DNS, а так же интеграция DHCP и DNS сервисов.
2010-03-01, BlackCat
Шлюз: Часть 2

Конфигурация МСЭ pf для проброса портов с изменением порта назначения и без, а так же поддержки активного режима FTP и ограничения максимального размера сегмента
2010-03-01, BlackCat
Шлюз: Часть 1

Быстрая настройка шлюза/маршрутизатора с установлением PPPoE-соединения, поддержкой NAT и DNS-forwarding.
2010-02-23, Morty
darkstat

Простая считалка траффика, со встроенным веб-сервером. Очень маленькая, может делать отчеты трафика по хостам, портам, протоколам, а также строить графики
2010-01-23, gonzo111
squid+sams+sqstat

Пилим squid и sams - примеры конфигов с объяснениями. Установка SqStat.
2009-12-19, schizoid
mpd5 + radius + ng_car + Abills

Настройка pppoe-сервера с биллинговой системой Abills и шейпером ng_car
подписка

    вверх      
Статистика сайта
Сейчас на сайте находится: 10 чел.
За последние 30 мин было: 34 человек
За сегодня было
1700 показов,
296 уникальных IP
 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.0523 секунд
Из них PHP: 34%; SQL: 66%; Число SQL-запросов: 90 шт.
Исходный размер: 147952; Сжатая: 26507