RexxeЯ
Заметки для себя

Linux backup

06.04.2012 . Автор: rexxer

Проводилось на CentOs5.

Монтируем виндовую шару:

mount -t cifs //192.168.0.1/Backup -o username=administrator,password=password /mnt

Бэкапим:

/sbin/dump -0uan -f - / | gzip -2 | dd of=/mnt/serverbackup-`date ‘+%d-%B-%Y’`.dump.gz

From one of blogs:

The best tool to use for this is probably dump, which is a standard linux tool and will give you the whole filesystem. I would do something like this:

/sbin/dump -0uan -f - / | gzip -2 | ssh -c blowfish user@backupserver.example.com dd of=/backup/server-full-backup-`date '+%d-%B-%Y'`.dump.gz

This will do a file system dump of / (make sure you don’t need to dump any other mounts!), compress it with gzip and ssh it to a remote server (backupserver.example.com), storing it in /backup/. If you later need to browse the backup you use restore:

restore -i

Another option, if you don’t have access to dump is to use tar and do something like

tar -zcvpf /backup/full-backup-`date '+%d-%B-%Y'`.tar.gz --directory / --exclude=mnt --exclude=proc --exclude=tmp .

But tar does not handle changes in the file system as well.


Apache + mod_proxy = magic

27.03.2012 . Автор: rexxer

Понадобилось сделать доступ из внутренней сети к стэйджингу так, чтобы продакшн тоже был доступен.

Простое создание зоны в ДНС не подходит уже.

Мало того, оказалось, что на стэйджинге прописаны имена сервера как и на продакшне (т.е. только IP-адреса разные).

Сразу же возникла мысль использовать локальный Apache + mod_proxy.

После изучения мануалов по мод-прокси и ресолвинга в инете различных гадостей, получилось вот что:

Были сконфигурированы 2 виртуальных хоста (думаю можно было еще покрутить mod_rewrite, но так было быстрее):

<VirtualHost 192.168.22.22:80>
DocumentRoot “/usr/local/www/apache22/data/test”
ServerName another-test.com
ServerAlias www.another-test.com
ErrorLog “/var/log/test_log”
RewriteEngine On
#RequestHeader set Host test.com
#RequestHeader set Server test.com
#RequestHeader set x-forwarded-server “http://test.com”
#RequestHeader set x-orig-accept-name “http://test.com”
ProxyRequests Off
ProxyPreserveHost On
ProxyPass / http://177.77.77.77/
ProxyPassReverse / http://177.77.77.77/
</VirtualHost>
<VirtualHost 192.168.22.22:80>
DocumentRoot “/usr/local/www/apache22/data/test”
ServerName second.another-test.com
ServerAlias second.another-test.com
ErrorLog “/var/log/test_log”
RewriteEngine On
#RequestHeader set Host second.test.com
#RequestHeader set Server second.test.com
#RequestHeader set x-forwarded-server “http://second.test.com”
#RequestHeader set x-orig-accept-name “http://second.test.com”
ProxyRequests Off
ProxyPreserveHost On
ProxyPass / http://177.77.77.77/
ProxyPassReverse / http://177.77.77.77/
</VirtualHost>

Здесь хочу обратить внимание - слэш в конце следующих директив(нужны обе) обязателен, иначе будет выдавать ошибка вроде Cannot resolve DNS name for: … :

ProxyPass / http://177.77.77.77/
ProxyPassReverse / http://177.77.77.77/

Также test.com - продакшн, another-test.com - стэйджинг.

В Bind была создана зона соответсвующая - в ней просто тип - мастер и файл базы.

В файле базы не нужно использовать TTL для имен А и т.п., иначе будет ругаться (в моем случае апач и байнд на одной машине находились).

Для виндового сервера пришлось прописать форвардер(сервер с биндом) на данный домен.


RRDTools - мой скрипт для мониторинга температуры

10.01.2012 . Автор: rexxer

#!/bin/sh
input=`/usr/local/etc/rc.d/digitemp_DS9097 -a -q -s /dev/cuau0 -o\%.C`
/usr/local/bin/rrdtool update /var/rrdtool/db/digitemp.rrd N:$input
if [ $input -ge 35 ]; then
mail -s “There is too HOT in the server room, current temp is $input degrees by Celsius” admin@mydomain.com < /usr/local/etc/mail.txt
echo “Temp is $input” | ssh -l user mail.mydomain.com sendsms XXXXXXXXXX
fi

