Linux服务器防御DDOS攻击_第1页
Linux服务器防御DDOS攻击_第2页
Linux服务器防御DDOS攻击_第3页
Linux服务器防御DDOS攻击_第4页
Linux服务器防御DDOS攻击_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、CentOS SYN Flood 攻击原理 Linux 下设置特别值得一提的是 CentOS SYN 有很多值得学习的地方, 这里我们主要介绍 CentOS SYN 攻击, 包括介绍 CentOS SYN 原理等方面。 CentOS SYN Flood 攻击利用的是 IPv4 中 TCP 协议的三次握手( Three-Way Handshake )过程进行的攻击。一:什么是 CentOS SYN Flood 攻击CentOS SYN Flood 攻击利用的是 IPv4 中 TCP 协议的三次握手( Three-Way Hands hake )过程进行的攻击。这个协议规定,如果一端想向另一端发起

2、TCP 连接,它需要首先发送 TCP SYN (synchronize) 包到对方。对方收到后发送一个 TCP SYN+ACK 包回来,发起方再发送 TCP ACK (ACKnowled ge Character )包回去,这样三次握手就结束了。在上述过程中,还有一些重要的概念。未连接队列: 在三次握手协议中, 服务器维护一个未连接队列, 该队列为每个客户端的 CentOS SYN 包 (syn=j )开设一个条目,该条目表明服务器已收到CentOS SYN 包,并向客户发出确认,正在等待客户的确认包。这些条目所标识的连接在服务器处于 CentOS SYN_RECV 状态,当服务器收到客户的

3、确认包时,删除该条目,服务器进入 ESTABLISHED 状态。或者说 TCP 服务器收到 TCP SYN request 包时。在发送 TCP SYN+ACK 包回 TCP 客户机前, TCP 服务器要先分配好一个数据区专门 服务于这个即把形成的 TCP 连接。 一般把收到 CentOS SYN 包而还未收到 ACK 包时的连 接状态成为半开连接( Half-open Connection )。Backlog 参数:表示未连接队列的最大容纳数目。 CentOS SYN -ACK 重传次数:服 务器发送完 CentOS SYN ACK 包,如果未收到客户确认包,服务器进行首次重传,等 待一段时

4、间仍未收到客户确认包, 进行第二次重传, 如果重传次数超过系统规定的最大重传 次数。系统将该连接信息从半连接队列中删除。 注意, 每次重传等待的时间不一定相同。 半连 接存活时间:是指半连接队列的条目存活的最长时间,也即服务从收到 SYN 包到确认这个 报文无效的最长时间。该时间值是所有重传请求包的最长等待时间总和。有时我们也称半连接存活时间为 Ti meout 时间、 CentOS SYN _RECV 存活时间。在最常见的 CentOS SYN Flood 攻击中, 攻击者在短时间内发送大量的 TCP SYN 包给受害者,这时攻击者是 TCP 客户机,受害者 是 TCP 服务器。根据上面的描

5、述,受害者会为每个 TCP SYN 包分配一个特定的数据区,只要这些 Ce ntOS SYN 包具有不同的源地址(这一点对于攻击者来说是很容易伪造的)。这把给 TCP 服务器系统造成很大的系统负担, 最终导致系统不能正常工作。二: CentOS SYN Cookie 原理能够有效防范 CentOS SYN Flood 攻击的手段之一,就是 SYN Cookie 。 SYN Cooki e 原理由 D. J. Bernstain 和 Eric Schenk 发明。 CentOS SYN Cookie 是对 TCP 服务器 端的三次握手协议作一些修改,专门用来防范 CentOS SYN Flood

6、 攻击的一种手段。它的原理是, 在 TCP 服务器收到 TCP SYN 包并返回 TCP SYN+ACK 包时,不分配 一个专门的数据区,而是根据这个 CentOS SYN 包计算出一个 cookie 值。在收到 TCP A CK 包时, TCP 服务器在根据那个 cookie 值检查这个 TCP ACK 包的合法性。如果合法,再分配专门的数据区进行处理未来的 TCP 连接。下面分 Linux 和 FreeBSD 来说说如何配置内核参数来实现 CentOS SYN Cookie三: Linux 下设置如果你的服务器配置不太好, TCP TIME_WAIT 套接字数量达到两、三万,服务器很容易被

