站点图标 Linux-技术共享

CentOS7下使用DDoS deflate+iptables防御DDoS攻击

查看攻击IP

netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

解决方法:使用DDoS deflate+iptables

DDoS deflate是一款免费的用来防御和减轻DDoS攻击的脚本。

安装DDoS deflate

 

wget http://www.inetbase.com/scripts/ddos/install.sh #下载
chmod 0700 install.sh #添加权限
./install.sh #执行安装

配置DDoS deflate

 

 

vim /usr/local/ddos/ddos.conf

将配置中APF_BAN=1 改为0保存。

注释:

IGNORE_IP_LIST="/usr/local/ddos/ignore.ip.list" //IP地址白名单

CRON="/etc/cron.d/ddos.cron" //定时执行程序

FREQ=1 //检查时间间隔,默认1分钟

NO_OF_CONNECTIONS=150 //最大连接数,超过就会被屏蔽,默认。

APF_BAN=1 //使用APF还是iptables,使用iptables,将APF_BAN的值改为0。

KILL=1 //是否屏蔽IP,默认。

EMAIL_TO="root" //当IP被屏蔽时给指定邮箱发送邮件,修改为自己邮箱或默认。

BAN_PERIOD=600 //禁用IP时间,默认600秒。

修改/usr/local/ddos/ddos.sh

vim /usr/local/ddos/ddos.sh
#注释掉第117行:

#netstat -ntu | awk ‘{print $5}’ | cut -d: -f1 | sort | uniq -c | sort -nr > $BAD_IP_LIST

#下面新增一行,保存

netstat -ntu | awk '{print $5}' | cut -d: -f1 | sed -n '/[0-9]/p' | sort | uniq -c | sort -nr > $BAD_IP_LIST

 

注释:

awk '{print NR $0}' NR为行号 $0为打印全部

cut -d 截取字符 -f 第几段

sed -n '[0-9]/p' 打印纯数字匹配行(不包含点号)

 

sort -n数字排序正序 -nr 数字排序倒序

iptables防火墙安装与配置

yum install iptables-services

将规则写入iptables配置文件

 

vim /etc/sysconfig/iptables
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80  -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

重启iptables防火墙和加入开机启动服务

 

systemctl restart iptables.service
systemctl enable iptables.service

 

 

 

确认iptables服务状态

 

service iptables status

 

DDos命令选项

 

/usr/local/ddos/ddos.sh -h    //查看选项 
/usr/local/ddos/ddos.sh -k n  //杀掉连接数大于n的连接。n默认为配置文件的NO_OF_CONNECTIONS
/usr/local/ddos/ddos.sh -c    //按照配置文件创建一个执行计划

 

DDoS deflate卸载(不再使用该脚本时可以通过以下方式卸载)

wget http://www.inetbase.com/scripts/ddos/uninstall.ddos
chmod 0700 uninstall.ddos
./uninstall.ddos

提醒:关于 DDoS Deflate 是一个轻量级的 bash shell 脚本,旨在协助阻止拒绝服务攻击。它利用以下命令创建连接到服务器的 IP 地址列表,以及它们的连接总数。它是在软件级别安装解决方案最简单和最容易的一种。

ss-Hntu | awk '{打印 $6}' | 排序 | 唯一的-c | 排序 -nr

超过预配置连接数的 IP 地址会在服务器的防火墙中被自动阻止,该防火墙可以是直接 ipfw、iptables 或高级策略防火墙 (APF)。

显着特点
IPv6 支持。
可以通过 /etc/ddos/ignore.ip.list 将 IP 地址列入白名单。
可以通过 /etc/ddos/ignore.host.list 将主机名列入白名单。
/etc/ddos/ignore.ip.list 支持 IP 范围和 CIDR 语法
简单配置文件:/etc/ddos/ddos.conf
IP 地址在预先配置的时间限制后自动解锁(默认值:600 秒)
该脚本可以通过配置文件以选定的频率作为 cron 作业运行(默认值:1 分钟)
该脚本可以通过配置文件以选定的频率作为守护进程运行(默认值:5 秒)
当 IP 地址被阻止时,您可以收到电子邮件警报。
通过连接状态控制阻塞(参见 man ss 或 man nestat)。
自动检测防火墙。
支持 APF、CSF、ipfw 和 iptables。
将事件记录到 /var/log/ddos.log
只能禁止传入连接或通过特定端口规则。
使用 iftop 和 tc 降低达到特定限制的 IP 地址的传输速度的选项。
使用 tcpkill 减少攻击者打开的进程数量。
Cloudflare 支持通过使用 tcpdump 获取真实用户 ip 并使用 iptables 字符串匹配来断开连接。
依赖项
安装脚本支持自动安装所需的依赖项,但可能无法安装部分或全部。您可能希望在继续安装之前手动安装所需的依赖项,如下面的 linux 发行版的小节中列出的。

Ubuntu/Debian
apt install dnsutils
apt-get install net-tools
apt-get install tcpdump
 apt-get install dsniff -y
apt install grepcidr
安装
以 root 用户身份执行以下命令:
wget https://github.com/jgmdev/ddos-deflate/archive/master.zip -O ddos.zip
unzip ddos.zip
cd ddos-deflate-master
./install.sh
卸载
以 root 用户身份执行以下命令:
cd ddos-deflate-master
./uninstall.sh
用法
安装程序将自动检测您的系统是否支持 init.d 脚本、systemd 服务或 cron 作业。如果找到其中之一,它将安装 apropiate 文件并启动 ddos​​ 脚本。在 init.d 和 systemd 的情况下,ddos 脚本作为守护进程启动,默认情况下监控间隔设置为 5 秒。守护进程检测攻击的速度比 cron 作业快得多,因为 cron 的间隔为 1 分钟。

安装完 (D)Dos deflate 后,继续修改配置文件以满足您的需求。

/etc/ddos/ignore.host.list

在此文件中,您可以添加要列入白名单的主机名列表,例如:

googlebot.com
my-dynamic-ip.somehost.com

/etc/ddos/ignore.ip.list

在此文件中,您可以添加要列入白名单的 IP 地址列表,例如:

12.43.63.13
165.123.34.43-165.123.34.100
192.168.1.0/24
129.134.131.2

/etc/ddos/ddos.conf

ddos 脚本的行为由该配置文件修改。有关更多详细信息,请参阅man ddos​​ ,其中包含不同配置选项的文档。

修改配置文件后,您将需要重新启动守护程序。如果在 systemd 上运行:

systemctl 重启 ddos

如果作为经典的 init.d 脚本运行:

/etc/init.d/ddos restart

service ddos​​ restart

将脚本作为 cronjob 运行时,不需要重新启动。

命令行使用
ddos [选项] [N]

N : tcp/udp 连接数(默认 150)

选项
-h | - 帮助:

显示帮助屏幕。

-c | --cron:

创建 cron 作业以定期运行脚本(默认 1 分钟)。

-i | - 忽略列表:

列出列入白名单的 IP 地址。

-b | --禁令列表:

列出当前禁止的 IP 地址。

-u | --解禁:

取消禁止给定的 IP 地址。

-d | - 开始:

初始化一个守护进程来监控连接。

-s | - 停止:

停止守护进程。

-t | - 地位:

如果当前正在运行,则显示守护程序和 pid 的状态。

-v[4|6] | --查看[4|6]:

显示与服务器的活动连接。

-y[4|6] | --view-port [4|6]:

显示与服务器的活动连接,包括端口。

-k | - 杀:

阻止所有超过 N 个连接的 IP 地址。

退出移动版