LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1248|回复: 4

用iptables做网关和IP过滤的问题

[复制链接]
发表于 2006-10-7 20:16:54 | 显示全部楼层 |阅读模式
这两天,将实验室里的网关从win+winroute改成用redhat9 +iptables.功能是带着实验室里的其它电脑上网,然后将收费IP过滤掉!
我写的脚本如下:

  1. #!/bin/sh
  2. PATH=$PATH:/usr/sbin:/sbin
  3. #
  4. #eth0 ->outside
  5. #eth1 ->inside
  6. # define var
  7. intra="192.168.0.0/24"
  8. myip="202.118.247.106"

  9. #download the web file
  10. wget -O tmp.htm http://hitsun.hit.edu.cn/zxiplist.htm

  11. #open ip_forward
  12. echo "open ip_forward..."
  13. echo 1 > /proc/sys/net/ipv4/ip_forward

  14. #clear rules and init
  15. echo "set iptables rules..."
  16. iptables -F INPUT
  17. iptables -F OUTPUT
  18. iptables -F FORWARD
  19. iptables -F POSTROUTING -t nat
  20. iptables -F POSTROUTING -t mangle
  21. iptables -P INPUT DROP
  22. iptables -P OUTPUT DROP
  23. iptables -P FORWARD DROP

  24. iptables -A INPUT -i eth0 -s $intra -j DROP
  25. iptables -A FORWARD -i eth0 -s $intra -j DROP

  26. #以下为过滤收费ip
  27. cat tmp.htm |grep -o '[0-9]\{1,3\}[.][0-9]\{1,3\}[.][0-9]\{1,3\}[.][0-9]\{1,3\}' >ip.txt
  28. fip=`awk -f awkfile ip.txt`
  29. for x in $fip
  30.     do
  31.         iptables -A INPUT -i eth0 -s $x -j ACCEPT
  32.         iptables -A OUTPUT -o eth0 -s $myip -d $x -j ACCEPT
  33.         iptables -A FORWARD -i eth0 -s $x -m state --state ESTABLISHED,RELATED -j ACCEPT
  34.         iptables -A FORWARD -i eth1 -s $intra -d $x -j ACCEPT
  35.     done
  36. # iptables -A FORWARD -j DROP
  37. iptables -A INPUT -i eth1 -s $intra -j ACCEPT
  38. iptables -A OUTPUT -o eth1 -d $intra -j ACCEPT

  39. #以下为ip转发
  40. iptables -t nat -A POSTROUTING -s $intra -o eth0 -j SNAT --to $myip
  41. #日志记录
  42. #iptables -t mangle -A POSTROUTING -j LOG --log-level debug --log-prefix "MANGLE OUT:"

  43. echo "bak and save ..."
  44. mv /etc/sysconfig/iptables ./iptables.bak
  45. iptables-save > /etc/sysconfig/iptables
复制代码

awkfile如下

  1. {
  2. if(NR % 3 ==1)
  3.         network=$0
  4. else if(NR %3 ==0)
  5.         {
  6.         netmask= $0
  7.         OFS="/"
  8.         print network,netmask
  9.         }
  10. }
复制代码

先用wget将那个免费列表的IP获取下来,然后用grep和gawk生成所要的格式.最后用iptables加入规则.

但是使用这个脚本之后,每天总还有十多K的收费流量(通过学校的帐号查出来).而且时间也很怪
15:00 15:10 15:20或是18:00之后,很整的时间,而且每天都不一样.

不知道问题出在什么地方了,一定思路也没有 哪位大哥能给我点tip呢?
发表于 2006-10-8 02:09:15 | 显示全部楼层
会不会是同步时间服务器(只有十几k)?猜的,呵呵
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-10-8 09:24:32 | 显示全部楼层
好像不是这个问题

一来那个时间同步服务ntp我在/etc/rc.d/init.d/中没有找到
二来,如果我的iptables能够将所有收费的ip过滤掉的话,就算有ntp服务,它也不会连接上收费的ip的呀

就是不知道这个iptable的规则问题出在什么地方
回复 支持 反对

使用道具 举报

发表于 2006-10-9 20:43:04 | 显示全部楼层
我用你的脚本试了

网页上的IP是451个,可是你的脚本获取的IP只有447个


我得出的IP与你的脚本获取的IP的差异:
6,8c6,7
< 58.60.8.0/255.255.248.0
< 58.61.32.0/255.255.255.128
< 58.61.32.128/255.255.255.255
---
> 58.60.8.0/58.61.32.0
> 255.255.255.128/255.255.255.255
19,28c18,25
< 59.61.128.0/255.255.224.0
< 59.64.0.0/255.240.0.0
< 59.151.0.0/255.255.128.0
< 60.0.0.0/255.224.0.0
< 60.63.0.0/255.255.0.0
< 60.190.28.0/255.255.255.240
< 60.190.28.96/255.255.255.224
< 60.190.28.128/255.255.255.240
< 60.190.28.144/255.255.255.252
< 60.191.2.0/255.255.255.0
---
> 59.61.128.0/59.64.0.0
> 0.15.255.255/59.151.0.0
> 0.0.127.255/60.0.0.0
> 0.31.255.255/60.63.0.0
> 0.0.255.255/60.190.28.0
> 255.255.255.240/255.255.255.224
> 60.190.28.128/60.190.28.144
> 255.255.255.252/255.255.255.0
30,34c27,30
< 61.28.0.0/255.255.240.0
< 61.48.0.0/255.248.0.0
< 61.128.0.0/255.192.0.0
< 61.200.81.134/255.255.255.254
< 61.200.81.136/255.255.255.254
---
> 61.28.0.0/61.48.0.0
> 0.7.255.255/61.128.0.0
> 0.63.255.255/61.200.81.134
> 255.255.255.254/255.255.255.254

可以看出,脚本运行后获取的IP有一些错误
回复 支持 反对

使用道具 举报

发表于 2006-10-9 21:36:34 | 显示全部楼层
fip=$(lynx -dump http://hitsun.hit.edu.cn/zxiplist.htm | grep "^[ ]\{0,\}[0-9]" freeip |awk '{ print $1"/"$3 }')

与如下代码等效但更正确
wget -O tmp.htm http://hitsun.hit.edu.cn/zxiplist.htm
cat tmp.htm |grep -o '[0-9]\{1,3\}[.][0-9]\{1,3\}[.][0-9]\{1,3\}[.][0-9]\{1,3\}' >ip.txt
fip=`awk -f awkfile ip.txt`
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表