Python中利用UDP向IBM Qradar发送log
不仅适用于Qradar,任何远程服务器接收方都适用。。。(监听514端口)
系统环境
- IBM Qradar
- Centos 7
- Python 2.7.5
常见方法
- import syslog
Example:
import syslog
log = syslog.openlog(" --自定义-- ", syslog.LOG_PID)
#LOG_PID 指代系统进程号
syslog.syslog('Test')
-运行结果 用 tail /var/log/messages 查看
- 利用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,欢迎各位大神指正