免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 7777 | 回复: 18
打印 上一主题 下一主题

在夏天的帮助下,写了一个动态防火墙的shell(修订版)  关闭 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-04-07 00:41 |只看该作者 |倒序浏览
目的是阻断超过阀值访问HTTP和FTP的IP,保护服务器
并将被阻断的IP写入日志

  1. #! /bin/bash
  2. # fuckgo.sh
  3. # by platinum

  4. MYIP="xxx.xxx.xxx.xxx"
  5. ftp_who()
  6. {
  7.         netstat -an|grep $MYIP':21 '|grep -v LISTEN|grep -v ESTABLISHED|awk '{print $5;}'|awk -F':' '{print $1;}'|sort|uniq -c|awk '{print $1"="$2;}'
  8. }

  9. http_who()
  10. {
  11.         netstat -an|grep $MYIP':80 '|grep -v LISTEN|awk '{print $5;}'|awk -F':' '{print $1;}'|sort|uniq -c|awk '{print $1"="$2;}'
  12. }

  13. for _un in $(ftp_who)
  14. do
  15.         IP=`echo $_un|gawk -F'=' '{print $2}'`
  16.         NUM=`echo $_un|awk -F'=' '{print $1}'`
  17.         if [ $NUM -gt 5 ] && [ -z "`iptables -vnL|grep $IP`" ]
  18.         then
  19.                 iptables -I INPUT -s $IP -p tcp --dport 21 -m state --state NEW,RELATED,ESTABLISHED -j DROP
  20.                 echo "`date` FTP $IP NUM: $NUM" >> /var/log/fuck.log
  21.         fi
  22. done

  23. for _un in $(http_who|grep -v $MYIP)
  24. do
  25.         IP=`echo $_un|gawk -F'=' '{print $2}'`
  26.         NUM=`echo $_un|awk -F'=' '{print $1}'`
  27.         if [ $NUM -gt 20 ] && [ -z "`iptables -vnL|grep $IP`" ]
  28.         then
  29.                 iptables -I INPUT -s $IP -p tcp --dport 80 -m state --state NEW,RELATED,ESTABLISHED -j DROP
  30.                 echo "`date` WEB $IP NUM: $NUM" >> /var/log/fuck.log
  31.         fi
  32. done
复制代码


下面这个用crontab执行,时间间隔自己定,用于清除前面那个脚本设置的规则

  1. #! /bin/bash
  2. ftp_who()
  3. {
  4.         iptables -nL|grep "DROP"|grep "dpt:21"|awk '{print $4;}'
  5. }

  6. http_who()
  7. {
  8.         iptables -nL|grep "DROP"|grep "dpt:80"|awk '{print $4;}'
  9. }

  10. for _un in $(ftp_who)
  11. do
  12.         iptables -D INPUT -s $_un -p tcp --dport 21 -m state --state NEW,RELATED,ESTABLISHED -j DROP
  13. done

  14. for _un in $(http_who)
  15. do
  16.         iptables -D INPUT -s $_un -p tcp --dport 80 -m state --state NEW,RELATED,ESTABLISHED -j DROP
  17. done
复制代码


记录的日志
Mon Apr 4 16:23:39 CST 2005 WEB 222.179.186.253 NUM: 52
Mon Apr 4 17:01:48 CST 2005 FTP 219.144.142.150 NUM: 6
Mon Apr 4 17:02:48 CST 2005 FTP 219.144.142.150 NUM: 6
Mon Apr 4 20:31:43 CST 2005 WEB 211.99.157.181 NUM: 60
Mon Apr 4 22:01:06 CST 2005 WEB 202.108.249.177 NUM: 57
Mon Apr 4 22:21:11 CST 2005 WEB 220.142.86.75 NUM: 51
Tue Apr 5 16:06:33 CST 2005 WEB 222.179.186.253 NUM: 66
Tue Apr 5 16:27:38 CST 2005 WEB 202.108.249.177 NUM: 59
Tue Apr 5 20:56:33 CST 2005 WEB 218.171.110.97 NUM: 51
Wed Apr 6 19:16:10 CST 2005 FTP 221.213.41.74 NUM: 7
Wed Apr 6 19:46:15 CST 2005 FTP 210.44.189.130 NUM: 6
Wed Apr 6 19:46:15 CST 2005 FTP 210.44.189.132 NUM: 7
Wed Apr 6 19:46:15 CST 2005 FTP 210.44.189.133 NUM: 8
Wed Apr 6 19:57:17 CST 2005 FTP 210.44.189.131 NUM: 6
Wed Apr 6 21:03:29 CST 2005 FTP 221.213.41.74 NUM: 8
Wed Apr 6 21:51:37 CST 2005 WEB 211.99.157.189 NUM: 60
Wed Apr 6 22:04:39 CST 2005 FTP 221.213.41.74 NUM: 6
Wed Apr 6 22:27:42 CST 2005 WEB 222.136.154.137 NUM: 113

由于水平太低,刚刚接触shell不久,只能写成这样了
请大家多多给予指点^_^

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2005-04-07 01:06 |只看该作者

在夏天的帮助下,写了一个动态防火墙的shell(修订版)

哇! 剛接觸就寫成這樣了, 不簡單呢!
再讓你多碰幾天, 恐怕更是不得了~~~ 呵~~~  ^_^

加油!

论坛徽章:
0
3 [报告]
发表于 2005-04-07 01:18 |只看该作者

在夏天的帮助下,写了一个动态防火墙的shell(修订版)

主要还是零二年夏天的功劳,他给我的帮助非常大
在这里我再次谢谢他^_^

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
4 [报告]
发表于 2005-04-07 02:32 |只看该作者

在夏天的帮助下,写了一个动态防火墙的shell(修订版)

原帖由 "platinum" 发表:

由于水平太低,刚刚接触shell不久,只能写成这样了
请大家多多给予指点^_^

走召弓虽口牙!!!

论坛徽章:
0
5 [报告]
发表于 2005-04-07 08:36 |只看该作者

在夏天的帮助下,写了一个动态防火墙的shell(修订版)

for _un in $(ftp_who)
do
        do something
done

用这个来处理一个输出队列,感觉这个想法很棒,可惜不是我想的

论坛徽章:
0
6 [报告]
发表于 2005-04-07 08:38 |只看该作者

在夏天的帮助下,写了一个动态防火墙的shell(修订版)

不错不错!!

论坛徽章:
0
7 [报告]
发表于 2005-04-11 08:20 |只看该作者

在夏天的帮助下,写了一个动态防火墙的shell(修订版)

谢谢楼主了,我先收藏了。

论坛徽章:
2
丑牛
日期:2013-09-29 09:47:222015七夕节徽章
日期:2015-08-21 11:06:17
8 [报告]
发表于 2005-04-11 10:46 |只看该作者

在夏天的帮助下,写了一个动态防火墙的shell(修订版)

原帖由 "platinum" 发表:

由于水平太低,刚刚接触shell不久,只能写成这样了
请大家多多给予指点^_^

后面的crontab的shell,如果我用的freebsd的ipfilter或pf等防火墙,是不是只需要修改它就行了,前面的那个shell只是获得哪些地址得连接数过多的?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
9 [报告]
发表于 2005-04-11 12:07 |只看该作者

在夏天的帮助下,写了一个动态防火墙的shell(修订版)

我一直覺得, netfilter 應該會出這樣的 patch 才對.
不過我不確定, 樓主有沒找過呢?

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
10 [报告]
发表于 2005-04-11 12:52 |只看该作者

在夏天的帮助下,写了一个动态防火墙的shell(修订版)

如果遇到DDOS
$(http_who)会不会过长引起问题?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP