未发布应用的KTor服务器收到随机请求:是否需警惕或处理?
日志分析与处理建议
这些日志属于互联网公开端口普遍会遇到的随机扫描流量,既不是针对你的定向黑客攻击,也不是正常的爬虫机器人,本质是全网扫描工具在批量探测端口服务类型,属于网络“背景噪音”。下面逐个分析日志类型:
1. 请求解码失败(空文本/无效HTTP版本)
2023-11-19 11:14:25.444 [eventLoopGroupProxy-4-1] TRACE Application - Failed to decode request java.lang.IllegalArgumentException: text is empty (possibly HTTP/0.9)
这类是扫描工具发送的非标准HTTP数据或乱码,目的是试探端口上运行的服务类型,没有针对性,属于批量扫描的常规操作。
2. 连接被对方重置(Connection reset by peer)
20-11-2023 11:40:31.413 [eventLoopGroupProxy-3-1] [WARN ] i.n.channel.DefaultChannelPipeline - An exceptionCaught() event was fired... java.io.IOException: Connection reset by peer
通常是扫描工具发送部分试探数据后主动断开连接,或是网络波动导致的中断,完全是扫描过程中的正常现象,不会对服务造成威胁。
3. TLS握手失败(NotSslRecordException)
18-11-2023 05:48:54.505 [eventLoopGroupProxy-3-1] [WARN ] i.n.h.s.ApplicationProtocolNegotiationHandler - TLS handshake failed: io.netty.handler.ssl.NotSslRecordException: not an SSL/TLS record: ...
你的端口配置了HTTPS,但扫描工具发送了其他协议的明文数据(示例中的ANY-SCP是类SSH协议的试探),属于跨协议扫描,也是全网批量探测的常见行为。
针对性处理建议
日志优化
调整KTor/Netty的日志级别,过滤掉这类无意义的噪音日志:
- 在
logback.xml或对应的日志配置文件中,将io.netty.handler.codec.http、io.netty.channel.DefaultChannelPipeline等包的日志级别设为ERROR或OFF,避免日志刷屏。
网络层面限制
- 开发阶段尽量不要将服务器直接暴露在公网,使用内网穿透工具仅允许测试设备访问;
- 若必须公网运行,通过防火墙(如云服务器安全组、iptables)限制IP范围,只开放给测试用的客户端IP。
服务层面拦截
给KTor添加前置中间件,提前过滤不符合HTTP规范的请求:
intercept(ApplicationCallPipeline.Receive) { val request = call.request if (!request.httpVersion.isValid()) { call.respond(HttpStatusCode.BadRequest) finish() } }
提前终止无效连接,减少服务器资源消耗。
内容的提问来源于stack exchange,提问作者Cool_Coder
相关产品推荐
相关产品推荐

