Linux服务器防护篇:击退DDoS攻击

Linux服务器防护篇:击退DDoS攻击

一、什么是 DDoS 攻击

图片

简单来说,DDoS 攻击,即分布式拒绝服务攻击(Distributed Denial of Service) ,是一种通过利用大量傀儡机(也被称为 “肉鸡”)向目标服务器发送海量请求,从而耗尽服务器资源,使其无法正常响应合法用户请求的恶意攻击行为。就好比你开了一家生意火爆的餐厅,正常情况下,餐厅可以轻松接待前来就餐的顾客。但突然有一天,一群不怀好意的人雇佣了大量的 “假顾客” 涌入餐厅,他们占据着餐桌,却不点餐,还不断提出各种无理要求,导致真正的顾客无法进入餐厅,餐厅的正常运营也陷入了混乱。这就是 DDoS 攻击的一个形象比喻。

对于 CentOS 服务器而言,DDoS 攻击带来的危害是多方面的,且极其严重。一旦遭受攻击,首当其冲的就是服务中断,这是最直接也是最明显的影响。大量的恶意请求会迅速耗尽服务器的网络带宽、CPU、内存等资源,使得服务器无法及时处理合法用户的请求,导致网站无法访问、应用程序无法正常运行,就像上述提到的游戏平台一样,玩家们只能看着屏幕上的 “无法连接服务器” 而无可奈何。

数据泄露也是 DDoS 攻击可能引发的严重后果之一。在攻击过程中,服务器的安全防护机制可能会被攻击者突破,从而导致服务器上存储的敏感数据,如用户的个人信息、账号密码、交易记录等被泄露。

二、解析 DDoS 攻击的常用手段

图片

DDoS 攻击的手段多种多样,且不断演变,下面为大家介绍几种常见的攻击类型及其原理 。

UDP 洪水攻击

UDP(User Datagram Protocol)洪水攻击是一种较为常见的 DDoS 攻击方式。UDP 协议是一种无连接的协议,它在传输数据时不需要像 TCP 协议那样进行复杂的三次握手过程,这使得 UDP 协议的传输效率较高,但同时也带来了安全隐患。攻击者正是利用了 UDP 协议的这一特性,通过向目标服务器的随机端口发送大量的 UDP 数据包,使得目标服务器忙于处理这些无用的数据包,从而耗尽服务器的资源,导致无法正常响应合法用户的请求。

例如,攻击者可以利用工具生成大量的 UDP 数据包,然后将这些数据包发送到目标服务器的 DNS 服务端口(UDP 53 端口)、Radius 认证服务器端口等。由于这些端口通常是服务器提供重要服务的端口,大量的 UDP 数据包涌入会导致服务器的 DNS 服务无法正常解析域名,Radius 认证服务器无法正常进行用户认证,从而影响整个系统的正常运行。

ICMP 洪水攻击

ICMP(Internet Control Message Protocol)洪水攻击,也叫 “ICMP 洪水攻击”,是 DDoS 攻击的一种。ICMP 协议主要用于在 IP 主机、路由器之间传递控制消息,如网络通不通、主机是否可达、路由是否可用等。正常情况下,我们使用的 ping 命令就是基于 ICMP 协议来实现的,它通过向目标主机发送 ICMP_ECHO_Request 报文,并等待目标主机返回 ICMP_ECHO_Reply 报文来判断目标主机是否可达。

然而,攻击者却利用这一机制,在短时间内,向目标主机发送大量的 ping 包。当目标主机接收到这些大量的 ICMP 报文时,需要不断地进行响应和处理,这将消耗主机大量的资源,如 CPU、内存、网络带宽等。随着资源的不断耗尽,主机最终会陷入瘫痪,无法正常提供服务 。

SYN 洪水攻击

