第7篇:Linux网络安全 预防DDoS攻击

  • 时间:2020-04-24 17:00 作者:铁甲万能狗 来源: 阅读:545
  • 扫一扫,手机访问
摘要:古语有云:“防人之心不可无,害人之心不可有”,他们可能愿意花几杯咖啡的钱令你的服务器瘫痪。因而,不用说您的企业站点需要防御DDoS攻击,发起DDos攻击的人不外乎几种情形。攻击者对您怀有恶意,或者者对贵公司的商业数据感兴趣。攻击者受雇于报复者,通常属于组织性网络犯罪。攻击者过于无聊通过网络扫描寻觅肉鸡

古语有云:“防人之心不可无,害人之心不可有”,他们可能愿意花几杯咖啡的钱令你的服务器瘫痪。因而,不用说您的企业站点需要防御DDoS攻击,发起DDos攻击的人不外乎几种情形。

  • 攻击者对您怀有恶意,或者者对贵公司的商业数据感兴趣。
  • 攻击者受雇于报复者,通常属于组织性网络犯罪。
  • 攻击者过于无聊通过网络扫描寻觅肉鸡,以此证实自己技术高超。

但是,能否有针对DDoS的可靠处理方案?不,没有针对DDoS的完美处理方案,但是我们可以通过保护服务器和网络在很大程度上防止DDoS。

什么是DDoS?

在继续进行CentOS DDoS保护的步骤之前,让我们先理解一下DDoS。DDoS(分布式拒绝服务)是DoS(拒绝服务)的高级版本,换句话说,DDoS会通过向目标服务器发送大量流量,从而拒绝服务器上运行的重要服务,从而使服务器无法解决它们。攻击者利用服务器中的安全漏洞(易受攻击的应用程序,过时的软件等)来静默安装各种后门工具。因而,这会导致服务器停机,公司财务损失等。

防火墙

CentOS7目前还受到官方的支持,CentOS下的防火墙实体工具netfilter iptables,在CentOS 8中将由nftables取代,在CentOS7完成CentOS8交棒的时期,此文对你也许依然有价值。

本文依然以CentOS7为基础它是Linux系统上的默认防火墙管理实用程序-使用Linux系统的每个人都应该熟习或者至少听说过它。

iptables可用于过滤某些数据包,阻止源或者目标端口和IP地址,通过NAT转发数据包以及许多其余功能。

梳理你的iptables规则

要理解为什么当前的iptables规则可以防止DDoS攻击,我们首先必需深入研究iptables的工作原理。iptables是用于建立和控制IP数据包过滤器规则表的命令行工具。 有不同用途的表格。

  • filter表:假如不使用-t(–table)选项,则过滤器表是规则使用的默认表,也是最常用的表。
  • nat:此表用于网络地址转换(NAT)。假如数据包创立新连接,则会检查NAT表中的规则。
  • mangle:mangle表用于修改或者标记数据包及其标头信息。
  • raw:此表的主要目的是从使用NOTRACK目标的连接跟踪中排除某些数据包。

如您所见,一个普通的Linux系统上有四个不同的表,它们没有加载非标准内核模块。 这些表中的每一个都支持一组不同的iptables链。

根据您要阻拦或者修改的数据包类型,您可以选择某个iptables表和所选表支持的链。当然,我们依然缺少对iptables目标(ACCEPT、DROP、REJECT等)的解释,但我们假设假如您正在阅读本文,您已经知道如何解决iptables了。

我们将解释为什么您的iptables规则会阻止DDoS,而不会教您如何使用iptables。假如要使用iptables阻止DDoS攻击,则iptables规则的性能非常重要。大多数基于TCP的DDoS攻击类型使用较高的数据包速率,这意味着每秒的数据包数量之多就是导致服务器宕机的起因。因而,您要确保每秒可以解决和阻止尽可能多的数据包。

您会发现,有关如何使用iptables阻止DDoS攻击的大部分(假如不是一律)指南都使用filter表和规则DDoS规则的INPUT链。这种方法的问题是,INPUT链只在PREROUTING和FORWARD链之后解决,因而只有当数据包与这两个链中的任何一个都不匹配时才适用。这导致消耗资源的分组的过滤中的推迟。总而言之,为了使我们的规则尽可能有效,我们需要将我们的防御DDoS规则尽可能移动。

