`
gelongmei
  • 浏览: 209521 次
  • 性别: 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,网路共享文件系统的配置与搭建

    Linux学习之CentOS

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

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

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

    centos5.7操作系统 linux

    centos5.7 centos centos种子文件 linux

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

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

    CentOS_Linux CentOS_Linux_InstallationTutorial.pdf

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

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

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

    Centos7.6下设置Oracle定时自动备份和sudo设置.docx

    Centos7.6 下 Oracle 定时自动备份和 sudo 设置 本文将详细介绍 Centos7.6 下 Oracle 定时自动备份和 sudo 设置的过程。该过程包括编写数据库备份脚本文件、设置定时、sudo 设置等多个方面。 编写数据库备份脚本...

    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...

    CentOS(Linux)下tomcat最新稳定的版本

    标题提到的"CentOS(Linux)下tomcat最新稳定的版本"是指Apache Tomcat 8.0.51,这是一个经过广泛测试和验证的版本,提供稳定、高效的服务,适用于各种规模的企业级应用。Tomcat 8.0.x系列是一个长期支持(LTS)版本,...

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

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

    Intel无线网卡在Linux(CentOS/RHEL)下使用

    "Intel无线网卡在Linux(CentOS/RHEL)下使用" Intel无线网卡在Linux(CentOS/RHEL)下使用是一种常见的网络连接方式。为了能够在Linux系统下使用Intel WIFI,我们需要安装相应的驱动程序和配置文件。下面我们将...

Global site tag (gtag.js) - Google Analytics