Конфигурация сервера логов
Это дополнительный материал к Главной странице закрытого раздела
Для сбора логов по сети установлен rsyslog-7.4.7
Однако, установку софта надо производить в следующем порядке:
Mysql55-client
Mysql55-server
rsyslog-7.4.7
apache24
php-5.5
loganalyzer
Preinstall
До установки, надо задать необходимые опции для make
. Посему пишем:
cat >> /etc/make.conf
WITH_CHARSET=utf8
WITH_COLLATION=utf8_general_ci
BUILD_OPTIMIZED=yes
BUILD_STATIC=yes
MySQL 5.5
При конфигурировании MySQL, нам надо понимать, что базы будут огромные.
За основу берем конфиг /usr/local/share/mysql/my-huge.cnf:
cp /usr/local/share/mysql/my-huge.cnf /usr/local/etc/my.cnf
Его немного модифицируем, ибо все базы лежат на массиве в файловой системе ZFS.
Модифицировать конфиг надо до создания баз, чтобы потом их не пересоздавать (хотя, конечно, можно восстановить из дампа, но писать туда пароли и пользователей все равно придется).
MySQL ставился со следующими параметрами:
cd /usr/ports/databases/mysql55-client/
make config
SSL
cd /usr/ports/databases/mysql55-server/
make config
SSL
После установки, сперва ставится конфиг /usr/local/etc/my.cnf
Потом прописывается в rc.conf, что mysql должен заводиться на старте:
echo 'mysql_enable="YES"' >> /etc/rc.conf
Туда же пишется, что mysql будет хранить свою базу на диске bases
в соответствующей директории:
echo 'mysql_dbdir="/bases/mysql"' >> /etc/rc.conf
Придумать и записать (!) пароль для пользователя root в MySQL. Не путать с пользователем root
в системе!. Пароли должны быть разные.
Теперь производится первый запуск mysql и делаются начальные установки безопасности: /usr/local/bin/mysql_secure_installation
. При этом устанавливается рутовый пароль на mysql.
При первом запуске MySQL пароль для root пустой!
Теперь можно создавать базы для логов. Делается так:
mysq -u root -p
Энтер, вслепую вводим пароль пользователя root для MySQL (был создан на этапе настройки MySQL, не путать с паролем root в системе), жмем энтер.
CREATE DATABASE IF NOT EXISTS `Syslog` CHARACTER SET utf8 COLLATE utf8_general_ci;
USE Syslog;
GRANT ALL PRIVILEGES ON `Syslog`.* TO Syslog IDENTIFIED BY 'my_passwd';
# далее вставляется текст скрипта конфигурирования базы
CREATE DATABASE IF NOT EXISTS `Storages` CHARACTER SET utf8 COLLATE utf8_general_ci;
USE Storages;
GRANT ALL PRIVILEGES ON `Storages`.* TO Syslog IDENTIFIED BY 'my_passwd';
# далее вставляется текст скрипта конфигурирования базы
#Операция повторяется для баз Squid, Red, Laph, Islay, Red_named, Laph_named
exit;
Конфиг MySQL и скрипты создания баз см. ниже, на этой же странице.
rsyslog-7.4.7
Собирался со следующими параметрами:
cd /usr/ports/sysutils/rsyslog7/
make config
DOCS, GNUTLS, GSSAPI, MYSQL, RELP, RFC3195, UUID
В rc.conf отключаем штатный syslogd
:
mv /etc/rc.conf /etc/rc.conf-old
cat /etc/rc.conf-old | grep -v ^syslog > /etc/rc.conf
echo 'syslogd_enable="NO"'>> /etc/rc.conf
rm -f /etc/rc.conf-old
Подключаем включение rsyslog при загрузке и отдаем его под управление newsyslog-a, чтобы корректно ротировались логи, складываемые в файл.
echo 'rsyslogd_enable="YES"' >> /etc/rc.conf
echo 'rsyslogd_pidfile="/var/run/rsyslog.pid"'>>/etc/rc.conf
Конфигурируем rsyslog.conf
и newsyslog.conf
, конфиги см. ниже.
До запуска rsyslog-a, нам надо сперва установить и настроить MySQL, чтобы логи складывались в соответствующие базы и таблицы, и создать эти базы и таблицы.
Apache
Apache24 конфигурировался и ставился со следующими параметрами:
В окне make config
отмечено все сверху вниз вплоть до VHOST_ALIAS, далее - все пусто до SESSION, прокси модули - пусто, SESSION modules - отмечены SESSION_COOKIE и SESSION_CRYPTO, стоит звездочка на MPM_PREFORK.
Конфиг апача - см. ниже; конфиг httpd_ssl.conf - еще ниже.
echo 'apache24_enable="YES"' >> /etc/rc.conf
PHP
Ставим php и другую фигню, которую loganalyzer потащит за собой:
cd /usr/ports/www/php55-session && make install clean
cd ../mod_php55 && make install clean
cd ../databases/php55-pdo && make install clean
cd ../php55-mysql && make install clean
cd ../../textproc/php55-xml && make install clean
cd ../libxslt && make install clean
cd ../../lang/python2 && make install clean
cd ../archivers/php55-zlib && make install clean
cd ../print/freetype2 && make install clean
cd ../../graphics/png && make install clean
cd ../php55-gd && make install clean
cd ../jpeg && make install clean
cd ../../X11/t1lib && make install clean
cd ../libXpm && make install clean
cd ../libX11 && make install clean
cd ../libXext && make install clean
cd ../xextproto && make install clean
cd ../xproto && make install clean
cd ../bigreqsproto && make install clean
cd ../xcmiscproto && make install clean
cd ../xtrans && make install clean
cd ../kbproto && make install clean
cd ../inputproto && make install clean
cd ../libXau && make install clean
cd ../libXdmcp && make install clean
cd ../libxcb && make install clean
cd ../libSM && make install clean
cd ../xcb-proto && make install clean
cd ../libICE && make install clean
cd ../../x11-toolkits/libXt && make install clean
cd ../../devel/xorg-macros && make install clean
cd ../libcheck && make install clean
cd ../libpthread-stubs && make install clean
cd ../../x11-fonts/xf86bigfontproto && make install clean
LogAnalyzer
cd /usr/ports/sysutils/loganalyzer
Отдает логи по https, посему:
в сервер надо положить закрытый ключ, сертификат сервера, цепь родительских сертификатов и сертификат центра сертификации;
в конфиг апача надо воткнуть строки про SSL, указать Апачу на ключ и серты.
Сейчас стоит Apache24, настройки безопасности которого отличаются от Апача22. Детали см. здесь:
Безопасность в Апаче24
ln -s /usr/local/www/loganalyzer /usr/local/www/apache24/data/logs
Идем браузером на http://server.ip.addr/install.php и имеем счастье.
Конфигурационные файлы
Создаем базы в MySQL
Код создания базы Laph
для общего пользователя логов Syslog
с паролем my_passwd
(пароль придумать и записать на бумажке! Не менее 12 знаков, только из букв и цифр)
Вводим прямо в окне MySQL: (код можно скачать - жмем на линк с названием файла)
- mysql_script.sql
CREATE DATABASE IF NOT EXISTS `Laph` CHARACTER SET utf8 COLLATE utf8_general_ci;
USE Laph;
CREATE TABLE IF NOT EXISTS `SystemEvents`
(
ID INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
CustomerID BIGINT,
ReceivedAt datetime NULL,
DeviceReportedTime datetime NULL,
Facility SMALLINT NULL,
Priority SMALLINT NULL,
FromHost VARCHAR(60) NULL,
Message text,
NTSeverity INT NULL,
Importance INT NULL,
EventSource VARCHAR(60),
EventUser VARCHAR(60) NULL,
EventCategory INT NULL,
EventID INT NULL,
EventBinaryData text NULL,
MaxAvailable INT NULL,
CurrUsage INT NULL,
MinUsage INT NULL,
MaxUsage INT NULL,
InfoUnitID INT NULL ,
SysLogTag VARCHAR(60),
EventLogType VARCHAR(60),
GenericFileName VARCHAR(60),
SystemID INT NULL
);
CREATE TABLE IF NOT EXISTS `SystemEventsProperties`
(
ID INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
SystemEventID INT NULL ,
ParamName VARCHAR(255) NULL ,
ParamValue text NULL
);
GRANT ALL PRIVILEGES ON `Laph`.* TO 'Syslog' IDENTIFIED BY 'my_passwd';
/usr/local/etc/rsyslog.conf
Код можно скачать - жмем на линк с названием файла
- rsyslog.conf
#newsyslog(8) has the path of syslogd's pid file hardcoded. To
#make it work seamlessly with rsyslog, add this:
#rsyslogd_pidfile="/var/run/syslog.pid"
#### Modules ####
$ModLoad imuxsock.so # provides support for local system logging
$ModLoad imklog.so # kernel logging
$ModLoad immark.so # provides --MARK-- message capability
$ModLoad ommysql
$ModLoad imudp
$ModLoad imtcp
$ModLoad ommail
$UDPServerRun 514
$InputTCPServerRun 514
$FileOwner root
$FileGroup wheel
#### From Syslogd#######
*.* /snort-logs/logdata/snortsystem/snort-only.log
*.notice;authpriv.none;kern.debug;lpr.info;mail.crit /var/log/messages
kern.warning /snort-logs/logdata/snortsystem/warnings.log
security.* /var/log/security
auth.info;authpriv.info /var/log/auth.log
mail.info /var/log/maillog
lpr.info /var/log/lpd-errs
ftp.info /var/log/xferlog
cron.* /var/log/cron
*.=debug /var/log/debug.log
*.emerg /var/log/emerg.log
###;RSYSLOG_Traditional-Format
#### What is Sent to MySQL ####
if $hostname contains 'router' and not ($programname contains 'named') then :ommysql:127.0.0.1,Laph_14,Syslog,mypasswd
if $hostname contains 'router' and $programname contains 'named' then :ommysql:127.0.0.1,Laph_named,Syslog,mypasswd
if $hostname contains 'islay' then :ommysql:127.0.0.1,Islay,Syslog,mypasswd
if $hostname contains 'red' and not ($programname contains 'squid') and not ($programname contains 'named') then :ommysql:127.0.0.1,Red,Syslog,mypasswd
if $hostname contains 'red' and $programname contains 'named' then :ommysql:127.0.0.1,Red_named,Syslog,mypasswd
if $hostname contains 'red' and $programname contains 'squid' then :ommysql:127.0.0.1,Squid,Syslog,mypasswd
if $hostname contains 'storages' then :ommysql:127.0.0.1,Storages,Syslog,mypasswd
if $hostname contains 'snort' then :ommysql:127.0.0.1,Syslog_14,Syslog,mypasswd
if $hostname contains 'www' then :ommysql:127.0.0.1,Red,Syslog,mypasswd
if $hostname contains 'hsdt' then :ommysql:127.0.0.1,Red,Syslog,mypasswd
########## Text Logs ###########
if $hostname contains 'router' and not ($programname contains 'named') then /snort-logs/logdata/laphroaig/laphroaig.log
if $hostname contains 'router' and $programname contains 'named' then /snort-logs/logdata/laph-ipfw/laph-named.log
if $hostname contains 'router' and $msg contains 'ipfw' then /snort-logs/logdata/laph-ipfw/laph-ipfw.log
if $hostname contains 'islay' then /snort-logs/logdata/islay/islay.log
if $hostname contains 'islay' and $programname contains 'postfix' then /snort-logs/logdata/islay-mail/islay-mail.log
if $hostname contains 'islay' and $programname contains 'imaps' then /snort-logs/logdata/islay-mailaccess/islay-mailaccess.log
if $hostname contains 'islay' and $programname contains 'ipfw' then /snort-logs/logdata/islay-ipfw/islay-ipfw.log
if $hostname contains 'red' then /snort-logs/logdata/red/red.log
if $hostname contains 'red' and $programname contains 'ftp' then /snort-logs/logdata/red-ftpd/red-ftpd.log
if $hostname contains 'red' and $msg contains 'ipfw' then /snort-logs/logdata/red-ipfw/red-ipfw.log
if $hostname contains 'snort' and $msg contains 'mfi0' then /snort-logs/logdata/snortsystem/mfi0.log
#### Mail Warnings ####
$ActionMailSMTPServer 87.255.21.23
$ActionMailSMTPPort 25
$ActionMailFrom dg@knvr.ru
$ActionMailTo dr@knvr.ru
$template mailSubject,"On host %hostname%, Error-level by %syslogfacility%"
#$template mailBody,"%syslogfacility%.%syslogpriority% at %timegenerated% on host:%HOSTNAME%\r\n%"
#$template mailBody,"SERVERLOG\r\nError on %hostname% at %timegenerated%\r\nError = '%msg%'"
$template mailBody,"SERVERLOG\r\nError on %hostname%\r\nError = '%msg%'"
$ActionMailSubject mailSubject
## Seconds Interval Beetween mailing
$ActionExecOnlyOnceEveryInterval 6
# Expr-based filter
# if not ($msg contains 'TopLevelSystem' \
# or $msg contains 'getConnectorInfo' \
# or $msg contains 'failed - Data stale' \
# or $msg contains "DatadiscoveryfailedforConnector') \
# and ($syslogseverity-text =='err' \
# or $syslogseverity-text =='crit' \
# or $syslogseverity-text =='alert' \
# or $syslogseverity-text =='emerg' )
#if not ($msg contains 'TopLevelSystem') and $syslogseverity-text =='crit' then :ommail:;mailBody
#$ActionMailTo dr@knvr.ru
#if not ($msg contains 'TopLevelSystem') and $syslogseverity-text =='err' then :ommail:;mailBody
#$ActionMailTo dr@knvr.ru
#if not ($msg contains 'TopLevelSystem') and $syslogseverity-text =='emerg' then :ommail:;mailBody
#$ActionMailTo dr@knvr.ru
#if not ($msg contains 'getConnectorInfo') and $syslogseverity-text =='crit' then :ommail:;mailBody
#$ActionMailTo dr@knvr.ru
#if not ($msg contains 'getConnectorInfo') and $syslogseverity-text =='err' then :ommail:;mailBody
#$ActionMailTo dr@knvr.ru
#if not ($msg contains 'getConnectorInfo') and $syslogseverity-text =='emerg' then :ommail:;mailBody
#$ActionMailTo dr@knvr.ru
if not ($msg contains 'mfid0') and $syslogseverity-text =='crit' then :ommail:;mailBody
#$ActionMailTo dr@knvr.ru
#if not ($msg contains 'mfid0') and $syslogseverity-text =='err' then :ommail:;mailBody
#$ActionMailTo dr@knvr.ru
#if not ($msg contains 'mfid0') and $syslogseverity-text =='emerg' then :ommail:;mailBody
stop
Реальный пароль подключения rsyslog к базе MySQL здесь сменен на mypasswd
/etc/newsyslog.conf
Код можно скачать - жмем на линк с названием файла
- newsyslog.conf
# logfilename [owner:group] mode count size when flags [/pid_file] [sig_num]
/var/log/all.log 600 7 * @T00 J /var/run/rsyslog.pid
/var/log/amd.log 644 7 100 * J /var/run/rsyslog.pid
/var/log/auth.log 600 7 100 @0101T JC /var/run/rsyslog.pid
/var/log/console.log 600 5 100 * J /var/run/rsyslog.pid
/var/log/cron 600 3 100 * JC /var/run/rsyslog.pid
/var/log/daily.log 640 7 * @T00 JN /var/run/rsyslog.pid
/var/log/debug.log 600 7 100 * JC /var/run/rsyslog.pid
/var/log/kerberos.log 600 7 100 * J /var/run/rsyslog.pid
/var/log/lpd-errs 644 7 100 * JC /var/run/rsyslog.pid
/var/log/maillog 640 7 * @T00 JC /var/run/rsyslog.pid
/var/log/messages 644 5 100 @0101T JC /var/run/rsyslog.pid
/var/log/monthly.log 640 12 * $M1D0 JN /var/run/rsyslog.pid
/var/log/pflog 600 3 100 * JB /var/run/pflogd.pid
/var/log/ppp.log root:network 640 3 100 * JC /var/run/rsyslog.pid
/var/log/security 600 10 100 * JC /var/run/rsyslog.pid
/var/log/sendmail.st 640 10 * 168 BN /var/run/rsyslog.pid
/var/log/utx.log 644 3 * @01T05 B /var/run/rsyslog.pid
/var/log/weekly.log 640 5 * $W6D0 JN /var/run/rsyslog.pid
/var/log/xferlog 600 7 100 * JC /var/run/rsyslog.pid
/snort-logs/logdata/snortsystem/mfi0.log 600 70 1000 * JC /var/run/rsyslog.pid
/snort-logs/logdata/snortsystem/warnings.log 600 1000 5000 @T01 JC /var/run/rsyslog.pid
/snort-logs/logdata/snortsystem/all.log 600 1000 5000 @T01 JC /var/run/rsyslog.pid
/snort-logs/logdata/red/red.log 600 1000 5000 * JC /var/run/rsyslog.pid
/snort-logs/logdata/red-ftpd/red-ftpd.log 600 1000 5000 * JC /var/run/rsyslog.pid
/snort-logs/logdata/red-ipfw/red-ipfw.log 600 1000 5000 * JC /var/run/rsyslog.pid
/snort-logs/logdata/laphroaig/laphroaig.log 600 1000 5000 * JC /var/run/rsyslog.pid
/snort-logs/logdata/laph-ipfw/laph-ipfw.log 600 1000 5000 * JC /var/run/rsyslog.pid
/snort-logs/logdata/islay/islay.log 600 1000 5000 * JC /var/run/rsyslog.pid
/snort-logs/logdata/islay-ipfw/islay-ipfw.log 600 1000 10000 * JC /var/run/rsyslog.pid
/snort-logs/logdata/islay-mail/islay-mail.log 600 1000 10000 * JC /var/run/rsyslog.pid
/snort-logs/logdata/islay-mailaccess/islay-mailaccess.log 600 5000 10000 * JC /var/run/rsyslog.pid
/snort-logs/logdata/snortsystem/snort-only.log 600 1000 20000 * JC /var/run/rsyslog.pid
/usr/local/etc/apache24/httpd.conf
Код можно скачать - жмем на линк с названием файла
- httpd.conf
ServerRoot "/usr/local"
Listen 80 443
LoadModule authn_file_module libexec/apache24/mod_authn_file.so
LoadModule authn_core_module libexec/apache24/mod_authn_core.so
LoadModule authz_host_module libexec/apache24/mod_authz_host.so
LoadModule authz_groupfile_module libexec/apache24/mod_authz_groupfile.so
LoadModule authz_user_module libexec/apache24/mod_authz_user.so
LoadModule authz_core_module libexec/apache24/mod_authz_core.so
LoadModule access_compat_module libexec/apache24/mod_access_compat.so
LoadModule auth_basic_module libexec/apache24/mod_auth_basic.so
LoadModule reqtimeout_module libexec/apache24/mod_reqtimeout.so
LoadModule filter_module libexec/apache24/mod_filter.so
LoadModule mime_module libexec/apache24/mod_mime.so
LoadModule log_config_module libexec/apache24/mod_log_config.so
LoadModule env_module libexec/apache24/mod_env.so
LoadModule headers_module libexec/apache24/mod_headers.so
LoadModule setenvif_module libexec/apache24/mod_setenvif.so
LoadModule version_module libexec/apache24/mod_version.so
LoadModule unixd_module libexec/apache24/mod_unixd.so
LoadModule status_module libexec/apache24/mod_status.so
LoadModule autoindex_module libexec/apache24/mod_autoindex.so
LoadModule dir_module libexec/apache24/mod_dir.so
LoadModule alias_module libexec/apache24/mod_alias.so
LoadModule ssl_module libexec/apache24/mod_ssl.so
LoadModule socache_shmcb_module libexec/apache24/mod_socache_shmcb.so
LoadModule php5_module libexec/apache24/libphp5.so
IncludeOptional etc/apache24/modules.d/[0-9][0-9][0-9]_*.conf
Include etc/apache24/extra/httpd-ssl.conf
<IfModule unixd_module>
User www
Group www
</IfModule>
ServerAdmin dr@knvr.ru
ServerName 87.255.21.27:80
<Directory />
AllowOverride none
Require all denied
</Directory>
DocumentRoot "/usr/local/www/apache24/data"
<Directory "/usr/local/www/apache24/data">
Options none
# Options Indexed FollowSymLinks
AllowOverride AuthConfig
# Require all granted
Require ip 10.105.144.171 87.255.21.17/28 87.255.13.117
</Directory>
Alias /phpMyAdmin/ "/usr/local/www/phpMyAdmin/"
<Directory "/usr/local/www/phpMyAdmin/">
Options none
AllowOverride Limit
Require ip 10.105.144.171 87.255.21.17/28
</Directory>
<Directory "/usr/local/www/apache24/data/logs/">
# Options Indexes FollowSymLinks
Options none
AuthType Basic
AuthName "Logs. Need to authenticate"
AuthBasicProvider file
AuthUserFile "/usr/local/www/apache24/data/logs/.htpasswd"
Require ip 10.105.144.171 87.255.21.17/28 87.255.13.117
Satisfy All
</Directory>
<IfModule dir_module>
DirectoryIndex index.html
DirectoryIndex index.php
</IfModule>
<Files ".ht*">
Require all denied
</Files>
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
<FilesMatch "\.phps$">
SetHandler application/x-httpd-php-source
</FilesMatch>
ErrorLog "/var/log/httpd-error.log"
LogLevel warn
<IfModule log_config_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
<IfModule logio_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
</IfModule>
CustomLog "/var/log/httpd-access.log" common
</IfModule>
<IfModule alias_module>
ScriptAlias /cgi-bin/ "/usr/local/www/apache24/cgi-bin/"
</IfModule>
<IfModule cgid_module>
</IfModule>
<Directory "/usr/local/www/apache24/cgi-bin">
AllowOverride None
Options None
Require all granted
</Directory>
<IfModule mime_module>
TypesConfig etc/apache24/mime.types
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
</IfModule>
<IfModule proxy_html_module>
Include etc/apache24/extra/proxy-html.conf
</IfModule>
<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>
Include etc/apache24/Includes/*.conf