热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

分类防范对Linux的DoS攻击

分类防范对Linux的DoS攻击--Linux企业应用-Linux服务器应用信息,下面是详情阅读。
由于拒绝服务攻击工具的泛滥,及所针对的协议层的缺陷短时无法改变的事实,拒绝服务攻击也就成为流传广泛、极难防范的一种攻击方式。虽然到目前为止,没有一个绝对的方法可以制止这类攻击;但对于不同的攻击方式,还是有一些解决方法的。本文以Redhat Linux 9.0为例,介绍如何分类防范DoS。

Linux服务器的两种守护进程

1.stand-alone模式

stand-alone方式是Unix传统的C/S模式的访问模式。服务器监听(Listen)在一个特点的端口上等待客户端的联机。如果客户端产生一个连接请求,守护进程就创建(Fork)一个子服务器响应这个连接,而主服务器继续监听,以保持多个子服务器池等待下一个客户端请求。Stand-alone模式的工作原理如图1所示。

工作在stand-alone模式下的网络服务有route、gated。大家比较熟悉的Web服务器是Apache和邮件服务器Sendmail。在Apache这种负载很大的服务器上,预先创子服务器可以提高客户的服务速度。

在Linux系统中通过stand-alone工作模式启动的服务由/etc/rc.d/下面对应的运行级别当中的符号链接启动。

2.xinetd模式

从守护进程的概念可以看出,对于系统所要通过的每一种服务都必须运行一个监听某个端口连接所发生的守护进程,这通常意味着资源浪费。为了解决这个问题,Linux引进了“网络守护进程服务程序”的概念。

Redhat Linux 9.0使用的网络守护进程是xinetd(eXtended InterNET daemon)。和stand-alone模式相比,xinetd模式也称Internet Super-Server(超级服务器)。xinetd能够同时监听多个指定的端口,在接受用户请求时能根据用户请求端口的不同,启动不同的网络服务进程来处理这些用户请求。我们可以把xinetd看成一个管理启动服务的管理服务器,它决定把一个客户请求交给哪个程序处理,然后启动相应的守护进程。xinetd模式的工作原理如图2所示。

和stand-alone工作模式相比,系统不想要每一个网络服务进程都监听其服务端口,运行单个xinetd就可以同时监听所有服务端口,这样就降低了系统开销,保护了系统资源。但是对于访问量大、经常出现并发访问时,xinetd想要频繁启动对应的网络服务进程,反而会导致系统性能下降。

察看系统为Linux服务提供哪种模式方法,在Linux命令行下使用pstree命令,可以看到两种不同方式启动的网络服务。一般来说系统一些负载高的服务,如Sendmail、Apache服务是单独启动的,而其他服务类型都可以使用xinetd超级服务器管理,系统默认使用xinetd的服务可以分为如下几类: 标准互联网服务:telnet、ftp

信息服务:finger、netstat、systat

RPC服务:rquotad、rstatd、rusersd、sprayd、walld

BSD服务:comsat、exec、login、ntalk、shell、talk

内部服务:chargen、daytime、echo、servers、services time

安全服务:irc

其他服务:name、tftp、uucp

小提示:从原理上Apache、sendmail也可以使用xinetd模式启动,但是您需要硬件档次非常高的服务器。

针对xinetd模式的DoS防范

xinetd提供类似于inetd+tcp_wrapper的功能,但是更加强大和安全,能有效防止DoS:

1.限制同时运行的进程数

通过设置instances选项设定同时运行的并发进程数。例如:

instances=20

说明:当服务器被请求连接的进程数达到20个时,xinetd将停止接受多出部分的连接请求,直到请求连接数低于设定值为止。

2.限制一个IP地址的最大连接数

通过限制一个主机的最大连接数来防止某个主机独占某个服务。例如:

per_source=5

说明:单个IP地址的连接数是5个。

3.限制日志文件大小,防止磁盘空间被填满

许多攻击者知道大多数服务需要写入日志。入侵者可以构造大量的错误信息发送出来,服务器记录这些错误,很可能就造成日志文件非常庞大,甚至会塞满硬盘。管理员面对大量的日志,也很难发现入侵者真正的入侵途径。因此,限制日志文件大小是防范DoS的一个方法。例如:

log_type FILE.1 /var/log/myservice.log 8388608 15728640

说明:这里设置的日志文件FILE.1临界值为8MB,到达此值时syslog文件中会出现警告,到达15兆,系统会停止所有使用这个日志系统的服务。

4.限制负载

xinetd还可以使用限制负载的方法防范DoS。用一个浮点数作为负载系数,当负载达到这个数目时,该服务将暂停处理后续的连接。例如:

max_load=2.8

说明:当一项系统负载达到2.8时,所有服务将暂时终止,直到系统负载下降到设定值以下。

当然,要使用这个选项,编译时要加入-with-loadavg,xinetd将处理max-load配置选项,从而在系统负载过重时关闭某些服务进程,来实现某些拒绝服务攻击。

5.限制所有服务器数目(连接速率)

xinetd可以使用cps选项设定连接速率。例如:

cps=25 60