SYN 洪水攻击是互联网上最原始、最经典的 DDoS 攻击之一,它利用了 TCP 协议的三次握手机制。在 TCP/IP 协议中,TCP 协议提供可靠的连接服务,采用三次握手建立一个连接。具体过程如下:首先,客户端发送一个 SYN(Synchronization)包到服务器,并进入 SYN_SEND 状态,等待服务器确认;服务器收到 SYN 包后,必须确认客户的 SYN(ack=j+1),同时自己也发送一个 SYN 包(syn=k),即 SYN+ACK 包,此时服务器进入 SYN_RECV 状态;客户端收到服务器的 SYN+ACK 包,向服务器发送确认包 ACK (ack=k+1),此包发送完毕,客户端和服务器进入 ESTABLISHED 状态,完成三次握手 。

而 SYN 洪水攻击的攻击者通常会利用工具或者控制僵尸主机向服务器发送海量的变源 IP 地址或变源端口的 TCP SYN 报文。服务器在收到这些 SYN 报文后,会响应这些报文并生成大量的半连接(即完成了第一次握手和第二次握手,但第三次握手未完成的连接)。由于这些半连接占用了服务器的资源,当系统资源被耗尽后,服务器将无法提供正常的服务。例如,攻击者可以伪造大量的源 IP 地址,向服务器发送 SYN 报文,服务器响应这些报文后,会等待伪造源 IP 地址的客户端返回 ACK 报文,但由于源 IP 地址是伪造的,服务器永远也等不到 ACK 报文,这些半连接就会一直占用服务器资源,导致服务器无法处理正常的连接请求。

HTTP 洪水攻击

HTTP 洪水攻击是针对 Web 服务在第七层协议(应用层)发起的攻击,也被称为 CC 攻击(Challenge Collapsar)。它的攻击原理是攻击者通过端口扫描程序在互联网上寻找匿名的 HTTP 代理、SOCKS 代理或僵尸主机,然后利用这些代理或主机向目标服务器发起大量的 HTTP 报文请求。这些请求通常涉及数据库操作的 URI(Universal Resource Identifier)或其它消耗系统资源的 URI 。

攻击者在发起 HTTP 洪水攻击时,会极力模仿正常用户的网页请求行为,与网站业务紧密相关,这使得安全厂商很难提供一套通用的且不影响用户体验的方案来区分恶意流量和正常流量。例如,攻击者可能会选择搜索之类需要做大量数据查询的页面作为攻击目标,通过发送大量的 HTTP 请求来消耗服务器的资源,导致服务器资源耗尽,无法响应正常请求。这种攻击不仅会直接导致被攻击的 Web 前端响应缓慢,还会间接攻击到后端的业务层逻辑以及更后端的数据库服务,增大它们的压力,甚至对日志存储服务器都带来影响。

DNS 放大攻击

DNS(Domain Name System)放大攻击是一种流行的 DDoS 攻击形式,它利用了 DNS 协议的特性。DNS 是互联网的一项基础服务,负责将人类可读的域名转换为机器可读的 IP 地址。在正常的 DNS 查询过程中,客户端向 DNS 服务器发送查询请求,DNS 服务器根据请求返回相应的响应。然而,攻击者却利用了 DNS 服务器的响应机制,将查询请求的源 IP 地址篡改为攻击目标的 IP 地址 。

具体来说,攻击者首先构造一个带有伪造源 IP 地址(即目标服务器的 IP 地址)的 DNS 查询请求,然后将这个请求发送到一个开放的 DNS 解析器(也称为递归 DNS 服务器)。这些开放的 DNS 解析器通常会对任何接收到的 DNS 请求进行响应,而不会验证请求的真实性。当 DNS 解析器接收到攻击者发送的查询请求后,会根据请求返回大量的响应数据包,这些响应数据包会被发送到伪造的源 IP 地址,即目标服务器。由于 DNS 响应的数据量通常远大于查询请求的数据量,这就形成了 “放大” 效应,攻击者可以通过少量的请求产生大量的响应流量,从而使目标服务器在处理这些大量无效的 DNS 响应时,消耗大量的系统资源,导致正常的服务无法提供,实现 DDoS 攻击的效果。

CC 攻击