WWWPREFIX=/usr/local/www/apache22/data/images
RRDPREFIX=/var/rrdtool/db
/usr/local/bin/rrdtool graph $WWWPREFIX/temp.png \
–width 500 –height 200 –imgformat PNG \
–title “Temperature for 12h”  –rigid  –color BACK#FAFAFA  \
–vertical-label Celsius \
–alt-autoscale-max \
–slope-mode \
DEF:input=$RRDPREFIX/digitemp.rrd:input:MAX   \
VDEF:minn=input,MINIMUM \
VDEF:maxx=input,MAXIMUM \
VDEF:avg=input,AVERAGE \
VDEF:curr=input,LAST \
AREA:input#00640080:”Temp”        \
CDEF:p0=input,0,- AREA:p0#00FF0080 \
CDEF:p1=input,1,- AREA:p1#00EE0080 \
CDEF:p2=input,2,- AREA:p2#00DD0080 \
CDEF:p3=input,3,- AREA:p3#00CC0080 \
CDEF:p4=input,4,- AREA:p4#00BB0080 \
CDEF:p5=input,5,- AREA:p5#00AA0080 \
CDEF:p6=input,6,- AREA:p6#00990080 \
CDEF:p7=input,7,- AREA:p7#00880080 \
CDEF:p8=input,8,- AREA:p8#00770080 \
CDEF:p9=input,9,- AREA:p9#00660080 \
CDEF:p10=input,10,- AREA:p10#00550080 \
CDEF:p11=input,11,- AREA:p11#00440080 \
CDEF:p12=input,12,- AREA:p12#00330080 \
CDEF:p13=input,13,- AREA:p13#00220080 \
CDEF:p14=input,14,- AREA:p14#00110080 \
CDEF:p15=input,15,- AREA:p15#00100080 \
CDEF:p16=input,16,- AREA:p16#00090080 \
CDEF:p17=input,17,- AREA:p17#00080080 \
CDEF:p18=input,18,- AREA:p18#00070080 \
CDEF:p19=input,19,- AREA:p19#00060080 \
CDEF:p20=input,20,- AREA:p20#00050080 \
LINE2:input#006500:”Current”        \
LINE2:32#FF0000:”Critical” \
LINE2:25#F29D00:”Allowed” \
LINE2:21#6197DB:”Recommended” \
GPRINT:minn:”Min=%6.2lf”      \
GPRINT:maxx:”Max=%6.2lf”      \
GPRINT:avg:”Average=%6.2lf”      \
GPRINT:curr:”Current=%6.2lf\l” \

temp


Проверка живучести сайта

31.10.2011 . Автор: rexxer

Проверка на живучесть различных хостов у меня реализована на smokeping.

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

Скорее всего это можно было сделать и в smokeping, но я решил сделать быстрее:

#!/bin/sh

# Пингаем сайт через 1 внешний канал

test1=`ping -c 3 mysite.com | grep seq=2`

# Пингаем через второй канал, вдруг первый упал

test2=`ping -c 3 192.168.10.244 | grep seq=2`

# Проверяем был-ли ответ хоть по одному каналу
if [ -z "$test1" ] && [ -z "$test2" ];
then
mail -s “No ping to mysite.com - it can be a problem with our Internet-channel” site.alert@mydomain.com < /usr/local/etc/mail.txt
exit 0
fi;

# Если пинг прошел - проверяем сайт на наличие конкретного содержимого (у меня это содержимое выбирается из базы, т.е. если сайт лег по причине неработоспособности базы или движка - это будет видно)

test3=`/usr/local/bin/curl -s “http://mysite.com/contact-us.aspx” | grep job | awk ‘{ print $0 }’`
#test=`curl -s “http://mysite.com/about-us.aspx” | grep job | awk ‘{ print $0 }’`
#echo $test
if [ -z "$test3" ];
then
#       echo FAILURE!!!
mail -s “The site mysite.com is down!” site.alert@mydomain.com < /usr/local/etc/mail2.txt
echo “ok” > /usr/local/etc/site.tmp
elif [ -f /usr/local/etc/site.tmp ];
then
#           echo OK!!!
rm /usr/local/etc/site.tmp
mail -s “The site mysite.com is working now!” site.alert@mydomain.com < /usr/local/etc/mail.txt
fi;
# Если было обнаружено, что сайт лежит - взводится флаг (файл site.tmp) и отправляется сообщение, если сайт заработал - флаг снимается и отправляется сообщение, что все ок.


