>>> 此贴的回复 >> 现在没有能很好抵御syn-flood的方式吧. 对层的概念仍然不很明朗,所以... 不管如何都会塞住带宽...以及路由的低效.... 不熟悉,请指教........
>>> 此贴的回复 >> DDOS是不能防御的,SYN-FLOOD属于DOS,可以防御的
>>> 此贴的回复 >> 我见到比较好的方法是用防火墙 先由防火墙建立连接经过三次握手再传给服务器对付syn flood
>>> 此贴的回复 >> 呵呵,其实我也是不懂的,对协议了解不深刻. 一般的syn flood 是大量的客户端去连接服务器.建立一次握手后就不再继续,于是服务器等待超时. 如果大量的sys连接的话就会造成服务器压力或者连接数满而达到目的. 可以用防火墙来先与客户端建立连接,达到三次握手的才传给服务器,减轻服务器压力.但必须好的防火墙啊,他本身就会成为弱点. 还有可以多服务器分时,由防火墙分别按算法发配请求.
>>> 此贴的回复 >> 是这样的,当我们发现被DOS攻击以后怎么办呢? 如何确定是否被DOS攻击呢? netstat -an,查看ESTABLISHED数,然后禁掉该IP
SHELL思想也类似,写一个SHELL,让CROND每分钟运行一次 SHELL去检查ESTABLISHED数量,然后统计某ESTABLISHED数量最高的IP 然后向iptables里-I INPUT一条-s IP --p tcp --dport PORT -j DROP
也就是说,让防火墙具有自动更改规则的动态机制
这个想法可行吗?
>>> 此贴的回复 >> iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT 应该是可以的。
>>> 此贴的回复 >> iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 这句是有的,否则防火墙不允许其他人连接,我的默认规则是DROP,所以必须加这个,问题是已经加了,但不能防止SYN攻击
>>> 此贴的回复 >> purge觉得这是一个方法,思路的问题。以前看到过这样的讨论。
比如,可以这样:
做防火墙的机子收到客户端的SYN包时,直接转发给服务器;
然后,收到服务器回应的SYN/ACK包后,一方面将SYN/ACK包转发给客户端,不去管它; 另一方面以客户端的名义给服务器回送一个ACK包,完成TCP的三次握手;这样,可以使服务器完成连接状态。
当客户端真正的ACK包到达时,有数据则转发给服务器,否则丢弃该包。 理由是:服务器能承受连接状态要比半连接状态高得多,所以这种方法能有效地减轻对服务器的攻击。
没有实践过,但是这是一个思路。
>>> 此贴的回复 >> 参见OpenBSD中pf的synproxy动作,例如: pass in on $ext_if proto tcp from any to $web_server port www flags S/SA synproxy state
>>> 此贴的回复 >> 也不稳妥吧。 SYN半连接DOS,不是看消耗的资源多不多,而是到一定半连接数量时,服务器就不会接受SYN请求,这样来做到DOS,这个时候服务器资源占用的并不多。但你提出的完成握手,这样的话,系统很快可能达到进程/线程上限,整个系统的资源将有可能耗尽,比上一种情况更危险。 我是这么理解的 :)