Python PDNS protobuf接收器到JSON流
pdns-protobuf-receiver的Python项目详细描述
PowerDNS协议接收器
pdns_protobuf_receiver
是python3中的一个守护进程,它充当PowerDNS产品的protobuf服务器。您可以使用它来收集DNS查询和响应,并记录到syslog或json远程tcp收集器。在
目录
安装
PyPI
在pypi中,使用pip命令部署pdns_protobuf_receiver
。
只支持Python3。在
pipinstallpdns-protobuf-receiver
安装后,pdns_protobuf_receiver
二进制文件可用
Docker Hub
从Docker Hub拉出pdns协议接收器映像。在
^{pr2}$部署容器
docker run -d -p 50001:50001 --name=pdns-pb01 dmachard/pdns-protobuf-receiver
容器遵循日志
docker logs pdns-pb01 -f
执行接收器
默认情况下,接收器在0.0.0.0接口和50001 tcp端口上侦听
如果要以JSON格式打印对stdout的DNS查询和响应,请执行pdns_protobuf
接收器,如下所示:
# pdns_protobuf_receiver -v
2020-05-29 18:39:08,579 Start pdns protobuf receiver...
2020-05-29 18:39:08,580 Using selector: EpollSelector
如果要将protobuf消息重新发送到远程tcp收集器 启动pdns_protobuf接收器,如下所示:
# pdns_protobuf_receiver -j 10.0.0.235:6000 -v
2020-05-29 18:39:08,579 Start pdns protobuf receiver...
2020-05-29 18:39:08,580 Using selector: EpollSelector
2020-05-29 18:39:08,580 Connecting to 10.0.0.235 6000
2020-05-29 18:39:08,585 Connected to 10.0.0.235 6000
启动选项
命令行选项包括:
usage: -c [-h] [-l L] [-j J] [-v]
optional arguments:
-h, --help show this help message and exit
-l L listen protobuf dns message on tcp/ip address <ip:port>
-j J write JSON payload to tcp/ip address <ip:port>
-v verbose mode
JSON日志格式
pdns_protbuf
接收器生成的每个事件的格式如下:
{"dns_message":"AUTH_QUERY","socket_family":"IPv6","socket protocol":"UDP","from_address":"0.0.0.0","to_address":"184.26.161.130","query_time":"2020-05-29 13:46:23.322","response_time":"1970-01-01 01:00:00.000","latency":0,"query_type":"A","query_name":"a13-130.akagtm.org.","return_code":"NOERROR","bytes":4}
密钥说明:
- dns_消息:PDNS消息类型(客户端查询、客户端响应…)
- 套接字系列:使用的IP协议(IPv4或IPv6)
- 套接字协议:使用的传输协议(UDP或TCP)
- 发件人地址:查询者IP地址
- 目标地址:目标IP地址
- 查询时间:接收查询的时间
- 响应时间:接收响应的时间
- 延迟:查询和响应时间之间的差异
- 查询类型:查询类型(A、AAAA、NS…)
- 查询名称:查询名称
- return_code:发送回客户端的响应代码(NXDOMAIN,NOERROR,…)
- 字节:查询或响应的字节大小
PowerDNS配置
您需要将dnsdist或pdns recursor配置为活动的远程日志记录。在
DNS列表
配置dnsdist /etc/dnsdist/dnsdist.conf
,并添加以下行
使用pdns_protobuf_接收器的地址设置newRemoteLogger函数
实例。在
rl = newRemoteLogger("10.0.0.97:50001")
addAction(AllRule(),RemoteLogAction(rl))
addResponseAction(AllRule(),RemoteLogResponseAction(rl))
重新启动dnsdist。在
pdns递归器
配置powerdns递归器/etc/pdns-recursor/recursor.conf
,并添加以下行
lua-config-file=/etc/pdns-recursor/recursor.lua
创建LUA文件/etc/pdns-recursor/recursor.lua
使用pdns_protobuf接收器实例的地址设置protobufServer或outgoingProtobufServer函数。在
protobufServer("10.0.0.97:50001", {logQueries=true,
logResponses=true,
exportTypes={'A', 'AAAA',
'CNAME', 'MX',
'PTR', 'NS',
'SPF', 'SRV',
'TXT'}} )
outgoingProtobufServer("10.0.0.97:50001", {logQueries=true,
logResponses=true,
exportTypes={'A', 'AAAA',
'CNAME', 'MX',
'PTR', 'NS',
'SPF', 'SRV',
'TXT'}})
重新启动递归器。在
关于
- 项目
标签: