讨论如何保证对外Socket Server的安全?欢迎赐教!
发布于 11 年前 作者 eyecoder 4371 次浏览 最后一次编辑是 8 年前

通过net.createServer创建了一个TCP的server。这个server怎样保证它的安全? 例如,垃圾消息,恶意连接等。 我想到的几种方法,不知道有没有更好的一些解决方案,希望大家赐教。 1、逻辑判断 对恶意传送的数据在逻辑上进行判断,规避垃圾数据。但这样还是会浪费连接资源。只是避免的方法之一。 2、fail2ban 通过fail2ban分析日志来检测不良IP,将这些IP打入黑名单。 但这种方案是发生在恶意连接之后,对首次恶意攻击没有抵抗能力,也许阀值会有效果,但已经浪费了很多系统资源,我觉得fail2ban只是最后的一道保险。 3、TLS 就算是TLS,如果是对外的服务,那么证书很容易就落入到做坏事的人手里。与普通tcp没有差别。没什么意义。 4、TIME_WAIT API中描述(Note: All sockets in Node set SO_REUSEADDR already),所以这个比较好解决。 5、setKeepAlive 设定Keepalive为false。这样就算client连接不关闭,也不会长期占用连接。(通过server.maxConnections测试,恶意在客户端不关闭的连接不会对socketserver造成多大影响,只是短时间的拥堵)

刚玩node没几天,有些知识还没到位,所以见识可能也短了点。希望有经验的朋友多多赐教,提供一些更好的方案。

4 回复

你这个问题应该不是应该不是node的问题啊。 一定要暴露这个server到外面嘛?还是说可以只通过内网的几台机器访问它即可,如果是这样的话,加个iptable,然后禁止外网访问。

tcp相关。 我希望是node有相应的模块可以处理,例如node默认设备了SO_REUSEADDR等。 iptable只是fail2ban的一种禁用方式。

所有的TCP服务器端都会有这样的问题,既然是TCP连接,你可以自己定义协议嘛。比喻以OX55开头,以0XFF结尾,OXFF前边再加一个验证码,用你自己的算法把整条命令算出一个值(比喻异或算法),这样你接收到命令就可以判断了这条是不是有效的终端发出的命令,不是有效的命令就直接抛弃不处理就行啦

这就是我说的第一点,逻辑判断。 还有没有其它好方法?

回到顶部