第一个可以应用于数据包的链是PREROUTING链,所以理想情况下,我们应该已经过滤了这个链中的坏包。

然而,filter表不支持PREROUTING链。要处理此问题,我们可以简单地使用mangle表而不是filter表来执行防DDoS的direct规则。它支持filter表支持的大部分(假如不是一律)规则,同时还支持所有链(Chain)。那么你想知道为什么你的iptables DDoS保护规则很烂吗?这是由于您使用filter表和INPUT链来阻止恶意数据包!

缓解DDoS的最佳Linux内核设置,另一个常见的错误是,人们没有使用优化的内核设置来更好地减轻DDoS攻击的影响。请注意,本指南重点详情CentOS 7作为选择的操作系统。CentOS 7包括iptables的最新版本并支持新的SYNPROXY目标。我们不会详情您需要调整的每个内核设置,以更好地缓解iptables的DDoS。相反,我们提供了将要使用的一组CentOS 7内核设置。只要将以下内容放在您的/etc/sysctl.conf文件中,而后使用sysctl-p来应用设置

kernel.printk = 4 4 1 7 kernel.panic = 10 kernel.sysrq = 0 kernel.shmmax = 4294967296 kernel.shmall = 4194304 kernel.core_uses_pid = 1 kernel.msgmnb = 65536 kernel.msgmax = 65536 vm.swappiness = 20 vm.dirty_ratio = 80 vm.dirty_background_ratio = 5 fs.file-max = 2097152 net.core.netdev_max_backlog = 262144 net.core.rmem_default = 31457280 net.core.rmem_max = 67108864 net.core.wmem_default = 31457280 net.core.wmem_max = 67108864 net.core.somaxconn = 65535 net.core.optmem_max = 25165824 net.ipv4.neigh.default.gc_thresh1 = 4096 net.ipv4.neigh.default.gc_thresh2 = 8192 net.ipv4.neigh.default.gc_thresh3 = 16384 net.ipv4.neigh.default.gc_interval = 5 net.ipv4.neigh.default.gc_stale_time = 120 net.netfilter.nf_conntrack_max = 10000000 net.netfilter.nf_conntrack_tcp_loose = 0 net.netfilter.nf_conntrack_tcp_timeout_established = 1800 net.netfilter.nf_conntrack_tcp_timeout_close = 10 net.netfilter.nf_conntrack_tcp_timeout_close_wait = 10 net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 20 net.netfilter.nf_conntrack_tcp_timeout_last_ack = 20 net.netfilter.nf_conntrack_tcp_timeout_syn_recv = 20 net.netfilter.nf_conntrack_tcp_timeout_syn_sent = 20 net.netfilter.nf_conntrack_tcp_timeout_time_wait = 10 net.ipv4.tcp_slow_start_after_idle = 0 net.ipv4.ip_local_port_range = 1024 65000 net.ipv4.ip_no_pmtu_disc = 1 net.ipv4.route.flush = 1 net.ipv4.route.max_size = 8048576 net.ipv4.icmp_echo_ignore_broadcasts = 1 net.ipv4.icmp_ignore_bogus_error_responses = 1 net.ipv4.tcp_congestion_control = htcp net.ipv4.tcp_mem = 65536 131072 262144 net.ipv4.udp_mem = 65536 131072 262144 net.ipv4.tcp_rmem = 4096 87380 33554432 net.ipv4.udp_rmem_min = 16384 net.ipv4.tcp_wmem = 4096 87380 33554432 net.ipv4.udp_wmem_min = 16384 net.ipv4.tcp_max_tw_buckets = 1440000 net.ipv4.tcp_tw_recycle = 0 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_max_orphans = 400000 net.ipv4.tcp_window_scaling = 1 net.ipv4.tcp_rfc1337 = 1 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_synack_retries = 1 net.ipv4.tcp_syn_retries = 2 net.ipv4.tcp_max_syn_backlog = 16384 net.ipv4.tcp_timestamps = 1 net.ipv4.tcp_sack = 1 net.ipv4.tcp_fack = 1 net.ipv4.tcp_ecn = 2 net.ipv4.tcp_fin_timeout = 10 net.ipv4.tcp_keepalive_time = 600 net.ipv4.tcp_keepalive_intvl = 60 net.ipv4.tcp_keepalive_probes = 10 net.ipv4.tcp_no_metrics_save = 1 net.ipv4.ip_forward = 0 net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.all.accept_source_route = 0 net.ipv4.conf.all.rp_filter = 1

