在Python程序中用UDP向IBM Qradar发送log

目录

  • Python中利用UDP向IBM Qradar发送log
    • 系统环境
    • 常见方法
    • 本文使用方法
    • 运行结果
    • 后话

Python中利用UDP向IBM Qradar发送log

不仅适用于Qradar,任何远程服务器接收方都适用。。。(监听514端口)

系统环境

  1. IBM Qradar
  2. Centos 7
  3. Python 2.7.5

常见方法

  1. import syslog

Example:

import syslog

log = syslog.openlog(" --自定义-- ", syslog.LOG_PID)
#LOG_PID 指代系统进程号
syslog.syslog('Test')

-运行结果 用 tail /var/log/messages 查看

  1. 利用syslog UDP/TCP forwarding

编辑 rsyslog.conf

vi /etc/rsyslog.conf

去掉UDP forwarding 的注释

#Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514

在rsyslog.conf最后新增加一行,用来将所有的日志信息转发给Qradar

# remote host is : name/ip:port (port optional)
*.*  @Qradar-IPAddress:514

Esc 退出编辑
:wq 保存并关闭文件

最后不要忘记重启服务

[root@ServerHostname ~]# /etc/init.d/rsyslog restart

本文使用方法

因为不想将centos的整个syslog转发给Qradar,而且项目原因不宜将敏感data留在Centos中,所以寻找了python自带的socket来实现UDP通信。

本文UDP用法参考了PyDrarren的 Python网络通信(udp、tcp)

Qradar通用的syslog 格式

Example:

Mar 25 2020 17:55:11 HOSTNAME [FUNCTION NAME]: log message

因为博主很懒,所以用的最直接的方式来合成以上格式。。。
如果有更合理及简便的方式,欢迎大神指导

直接上代码:

from socket import *
import time

#获得本地时间
t = time.strftime('%b %d %Y %H:%M:%S', time.localtime())

#初始Socket
udp_socket = socket(AF_INET, SOCK_DGRAM)

#设置目标服务器的IP 和 Port
dest_addr = (Qradar-ip, 514)

#获取本地服务器的Hostname
hostname = ' ' + gethostname() + ' '

#设置function name
f_name = '[funct_name]'

#合成syslog
message = t + hostname + f_name + 'log message'

#发送至Qradar
udp_socket.sendto(message, dest_addr)

#Close Socket
udp_socket.close()

运行结果

可在Qradar端用 tcpdump 查看是否有数据传输

后话

小弟第一次写blog,欢迎各位大神指正

你可能感兴趣的:(在Python程序中用UDP向IBM Qradar发送log)