CC 攻击(Challenge Collapsar),即挑战黑洞,是一种针对网站的应用层攻击,也是 DDoS 攻击的一种特殊形式。它主要是通过不断地向目标网站发送大量看似合法的请求,来消耗服务器的资源,导致服务器无法正常响应其他用户的请求,从而使网站瘫痪。

CC 攻击的原理类似于 HTTP 洪水攻击,但它更加注重对服务器资源的消耗。攻击者通常会使用代理服务器或者僵尸网络来发起攻击,这些代理服务器或僵尸网络会不断地向目标网站发送 HTTP 请求,而且这些请求往往是精心构造的,模仿正常用户的访问行为,使得服务器难以区分这些请求是来自正常用户还是攻击者。

三、判断服务器是否遭受攻击

图片

服务器性能指标观察

CPU 使用率:正常情况下,服务器的 CPU 使用率会保持在一个相对稳定的水平,并且会随着业务的正常波动而变化。然而,当遭受 DDoS 攻击时,大量的恶意请求会使 CPU 忙于处理这些无效的任务,导致 CPU 使用率急剧上升,甚至可能达到 100%。我们可以通过 top 命令来实时查看服务器的 CPU 使用率。在终端中输入 top 命令后,按下键盘上的 “1” 键,就可以看到每个 CPU 核心的使用情况。如果发现某个或多个 CPU 核心的使用率长时间居高不下,且没有明显的业务高峰等原因,那就需要警惕是否遭受了 DDoS 攻击。

内存使用率:DDoS 攻击不仅会消耗 CPU 资源,还可能导致内存使用率异常升高。攻击者发送的大量请求可能会导致服务器创建大量的进程或线程,这些进程和线程会占用大量的内存空间。同时,服务器在处理这些请求时,可能会缓存大量的数据,进一步加剧内存的消耗。当内存使用率过高时,服务器可能会出现频繁的内存交换(swap)现象,导致系统性能急剧下降。我们可以使用 free -m 命令来查看服务器的内存使用情况。该命令会显示服务器的总内存、已使用内存、空闲内存以及交换空间的使用情况。如果发现已使用内存接近或超过总内存,且交换空间也被大量使用,那就需要进一步排查是否存在 DDoS 攻击。

带宽利用率:带宽是服务器与外界通信的 “高速公路”,而 DDoS 攻击往往会通过发送大量的数据包来堵塞这条 “高速公路”,导致带宽利用率急剧上升。当带宽被占满时,合法用户的请求就无法正常传输,服务器也就无法正常提供服务。我们可以使用 iftop 命令来实时监控服务器的网络带宽使用情况。iftop 命令会以直观的方式显示当前服务器的网络连接情况以及每个连接的带宽使用情况。如果发现某个 IP 地址或某个网段的带宽使用量异常高,且持续时间较长,那就很可能是遭受了 DDoS 攻击。

连接数:DDoS 攻击还会导致服务器的连接数异常增加。攻击者会通过大量的虚假连接来占用服务器的资源,使得服务器无法处理正常的连接请求。我们可以使用 netstat 命令来查看服务器的当前连接数。例如,输入 netstat -an | grep ESTABLISHED | wc -l 命令,可以统计出当前处于 ESTABLISHED 状态(即已建立连接)的连接数。如果这个数值远远超过了正常业务的连接数,那就需要注意是否遭受了 DDoS 攻击。此外,还可以通过 netstat -anp | grep ‘tcp|udp’ | awk ‘{print $5}’ | cut -d: -f1 | sort | uniq -c | sort -nr 命令来查看每个 IP 地址与服务器的连接数,找出连接数异常高的 IP 地址,这些 IP 地址很可能就是攻击者的来源 。

日志文件分析