FreeBSD + com-port connection

21.10.2011 . Автор: rexxer

Connect:

cu -l /dev/cuau1 -s 115200

Disconnect: open another console and:

killall -9 cu


IPFW + SQUID + Redirect

03.08.2011 . Автор: rexxer

Возникла необходимость ходить в инет из-под другого IP.

Решил так …

В IPFW:

ipfw add 10 fwd 192.168.20.20,3128 tcp from 192.168.20.99 to any 80 in recv rl3

В squid.conf:

cache_peer 192.168.21.21 parent 3128 3130 proxy-only no-digest no-query default

acl s99 src 192.168.20.99

always_direct deny s99 # запрещаем ходить мимо прокси

never_direct allow s99 # то же самое что и предыдущее чтоб наверняка

prefer_direct off # без этого не работало

Если в IPFW сразу отфорвардить на прокси в другой сети - не работает, если кто знает как побороть - пишите :)

И еще: удаленный прокси должен работать при запуске основного.


MPD alerts

17.06.2011 . Автор: rexxer

В продолжение записи об MPD.

Возникла идея отслеживать айпишники пользователей, т.е. откуда они ходят в ВПН - модернизировал предыдущий скрипт для MPD (см. предыдущие посты).

#!/bin/sh
# Предварительно была создана БД mpd и таблица mpd_access на хосте 192.168.0.10
IFS=’:’

#Получаем текущую дату в формате пригодном для MySQL

time=”`date -j +”%Y-%m-%d %H:%M:%S”`”
# Читаем сообщение от MPD и присваиваем переменные
while read _key _value; do

if [ -z "${_key}" ]; then
break
fi

if [ -n "${_value}" ]; then

if [ "${_key}" = "USER_NAME" ] || [ "${_key}" = "PEER_ADDR" ] || [ "${_key}" = "SELF_ADDR" ] || [ "${_key}" = "PEER_MAC_ADDR" ] || [ "${_key}" = "ACCT_STATUS_TYPE" ]; then
LOGLINE=”$LOGLINE ${_key}=${_value}”
fi
case “${_key}” in
“ACCT_STATUS_TYPE”) type=”${_value}” ;;
“USER_NAME”) user=”${_value}” ;;
“SELF_ADDR”) local=”${_value}” ;;
“PEER_ADDR”) remote=”${_value}” ;;
esac
fi
done
# Делаем запрос к MySQL. Сортируем по убыванию и берем только последнюю запись, относящуюся к этому юзеру.

# Параметры -N -r -B обеспечивают вывод только значения, т.е. без заголовка столбца
query=”`/usr/local/bin/mysql -N -r -B -h 192.168.0.10 -uuser -ppassword -D mpd –execute=”SELECT remote from mpd_access WHERE user=’$user’ ORDER BY number DESC LIMIT 1″`”

# Шлем себе письмецо