7、拖死。通过修改 Linux 内核参数,可以减少服务器的 TIME_WAIT 套接字数量。TIME_WAIT 可以通过以下命令查看:以下是代码片段: netstat -an | grep "TIME_W AIT" | wc -l 在 Linux 下,如 CentOS ,可以通过修改 /etc/sysctl.conf 文件来达到目的。增加以下几行:以下是代码片段:1. net.ipv4.tcp_fin_timeout = 302. net.ipv4.tcp_keepalive_time = 12003. net.ipv4.tcp_syncookies = 14. net.ipv

8、4.tcp_tw_reuse = 15. net.ipv4.tcp_tw_recycle = 16. net.ipv4.ip_local_port_range = 1024650007. net.ipv4.tcp_max_syn_backlog = 81928. net.ipv4.tcp_max_tw_buckets = 50009. net.ipv4.tcp_synack_retries = 210. net.ipv4.tcp_syn_retries = 2说明:net.ipv4.tcp_syncookies = 1 表示开启 CentOS SYN Cookies ,这是个 BOOLEAN

9、。 当出现 CentOS SYN 等待队列溢出时,启用 cookies 来处理,可防范少量 CentOS SYN 攻击,默认为 0,表示关闭;net.ipv4.tcp_tw_reuse = 1 表示开启重用 ,这是个 BOOLEAN 。允许将 TIME-WAIT so ckets 重新用于新的 TCP 连接,默认为 0 ,表示关闭;net.ipv4.tcp_tw_recycle = 1 表示开启 TCP 连接中 TIME-WAIT sockets 的快速回收 , 这是个 BOOLEAN ,默认为 0 ,表示关闭。net.ipv4.tcp_fin_timeout = 30 表示如果套接字由本端要

10、求关闭, 这个参数决定了它保 持在 FIN-WAIT-2 状态的时间。单位为秒。net.ipv4.tcp_keepalive_time = 1200 表示当 keepalive 起用的时候, TCP 发送 keepal ive 消息的频度。缺省是 2 小时,改为 20 分钟。单位为秒。net.ipv4.ip_local_port_range = 102465000 表示用于向外连接的端口范围。缺省情况 下很小: 32768 到 61000 ,改为 1024 到 65000 。net.ipv4.tcp_max_syn_backlog = 8192 表示 CentOS SYN 队列的长度,默认为

11、102 4 ,加大队列长度为 8192 ,可以容纳更多等待连接的网络连接数。net.ipv4.tcp_max_tw_buckets = 5000 表示系统同时保持 TIME_WAIT 套接字的最大 数量,如果超过这个数字, TIME_WAIT 套接字将立刻被清除并打印警告信息。默认为 180000 ,改 为 5000 。对于 Apache 、Nginx 等服务器,上几行的参数可以很好 地减少 TIME_WAIT 套接字数量,但是对于 Squid ,效果却不大。此项参数可以控制TIME_WAIT 套接字的最大数量,避免 Squid 服务器被大量的 TIME_WAIT 套接字拖死。net.ipv4

12、.tcp_synack_retries 和 net.ipv4.tcp_syn_retries 是定义 CentOS SYN 重试次 数。 执行以下命令使配置生效:以下是代码片段: /sbin/sysctl -p 如果你不想修改 /etc/sys ctl.conf ,你也可以直接使用命令修改 : 以下是代码片段: /sbin/sysctl -w key=value四: FreeBSD 下设置yayu 个人学习的观点: FreeBSD 中对 CentOS SYN 的防御和 Linux 下可能不一样, 配置的参数也不完全相同,相关配置和理解可能不对:) TCP 链接中有一个 MSL(max se g

13、ment lifetime) 的概念,也就是最大生成时间, MSL 的值在一般的实现中取 30s ,有些实 现采用 2 分钟。在 TCP 的状态机中的 “被动关闭 ”从: CLOSE_WAIT 到 LAST_ACK 中有一个如下的规 则:当 TCP 执行一个主动关闭,并发回最后一个ACK, 该连接必须在 TIME_WAIT 状态停 留的时间为 2 倍的 MSL 。这样可让 TCP 再次发送最后的 ACK 以防 这个 ACK 丢失(另 端超时并重发最后的 FIN) 。存在这个规则导致一个后果就是在这个 2*MSL 的时间内,该地址上的链接(客户端地 址、端口和服务器端的地址、 端口) 不能被使用

14、。 比如我们在建立一个链接后关闭链接然后 迅速重启链接,那么就会出现端口不可用的情况。TIME_WAIT 时间是 2*MSL 。因此可以通过调整 net.inet.tcp.msl 来减少 TIME_WAIT 时间。对于 Web 服务器完全可以将这个值调整为 7500 或 2000 (访问一个 web, 超过 415 秒页面还刷不出来,就可以考虑放弃了 -_- )参数设置参考:以下是引用片段:net.inet.tcp.syncookies=1 防止 DOS 攻击 net.inet.tcp.msl=7500 防止 DOS 攻击,默认为 30000net.inet.tcp.blackhole=2 接

15、收到一个已经关闭的端口发来的所 有包,直接 drop ,如果设置为 1 则是只针对 TCP 包net.inet.udp.blackhole=1 接收到一个已经关闭的端口发来的所有 UDP 包直接 dropFre eBSD下,yayu没看见"/sbin/sysctl -p"这样的命令可以使/etc/sysctl.conf的内容生效,所以 直接使用命令了:以下是代码片段: sysctl net.inet.tcp.syncookies=1 net.inet.tcp.msl=7500 net.inet.tcp. blackhole=2 net.inet.udp.blackhole=

16、1五:其他除了修改服务器的内核参数,还可以修改 apache 的配置文件中的 Timeout 、KeepAliv e、MaxClients 等参数来防止 Dos 攻击,如果有接口调用,还要注意控制一下调用的时间。 请听下文分解。ACK 英文缩写 : ACK (ACKnowledge Character ) 中文译名 : 确认字符 分 类 : 传输 与接入 解 释: 在数据通信传输中, 接收站发给发送站的一种传输控制字符。 它表示确认发 来的数据已经接受无误。NAK 是否定应答或者非应答的缩写。它是一个用于数字通信中确认数据受到但是有小 错误的信号。有时候 NAK 信号也叫 REJ( 拒绝)。C

17、entOS SYN 包 (synchronize)TCP 连接的第一个包,非常小的一种数据包。 CentOS SYN 攻击包括大量此类的包, 由于这些包看上去来自实际不存在的站点, 因此无法有效进行处理。 每个机器的欺骗包都要 花几秒钟进行尝试方可放弃提供正常响应。在黑客攻击事件中, CentOS SYN 攻击是最常见又最容易被利用的一种攻击手法。 Ce ntOS SYN 攻击属于 DOS 攻击的一种,它利用 TCP 协议缺陷,通过发送大量的半连接请 求,耗费 CPU 和内存资源。CentOS SYN 攻击除了能影响主机外,还可以危害路由 器、防火墙等网络系统,事实 上 CentOS SYN 攻击并不管目标是什么系统,只要这些系统打开 TCP 服务就可以实施。 服务器接收到连接请求(syn= j),将此信息加入未连接队列,并发送请求包给客户(syn=k,ack=j+1 ),此时进入 SYN_RECV 状态。当服务器未收到客户端的确认包时,重 发请求包,一直到超时,才将此条目从未连接 队列删除。配合 IP 欺骗, CentOS SYN 攻击能达到很好的效果,通常,客户端在短时间内 伪造大量不存在的 IP 地址, 向服 务器不断地发送 syn 包,服务器回复确认包

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论