第7篇:Linux网络安全 预防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
后续升级….
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 第7篇:Linux网络安全 预防DDoS攻击