Ubuntu防火墙防止DDoS攻击的实用方法
Ubuntu默认使用**UFW(Uncomplicated Firewall)**作为前端防火墙工具,底层依赖iptables。首先需设置默认策略:将INPUT(入站)、FORWARD(转发)链设为DROP,仅允许明确许可的流量通过,减少攻击面。
sudo ufw enable
sudo ufw default deny incoming
sudo ufw default allow outgoing
limit模块防止短时间内大量请求涌入。例如,限制SSH(22端口)每分钟最多5个新连接,HTTP(80端口)每秒最多1个新连接:sudo ufw limit 22/tcp # 限制SSH连接速率
sudo ufw limit 80/tcp # 限制HTTP连接速率
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
connlimit模块防止某个IP占用过多资源(如超过5个并发连接则阻断)。例如,针对SSH端口:sudo iptables -A INPUT -p tcp --syn -m connlimit --connlimit-above 5 -j DROP
RST包)和ICMP请求(如ping)的速率,降低攻击者探测服务器端口的风险:sudo iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
sudo iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
Fail2Ban是一款入侵防御工具,可监控日志文件(如/var/log/auth.log、/var/log/nginx/access.log),自动检测异常行为(如多次登录失败、高频请求)并封禁恶意IP(默认封禁时间600秒)。
sudo apt install fail2ban
sudo systemctl start fail2ban
sudo systemctl enable fail2ban
/etc/fail2ban/jail.local,设置maxretry(最大尝试次数)为3,bantime(封禁时间)为600秒:[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 600
通过调整内核参数,提升系统处理SYN洪水等攻击的能力:
sudo sysctl -w net.ipv4.tcp_syncookies=1
sudo sysctl -w net.ipv4.tcp_max_syn_backlog=4096
sudo sysctl -w net.ipv4.tcp_synack_retries=2
sudo sysctl -w net.ipv4.tcp_syn_retries=2
/etc/sysctl.conf,确保重启后生效:sudo sysctl -p
DDoS Deflate是一款轻量级脚本,通过netstat监控当前连接数,自动封禁超过阈值的IP(如同一IP有超过10个连接则封禁)。
wget https://github.com/jgmdev/ddos-deflate/archive/master.zip
unzip master.zip
cd ddos-deflate-master
sudo ./install.sh
/usr/local/ddos/ddos.conf,调整NO_OF_CONNECTIONS(最大允许连接数)和BAN_PERIOD(封禁时间)参数。sudo ufw allow from 192.168.1.100 to any port 22
iftop、nload等工具实时监控网络流量,及时发现异常(如某IP流量激增);定期更新系统和防火墙规则,修复已知漏洞。以上方法结合使用,可有效提升Ubuntu服务器对DDoS攻击的防御能力。需根据实际业务场景调整规则(如调整连接速率阈值),避免误封正常用户。