if [ $query != $remote ]; then
mail -s “VPN - Last seen remote IP changed from $query to $remote” admin@local.com < /usr/local/etc/mail.txt;
fi
# Записываем в сислог и в базу
echo $LOGLINE | logger -p local7.info -t mpd-acct
/usr/local/bin/mysql -h 192.168.0.10 -uuser -ppassword -D mpd –execute=”INSERT INTO \`mpd_access\` (\`type\`, \`user\`, \`local\`, \`remote\`, \`time\`) values (’${type}’, ‘${user}’, ‘${local}’, ‘${remote}’, ‘${time}’)”

В результате, если текущий адрес не совпадает с прошлым - будет отправлено уведомление.


MPD5 + IP logging

22.04.2011 . Автор: rexxer

Интересную темку нашел: тыц

citrin предложил такой вот способ логирования IP клиентов:

В конфиге mpd нужно написать

set auth enable ext-acct
set auth extacct-script /usr/local/sbin/mpd-acct.sh
В /usr/local/sbin/mpd-acct.sh написать:

код

#!/bin/sh

IFS=':'

while read _key _value; do

        if [ -z "${_key}" ]; then
                break
        fi

        if [ -n "${_value}" ]; then
                LOGLINE="$LOGLINE ${_key}=${_value}"
        fi
done

echo $LOGLINE | sed 's/^ //' | logger -p local7.info -t mpd-acct

в /etc/syslog.conf дописать:

!*
local7.* /var/log/mpd-acct.log

Я переделал под себя немножко - получилось так:

#!/bin/sh

IFS=’:’

while read _key _value; do

if [ -z "${_key}" ]; then
break
fi

if [ -n "${_value}" ]; then

if [ "${_key}" = "USER_NAME" ] || [ "${_key}" = "PEER_ADDR" ] || [ "${_key}" = "SELF_ADDR" ] || [ “${_key}” = “PE
LOGLINE=”$LOGLINE ${_key}=${_value}”
fi

fi
done

echo $LOGLINE | logger -p local7.info -t mpd-acct

в /etc/syslog.conf дописать

!*
local7.* @192.168.10.1


Копирование с помощью SSH

22.03.2011 . Автор: rexxer

Нужно было периодически копировать конфиги с рабочей FreeBSD на резервную, получилось следующее:

1. Для того чтобы не запрашивался пароль при копировании, необходимо сгенерировать ключи на машине с которой будет происходить копирование (пользователь также важен) и передать паблик-ключ на целевую машину.

Генерируем: ssh-keygen -t rsa

Спросит где создаются файлы и попросит ввести пароль - запоминаем, пароли не вводим - просто “Энтер” 2 раза.

2. Копируем на целевую машину паблик-ключ (спросит пароль пользователя user):

scp -P 2222 /root/.ssh/id_rsa.pub user@192.168.10.2:/home/user/.ssh/authorized_keys

Здесь я указал порт удаленно машины 2222 (если стандартный 22, то указывать не надо), файл который копируется и файл в который копируется. Это должен быть authorized_keys. Если у вас уже имеется такой файл, то копируйте в другой и затем добавляйте содержимое в текущий.

3. Теперь можно запускать команду копирования - пароль запрашиваться не будет.

З.Ы. Не забывайте передавать паблик-ключ того пользователя, под которым будет выполняться команда.


Exim. Не идет почта для root.

19.11.2010 . Автор: rexxer

Взято c Unixforum.org.

Проблема, была в том, что срабатывал только один роутер, а роутер на системные алиасы был ниже, чем на локальные. Переместил выше и добавил unseen, тогда после проверки условия работа не завершается, а передается следующему роутеру. Т.е. стало так:

userforward:
driver = redirect
check_local_user
file = $home/.forward
allow_fail
allow_defer
no_verify
unseen

system_aliases:
driver = redirect
allow_fail
allow_defer
data = ${lookup{$local_part}lsearch{/etc/aliases}}
unseen


Smokeping - отслеживание доступности веб-сайта

09.11.2010 . Автор: rexxer

Часть конфига:

*** Alerts ***
to = ya@local.com
from = some@local.com

+someloss
type = loss
# in percent
pattern = >0%,*12*,>0%,*12*,>0%
comment = loss 3 times  in a row

+bigloss
type = loss
pattern = >50%
comment = Bigloss

*** Targets ***

probe = FPing

+ Test
menu = Targets
title = Servers
++ site_com_ua
title = www.site.com.ua / HTTP
probe = EchoPingHttp
alerts = bigloss
host = www.site.com.ua


Squid + 2 провайдера

23.06.2010 . Автор: rexxer

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

http_port 192.168.0.1:3128

http_port 192.168.0.1:3129 # добавили второй слушающий порт

acl second_provider myport 3129 # описали acl, в который попадут клиенты, обратившиеся на порт 3129

tcp_outgoing_address 111.111.111.111 second_provider # 111.111.111.111 - локальный адрес интерфейса, на котором у нас вторая линия


Загрузка по сети OS, ISO, etc

21.04.2010 . Автор: rexxer

Задача: необходимо загрузить инсталл операционки или утилиты по PXE.

Нагуглил замечательную штуку http://www.ultimatedeployment.org/ - версия UDA 2.0 beta

Установил, опробовал - понравилось.

Итак, возможности данного образа весьма интересны: Unattended OS installations (Windows, Linux, ESX, Solaris).

Я проверил инсталл ESXi 4.0, Win2k3, WinXP - все прошло успешно, думаю, Linux тоже встанет без проблем. Отмечу некоторые сложности при установке Windows: на новых и не очень сетевых платах (я использовал встроенные) загрузка винды не пройдет из-за отсутсвия драйвера. Как это поправить описано на форуме и, если будет воодушевеление, я добавлю это в эту статью. Сейчас же я хочу акцентировать внимание на загрузке различных вспомогательных утилит вроде тестирования дисков, памяти, и т.п. Само UDA2 поддерживает загрузку “утилит” BartPE(требует образ винды), Clonezilla Live, GpartedLive, - мне это все неитересно - не пользуюсь. Зато очень важно для меня использование HirensBootCD.

Первые поиски привели меня сюда: http://www.ultimatedeployment.org/forum/viewtopic.php?f=5&t=103

Пост Dave.Mishchenko натолкнул меня на правильный путь и для теста я реализовал это. Теперь пошагово :).

1. Я зашел на веб-морду моего PXE-сервера и инициировал добавление новой ОС - меню OS. Вписал Flavor name: MHDDPlus, Operating System: Manual Configuration.

2. Далее на запрос Kernel щелкаем в окошке ввода - сработает форма выбора образа ядра, я взял memdisk из комплекта HirensBootCD 10.4, а Initrd из поста выше bdos. Жмем Next - новый пункт меню создан.

3. Идем в пункт меню Templates, жмем New. Template name: MHDDPlusTemplate, Operating System: Manual configuration, Flavor: MHDDPlus, Description: ваше описание для шаблона. Жмем Next и Finish - шаблон создан.

Обращаю внимание на то, что образы ядра и загрузчика будут загружены на сервер в соответсвующую папку /var/public/tftproot/manual/MHDDPlus, а в файле меню /var/public/tftproot/pxelinux.cfg/templates/MHDDPlusTemplate.menu будет прописано следующее:

MENU TITLE Template MHDDPlusTemplate

DEFAULT default
TIMEOUT 1
LABEL default
MENU LABEL default
KERNEL manual/MHDDPlus/memdisk
APPEND initrd=manual/MHDDPlus/bdos

С первого раза получился глюк и вместо коррекнтых путей у меня вписало пути виндовой машины откуда я закачивал образы - пришлось править.

Все - грузим необходимую машину по PXE, выбираем в меню соответствующий пункт и получаем наши утилиты.

Снова замечание: нет драйверов для SCSI и т.п., а это не есть хорошо. Но при желании можно расковырять образ bdos - открывается 7zip и поправить недостающее.

Все хорошо, но, все же, хотелось бы иметь весь Hirens :).

Подняв инфу о memdisk - имеем следующее: http://syslinux.zytor.com/wiki/index.php/MEMDISK#ISO_images

Ключевой пункт:

ISO images

For ISO images, the parameter ‘iso’ must be passed to MEMDISK.

LABEL hdt_iso
  LINUX memdisk
  INITRD hdt.iso
  APPEND iso

Это навело меня на некоторые мысли, которые реализовались в ЭТО :).

1. Создаем новую запись ОС через веб-морду  с именем HirensISO и и типом ОС Manual configuration как я описывал выше.

2. Указываем образ ядра как и ранее memdisk из комплекта Hirens, initrd - сам Hirens.iso, Default command line: INITRD=iso. Я закачивал на сервер образ Hirens98.iso вручную через WinSCP.

3. Создаем шаблон так же как я описал ранее.

4. Проверяем чтобы файл меню /var/public/tftproot/pxelinux.cfg/templates/HirensISO.menu выглядел следующим образом:

MENU TITLE Template HirensISO

DEFAULT default
TIMEOUT 1
LABEL default
MENU LABEL default
KERNEL manual/Hirens/memdisk
INITRD manual/HirensISO/Hirens98.iso
APPEND iso

5. Ваааау! Радости то скоко - работает!

Примечания:

Сам образ UDA2 собран на CentOS. Если кто привык работать с MC, - ставим как обычно: yum install mc

Все хозяйство для инсталляции и меню собрано в папке /var/public/tftproot. В ходе экспериментов правил там все что мне нужно было.

Загрузка Mini WindowsXP не пошла - ушло в ребут.

Скиншоты:


EasyIDS + Rsyslog

06.01.2010 . Автор: rexxer

Следуя поговорке «предупрежден - значит вооружен», решил поставить IDS и Rsyslog в пределах вверенной мне сети.

Сначала, был опробован OSSIM (http://www.alienvault.com/products.php?section=OpenSourceSIM). Однако, мне он показался слишком мудреным и туговатым в настроуке, несмотря на наличие обширного веб-интерфейса. После некоторых поисков, я остановился на EasyIDS (http://www.skynet-solutions.net/easyids/). Это Snort + NTOP + Arpwatch + … в одном флаконе на базе CentOS 5.2. Выглядит попроще, чем OSSIM, но и более проста в настройке, как по мне. Итак, начнем …

Для начала, я провел подготовительные работы:

1.       Имеем DHCP-сервер. Я зарезервировал IP для IDS. (Рекомендации по установке)

2.       Развернем систему на виртуальной машине в среде VMWare ESXi 4. Для этого была докуплена дополнительная сетевая плата Intel 1000MT (40$) и создан еще один Virtual Switch в ESXi, куда и вошла эта сетевая. Внимание! Нужно включить на этом свитче Promiscuous mode.

image001

3.       На управляемом свитче AT-8000S настроил «Port Mirroring». Source port - порт моего инет-шлюза смотрящий во внутреннюю сеть, Destination Port - порт, куда смотрит дополнительная сетевая плата ESXi. При этом Destination Port «изолируется».

Переходим непосредственно к установке.

Заливаем скачанный образ «EasyIDS-0.4.iso» в хранилище ESXi. Создаем виртуальную машину: я выбрал шаблон Debian 5 32-bit, 8Gb HDD, 512Mb Memory, подключил основную сетевую и дополнительную, CD c замапленным ISO.

Установка проходит без проблем - указываем все запрошенные данные, запоминаем рутовый пароль и для mysql. Система сама получит адрес по DHCP на первый интерфейс eth0, второй интерфейс eth1 будет «слушать» то что идет через шлюз из нашей сети.

Уже на данном этапе мы можем зайти на страничку браузером и посмотреть результат: по-умолчанию Login: admin

Password: password

image003

Система уже работает и собирает данные.

Чтобы не смотреть все время логи, настроим уведомление по e-mail: Settings - Snort - Notify Settings.

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

Не буду описывать все пункты меню J, остановлюсь на пунке Analysis - мне очень нравится смотреть отчет NTOP:

image005

Видим, что 84 хост усиленно качал, следующий за ним и 48 тоже развил небывалую активность (см. Host Contacts), жмакаем на хост - попадаем в отчет - смотрим по какому протоколу - HTTP - иду ставить клизму. По колонке Host Contacts можно сразу определить кто использует торренты J.

На мыло мне приходят такие сообщения, например:

easyids detected ICMP Destination Unreachable Communication Administratively Prohibited from 195.66.138.10 to 192.168.2.139 11 times last at 2010-01-06 10:54:21

easyids detected SQL probe response overflow attempt from 69.203.141.40 to 192.168.2.236 2 times last at 2010-01-06 10:51:28

Первый тип приходит регулярно, на него можно не обращать внимания. Нагуглил вот такое:
In your snort.conf, the default value for your SQL servers is:
var SQL_SERVERS $HOME_NET
Replace $HOME_NET with the actual IP addrs of any internal SQL servers.
Or comment out the alert for SID 2329 in sql.rules.
Then you won’t see these false positives any more.

Идем дальше - прилепим сюда же систему централизованного сбора логов с Win-серверов.

Логинимся в систему либо через консоль ESXi, либо через SSH.

Без mc неудобно J - ставим (нужен инет):

yum install mc

Можно жить! J

Устанавливаем rsyslog вместо стандартного syslog.

Делал по этой статье http://openskill.info/infobox.php?ID=1475, поставил и снес ввиду устаревшего дистриба.

Ensure all necessary packages are installed:
yum install rsyslog rsyslog-mysql

If you want local mysql server and web interface:
yum install mysql-server
yum install httpd php php-mysyql php-gd

If not running, start mysqld:
service mysqld status || service mysqld start

Create mysql database for rsyslog (file path changes on other distros/releases ):
mysql < /usr/share/doc/rsyslog-mysql-2.0.0/createDB.sql

Set mysql permissions (must be the same in /etc/rsyslog.conf and /path/top/phplogcon/config.php )
mysql> grant all on Syslog.* to syslog@localhost identified by ‘mypass’;
mysql> flush privileges ;

vi /etc/rsyslog.conf
# Log to Mysql Settings
$ModLoad ommysql
*.*       :ommysql:localhost,Syslog,syslog,phplogcon
#Standard Redhat syslog settings
*.info;mail.none;authpriv.none;cron.none                /var/log/messages
authpriv.*                                              /var/log/secure
mail.*                                                  -/var/log/maillog
cron.*                                                  /var/log/cron
*.emerg                                                 *
uucp,news.crit                                          /var/log/spooler
local7.*                                                /var/log/boot.log

Try rsyslog (disable sysklogd):
service syslog stop
service rsyslog start

If you get messages like:
Feb 23 23:43:30 mon rsyslogd:could not load module ‘/usr/lib/rsyslog/ommysql’, dlopen: /usr/lib/rsyslog/ommysql: cannot open shared object file: No such file or directory

fix fast with:
ln -s /usr/lib/rsyslog/ommysql.so /usr/lib/rsyslog/ommysql

Enable rsyslog service at boot time (and disable default syslog)
chkconfig syslog off
chkconfig rsyslog on

CENTRAL RSYSLOG
As with standard syslogd edit /etc/sysconfig/rsyslog with option -r:
SYSLOGD_OPTIONS=”-m 0 -r”
to enable the listening of syslog on the default 514 UDP port.
This is necessary for a centralized syslog server.

PHPLOGCON
Get latest package from http://www.phplogcon.org/
Unpack and move relevant files under Apache documents:
tar -zxvf phplogcon-2.5.24.tar.gz
cd phplogcon-2.5.24
mkdir /var/www/html/syslog
cp -a src/* /var/www/html/syslog

cd /var/www/html/syslog
To permit web configuration:
chmod 666 config.php
Browse to web interface: http://yourserver/syslog/ and follow on screen instructions.
Enable a Mysql source and use the authentication settings defined before.
Note that the logs table name is SystemEvents
To restore safe settings (do it after web configuration):
chmod 644 config.php

В репозиториях CentOS была версия 2.0.6, хотя на официальном сайте уже намного свежее - скачиваем понравившийся, на тот момент была версия 5.5.1: http://rsyslog.com/, там же куча документации и т.п.

Распаковываем и приступаем к конфигурированию и компиляции. Тут не забываем включить поддержку mysql:

./configure - -enable-mysql - -enable-rsyslogd - -enable-mail

Компилируем:

make

и … облом - вылетаем с ошибкой. Погуглив, нахожу решение, видимо не понравилась виртуальная среда: чтобы не запускать конфиг поновой - иду в соданный Makefile и добавляю в переменную CFLAGS новый флаг “-march=i686″.

Или поновой:

./configure CFLAGS=”-march=i686 - -enable-mysql - -enable-rsyslogd - -enable-mail

Все проходит на ура. Устанавливаем:

make install

Создаем базу в mysql если она не создана автоматом (файлик находится в папке дистрибутива /plugins/ommysql/createDB.sql):

mysql  -uroot -p”password” < createDB.sql

Создаем пользователя для базы:

adduser syslog

Даем разрешения на базу для пользователя, прописываем в /etc/rsyslog.conf и /path/top/phplogcon/config.php.

mysql> grant all on Syslog.* to syslog@localhost identified by ‘mypass’;

mysql> flush privileges ;

Активируем rsyslog в автозагрузке (и деактивируем syslog)

chkconfig syslog off

chkconfig rsyslog on

Если такого сервиса не оказалось - создаем rsyslog.sh и кладем в init.d:

#!/bin/bash

# Source function library.

. /etc/init.d/functions

RETVAL=0

start() {

[ -x /usr/local/sbin/rsyslogd ] || exit 5

[ -x /usr/local/sbin/rklogd ] || exit 5

# Source config

if [ -f /etc/sysconfig/rsyslog ] ; then

. /etc/sysconfig/rsyslog

else

SYSLOGD_OPTIONS=”-m 0″

KLOGD_OPTIONS=”-2″

fi

umask 077

echo -n $”Starting system logger (rsyslog): ”

daemon /usr/local/sbin/rsyslogd $SYSLOGD_OPTIONS

RETVAL=$?

echo

echo -n $”Starting kernel logger (rklogd): ”

daemon /usr/local/sbin/rklogd $KLOGD_OPTIONS

echo

[ $RETVAL -eq 0 ] && touch /var/lock/subsys/rsyslog

return $RETVAL

}

stop() {

echo -n $”Shutting down kernel logger (rklogd): ”

killproc rklogd

echo

echo -n $”Shutting down system logger (rsyslog): ”

killproc rsyslogd

RETVAL=$?

echo

[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/rsyslog

return $RETVAL

}

rhstatus() {

status rsyslogd

status rklogd

}

restart() {

stop

start

}

case “$1″ in

start)

start

;;

stop)

stop

;;

status)

rhstatus

;;

restart|reload)

restart

;;

condrestart)

[ -f /var/lock/subsys/rsyslog ] && restart || :

;;

*)

echo $”Usage: $0 {start|stop|status|restart|condrestart}”

exit 2

esac

exit $?

Даем команду:

chkconfig -add rsyslog

Правим конфиг /etc/rsyslog.conf

$ModLoad ommysql.so

*.*    :ommysql:localhost,Syslog,syslog,Password

$ModLoad imudp.so

$ModLoad imtcp.so

$UDPServerRun 514

$InputTCPServerRun 514

$AllowedSender UDP, 127.0.0.1, 192.168.2.0/24, 192.168.1.0/24

$AllowedSender TCP, 127.0.0.1, 192.168.2.0/24, 192.168.1.0/24

$EscapeControlCharactersOnReceive off

$ModLoad ommail.so

$ActionMailSMTPServer 192.168.1.217

$ActionMailFrom test@mydomain.com

$ActionMailTo admin@mydomain.com

$template mailSubject,”EventLog Message”

$template mailBody,”RSYSLOG Alert\r\n’%msg%’”

$ActionMailSubject mailSubject

if $syslogseverity-text==’alert’\

or $syslogseverity-text==’err’\

then :ommail:;mailBody

# Log all kernel messages to the console.

# Logging much else clutters up the screen.

#kern.*                                                 /dev/console

# Log anything (except mail) of level info or higher.

# Don’t log private authentication messages!

*.info;mail.none;authpriv.none;cron.none                /var/log/messages

# The authpriv file has restricted access.

authpriv.*                                              /var/log/secure

# Log all the mail messages in one place.

mail.*                                                  -/var/log/maillog

# Log cron stuff

cron.*                                                  /var/log/cron

# Everybody gets emergency messages

*.emerg                                                 *

# Save news errors of level crit and higher in a special file.

uucp,news.crit                                          /var/log/spooler

# Save boot messages also to boot.log

local7.*                                                /var/log/boot.log

Краткое пояснение: загружаются модули для mysql, udp, tcp, mail, все события пишутся в базу mysql и локальные файлы. Для сообщения с пометкой ALERT и ERR генерятся сообщения и отправляются по e-mail.

В /etc/sysconfig/rsyslog правим строку к виду:

SYSLOGD_OPTIONS=”-c4″

Чтобы не наступать на грабли, как я J, в системе по-умолчанию работает строгий файрволл. Поэтому идем в /etc/sysconfig/iptables и добавляем перед всеобщим дропом, т.е. открываем 514 порт udp и tcp:

-A RH-Firewall-1-INPUT -m state –state NEW -m udp -p udp –dport 514 -j ACCEPT

-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 514 -j ACCEPT

Ставим PHPLogCon для визуализации.

PHPLOGCON
Get latest package from http://www.phplogcon.org/
Unpack and move relevant files under Apache documents:
tar -zxvf phplogcon-2.5.24.tar.gz
cd phplogcon-2.5.24
mkdir /var/www/html/syslog
cp -a src/* /var/www/html/syslog

cd /var/www/html/syslog
To permit web configuration:
chmod 666 config.php
Browse to web interface: http://yourserver/syslog/ and follow on screen instructions.
Enable a Mysql source and use the authentication settings defined before.
Note that the logs table name is SystemEvents
To restore safe settings (do it after web configuration):
chmod 644 config.php

При первом входе на страничку потребуется пройти по шагам для создания конфиг-файла. Не забудьте выбрать источник событий - база данных.

image007

С серверной частью все - перейдем к клиентской.

Клиентами у нас выступают Windows 2003 Server и Windows 2008 Server. На 2003м я установил el2sl, на 2008 Snare, хотя, можно было ограничиться только Snare(http://www.intersectalliance.com/projects/SnareWindows/).

Snare конфигурируется через веб-интерфейс - Network Settings: указываем адрес нашего syslog-сервера, ставим галочку SYSLOG HEADERS. Далее, по желанию, можно настроить какие сообщения будут передаваться на сислог - я, например, выбрал warning, error, audit failure. Это же можно настроить через rsyslog.conf - смотрите офиц.сайт. На сайте http://www.intersectalliance.com еще есть много интересностей и вкусностей.

Все! У меня все заработало - навожу красоту и допиливаю напильником под себя.

Не очень красиво выглядят записи, но, поработав напильником, можно это исправить.