说明:第一个参数表示每秒可以处理的连接数,如果超过了这个连接数,进入的连接将被暂时停止处理;第二个参数表示停止处理多少秒后继续处理先前暂停处理的连接。即服务器最多启动25个连接,如果达到这个数目将停止启动新服务60秒。在此期间不接受任何请求。

6.限制对硬件资源的利用

通过rlimit_as和rlimit_cpu两个选项可以有效限制一种服务对内存、中央处理器的资源占用。例如: rlimit_as=8M

rlimit_cpu=20


说明:此设定限制了对服务器硬件资源的占用,最多可用内存为8M,CPU每秒处理20个进程。

总结:xinetd的一个重要功能是它能够控制从属服务可以利用的资源量,通过以上设置可以达到这个目的,有助于防止某个xinetd服务大量占用系统,从而导致“拒绝服务”情况的出现。

针对stand-alone的DoS防范

Linux下以stand-alone模式运行的服务器主要是Apache、Sendmail。

1.Apache服务器防范DoS措施

Apache服务器对拒绝攻击的防范主要通过软件Apache DoS Evasive Maneuvers Module来实现。它是一款mod_access的替代软件,可以对抗DoS攻击。该软件可以快速拒绝来自相同地址对同一URL的重复请求,这是通过内部一张各子进程的哈希表查询来实现的。软件下载链接:http://online.securityfocus.com/data/tools/dospatch.tar.gz,软件安装的配置可以查看相关页面。

另外,在Apache配置文件中,有一些安全相关的指令可以使用。http://httpd.apache.org/docs/mod/directives.html。使用以下指令可以帮助您减小DoS的威胁: LimitRequestBody:数字参数,控制HTTP请求的大小。

LimitRequestFields:数字参数,控制请求头的数目。

KeepAlive:设置连接的生存期。

KeepAliveTimeout:限制等待请求的时间。

使用以下指令可以帮助您减少缓冲区溢出的危险:

LimitRequestFieldSize:限制每个请求头的大小。

LimitRequestLine:限制每个请求行的大小。


此外,Apache服务器管理员还应该经常去http://www.apache.org/dist/httpd/查看、下载补丁程序,以确保Web服务器的安全。

2.Sendmail服务器防范DoS措施

由于电子邮件的性质,一个要攻击邮件服务器的攻击者可以轻易地使用邮件来充斥服务器,从而导致DoS。通过设置/etc/mail/sendmail.mc以下目录的限度,这类攻击的有效性就会大受限制。

confCONNECTION_RATE_THROTTLE:服务器每秒能够接受的连接数量。按照默认设置,Sendmail是不限制连接数量。如果连接数量达到限度,以后的连接就会被延迟。推荐值:40。

confMAX_DAEMON_CHILDREN:服务器能够Fork出的子进程的最大数量。按照默认设置,Sendmail不限制子进程的数量。如果限度被设置,达到限度后的连接就会被延迟。推荐根据内存容量设置:128M内存建议值为40。

confMIN_FREE_BLOCKS:文件系统用来接受标准SMTP(简单邮件传输协议)邮件的队列中的最少自由块数,越小越容易被攻击致命。默认为100块,推荐值为4000或者更大。

confMAX_HEADERS_LENGTH:消息头可接受的最大限度(以字节为单位)。默认为不限制,推荐值是64。

confMAX_MESSAGE_SIZE:单个消息可接受大小的最大限度(以字节为单位)。越大越容易被攻击致命。默认为不限制,推荐值为5242880。

另外,不要把邮件假脱机目录/var/spool/mail/放在NFS共享文件卷上。因为NFS对用户组群ID没有控制,几个UID相同的用户可以收到和阅读彼此的邮件。

限制整体资源的占用

还可以对系统资源做限制,使得系统增强抗DoS能力。

编辑/etc/security/limits.conf文件,添加下面几行: * hard core 0

* hard rss 10000

* hard nproc 30


说明:“core 0”表示禁止创建core文件;“nproc 30”把最多进程数限制到30;“rss 10000”表示除了root之外,其他用户都最多只能用10MB内存。 “*”表示的是所有登录到系统中的用户。

上面这些对登录到系统中的用户有效。通过这些限制,就能更好地控制系统中的用户对进程、core文件和内存的使用情况。最后编辑“/etc/pam.d/login”文件,在文件末尾加入: session required /lib/security/pam_limits.so
推荐阅读
  • 目录浏览漏洞与目录遍历漏洞的危害及修复方法
    本文讨论了目录浏览漏洞与目录遍历漏洞的危害,包括网站结构暴露、隐秘文件访问等。同时介绍了检测方法,如使用漏洞扫描器和搜索关键词。最后提供了针对常见中间件的修复方式,包括关闭目录浏览功能。对于保护网站安全具有一定的参考价值。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 禁止程序接收鼠标事件的工具_VNC Viewer for Mac(远程桌面工具)免费版
    VNCViewerforMac是一款运行在Mac平台上的远程桌面工具,vncviewermac版可以帮助您使用Mac的键盘和鼠标来控制远程计算机,操作简 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • mac php错误日志配置方法及错误级别修改
    本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
author-avatar
珍希那段情
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有