【iptables防火墙】 -- DDos防御

最近有客户要定制路由器的默认防火墙等级,然后涉及到了DDos规则,对比客户提供的规则发现我们现有的规则存在明显的错误,在此记录一下如何使用iptables防护DDoS攻击

直接贴一下规则

#开启TCP SYN Cookies 机制
sysctl -w net.ipv4.tcp_syncookies=1
#减少发送SYN-ACK包的重试次数,从而达到减少半连接的存活时间效果,尽快释放队列
sysctl -w net.ipv4.tcp_synack_retries=3
#扩大半连接队列的容量
sysctl -w net.ipv4.tcp_max_syn_backlog=2048
#每秒允许100个syn请求,且允许突发150个请求
iptables -w -I SYNFLOOD -p tcp -m tcp --syn -m limit --limit 100/s --limit-burst 150 -j RETURN
iptables -w -A SYNFLOOD -p tcp -m tcp --syn -j DROP

1.内核参数优化

sysctl -w net.ipv4.tcp_syncookies=1
sysctl -w net.ipv4.tcp_synack_retries=3
sysctl -w net.ipv4.tcp_max_syn_backlog=2048

当服务器收到大量 TCP SYN 包(三次握手的第一步)时,内核的半连接队列(SYN Queue)可能被占满,导致合法用户无法建立连接,以此瘫痪服务器。启用 tcp_syncookies 后,内核会在队列满时生成加密的 Cookie 值代替存储连接信息,客户端返回的 ACK 包会携带此 Cookie 进行验证,从而​绕过半连接队列限制,即使攻击者发送百万级 SYN 包,也不会耗尽队列资源。

2.防火墙规则

iptables -w -I SYNFLOOD -p tcp -m tcp --syn -m limit --limit 100/s --limit-burst 150 -j RETURN
iptables -w -A SYNFLOOD -p tcp -m tcp --syn -j DROP

这一步主要是要注意将SYNFLOOD子链放在INPUT的第一个,如此即可达到限制syn连接数的同时又不影响到后续其他规则的生效。

需要注意DDos攻击无法完全防御,如果需要更好的效果,可以使用钞能力~

### 配置 iptables 限流规则以防御 DDoS 或 DoS 攻击 为了有效防止分布式拒绝服务 (DDoS) 或拒绝服务 (DoS) 攻击,可以利用 `iptables` 提供的流量限制功能来控制传入连接的速度。以下是基于指定参数 `--limit 3/m` 和 `--limit-burst 6` 的配置方法。 #### 设置 SYN 数据包速率限制 SYN 数据包通常是 TCP 连接建立的第一步,在遭受攻击时可能会大量涌入。可以通过以下命令限制每分钟允许的最大 SYN 请求次数: ```bash /sbin/iptables -A INPUT -p tcp --syn -m limit --limit 3/min --limit-burst 6 -j ACCEPT ``` 此规则的作用如下: - `-p tcp`: 指定协议为 TCP。 - `--syn`: 只匹配带有 SYN 标志的数据包。 - `-m limit`: 使用 `limit` 扩展模块来定义速率限制条件。 - `--limit 3/min`: 设定平均每分钟最多接受 3 个新请求[^3]。 - `--limit-burst 6`: 初始突发阈值设为 6,即前几个请求可以在短时间内超过平均速率直到达到该上限[^1]。 如果超出设定范围,则这些额外的请求会被丢弃而不触发进一步处理逻辑。 #### 安装与启用 iptables 在某些系统上可能需要先安装并启动 `iptables` 服务才能应用上述规则。例如,在 CentOS/RHEL 系统中执行以下操作即可完成部署准备阶段的工作流程: ```bash yum -y install iptables iptables-services systemctl enable iptables systemctl start iptables ``` 这里提到的是标准实践过程的一部分内容[^5];然而需要注意不同发行版之间可能存在差异因此建议查阅官方文档获取最精确指导信息。 #### 自动化 IP 封锁机制 除了手动添加防护措施外还可以考虑构建自动化解决方案以便实时响应潜在威胁情况的发生。下面给出了一种简单版本脚本思路用于检测异常活动并将恶意源地址加入黑名单列表当中去: ```bash #!/bin/bash LOGFILE="/var/log/ddos.log" BLOCKTIME=600 # 单位秒 while true; do BADIPS=$(iptables -L -n -v | awk '{if($1=="DROP")print $9}'|sort|uniq -c|awk '$1>10{print $2}') for ip in ${BADIPS};do /sbin/iptables -I INPUT -s "${ip}" -j DROP && echo "$(date): Blocked ${ip}" >>"${LOGFILE}" sleep ${BLOCKTIME} /sbin/iptables -D INPUT -s "${ip}" -j DROP && echo "$(date): Unblocked ${ip}" >>"${LOGFILE}" done done ``` 这个循环程序会持续运行,并定期检查是否有任何 IP 地址频繁尝试访问服务器却遭到拒绝的情况发生。一旦发现符合条件的目标就会立即实施封锁动作同时记录日志文件方便后续审计分析工作开展下去[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值