日志文件是服务器运行的 “黑匣子”,它记录了服务器的所有操作和事件。通过分析日志文件,我们可以发现 DDoS 攻击的蛛丝马迹 。

  • 系统日志:系统日志通常位于 /var/log 目录下,其中 messages 文件记录了系统的各种重要信息和事件。在遭受 DDoS 攻击时,我们可能会在 messages 文件中看到大量与网络连接相关的错误信息,如 “Connection reset by peer”“Too many open files” 等。这些错误信息可能表明服务器正在遭受大量的恶意连接请求,导致系统资源耗尽。此外,还可以查看 syslog 文件,它记录了系统的各种日志信息,包括内核日志、应用程序日志等。在 syslog 文件中,我们可能会发现一些异常的网络活动记录,如大量的来自同一 IP 地址的连接请求、频繁的端口扫描等,这些都可能是 DDoS 攻击的迹象。

  • Web 服务器日志:如果你的 CentOS 服务器运行着 Web 服务,那么 Web 服务器日志也是分析 DDoS 攻击的重要依据。以常见的 Apache 服务器为例,其日志文件通常位于 /var/log/httpd 目录下,其中 access_log 文件记录了所有的 HTTP 访问请求,error_log 文件记录了 HTTP 访问过程中出现的错误信息。在遭受 HTTP 洪水攻击或 CC 攻击时,我们可以在 access_log 文件中看到大量来自同一 IP 地址或同一网段的 HTTP 请求,这些请求的频率和数量远远超过正常水平。同时,在 error_log 文件中,可能会出现大量的 “503 Service Unavailable” 错误信息,这表明服务器由于资源耗尽,无法正常处理 HTTP 请求 。

  • 防火墙日志:防火墙是服务器的第一道防线,它会记录所有通过防火墙的网络流量信息。在 CentOS 系统中,常用的防火墙是 iptables,其日志文件通常位于 /var/log/messages 或 /var/log/syslog 中。当防火墙检测到异常的网络流量时,会将相关信息记录到日志中。例如,当遭受 UDP 洪水攻击时,防火墙日志中可能会出现大量的来自同一 IP 地址的 UDP 数据包记录;当遭受 SYN 洪水攻击时,日志中可能会出现大量的 SYN_RECV 状态的连接记录。通过分析防火墙日志,我们可以及时发现 DDoS 攻击的类型和来源,为后续的防御工作提供有力的支持 。

四、开启 CentOS 服务器防护之门

图片

(一)基础防护策略

修改系统内核参数是增强 CentOS 服务器对 DDoS 攻击抵抗力的重要基础防护策略之一。通过合理调整这些参数,可以优化服务器的网络性能,使其更好地应对 DDoS 攻击带来的压力 。

  • 调整 TCP 连接参数:在 CentOS 系统中,TCP 连接参数的设置对服务器的网络性能有着至关重要的影响。例如,我们可以通过修改 /etc/sysctl.conf 文件,开启 SYN Cookies 功能,当 SYN 等待队列溢出时,启用 Cookies 来处理,这样可以防范少量的 SYN 攻击。具体操作是在 sysctl.conf 文件中添加或修改 net.ipv4.tcp_syncookies = 1。同时,我们还可以设置允许将 TIME_WAIT sockets 重新用于新的 TCP 连接,以提高 TCP 连接的复用率,减少资源浪费。在 sysctl.conf 文件中添加 net.ipv4.tcp_tw_reuse = 1 即可实现这一设置。此外,调整 TCP 连接的超时时间也是一个重要的优化点。例如,将 tcp_fin_timeout 参数设置为 30 秒,表示套接字在 FIN_WAIT_2 状态的最长时间为 30 秒,这样可以更快地释放资源,提高服务器的并发处理能力。在 sysctl.conf 文件中添加 net.ipv4.tcp_fin_timeout = 30 即可完成设置 。修改完 sysctl.conf 文件后,记得执行 sysctl -p 命令使配置生效。

  • 限制 ICMP 请求速率:ICMP 协议在网络中起着重要的作用,但同时也可能被攻击者利用来发起 DDoS 攻击。为了防范 ICMP 洪水攻击,我们可以限制 ICMP 请求的速率。在 CentOS 系统中,我们可以使用 iptables 防火墙来实现这一功能。例如,我们可以添加以下规则来限制每秒最多接收 10 个 ICMP 请求:iptables -A INPUT -p icmp -m limit --limit 10/s --limit-burst 10 -j ACCEPT。这条规则的含义是,对于 ICMP 协议的数据包,设置速率限制为每秒最多 10 个,突发上限为 10 个,符合条件的数据包允许通过。这样可以有效地防止攻击者通过发送大量的 ICMP 请求来耗尽服务器的资源 。

