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

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

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

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

什么是DDoS?

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

防火墙兼容性问题

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

  • 在CentOS8中你仍然可以通过direct规则创建你的防御规则,但非常不行的是,早期的nftable对iptable规则的语法的兼容性还是存在很大问题的,如下图所示

  • 当你的Linux防火墙安全方案部署到生产环境不是一味追求新技术潮流,最重要是稳定和循序渐进地规定到新的防火墙技术

基于上文这些原因,如果你正当部署CentOS 8的防火墙,我强烈建议你暂时将firewalld的后端从nftables切换回iptables,操作方法如下
以root管理员权限修改/etc/firewalld/firewalld.conf配置文件,如下图第58行的FirewallBackend为iptables

本文仍然以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攻击。这个内容将在后文再说。

你可能感兴趣的:(第7篇:Linux网络安全 预防DDoS攻击)