进入Linux服务器后,利用tcpdump抓包工具进行检测80端口的ip连接详情。tcpdump命令如下:
tcpdump i eth0 tnn dst port 80 c 100 | awk F"." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr |head -20
(PS:Port 80为抓取模板端口为80的数据包,100为抓取数据包的数量。更多关于tcpdump的详细用法请点击文章末尾处的传送门。)
输入命令之后,稍等一会我们便可以看到如下数据:
Last login: Tue Aug 11 13:59:02 2015 from 113.86.241.98
[root@VM_204_133_centos ~]# tcpdump -i eth0 -tnn dst port 80 -c 100 | awk -F"." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr |head -20
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
100 packets captured
100 packets received by filter
0 packets dropped by kernel
82 IP 10.204.2**.1**
8 IP 66.249.75.73
6 IP 113.86.241.98
4 IP 42.227.206.84
[root@VM_204_133_centos ~]#
由上可看出ip66.249.75.73的packets最多,所以可判定这是攻击源ip,但一般packets为100+的ip才可判为攻击源ip,但这里为什么我要判定这个ip为攻击源呢?(PS:10.204.2**.1**为服务器内网ip,所以忽略不计。由于该文章是在攻击后的第二天写的,早在前一天已经做好防御处理,所以这里我们看到的数据有所出入。此文只做演示!)
答:理由如下:
1.该ip是来自于美国的ip(PS:可把每个连接的ip都去网站查询一次,看看地区是哪里的。)
2.该ip的packets都大于其他ip的packets
完成上面的操作后,将packets过多的IP记录下来,用iptabels封禁。iptabels封禁命令如下:
iptables -I INPUT -s 66.249.75.0/24 -j DROP
(PS:/24为c段,即封禁IP66.249.75.0~66.249.75.249)
完成上面的操作后,我们还要把iptabels规则保存,命令如下:
service iptables save
接下来再重启iptabels,命令如下:
service iptables restart
这一步建议多进行几次,发现异常IP用上面的办法封禁。如果出现误封可以参考下面这行解封命令进行解封。
iptables -D INPUT -s 66.249.75.0/24 -j DROP
0x02 常用命令
封单个IP的命令是:
iptables -I INPUT -s 211.1.0.0 -j DROP
封IP段的命令是:
iptables -I INPUT -s 211.1.0.0/16 -j DROP
iptables -I INPUT -s 211.2.0.0/16 -j DROP
iptables -I INPUT -s 211.3.0.0/16 -j DROP
封整个B段的命令是:
iptables -I INPUT -s 211.0.0.0/8 -j DROP
封几个段的命令是:
iptables -I INPUT -s 61.37.80.0/24 -j DROP
iptables -I INPUT -s 61.37.81.0/24 -j DROP
0x03 后续
进行了上面的操作之后,客户的网站正常了,几乎秒开,当然这和他的vps给力也有一定的关系。top了一下,服务器资源也正常了。
传送门:
tcpdump用法详解
iptabels使用方法
补充篇:
0x00 Linux工具-DDoS deflate
DDoS deflate其实是一个Shell脚本,使用netstat和iptables工具,对那些链接数过多的IP进行封锁,能有效防止通用的恶意扫描器,但它并不是真正有效的DDoS防御工具。
工作过程描述:
同一个IP链接到服务器的连接数到达设置的伐值后,所有超过伐值的IP将被屏蔽,同时把屏蔽的IP写入ignore.ip.list文件中,与此同时会在tmp中生成一个脚本文件,这个脚本文件马上被执行,但是一运行就遇到sleep 预设的秒,当睡眠了这么多的时间后,解除被屏蔽的IP,同时把之前写入ignore.ip.list文件中的这个被封锁的IP删除,然后删除临时生成的文件。
一个事实:如果被屏蔽的IP手工解屏蔽,那么如果这个IP继续产生攻击,那么脚本将不会再次屏蔽它(因为加入到了ignore.ip.list),直到在预设的时间之后才能起作用,加入到了ignore.ip.list中的IP是检测的时候忽略的IP。可以把IP写入到这个文件以避免这些IP被堵塞,已经堵塞了的IP也会加入到ignore.ip.list中,但堵塞了预定时间后会从它之中删除。
0x01 安装DDoS deflate
安装:
wget
chmod 0700 install.sh #赋予install.sh权限
./install.sh
卸载:
wget
chmod 0700 uninstall.ddos
./uninstall.ddos
安装完成后在/usr/local/ddos目录下产生了ddos.conf、ddos.sh、ignore.ip.list和LICENSE这四个文件,ddos.conf是配置文件,ddos.sh是一个Shell文件,ignore.ip.list是存放忽略IP的文件,LICENSE是版权声明文件,安装完成后还在/etc/cron.d/下生产了ddos.cron文件,内容如下:
SHELL=/bin/sh
0-59/1 * * * * root /usr/local/ddos/ddos.sh >/dev/null 2>&1
意思是每隔一分钟执行一下/usr/local/ddos/ddos.sh
这个cron任务是依赖ddos.conf文件中的NO_OF_CONNECTIONS变量产生的,如果修改了此值,可以通过运行如下命令更新(实际也是在安装是运行了如下命令):
/usr/local/ddos/ddos.sh -c 或 /usr/local/ddos/ddos.sh –cron
以下主要针对ddos.conf进行分析:
ddos.conf内容:
#####
Paths of the script and other files PROGDIR="/usr/local/ddos" PROG="/usr/local/ddos/ddos.sh" IGNORE_IP_LIST="/usr/local/ddos/ignore.ip.list" CRON="/etc/cron.d/ddos.cron" APF="/etc/apf/apf" IPT="/sbin/iptables"
#####
frequency in minutes for running the script
#####
Caution: Every time this setting is changed, run the script with --cron
#####
option so that the new frequency takes effect
# 设置检测时间间隔,默认是分钟,由于系统使用crontab功能,最小单位是分钟
FREQ=1 ##### How many connections define a bad IP? Indicate that below. # NO_OF_CONNECTIONS
默认是150,这是一个经验值,如果服务器性能比较高,可以设置200以上,以避免误杀 NO_OF_CONNECTIONS=150
阅读(3533) | 评论(0) | 转发(0) |