(二)iptables 防火墙配置

iptables 是 CentOS 系统中常用的防火墙工具,它可以通过设置一系列的规则来控制网络流量的进出,从而有效地防御 DDoS 攻击 。

  • 安装 iptables:如果你的 CentOS 系统中尚未安装 iptables,可以使用以下命令进行安装:对于 CentOS 7 及以上版本,执行 sudo dnf install iptables-services 命令;对于 CentOS 6 及以下版本,执行 sudo yum install iptables iptables-services 命令 。安装完成后,使用 sudo systemctl start iptables 命令启动 iptables 服务,并使用 sudo systemctl enable iptables 命令设置开机自启 。

  • 配置 iptables 规则:接下来,我们需要配置 iptables 规则来防御 DDoS 攻击。以下是一些常见的规则配置示例 。

    • 限制每个 IP 的连接数:为了防止攻击者通过大量的虚假连接来耗尽服务器资源,我们可以限制每个 IP 的最大连接数。例如,以下规则限制每个 IP 同时与服务器建立的 TCP 连接数不能超过 50 个:iptables -A INPUT -p tcp --syn -m connlimit --connlimit-above 50 -j REJECT。这条规则的含义是,对于 TCP 协议的 SYN 数据包(即建立连接的请求包),如果来自同一个 IP 的连接数超过 50 个,就拒绝该连接请求 。
    • 限制特定 IP 的流量:如果我们发现某个 IP 地址正在对服务器进行恶意攻击,我们可以直接限制该 IP 的流量,甚至禁止其访问服务器。例如,以下规则禁止 IP 地址为 192.168.1.100 的主机访问服务器:iptables -A INPUT -s 192.168.1.100 -j DROP。这条规则的含义是,对于来自 192.168.1.100 的所有数据包,直接丢弃,从而阻止该 IP 对服务器的访问 。
    • 防御 SYN 洪水攻击:SYN 洪水攻击是一种常见的 DDoS 攻击方式,我们可以通过设置 iptables 规则来防御这种攻击。例如,以下规则设置了 SYN 连接的速率限制,每秒最多允许 10 个 SYN 连接,并且设置了突发上限为 20 个:iptables -A INPUT -p tcp --syn -m limit --limit 10/s --limit-burst 20 -j ACCEPT。这条规则的含义是,对于 TCP 协议的 SYN 数据包,设置速率限制为每秒最多 10 个,突发上限为 20 个,符合条件的数据包允许通过,超过限制的数据包则被丢弃,从而有效地防御了 SYN 洪水攻击 。

最后

从时代发展的角度看,网络安全的知识是学不完的,而且以后要学的会更多,同学们要摆正心态,既然选择入门网络安全,就不能仅仅只是入门程度而已,能力越强机会才越多。

因为入门学习阶段知识点比较杂,所以我讲得比较笼统,大家如果有不懂的地方可以找我咨询,我保证知无不言言无不尽,需要相关资料也可以找我要,我的网盘里一大堆资料都在吃灰呢。

干货主要有:

①1000+CTF历届题库(主流和经典的应该都有了)

②CTF技术文档(最全中文版)

③项目源码(四五十个有趣且经典的练手项目及源码)

④ CTF大赛、web安全、渗透测试方面的视频(适合小白学习)

⑤ 网络安全学习路线图(告别不入流的学习)

⑥ CTF/渗透测试工具镜像文件大全

⑦ 2023密码学/隐身术/PWN技术手册大全

如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

扫码领取

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值