Конфигурация сервера логов

Это дополнительный материал к Главной странице закрытого раздела

Для сбора логов по сети установлен rsyslog-7.4.7

Однако, установку софта надо производить в следующем порядке:

  1. Mysql55-client
  2. Mysql55-server
  3. rsyslog-7.4.7
  4. apache24
  5. php-5.5
  6. 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, посему:

  • в сервер надо положить закрытый ключ, сертификат сервера, цепь родительских сертификатов и сертификат центра сертификации;
    • Как создать серт, см. Сертификаты
    • Если ставим не самоподписанный серт, то прописываем доменное имя на сервере DNS У меня сейчас snort.knvr.ru
    • Также, у центра сертификации надо скачать файлы цепи сертов и серт центра. Для startssl можно взять их здесь:
  • в конфиг апача надо воткнуть строки про 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
dr_own/log_serv_config.txt · Last modified: 2014/10/06 20:05 by rybario
About this template
CC Attribution-Share Alike 4.0 International
Powered by PHP Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0 Valid HTML5