Java 版本日志配置
OpenRASP 使用修改过的 log4j (版本 1.2.17) 作为日志输出框架,
- 将默认包名 org.apache.log4j 更改为 com.baidu.openrasp.log4j
- 将默认配置关键字 log4j.configuration 更改为 log4j.rasp.configuration
- 增加 Syslog TCP Appender,支持按照TCP方式传输报警日志
本文提到的配置,与log4j 官方配置文档并无不同,用户也可参考官方文档进行配置
具体配置文件为 <app_home>/rasp/conf/rasp-log4j.xml
,OpenRASP 在启动时会检查这个文件是否存在,若不存在则生成一个
配置说明
1. 使用 Syslog 采集报警日志
通常单条报警日志都会超过1KB,所以你只能使用 Syslog TCP 方式传输日志
找到 <log4j:configuration>
节点,加入一个 <appender>
节点(默认配置文件中有配置示例),
<appender name="SYSLOGTCP" class="com.baidu.openrasp.messaging.SyslogTcpAppender">
<param name="Threshold" value="INFO" />
<param name="Facility" value="LOCAL0" />
<param name="RemoteHost" value="127.0.0.1" />
<param name="FacilityPrinting" value="true"/>
<param name="Port" value="514" />
<param name="ReconnectionDelay" value="60000" />
</appender>
然后找到 <logger name="com.baidu.openrasp.plugin.alarm">
,添加一个 <appender-ref ref="SYSLOG" />
节点,e.g
<logger name="com.baidu.openrasp.plugin.alarm" additivity="false">
<level value="INFO" />
<appender-ref ref="ALARM" />
<appender-ref ref="SYSLOGTCP" />
</logger>
修改后重启应用服务生效
2. 开启调试日志
开启调试日志后,OpenRASP 传递给插件的参数、以及插件返回的结果都会被记录到调试日志里
找到 <root>
节点,修改 INFO
级别为 DEBUG
<root>
<level value="INFO" />
<appender-ref ref="RASP" />
</root>
修改后重启应用服务生效
3. 开启日志限速
当插件需要打印大量调试日志时,你可以开启日志限速功能,防止对服务器的性能产生影响
找到你要限速的 <appender>
节点,添加如下内容
<filter class="com.baidu.openrasp.messaging.BurstFilter">
<param name="maxBurst" value="100000" />
<param name="refillAmount" value="10000" />
<param name="refillInterval" value="10" />
</filter>
这表示在 在10秒内,最多打印 100000 条日志
修改后重启应用服务生效
4. HTTP报警推送
找到 <log4j:configuration>
节点,加入一个 <appender>
节点(默认配置文件中有配置示例),
<appender name="ALARMHTTPAPPENDER" class="com.baidu.openrasp.messaging.AlarmHttpAppender">
<param name="url" value="http://host:port/alarm"/>
<param name="connectionTimeout" value="10000"/>
<param name="readTimeout" value="10000"/>
<param name="maxCacheSize" value="256"/>
<param name="cacheFlushTime" value="60000"/>
</appender>
参数说明:
- url : the target address to receive the alarm
- connectionTimeout : the number of milliseconds this Connector will wait, after accepting a connection, for the request URI line to be presented.
- readTimeout : the timeout on waiting to read data.
- maxCacheSize : max size of cached alarm logging item
- cacheFlushTime : the time interval for post all the cached logging items
该appender仅用于POST推送报警信息;然后找到<logger name="com.baidu.openrasp.plugin.alarm">
,添加一个<appender-ref ref="ALARMHTTPAPPENDER" />
节点,e.g
<logger name="com.baidu.openrasp.plugin.alarm" additivity="false">
<level value="INFO" />
<appender-ref ref="ALARM" />
<appender-ref ref="ALARMHTTPAPPENDER" />
</logger>
为支持多条报警同时推送,POST数据形式(mime:application/json)如下,接收服务须能正确处理。服务异常处理:目前对于返回HTTP STATUS≥300的情况,会在catalina.out
文件中记录相关错误信息,使用过程中务必留意,确保下游接收服务的正常运行。
{
"data": [
{
"attack_type": "xxe",
"attack_source": "66.66.66.66",
"plugin_name": "offical",
"server_type": "Tomcat",
...
"user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36"
},
...
{
"attack_type": "directory",
"attack_source": "66.66.66.66",
"plugin_name": "offical",
"server_type": "Tomcat",
...
"user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36"
}
]
}
FAQ
1. 没有产生日志文件
如果你移动过 <app_home>
目录,你需要手工修正 <app_home>/rasp/conf/rasp-log4j.xml
里面定义的日志路径,否则可能无法正常写入日志