文章目录
- 运行环境
- 数据库配置
- rsyslog配置
- loganalyzer安装
- 防火墙配置
《中华人民共和国网络安全法》第二十一条第三项明确规定,网络运营者必须采取监测、记录网络运行状态和网络安全事件的技术措施,并按照规定留存相关的网络日志不少于六个月。
目前,市面上日志类产品接近10W左右,功能对于一些小公司来说有些过剩。
在这里分享一个我自己基于开源组件搭建的日志服务器(PC电脑即可满足性能要求),对于法律中的存储要求绰绰有余。不过loganalyzer的展示、搜索功能满足要求,分析功能差强人意,大家可按需搭建。
我自己也针对rsyslog的数据库接口写了一个API数据接口服务,后续将放在仓库里共享,可配合数据分析脚本使用。
运行环境
操作系统:CentOS 7
数据库:mysql5.6 (yum 默认安装)
rsyslogd:8.24.0 (系统自带)
中间件:httpd (Apache) 2.4.6 (yum 默认安装)
运行环境:php、php-mysql、gd、gd-devel、php-gd (yum 默认安装)
loganalyzer:4.1.6 (官网下载)
其他运行环境安装、配置类似,如有差异自行豆包
数据库配置
1、修改配置文件: /etc/my.cnf
skip_name_resolve=ONinnodb_file_per_table=ONinteractive_timeout=28800000wait_timeout=28800000#防止中文乱码character-set-server=utf8init_connect='SET NAMES utf8'2、安装rsyslog连接至mysql的驱动模块;
yuminstallrsyslog-mysql安装完成后,查看安装结果
[root@localhost rsyslog-8.24.0]$rpm-qlrsyslog-mysql /usr/lib64/rsyslog/ommysql.so /usr/share/doc/rsyslog-8.24.0/mysql-createDB.sqlommysql.so --> rsyslog输出时用到的模块,需要在/etc/rsyslog.conf配置文件里进行配置
mysql-createDB.sql --> 帮我们生成rsyslog所依赖的数据(表,字段,表结构等等)的sql脚本
3、导入rsyslog表结构
mysql-uUSER-hHOST-pPASSWORD</usr/share/doc/rsyslog-8.24.0/mysql-createDB.sql查看执行结果
mysql>showdatabases;+--------------------+|Database|+--------------------+|information_schema||Syslog||mysql||performance_schema|+--------------------+4rowsinset(0.00sec)mysql>useSyslog Readingtableinformationforcompletionoftableandcolumnnames You can turnoffthis featuretoget a quicker startupwith-ADatabasechanged mysql>showtables;+------------------------+|Tables_in_Syslog|+------------------------+|SystemEvents||SystemEventsProperties|+------------------------+2rowsinset(0.00sec)4、建立syslog专用的用户账号(数据库名叫Syslog,用户名和密码自己改)
GRANTALLONSyslog.*TO'rsyslog'@'127.0.0.1'IDENTIFIEDBY'abcd1234';GRANTALLONSyslog.*TO'rsyslog'@'localhost'IDENTIFIEDBY'abcd1234';flushprivileges;5、修改表结构(可以不操作)
rsyslogd数据默认不会存储客户端IP信息,为保存客户端IP地址,修改数据库表结构(添加FromIP字段):
mysql>useSyslog;Readingtableinformationforcompletionoftableandcolumnnames You can turnoffthis featuretoget a quicker startupwith-ADatabasechanged mysql>altertableSystemEventsaddFromIPvarchar(60)defaultnullafterFromHost;Query OK,0rowsaffected(0.03sec)Records:0Duplicates:0Warnings:0若执行本步操作后,rsyslog.conf中template insertpl语句为(自行对比差异):
$template insertpl,"insert into SystemEvents (Message, Facility, FromHost, FromIP, Priority, DeviceReportedTime, ReceivedAt, InfoUnitID, SysLogTag) values ('%msg%', %syslogfacility%, '%HOSTNAME%', '%fromhost-ip%', %syslogpriority%, '%timereported:::date-mysql%', '%timegenerated:::date-mysql%', %iut%, '%syslogtag%')",SQLrsyslog配置
1、编辑配置文件: /etc/rsyslog.conf
在此只介绍修改后的配置项,其余项默认即可
$template insertpl,"insert into SystemEvents (Message, Facility, FromHost, Priority, DeviceReportedTime, ReceivedAt, InfoUnitID, SysLogTag) values ('%msg%', %syslogfacility%, '%fromhost-ip%', %syslogpriority%, '%timereported:::date-mysql%', '%timegenerated:::date-mysql%', %iut%, '%syslogtag%')",SQL $template Remote,"/var/log/%fromhost-ip%/%fromhost-ip%_%$YEAR%-%$MONTH%-%$DAY%.log" :fromhost-ip, !isequal, "127.0.0.1" ?Remote :fromhost-ip, !isequal, "localhost" ?Remote if $fromhost-ip != '127.0.0.1' and $fromhost-ip != 'localhost' then { $ModLoad ommysql *.info,*.notice,*.warning;*.err;*.crit;*.alert;*.emerg :ommysql:127.0.0.1,Syslog,rsyslog,abcd1234;insertpl } # The imjournal module bellow is now used as a message source instead of imuxsock. $ModLoad imuxsock # provides support for local system logging (e.g. via logger command) $ModLoad imjournal # provides access to the systemd journal $ModLoad imklog # reads kernel messages (the same are read from journald) $ModLoad immark # provides --MARK-- message capability # Provides UDP syslog reception $ModLoad imudp $UDPServerRun 514 # Provides TCP syslog reception #$ModLoad imtcp #$InputTCPServerRun 514FACILITY定义
| 服务类型 | 功能、描述 | 符号 | syslog序列号 |
|---|---|---|---|
| kern | 内核信息 | LOG_KERN | 0 |
| user | 用户进程 | LOG_USER | 1 |
| 邮件 | LOG_MAIL | 2 | |
| daemon | 后台进程 | LOG_DAEM | 3 |
| authpriv | 授权信息 | LOG_AUTH | 4 |
| syslog | 系统日志 | LOG_SYSLOG | 5 |
| lpr | 打印信息 | LOG_LPR | 6 |
| news | 新闻组信息 | LOG_NEWS | 7 |
| uucp | UUCP程序 | LOG_UUCP | 8 |
| cron | 计划和任务信息 | LOG_CRON | 9 |
| 认证消息 | LOG_AUTHPRIV | 10 | |
| FTP daemon | LOG_LOGTP | 11 | |
| NTP subsystem | LOG_NTP | 12 | |
| log audit | LOG_AUDIT | 13 | |
| log alert | LOG_ALERT | 14 | |
| clock daemon | LOG_CLOCK | 15 | |
| local0-local7 | 本地用户 | LOG_LOCALn | 16-23 |
PRIORITY定义
| 优先级 | 含义 | 符号 | syslog序列号 |
|---|---|---|---|
| debug | 调试级——信息量最多 | LOG_DEBUG | 7 |
| info | 通知性消息 | LOG_INFO | 6 |
| notice | 普通但重要的消息 | LOG_NOTICE | 5 |
| warning | 警告消息 | LOG_WARNING | 4 |
| err | 出错消息 | LOG_ERR | 3 |
| crit | 重要消息 | LOG_CRIT | 2 |
| alert | 紧急消息 | LOG_ALERT | 1 |
| emerg | 最紧急的消息 | LOG_EMERG | 0 |
| none | 不保存信息 |
2、重启rsyslog
servicersyslog restartloganalyzer安装
loganalyzer安装比较简单,按步骤慢慢来就行。
参考网站:http://www.ifzhai.com/article.php?id=9
Tips:
安装时先关闭selinux,否则会因无法写入文件而报错(坑啊,测试时被坑了一天。。。)
修改文件 /etc/selinux/config
SELINUX=disabled
这一步骤还可以使用命令直接修改
sed-i's#SELINUX=enforcing#SELINUX=disabled#g'/etc/selinux/configCentOS 6.9及以下好像没这个问题(没测试过)
防火墙配置
CentOS 7开始使用firewalld默认的防火墙,代替iptables(相比iptables,firewalld真难用)
#开放80端口(网段自己加)firewall-cmd--permanent--add-rich-rule='rule family="ipv4" source address="xxx.xxx.xxx.0/24" port procotol="tcp" port="80" accept '#开放514端口(网段自己加)firewall-cmd--permanent--add-rich-rule='rule family="ipv4" source address="xxx.xxx.xxx.0/24" port procotol="udp" port="514" accept '#对调试机开放3306firewall-cmd--permanent--add-rich-rule='rule family="ipv4" source address="xxx.xxx.xxx.xx" port procotol="tcp" port="3306" accept '#限制ssh登陆firewall-cmd--permanent--remove-service=ssh firewall-cmd--permanent--add-rich-rule='rule family="ipv4" source address="xxx.xxx.xxx.xx" port procotol="tcp" port="22" accept '#加载防火墙策略firewall-cmd--reload#查看防火墙策略firewall-cmd --list-all