为什么需要发送syslog?
- 集中管理:将多台服务器的日志汇总到单一平台(如ELK、Graylog)。
- 实时分析:快速检测安全事件(如入侵尝试)或系统错误。
- 合规性:满足GDPR、等保等法规对日志存储的要求。
核心概念
- syslog协议
Linux通过syslog守护进程
(如rsyslog/syslog-ng)处理日志,支持:- 设施(Facility):标识日志来源(如
auth
认证、kern
内核)。 - 级别(Severity):从
debug
(最低)到emerg
(最高)共8级。
- 设施(Facility):标识日志来源(如
- 传输协议
- UDP 514:默认端口,速度快但不可靠。
- TCP 514:可靠传输,防丢包。
- TLS加密:通过证书加密数据(推荐生产环境使用)。
配置rsyslog发送日志(推荐方案)
rsyslog
是大多数Linux发行版(如Ubuntu/CentOS)的默认日志服务。
步骤1:安装与检查
# 若未安装(极少情况) sudo apt install rsyslog # Debian/Ubuntu sudo yum install rsyslog # CentOS/RHEL
步骤2:配置发送远程日志
编辑配置文件/etc/rsyslog.conf
:
sudo vim /etc/rsyslog.conf
- 发送所有日志到远程服务器(IP:192.168.1.100):
*.* @192.168.1.100:514 # UDP发送 *.* @@192.168.1.100:514 # TCP发送
- 仅发送特定日志(例:发送
auth
认证日志):auth.* @@192.168.1.100:514
步骤3:启用加密传输(TLS)
- 生成证书(需CA机构或自签名):
sudo openssl req -x509 -newkey rsa:2048 -keyout /etc/rsyslog.key -out /etc/rsyslog.crt -days 365
- 配置TLS:
# 在/etc/rsyslog.conf 添加 $DefaultNetstreamDriver gtls $DefaultNetstreamDriverCAFile /etc/rsyslog.crt $DefaultNetstreamDriverCertFile /etc/rsyslog.crt $DefaultNetstreamDriverKeyFile /etc/rsyslog.key *.* @@(o)192.168.1.100:6514 # 6514为TLS端口
步骤4:重启服务
sudo systemctl restart rsyslog sudo systemctl enable rsyslog
使用logger命令手动发送
通过命令行即时发送测试日志:
# 发送一条测试日志 logger "This is a test log from Server A" # 指定设施和级别 logger -p auth.warning "Authentication failed for user root"
- 日志将按rsyslog配置自动转发到远程服务器。
通过systemd-journald发送
若系统使用systemd
(如Ubuntu 16.04+/CentOS 7+),可通过journald
转发:
- 编辑
/etc/systemd/journald.conf
:[Journal] ForwardToSyslog=yes # 启用syslog转发
- 重启服务:
sudo systemctl restart systemd-journald
- 日志将由
rsyslog
接管并发送到远程服务器。
安全与优化建议
- 防火墙规则
开放远程服务器的514/TCP端口:sudo ufw allow 514/tcp # Ubuntu sudo firewall-cmd --add-port=514/tcp --permanent # CentOS
- 权限控制
限制日志访问权限:chmod 600 /etc/rsyslog.key # 保护私钥
- 日志轮转
避免本地磁盘爆满,配置logrotate
:# /etc/logrotate.d/rsyslog /var/log/syslog { daily rotate 7 compress delaycompress missingok }
验证与排错
- 检查本地队列
sudo systemctl status rsyslog # 查看服务状态 tail -f /var/log/syslog # 跟踪本地日志
- 测试远程接收
在日志服务器用tcpdump
抓包:sudo tcpdump -i eth0 port 514 -vv
- 常见错误
- 连接拒绝:检查远程服务器防火墙和rsyslog是否监听。
- TLS失败:确保证书路径正确且权限为
600
。
替代方案:syslog-ng
若使用syslog-ng
(更灵活的过滤功能):
- 安装:
sudo apt install syslog-ng # Debian/Ubuntu
- 配置发送日志(编辑
/etc/syslog-ng/syslog-ng.conf
):destination remote_server { tcp("192.168.1.100" port(514)); }; log { source(s_src); destination(remote_server); };
- 基础场景:通过
rsyslog
配置@@目标IP:514
(TCP)即可完成日志发送。 - 安全场景:务必启用TLS加密(端口通常为6514)。
- 临时测试:使用
logger
命令快速验证。 - 现代系统:结合
systemd-journald
实现无缝转发。
引用说明参考Linux官方文档(man rsyslog.conf)、RFC 5424(syslog协议标准),以及Red Hat/CentOS系统管理指南,TLS配置部分遵循OpenSSL官方安全实践。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/7728.html