免费注册 查看新帖 |

Chinaunix

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

[FreeBSD] (已解决,漏写ipfw路径)我漏掉了什么:导致Py防火墙脚本在crontab中得不到正确结果? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-05-21 09:46 |只看该作者 |倒序浏览
本帖最后由 ljwsy 于 2012-05-21 11:35 编辑

环境

fb# uname -a
FreeBSD fb.ljzx.gx.cn 7.2-RELEASE FreeBSD 7.2-RELEASE #1: Thu May 21 16:52:12 CST 2009     www@fb.xxxx.yyyy.xxx:/usr/obj/usr/src/sys/FB  i386
fb# pkg_info | grep python
python25-2.5.4      An interpreted object-oriented programming language
python26-2.6.1      An interpreted object-oriented programming language
python30-3.0        An interpreted object-oriented programming language
fb# pkg_info | grep MySQL
freeradius-mysql-1.1.7_3 A free RADIUS server implementation with MySQL support
phpMyAdmin-3.1.2    A set of PHP-scripts to manage MySQL over the web
py25-MySQLdb-1.2.2  Access a MySQL database through Python
fb# python -V
Python 2.5.4
fb# crontab -l
...
* * * * * /root/python/sshipfw.py



Py防火墙脚本
  1. #!/usr/local/bin/python
  2. import MySQLdb
  3. import datetime
  4. import commands

  5. log=open('/var/log/sshdipfw.log','a')
  6. #脚本日志
  7. ...
  8. #/var/log/auth.log入mysql库代码,主要记录:时间、IP、登陆关键字及其他辅助字段
  9. ...
  10. splittime=[(2,1,10),(5,1,10),(10,1,10),(30,2,10),(60,2,20),(120,2,20),(720,4,20),(1440,4,20),(2880,4,20),(7200,8,20),(21600,16,20)]
  11. #策略定义 [(minute,times,limit)...],在minute分钟内有times个记录则该IP被认为是“黑名单”(经过去重),每个策略只提取不多于limit个记录,以防止防火墙规则表过大

  12. done=['60.29.0.22', '221.238.132.123', '220.165.5.7', '218.26.114.75', '124.219.23.68', '122.226.122.250', '122.226.146.166', '122.226.34.150', '61.152.188.85', '110.76.38.87', '60.195.252.242', '222.221.2.210', '221.182.2.16', '221.236.10.76', '220.182.50.83', '220.85.73.53', '200.107.9.140', '114.255.122.10']
  13. #done[]是从库中提出的“黑名单”,上面是我提取到的实时IP

  14. a=[
  15. 'ipfw -q -f flush',
  16. 'ipfw -q add 100 allow ip from any to any via lo0',
  17. 'ipfw -q add 400 deny ip from any to ::1',
  18. 'ipfw -q add 500 deny ip from ::1 to any',
  19. 'ipfw -q add 600 allow ipv6-icmp from :: to ff02::/16',
  20. 'ipfw -q add 700 allow ipv6-icmp from fe80::/10 to fe80::/10',
  21. 'ipfw -q add 800 allow ipv6-icmp from fe80::/10 to ff02::/16',
  22. 'ipfw -q add 900 allow ipv6-icmp from any to any ip6 icmp6types 1',
  23. 'ipfw -q add 1000 allow ipv6-icmp from any to any ip6 icmp6types 2,135,136',
  24. 'ipfw -q add 65000 allow ip from any to any'
  25. ]
  26. #常规规则

  27. for sql in a :
  28.         (t,tmp)=commands.getstatusoutput(sql)
  29.         if t<0 : print >> log,"%s ipfw RUN error(%s): %s" % ( datetime.datetime.now(),t,sql)
  30. #       print >> log,"(%s) %s" % (t,sql)
  31. sql=1
  32. for line in done :
  33.         a="ipfw -q add %d deny log ip from %s to 10.0.0.251 22" % (10000+sql*10,line)
  34.         (t,tmp)=commands.getstatusoutput(a)
  35.         if t<0 :
  36.                 print >> log,"%s ipfw RUN error(%s): %s" % ( datetime.datetime.now(),t,a)
  37.         else :
  38.                 sql+=1
  39.        print >> log,"(%s) %s" % (t,a)
  40. print >> log,"%s Total ipfw: %s" % (datetime.datetime.now(),sql-1)
复制代码
结果

fb# date && tail -1 /var/log/sshdipfw.log
Mon May 21 09:39:02 CST 2012
2012-05-21 09:39:00.998383 Total ipfw: 18


上面是当前时间及脚本日志输出。下面是防火墙,是空的,没有效果:

fb# ipfw list
65535 allow ip from any to any


然而在终端上直接运行脚本则完全正常:

