`
gelongmei
  • 浏览: 211483 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

CentOS SYN Flood攻击原理Linux下设置

 
阅读更多

一:什么是CentOS SYN Flood攻击

CentOS SYN Flood攻击利用的是IPv4中TCP协议的三次握手(Three-Way Handshake)过程进行的攻击。这个协议规定,如果一端想向另一端发起TCP连接,它需要首先发送TCP SYN (synchronize)包到对方。

对方收到后发送一个TCP SYN+ACK包回来,发起方再发送TCP ACK (ACKnowledge Character)包回去,这样三次握手就结束了。在上述过程中,还有一些重要的概念。

未连接队列:在三次握手协议中,服务器维护一个未连接队列,该队列为每个客户端的CentOS SYN包 (syn=j)开设一个条目,该条目表明服务器已收到CentOS SYN包,并向客户发出确认,正在等待客户的确认包。

这些条目所标识的连接在服务器处于CentOS SYN_RECV状态,当服务器收到客户的确认包时,删除该条目,服务器进入ESTABLISHED状态。或者说TCP服务器收到TCP SYN request包时。

在发送TCP SYN+ACK包回TCP客户机前,TCP服务器要先分配好一个数据区专门服务于这个即把形成的TCP连接。一般把收到CentOS SYN包而还未收到ACK包时的连 接状态成为半开连接(Half-open Connection)。

Backlog参数:表示未连接队列的最大容纳数目。CentOS SYN -ACK 重传次数:服务器发送完CentOS SYN -ACK包,如果未收到客户确认包,服务器进行首次重传,等待一段时间仍未收到客户确认包,进行第二次重传,如果重传次数超过系统规定的最大重传次数。

系统将该连接信息从半连接队列中删除。注意,每次重传等待的时间不一定相同。半连接存活时间:是指半连接队列的条目存活的最长时间,也即服务从收到SYN包到确认这个报文无效的最长时间。

该时间值是所有重传请求包的最长等待时间总和。有时我们也称半连接存活时间为Timeout时间、CentOS SYN _RECV存活时间。在最常见的CentOS SYN Flood攻击中,攻击者在短时间内发送大量的TCP SYN包给受害者,这时攻击者是TCP客户机,受害者是TCP服务器。

根据上面的描述,受害者会为每个TCP SYN包分配一个特定的数据区,只要这些CentOS SYN 包具有不同的源地址(这一点对于攻击者来说是很容易伪造的)。这把给TCP服务器系统造成很大的系统负担, 最终导致系统不能正常工作。

二:CentOS SYN Cookie原理

能够有效防范CentOS SYN Flood攻击的手段之一,就是SYN Cookie。SYN Cookie原理由D. J. Bernstain和 Eric Schenk发明。CentOS SYN Cookie是对TCP服务器端的三次握手协议作一些修改,专门用来防范CentOS SYN Flood攻击的一种手段。

它的原理是, 在TCP服务器收到TCP SYN包并返回TCP SYN+ACK包时,不分配一个专门的数据区,而是根据这个CentOS SYN包计算出一个cookie值。在收到TCP ACK包时,TCP服务器在根据那个cookie值检查这个TCP ACK包的合法性。

如果合法,再分配专门的数据区进行处理未来的TCP连接。下面分Linux和FreeBSD来说说如何配置内核参数来实现CentOS SYN Cookie

三:Linux下设置

如果你的服务器配置不太好,TCP TIME_WAIT套接字数量达到两、三万,服务器很容易被拖死。通过修改Linux内核参数,可以减少服务器的TIME_WAIT套接字数量。

TIME_WAIT可以通过以下命令查看:以下是代码片段:netstat -an | grep "TIME_WAIT" | wc -l 在Linux下,如CentOS,可以通过修改/etc/sysctl.conf文件来达到目的。

增加以下几行:以下是代码片段:

net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_local_port_range = 102465000
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2 
说明:

net.ipv4.tcp_syncookies = 1 表示开启CentOS SYN Cookies,这是个BOOLEAN。当出现CentOS SYN等待队列溢出时,启用cookies来处理,可防范少量CentOS SYN攻击,默认为0,表示关闭;

net.ipv4.tcp_tw_reuse = 1 表示开启重用,这是个BOOLEAN。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;

net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,这是个BOOLEAN,默认为0,表示关闭。

net.ipv4.tcp_fin_timeout = 30 表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。单位为秒。

net.ipv4.tcp_keepalive_time = 1200 表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟。单位为秒。

net.ipv4.ip_local_port_range = 102465000 表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为1024到65000。

net.ipv4.tcp_max_syn_backlog = 8192 表示CentOS SYN队列的长度,默认为1024,加大队列长度为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.tcp_synack_retries和net.ipv4.tcp_syn_retries是定义CentOS SYN重试次数。 执行以下命令使配置生效:以下是代码片段:/sbin/sysctl -p 如果你不想修改/etc/sysctl.conf,你也可以直接使用命令修改:以下是代码片段:/sbin/sysctl -w key=value

四:FreeBSD下设置

yayu个人学习的观点:FreeBSD中对CentOS SYN的防御和Linux下可能不一样,配置的参数也不完全相同,相关配置和理解可能不对:)TCP链接中有一个MSL(max segment lifetime)的概念,也就是最大生成时间,MSL 的值在一般的实现中取30s,有些实现采用2分钟。

在TCP的状态机中的“被动关闭”:从CLOSE_WAIT到LAST_ACK中有一个如下的规则:当 TCP执行一个主动关闭,并发回最后一个ACK,该连接必须在TIME_WAIT状态停留的时间为2倍的MSL。这样可让TCP再次发送最后的ACK以防 这个ACK丢失(另一端超时并重发最后的 FIN)。

存在这个规则导致一个后果就是在这个2*MSL的时间内,该地址上的链接(客户端地址、端口和服务器端的地址、端口)不能被使用。比如我们在建立一个链接后关闭链接然后迅速重启链接,那么就会出现端口不可用的情况。

TIME_WAIT时间是2*MSL。因此可以通过调整net.inet.tcp.msl来减少TIME_WAIT时间。对于Web服务器完全可以将这个值调整为7500或2000(访问一个web,超过4~15秒页面还刷不出来,就可以考虑放弃了-_-)

参数设置参考:

以下是引用片段:net.inet.tcp.syncookies=1防止DOS攻击net.inet.tcp.msl=7500防止DOS攻击,默认为30000net.inet.tcp.blackhole=2接收到一个已经关闭的端口发来的所有包,直接drop,如果设置为1则是只针对TCP包

net.inet.udp.blackhole=1接收到一个已经关闭的端口发来的所有UDP包直接dropFreeBSD下,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=1

五:其他

除了修改服务器的内核参数,还可以修改apache的配置文件中的Timeout、KeepAlive、MaxClients等参数来防止Dos攻击,如果有接口调用,还要注意控制一下调用的时间。请听下文分解。

ACK 英文缩写: ACK (ACKnowledge Character) 中文译名: 确认字符 分 类: 传输与接入 解 释: 在数据通信传输中,接收站发给发送站的一种传输控制字符。它表示确认发来的数据已经接受无误。

NAK是否定应答或者非应答的缩写。它是一个用于数字通信中确认数据受到但是有小错误的信号。有时候NAK信号也叫REJ(拒绝)。
CentOS SYN 包(synchronize)

TCP连接的第一个包,非常小的一种数据包。CentOS SYN 攻击包括大量此类的包,由于这些包看上去来自实际不存在的站点,因此无法有效进行处理。每个机器的欺骗包都要花几秒钟进行尝试方可放弃提供正常响应。

在黑客攻击事件中,CentOS SYN攻击是最常见又最容易被利用的一种攻击手法。CentOS SYN攻击属于DOS攻击的一种,它利用TCP协议缺陷,通过发送大量的半连接请求,耗费CPU和内存资源。

CentOS SYN攻击除了能影响主机外,还可以危害路由 器、防火墙等网络系统,事实上CentOS SYN攻击并不管目标是什么系统,只要这些系统打开TCP服务就可以实施。服务器接收到连接请求(syn= j),将此信息加入未连接队列,并发送请求包给客户(syn=k,ack=j+1),此时进入SYN_RECV状态。

当服务器未收到客户端的确认包时,重 发请求包,一直到超时,才将此条目从未连接队列删除。配合IP欺骗,CentOS SYN攻击能达到很好的效果,通常,客户端在短时间内伪造大量不存在的IP地址,向服 务器不断地发送syn包,服务器回复确认包,并等待客户的确认。

由于源地址是不存在的,服务器需要不断的重发直至超时,这些伪造的CentOS SYN包将长时间占用未 连接队列,正常的CentOS SYN请求被丢弃,目标系统运行缓慢,严重者引起网络堵塞甚至系统瘫痪。

关于CentOS SYN攻击防范技术,人们研究得比较早。归纳起来,主要有两大类,一类是通过防火墙、路由器等过滤网关防护,另一类是通过加固TCP/IP协议栈防范.但必须清楚的是,CentOS SYN攻击不能完全被阻止,我们所做的是尽可能的减轻CentOS SYN攻击的危害,除非将TCP协议重新设计。
分享到:
评论

相关推荐

    centos 和 linux 6.5 yum包

    Linux 6.5和CentOS是两种不同的但密切相关的基础操作系统,它们都基于开源的Linux内核。Yum(Yellowdog Updater, Modified)是RPM包管理器,用于自动化安装、升级、卸载和查询软件包,对于基于RPM的系统如CentOS,它...

    CentOS7默认的快捷键如何修改设置.doc

    CentOS7默认的快捷键怎么修改设置?CentOS7中想要修改默认的快捷键,该怎么修改呢?下面我们就来看看详细的教程,需要的朋友可以参考下。

    CentOS Linux 8和CentOS Stream发行公告

    我们想宣布CentOS Linux 8和 所有架构上的新CentOS Stream。 ---------- CentOS Linux 8 这是CentOS Linux 8的第一个版本,版本标记为 8.0-1905,来自Red Hat发布的资源,通过 git.centos.org 首先,请仔细阅读发行...

    Apress Foundations of CentOS Linux, Enterprise Linux On the Cheap

    标题《Apress Foundations of CentOS Linux, Enterprise Linux On the Cheap》和描述“2009年出版,本书是关于如何使用CentOS Linux进行Linux管理的权威指南。作者是Ryan Baclic,书中涵盖了使用命令行、编写shell...

    centos下的nfs搭建与配置

    这是描述在centos下进行nfs,网路共享文件系统的配置与搭建

    适用于CentOS Linux 6.9 的ksh包(32位)

    32位版本的ksh包,适用于CentOS Linux 6.9 系统,资源为rpm格式,使用rpm -ivh 包名 安装

    linux centos环境kettle部署与定时作业执行

    Linux Centos 环境 Kettle 部署与定时作业执行 Linux Centos 环境 Kettle 部署与定时作业执行是指在 Linux Centos 环境中部署 Kettle 工具,并配置定时作业执行。下面将详细介绍 Kettle 部署和定时作业执行的步骤...

    Linux学习之CentOS

    ### Linux学习之CentOS知识点详解 #### 一、前言 在IT领域,尤其是对于希望从事J2EE后台开发的程序员来说,掌握Linux操作系统是非常重要的一步。本文将围绕CentOS这一特定版本的Linux进行深入探讨。 #### 二、...

    centos5.7操作系统 linux

    centos5.7 centos centos种子文件 linux

    CentOS_Linux CentOS_Linux_InstallationTutorial.pdf

    《CentOS Linux 安装教程》 在本文中,我们将详细介绍如何下载并安装 CentOS Linux,特别是版本7,作为一款稳定性极高的操作系统,它受到了广大用户的青睐。本文将引导您完成从下载镜像到在VMware上成功安装的全...

    基于centos制作自己的linux发行版

    【基于CentOS制作自己的Linux发行版】涉及到的知识点主要包括Linux发行版定制、Kickstart(ks)脚本自动化安装以及RPM包管理。 1. **Linux发行版定制**: Linux发行版定制允许用户根据实际需求选择系统安装时包含的...

    CentOS Linux 中文包.rar_centos_linux_中文包

    总结来说,"CentOS Linux 中文包"旨在解决CentOS中缺少中文支持的问题,通过安装相应的RPM包和调整系统配置,用户可以方便地在CentOS环境下进行中文输入和阅读。这个过程涉及了RPM包管理、区域和语言设置、输入法...

    CIS_CentOS_Linux_7_Benchmark_v3.1.1.pdf

    初始设置部分详细说明了如何对CentOS Linux 7进行初始安全配置。内容包括对文件系统的配置、各种分区的配置、文件系统挂载选项的设置,以及如何确保系统中不存在不必要的文件系统类型。 #### 文件系统配置 文档...

    虚拟机上安装CentOS_Linux图文教程

    虚拟机安装CentOS_Linux的图文教程的知识点涵盖从前期准备到操作系统安装的完整流程,这些知识点不仅对于新手学习Linux操作系统的安装非常有用,同时也对已经熟悉Linux但需要在虚拟环境中搭建Linux系统的工作提供了...

    CentOS 6 Linux Server Cookbook

    本书由Jonathan Hobson撰写,旨在为读者提供一系列详细的实践指导,帮助用户在CentOS 6环境下进行日常的Linux服务器管理和维护工作。 CentOS(Community ENTerprise Operating System)是一个基于Red Hat ...

    文本模式下安装centos 命令行 linux

    本篇文章将深入探讨如何在文本模式下安装CentOS,这是一个适合对Linux有一定了解或者在无图形界面环境下进行安装的选择。 首先,安装过程始于引导阶段。在描述中提到,我们需要设置计算机从光盘启动,这通常在BIOS...

    Linux运维自动化运维脚本.zip

    Linux运维自动化运维脚本.zip,自动化运维脚本 介绍 Linux系统运维中各种一键脚本 使用教程 openssh一键升级脚本,支持centos6、centos7、centos8。 Linux运维自动化运维脚本.zip,自动化运维脚本 介绍 Linux系统...

    Linux基础及应用教程(基于CentOS7) 第2版 课件+代码.rar

    课件可能会包含如以下章节:Linux的起源与特点、桌面环境的使用、Shell和命令行操作、文件和目录管理、文本编辑器Vim的使用、脚本编程基础、服务管理、防火墙配置以及安全设置等。 此外,书本例子的源代码可能是...

    linux下Java视频转码、截图开发包:ffmepg3-opencv-javacpp-javacv-centos6&7

    JAVA视频操作的最常用工具包的linux开发库,支持在linux下java调用ffmpeg进行视频操作、转码、截图等操作。如果你自己编译、寻找库费了很长时间而不成功,那么,希望这个资源能够帮到你。 里面的jar及linux动态库,...

    Linux Centos系统安装手册

    Linux Centos系统安装手册主要涉及了Linux Centos系统安装的介质和方式,以及具体的安装步骤。以下是手册中涉及到的一些关键知识点: 1. Linux Centos系统安装介质和方式: - 双系统安装:这指的是在一台电脑上...

Global site tag (gtag.js) - Google Analytics