一个自动封IP防御DDOS脚本

DDoS deflate 工作原理

每分钟检测一次IP连接状况,当某些IP连接超过配置脚本限制的连接数,程序会自动禁止这些IP一段时间,以达到防御攻击的目的

DDoS deflate官方网站:http://deflate.medialayer.com/

Installation 安装

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

Uninstallation 卸载

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

检查是否遭到ddos攻击命令

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

DDoS deflate的默认配置位于/usr/local/ddos/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"  //IP地址白名单 
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 
FREQ=1   //检查时间间隔,默认1分钟  
##### How many connections define a bad IP? Indicate that below. 
NO_OF_CONNECTIONS=150     //最大连接数,超过这个数IP就会被屏蔽,一般默认即可  
##### APF_BAN=1 (Make sure your APF version is atleast 0.96) 
##### APF_BAN=0 (Uses iptables for banning ips instead of APF) 
APF_BAN=1        //使用APF还是iptables。推荐使用iptables,将APF_BAN的值改为0即可。  
##### KILL=0 (Bad IPs are‘nt banned, good for interactive execution of script) 
##### KILL=1 (Recommended setting) 
KILL=1   //是否屏蔽IP,默认即可  
##### An email is sent to the following address when an IP is banned. 
##### Blank would suppress sending of mails 
EMAIL_TO="root"   //当IP被屏蔽时给指定邮箱发送邮件,推荐使用,换成自己的邮箱即可  
##### Number of seconds the banned ip should remain in blacklist. 
BAN_PERIOD=600    //禁用IP时间,默认600秒,可根据情况调整

试用了一会,感觉还不错,比我以前用的分析nginx日志封IP的脚本要好些,假如几个虚拟主机使用不同的网站日志,就必须运行几个分析日志的脚本,

这个脚本就用一个就可以把整个服务器保护起来了。但这个也存在一些问题,刚开始的时候把mysql服务器给封掉了,搞的我手忙脚乱的解封,

然后把mysql服务器IP添加白名单,谁知过会他过了段时间又把白名单删除了,又给mysql服务器封了,不得以卸载了一次。

研究了一下代码才发现,他禁止的IP也添加到白名单里,然后解封的时候通过tmp目录里的unban.xxxxx文件将白名单里禁止的IP再删除,

这样这个IP就不再受保护。所以我把mysql服务器IP添加白名单之后程序根据这个BAN_PERIOD=600 参数在10分钟后删除,所以就出现了你恢复他继续封的怪圈,白名单设置文件应该和禁止解禁这个IP记录文件分开就好了。

使用心得:

安装后第一时间要将白名单设置好,最好观察一段时间看是不是正常,以免一些和服务器需要保持连接的IP被封,比如mysql服务器,rsync备份服务器等等,这些机器往往都需要和网站服务器保持大量连接

另外假如采用CDN加速不适于用这脚本,cdn节点缓存服务器IP百分百会被他封掉。

时间: 2024-10-14 10:35:07

一个自动封IP防御DDOS脚本的相关文章

自动设置IP地址bat脚本

自动获取IP及DNS: netsh interface ip set address name="本地连接" source=dhcpnetsh interface ip set dnsservers name="本地连接" source=dhcp 设置静态IP及DNS: netsh interface ip set address name="本地连接" static 192.168.1.96 255.255.255.0 192.168.1.1n

一个自动设置游戏房间的脚本

最近迷上了带四消极打五疯狂,每开一盘都要重新设置电脑,十分麻烦.所以我用按键精灵做了一个脚本,自动添加电脑. 脚本是这样写的,适用1366*768的长宽比: MoveTo 1081,166 LeftClick 1 Delay 500 MoveTo 980,229 LeftClick 1 Delay 500 MoveTo 1081,204 LeftClick 1 Delay 500 MoveTo 1057,267 LeftClick 1 Delay 500 MoveTo 1083,234 Left

ping主机的ip地址,判断以及自动安装sysstat软件包 等脚本

ping主机的ip地址.返回结果 vi pinghost.sh #!/bin/bash ping -c 3 -i 0.2 -W 3 $1 &> /dev/null if [ $? -eq 0 ] then echo "Host $1 is up." else echo "Host $1 is down." fi sh pinghost.sh ip地址 判断分数所在的区间,给出不同的分档结果 #!/bin/bash read -p "请输入您的

Linux Shell脚本之自动修改IP

作为一名Linux SA,日常运维中很多地方都会用到脚本,而服务器的ip一般采用静态ip或者MAC绑定,当然后者比较操作起来相对繁琐,而前者我们可以设置主机名.ip信息.网关等配置.修改成特定的主机名在维护和管理方面也比较方便.如下脚本用途为:修改ip和主机名等相关信息,可以根据实际需求修改,举一反三! #!/bin/sh #auto Change ip netmask gateway scripts #wugk 2012-12-17 cat << EOF ++++++++自动修改ip和主机名

初步学习nodejs,业余用node写个一个自动创建目录和文件的小脚本,希望对需要的人有所帮助

初步学习nodejs,业余用node写个一个自动创建目录和文件的小脚本,希望对需要的人有所帮助,如果有bug或者更好的优化方案,也请批评与指正,谢谢,代码如下: 1 var fs = require('fs'); 2 var tel = [ 3 "1/2/4/6/a.tpl.html", 4 "1/2/4/7/9/c.tpl.html", 5 "1/3/5/8/b.tpl.html"]; 6 var demo = function (mulu)

一个自动安装LNMP的简洁Shell脚本

此脚本在生产服务器上使用了一年多,本脚本崇尚简单唯美,只需要一个脚本就可以在任何一台有网络的服务器上自动配置LNMP.本脚本会在脚本执行目录下,建packages目录用于存放LNMP所需要的软件.大家安装完可以删除该目录. 使用方法:1.把shell脚本的内容保存为nginx_php2.root权限下运行:chmod u+x nginx_php; ./nginx_php init; ./nginx_php ins_mysql-server; ./nginx_php ins_mysql-clien

无法启动INTERNET连接共享。一个已经用IP地址配置的LAN连接需要自动IP地址

提问者采纳 很简单 只要把你要共享的连接 192.168.0.1 0改成1 然后就可以共享了 共享后再改回来 就能上了 但是会出现IP冲突的~ 无法启动INTERNET连接共享.一个已经用IP地址配置的LAN连接需要自动IP地址

一个简单的监控网站是否正常并自动重启服务的shell脚本

#!/bin/sh if [ -z "`curl --connect-timeout 15 --max-time 20 --head --silent http://localhost/index.php|head -n 1|grep '200'`" ];then echo -e "$(date +%Y-%m-%d)\n" killall nginx killall php-fpm /usr/local/nginx/sbin/nginx -c conf/nginx.

【Windows】win10电脑通过bat脚本自动配置IP地址

目录 1.需求描述 2.实现过程 2.1 代码部分 2.2 文件编码 2.3 配置网卡名 2.4 运行脚本 1.需求描述 现在有win10电脑一台,但是由于办公环境需要随时切换内外网,所以经常需要手工配置IP地址.内外需要配置固定IP地址,外网需要配置为自动获取IP地址 2.实现过程 2.1 代码部分 @echo off rem 强制获取管理员权限 %1 mshta vbscript:CreateObject("Shell.Application").ShellExecute(&quo