这些sysctl.conf设置有助于在DDoS下最大化服务器的性能以及本指南中将要提供的iptables规则的有效性

考虑到您现在已经知道需要使用mangle表和PREROUTING链以及优化的内核设置来减轻DDoS攻击的影响,我们现在继续详情几个示例规则来减轻大多数TCP DDoS攻击。

DDoS的类型多种多样,几乎不可能对所有DDoS维护基于签名的规则,但是幸运的是有一种称为连接跟踪的东西(nf_conntrack内核模块),它可以帮助我们缓解几乎所有基于TCP的DDoS攻击 不会使用看似合法的SYN数据包,包括所有类型的ACK和SYN-ACK DDoS攻击以及使用伪造的TCP标志的DDoS攻击。

我们仅从五个简单的iptables规则开始,这些规则将已经丢弃了许多基于TCP的DDoS攻击。

阻挡无效的数据包

firewall-cmd --permanent --direct --add-rule \ipv4 mangle PREROUTING 0 -m conntrack \--ctstate INVALID -j DROP

此规则将阻止所有不是SYN数据包且不属于已建立的TCP连接的数据包。

阻止不是SYN的新数据包

firewall-cmd --permanent --direct --add-rule \ipv4 mangle PREROUTING 0 \-p tcp ! --syn -m conntrack \--ctstate NEW -j DROP

这会阻止所有新数据包(不属于已建立的连接)并且不使用SYN标志。此规则相似于“阻止无效数据包”,但是我们发现它捕获了少量其余数据包却没有的数据包。

阻止不常见的MSS值

firewall-cmd --permanent --direct --add-rule \ipv4 mangle PREROUTING 0 \-p tcp -m conntrack --ctstate NEW \-m tcpmss ! --mss 536:65535 -j DROP

这会阻止所有新的数据包(不属于已建立的连接),并且不使用SYN标志。该规则相似于“阻止无效数据包”规则,但是我们发现它捕获了少量其余规则没有捕获的数据包。

阻拦带有伪造TCP标志的数据包

ipv4 mangle PREROUTING 3 -p tcp --tcp-flags \FIN,SYN,RST,PSH,ACK,URG NONE -j DROPipv4 mangle PREROUTING 4 -p tcp --tcp-flags FIN,SYN FIN,SYN -j DROPipv4 mangle PREROUTING 5 -p tcp --tcp-flags SYN,RST SYN,RST -j DROPipv4 mangle PREROUTING 6 -p tcp --tcp-flags FIN,RST FIN,RST -j DROPipv4 mangle PREROUTING 7 -p tcp --tcp-flags FIN,ACK FIN -j DROPipv4 mangle PREROUTING 8 -p tcp --tcp-flags ACK,URG URG -j DROPipv4 mangle PREROUTING 9 -p tcp --tcp-flags ACK,FIN FIN -j DROP

后续升级....

  • 全部评论(0)
最新发布的资讯信息
【系统环境|】2FA验证器 验证码如何登录(2024-04-01 20:18)
【系统环境|】怎么做才能建设好外贸网站?(2023-12-20 10:05)
【系统环境|数据库】 潮玩宇宙游戏道具收集方法(2023-12-12 16:13)
【系统环境|】遥遥领先!青否数字人直播系统5.0发布,支持真人接管实时驱动!(2023-10-12 17:31)
【系统环境|服务器应用】克隆自己的数字人形象需要几步?(2023-09-20 17:13)
【系统环境|】Tiktok登录教程(2023-02-13 14:17)
【系统环境|】ZORRO佐罗软件安装教程及一键新机使用方法详细简介(2023-02-10 21:56)
【系统环境|】阿里云 centos 云盘扩容命令(2023-01-10 16:35)
【系统环境|】补单系统搭建补单源码搭建(2022-05-18 11:35)
【系统环境|服务器应用】高端显卡再度登上热搜,竟然是因为“断崖式”的降价(2022-04-12 19:47)
手机二维码手机访问领取大礼包
返回顶部