Author: jpuyy

  • 正常情况下TCP/IP协议中SYN握手大致上如此:

    正常情况下TCP/IP协议中SYN握手大致上如此:

    1. A(发起者)发送一个SYN给B(接收者)
    2. B回复SYN-ACK给A
    3. A回复ACK给B
    4. 连接成功!

    这个过程的缺陷是,如果A是有恶意的来源,始终不停的发送SYN给B,那么B就会不停的建立起空连接(未完成的连接)等待A的ACK响应,只要A不回应,B的空连接就会不断的消耗资源,直至无法响应。

    这个缺陷事实上不是操作系统级别、防火墙级别的缺陷,而是来自于TCP/IP协议本身的设计缺陷。

    看了一下NetScreen的Screen安全策略中有针对它设计的SYN COOKIE设置。

    个人理解下来这是一个很讨巧的方法,但是略显笨拙:

    1. NS之外的A发送了一个SYN请求给内网的B
    2. NS截获了这个请求,没有直接将数据包转发给B,而是自己生成了一个假冒的SYN_ACK包回复给A
    3. A回复了ACK,成功完成握手
    4. NS将之前的SYN请求发送给B
    5. B发送SYN-ACK
    6. NS回复ACK
    7. NS搭建A到B的正式通道

    这种方式类似于中间人的方式实现连接,一定程度上是可以保护B不受攻击的侵扰。但事实上如果这时的A有足够的资源,完全可以让NetScreen建立的空连接达到无法响应的程度,这样实现的效果反而远远大于直接对B发起的攻击。

    对于类似的方法,Netscreen没有响应的设置,相应的文档上也没有给出解释。个人认为,NS应该是有一种判断机制,比如说时间或者频率。正常情况下是允许ACK回复延时的,但延时到了一定程度,或者这个来源不停的建立这种通信达到一个阀值,NS将会启动处理机制将A拉黑,同时关闭所有与A有关的连接。

    总的来说,SYN-ACK-ACK攻击属于不对等攻击,与DDOS,泪滴等攻击一样,发起攻击的成本要远远低于预防攻击的成本,这是TCP/IP的缺陷,只要不放弃TCP/IP,这样的攻击就会一直存在。而且防止前提必须是“已经受到了攻击”之后,即只能医治,无法预防。

  • 程序员用计算机语言写代码,就像 作家用文字写书

    程序员用计算机语言写代码,就像
    作家用文字写书

    不在于你用什么语言写,而在于你有能写名著的才能。
    语言,只是个把你的才能表达出来的工具。

    虽然工具有时候很重要,但更多的时候,还是你的才能,决定了你能输出什么:
    程序员:是垃圾代码还是高质量代码;
    作家:是错误连篇的帖子,还是世界级名著。

    生活和工作中困难是有的,我克服困难的方法有两个核心点”不断尝试”,”坚持”。
    是什么支持我走下来?如果我说是小时候的理想,这可能就真太荒谬了,
    真正支持我走下来的有两点,第一,我喜欢这个职业。第二,生活需要,DBA的收入不高,但是生活还是过得去。

  • Nginx的一些问题的解决办法集

    Nginx的一些问题的解决办法集
    Nginx的”413 request entiry too large”解决办法 由于默认是文件上传大小限制 1M。 今天一版主找我,说在上传的时候出现,
    引用:
    413 Request Entity Too Large
    问我是不是论坛抽了,我晕,检查发现就算更改php.ini 允许上传文件大小是8M,但是在使用过程中,大于1M的文件根本上传不了,找到解决办法,下面跟大家分享: PHP的上传设置: post_max_size = 8M upload_max_filesize = 2M  #vi /etc/nginx/nginx.conf 找到http{}段,加入如下一句: client_max_body_size 8m; 注意,最后的那个;号一定要有。

  • 港剧经典语句

    发生这种事,大家都不想的。 感情的事呢,是不能强求的。 所谓吉人自有天相, 做人最要紧的就是开心 。
    饿不饿,我给你煮碗面。
  • 迁移 kvm

    domain=rskwliyu
    host1=10.31.216.10
    host2=10.31.216.20
    echo “in $host1”
    echo “ssh $host2 ok”
    echo “cd /”
    echo “tar c etc/libvirt/qemu/$domain.xml data/kvm/$domain.img | nc -l 3389”

    echo “in $host2”
    echo “cd /”
    echo “nc $host1 3389 | tar x”

    echo “in $host1”
    echo “virsh migrate –live $domain qemu+ssh://$host2/system”

    echo “in $host2”
    echo “virsh edit $domain”
    echo “in guest curl put”

    echo “curl http://etcd.hupu.io:4001/v2/keys/hostvars/$host1/domain/$domain?recursive=true -XDELETE”

  • jobs

    Why join the navy if you can be a pirate? 如果能当海盗,为什么要去参加海军? ——steve jobs