fb# date && ipfw list && ./sshipfw.py && ipfw list
Mon May 21 09:41:46 CST 2012
65535 allow ip from any to any
00100 allow ip from any to any via lo0
00400 deny ip from any to ::1
00500 deny ip from ::1 to any
00600 allow ipv6-icmp from :: to ff02::/16
00700 allow ipv6-icmp from fe80::/10 to fe80::/10
00800 allow ipv6-icmp from fe80::/10 to ff02::/16
00900 allow ip6 from any to any proto ipv6-icmp ip6 icmp6types 1
01000 allow ip6 from any to any proto ipv6-icmp ip6 icmp6types 2,135,136
10010 deny log logamount 100 ip from 60.29.0.22 to 10.0.0.251 dst-port 22
10020 deny log logamount 100 ip from 221.238.132.123 to 10.0.0.251 dst-port 22
10030 deny log logamount 100 ip from 220.165.5.7 to 10.0.0.251 dst-port 22
10040 deny log logamount 100 ip from 218.26.114.75 to 10.0.0.251 dst-port 22
10050 deny log logamount 100 ip from 124.219.23.68 to 10.0.0.251 dst-port 22
10060 deny log logamount 100 ip from 122.226.122.250 to 10.0.0.251 dst-port 22
10070 deny log logamount 100 ip from 122.226.146.166 to 10.0.0.251 dst-port 22
10080 deny log logamount 100 ip from 122.226.34.150 to 10.0.0.251 dst-port 22
10090 deny log logamount 100 ip from 61.152.188.85 to 10.0.0.251 dst-port 22
10100 deny log logamount 100 ip from 110.76.38.87 to 10.0.0.251 dst-port 22
10110 deny log logamount 100 ip from 60.195.252.242 to 10.0.0.251 dst-port 22
10120 deny log logamount 100 ip from 222.221.2.210 to 10.0.0.251 dst-port 22
10130 deny log logamount 100 ip from 221.182.2.16 to 10.0.0.251 dst-port 22
10140 deny log logamount 100 ip from 221.236.10.76 to 10.0.0.251 dst-port 22
10150 deny log logamount 100 ip from 220.182.50.83 to 10.0.0.251 dst-port 22
10160 deny log logamount 100 ip from 220.85.73.53 to 10.0.0.251 dst-port 22
10170 deny log logamount 100 ip from 200.107.9.140 to 10.0.0.251 dst-port 22
10180 deny log logamount 100 ip from 114.255.122.10 to 10.0.0.251 dst-port 22
65000 allow ip from any to any
65535 allow ip from any to any
fb#



我漏掉了什么?

请达人给个方向,非常感谢你的围观和指点。

论坛徽章:
0
2 [报告]
发表于 2012-05-21 11:13 |只看该作者
我真的是漏掉什么关键的东西了,这一定是与crontab有关,与Py无关。

我在Py中生成ipfw.sh的shell脚本,并赋予可执行属性,在crontab中每两分钟运行一次,晕,也是不出想要的结果,ipfw规则表还是空的,但在控制台中运行ipfw.sh又正常。

论坛徽章:
0
3 [报告]
发表于 2012-05-21 11:34 |只看该作者
晕,只检查ipfw的返回值,没看返回提示,返回提示明确说:ipfw: not found

哈哈,加上ipfw命令的绝对路径就OK了。

真晕!!!

论坛徽章:
89
水瓶座
日期:2014-04-01 08:53:31天蝎座
日期:2014-04-01 08:53:53天秤座
日期:2014-04-01 08:54:02射手座
日期:2014-04-01 08:54:15子鼠
日期:2014-04-01 08:55:35辰龙
日期:2014-04-01 08:56:36未羊
日期:2014-04-01 08:56:27戌狗
日期:2014-04-01 08:56:13亥猪
日期:2014-04-01 08:56:02亥猪
日期:2014-04-08 08:38:58程序设计版块每日发帖之星
日期:2016-01-05 06:20:00程序设计版块每日发帖之星
日期:2016-01-07 06:20:00
4 [报告]
发表于 2012-05-21 11:36 |只看该作者
问题描述的很好。 :wink:

论坛徽章:
0
5 [报告]
发表于 2012-05-21 11:46 |只看该作者
本帖最后由 ljwsy 于 2012-05-21 11:50 编辑

         阴沟翻船!

论坛徽章:
54
2017金鸡报晓
日期:2017-02-08 10:39:42操作系统版块每日发帖之星
日期:2016-03-08 06:20:00操作系统版块每日发帖之星
日期:2016-03-07 06:20:00操作系统版块每日发帖之星
日期:2016-02-22 06:20:00操作系统版块每日发帖之星
日期:2016-01-29 06:20:00操作系统版块每日发帖之星
日期:2016-01-27 06:20:00操作系统版块每日发帖之星
日期:2016-01-20 06:20:00操作系统版块每日发帖之星
日期:2016-01-06 06:20:0015-16赛季CBA联赛之江苏
日期:2015-12-21 20:00:24操作系统版块每日发帖之星
日期:2015-12-21 06:20:00IT运维版块每日发帖之星
日期:2015-11-17 06:20:002015亚冠之广州恒大
日期:2015-11-12 10:58:02
6 [报告]
发表于 2012-05-22 11:31 |只看该作者
本帖最后由 lsstarboy 于 2012-05-22 11:31 编辑


FreeBSD的cron这点确实不好,为什么必须写绝对路径?在PATH里搜一下不就得了?反正cron也是按用户的。

论坛徽章:
0
7 [报告]
发表于 2012-05-30 13:51 |只看该作者
已成能用的脚本,欢迎围观:http://bbs.chinaunix.net/thread-3749217-1-1.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP