温馨提示×

Linux syslog与Kerberos集成指南

小樊
36
2025-11-23 02:11:54
栏目: 智能运维

Linux syslog 与 Kerberos 集成指南

一 架构与前提

  • 目标是在 rsyslog 与日志收集端之间建立基于 Kerberos/GSSAPI 的身份认证与可选的加密通道,确保日志在传输与接收过程中的完整性来源可信
  • 典型部署:发送端为 Linux 主机(rsyslog),接收端为 rsyslog 服务器或 SIEM(如 Splunk、QRadar、Elastic),双方均加入同一 Kerberos 领域(REALM),时间同步(建议 NTP),并使用 FQDN 进行主机标识与服务主体命名。
  • 协议与端口:Kerberos 使用 UDP/TCP 88;syslog 常用 UDP/TCP 514,若启用 TLS(RFC 5425) 则为 TCP 6514。防火墙需放行对应端口。

二 服务端准备 Kerberos 与 rsyslog

  • 安装与基础配置
    • 安装 MIT Kerberos 服务端组件(示例为 CentOS/RHEL 系):sudo yum install krb5-server krb5-libs krb5-workstation
    • 配置 /etc/krb5.conf(示例):
      • [libdefaults] 中设置 default_realm、关闭 dns_lookup_realm/dns_lookup_kdc、设定 ticket_lifetime/renew_lifetime 等。
      • [realms] 中声明 KDCadmin_server 地址(端口 88/749)。
      • [domain_realm] 映射域名到领域。
    • 初始化 KDC 数据库:sudo kdb5_util create -r EXAMPLE.COM -s;创建管理员主体(如 admin/admin@EXAMPLE.COM),启动 krb5kdckadmin 服务并设为开机自启。
  • 创建日志服务主体与密钥表
    • 建议按主机与传输方式命名主体,例如:syslog/collector.example.com@EXAMPLE.COM(用于 TCP/TLS 接收)与 syslog-udp/collector.example.com@EXAMPLE.COM(用于 UDP 接收,若启用 GSSAPI)。
    • 生成密钥表(服务端):sudo kadmin.local -q "addprinc -randkey syslog/collector.example.com@EXAMPLE.COM"sudo kadmin.local -q "ktadd -k /etc/krb5.keytab syslog/collector.example.com@EXAMPLE.COM";设置权限(如 600)并确认属主为 root
  • 配置 rsyslog 接收端(启用 GSSAPI)
    • 安装 rsyslog-gssapi(发行版包名可能不同,如 rsyslog-gssapi 或 rsyslog-gnutls)。
    • 启用输入模块与 GSSAPI 认证(RainerScript 推荐):
      • 加载模块:module(load="imtcp")module(load="imgssapi")
      • 定义规则集并绑定 GSSAPI 输入:
        ruleset(name="gssapi") {
            action(type="omfile" file="/var/log/secure-gssapi")
        }
        input(type="imtcp" port="514" ruleset="gssapi")
        input(type="imgssapi"
              port="514"
              ruleset="gssapi"
              permit.gssapi.principal="syslog/collector.example.com@EXAMPLE.COM"
              # 可选:仅允许指定主体
              # permit.gssapi.keytab="/etc/krb5.keytab"
        )
        
    • 防火墙放行:sudo firewall-cmd --permanent --add-port=514/tcp --add-port=88/tcp;如需 UDP 514,亦放行 UDP。

三 客户端配置 rsyslog 发送日志

  • 安装与基础配置
    • 安装 Kerberos 客户端:sudo yum install krb5-workstation krb5-libs(Debian/Ubuntu 可用 krb5-user 等)。
    • 同步 /etc/krb5.conf 与 KDC 时间;测试凭据:kinit -k -t /etc/krb5.keytab syslog/collector.example.com@EXAMPLE.COMklist 应显示有效票据。
  • 配置 rsyslog 发送端(GSSAPI 认证)
    • 安装 rsyslog-gssapi;在发送端启用 GSSAPI 输出模块并发送至服务端 FQDN(必须与主体中的服务名一致):
      module(load="omgssapi")
      action(type="omgssapi"
             target="collector.example.com"
             port="514"
             # 可选:指定本地主体与密钥表
             # my.principal="syslog/collector.example.com@EXAMPLE.COM"
             # my.keytab="/etc/krb5.keytab"
             # 可选:失败时回退本地文件
             # action.resumeRetryCount="-1"
             # action.resumeInterval="10"
      )
      
    • 若服务端仅开放 TLS 6514,可改用 omtls 模块进行加密传输(不涉及 Kerberos 认证)。

四 验证与排错

  • 端到端验证
    • 服务端:sudo tail -f /var/log/secure-gssapi 观察是否出现经过 GSSAPI 认证的日志;sudo journalctl -u rsyslog -f 查看 rsyslog 自身日志。
    • 客户端:logger -p authpriv.info "test gssapi syslog" 触发日志;klist 确认票据有效;必要时使用 tcpdump port 514 or 88 抓包确认 GSSAPI 握手与 AP-REQ/AP-REP 流程。
  • 常见错误与修复
    • 主体或密钥表不匹配:确保客户端使用的主体与服务器 permit.gssapi.principal 一致,且 /etc/krb5.keytab 包含对应主体且权限为 600
    • 名称解析问题:客户端与服务端均应使用 FQDN,并在 /etc/hosts 或 DNS 中正确解析;Kerberos 通信依赖正确的领域与主机名映射。
    • 时间漂移:Kerberos 对时间敏感,确保 NTP 同步(通常偏差不超过 5 分钟)。
    • 防火墙/SELinux:放行 88/TCP(KDC)514/TCP(syslog/GSSAPI);SELinux 若启用,确认 rsyslog 网络与 GSSAPI 相关布尔值已允许。

五 安全与运维建议

  • 优先使用 TCP 514 + GSSAPITLS 6514;UDP 514 不保证可靠传输,GSSAPI 在 UDP 上的支持取决于实现与网络质量。
  • 主体命名规范化:按 服务/主机@REALM 命名(如 syslog/collector.example.com@EXAMPLE.COM),不同传输方式(TCP/TLS 与 UDP)可使用不同主体以便精细化授权。
  • 最小权限与凭据轮换:仅授予日志写入所需权限;定期轮换 keytab 并限制文件权限;审计主体与密钥表访问。
  • 高可用与缓冲:在 rsyslog 动作上配置合理的 重试与缓冲(如 action.resumeRetryCountaction.resumeInterval),避免短暂网络抖动导致日志丢失。

0