查看攻击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 地址。