Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

基于路由策略的 IP 地址控制

[复制链接]
platinum 发表于 2004-10-22 16:45:06 | 显示全部楼层 |阅读模式
作者:白金 网名:platinum(chinaunix) 超超白金(白金论坛)  
欢迎转载,转载请保留上述信息  
===========================================================================


最近做了一套路由策略,觉得LINUX真的太强大了!于是心潮澎湃,写了这个文档!!!

一、背景描述
如图,LINUX是一台网关服务器,内有3块网卡
eth1绑定172.17.0.0/16的IP,该网段IP可以通过172.17.1.1上网
eth0绑定192.168.10.0/24的IP,该网段IP可以通过192.168.10.1上网
eth2绑定192.168.1.1,是内网用户的网关

二、需求分析
内网用户应该走172.17.1.1这个路由上网
但由于工作需要,部分用户应该有访问图中“专用网络”的权限
也就是说,应该走192.168.10.1这个路由

另外一点,所有人应该可以访问FTP服务器,这个服务器的IP是192.168.10.96
也就是说,走172.17.1.1路由的人,也应该能访问192.168.10.96,且可以上网

三、解决方案
要解决这个问题,用到了一下几个命令,具体使用方法需要另查资料
ip route
ip rule
arp
注:关于ip命令的用法,请查阅ip中文手册,www.google.com上有

1、绑定IP
ifconfig eth1 172.17.3.x netmask 255.255.0.0
ifconfig eth0 192.168.10.2 netmask 255.255.255.0
ifconfig eth2 192.168.1.1 netmask 255.255.255.0
然后分别修改/etc/sysconfig/network-script/ifcfg-ethx文件,以使计算机启动自动设置IP地址

2、创建特殊路由表
vi /etc/iproute2/rt_table

  1. #
  2. # reserved values
  3. #
  4. 255     local
  5. 254     main
  6. 253     default
  7. 0       unspec

  8. 200     NET10
  9. #
  10. # local
  11. #
  12. #1      inr.ruhep
复制代码

上面那个200 NET10为新添加,自定义编号为200,名字为NET10

3、向NET10路由中添加它自己的默认路由

  1. ip route add default via 192.168.10.1 table NET10
复制代码

注意,这个table NET10一定不要忘了写,否则写到了主路由表中

4、创建特殊路由规则
用ip rule可以看到计算机当前的路由规则
0:      from all lookup local
32766:  from all lookup main
32767:  from all lookup default

可以看到,规则中走了3个路由表,local、main、default
我们平常用route看到的,实际是路由表main
这些规则是按序号大小顺序走的,一个不同,则走下一个,知道通路或走完为止

开始添加我们自己的路由NET10到路由表中

  1. ip rule add from 192.168.1.222 pref 10000 table NET10
复制代码

这个意思是说,如果来自IP地址为192.168.1.222的访问,则启用NET10的路由表中的路由规则
而NET10的路由规则是什么呢?上面已经设置了,走的是192.168.10.1的网段
接下来,使LINUX可以NAT(这里不再细说HOW TO了)

5、让所有人可以访问192.168.10.xx(这个IP不便说出来)
因为其余人都走了172.17.1.1这个路由,所以他们是无法访问192.168.10.xx的
怎么才能实现呢?再添加个策略就可以了!

  1. ip rule add to 192.168.10.xx pref 10001 table NET10
复制代码

这句话的意思是说,所有人,如果目的IP是192.168.10.xx,则临时使用NET10的路由表
这样做,安全会不会有安全问题呢?路由变了,他们会不会访问到专用网络呢?
不会的,因为路由规则是to 192.168.10.xx,也就是目标是96时,才该路由的,访问别的网站还是走原来的路由。
如果说访问到专用网络的机器,也就只有10.xx这一台而已。
这里,我们还可以做一个小技巧,不告诉别人192.168.10.xx的地址,只告诉他们网关192.168.1.1上有这个服务
iptables -t nat -A PREROUTING -d 192.168.1.1/32 --dport 21 -j DNAT --to 192.168.10.xx:21

6、防止其他人篡改IP地址而获得特殊权限
arp有个静态功能CM,不是C,大家可能知道
如果给一个IP地址强行绑定一个非他自己的MAC,会怎么样呢?双方会话将会失败!
好,我们来利用这一点!

首先,我写了一个文件iproute.c

  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. main ()
  4. {
  5.         int i;
  6.         for(i=2;i<255;i++)
  7.                 printf("192.168.1.%d\t\t00:00:00:00:00:00\n",i);
  8. }
复制代码

gcc iproute.c -o iproute
将编译出一个可执行文件
注:不应该包括主机IP地址本身,所以从2循环到254(255是广播)

其次,生成一个C的IP地址和全为00的MAC地址

  1. ./iproute > /etc/ethers
复制代码


再次,修改IP-MAC匹配列表
vi /etc/ethers
具体怎么该我就不用细说了,相信大家都会

最后,做静态IP-MAC绑定
arp -f

7、为了安全,建立防火墙,修改main路由表
默认的路由表应该有192.168.10.0/24和172.17.0.0/16网段的内容,为了安全,可以去掉
另外,如果是AS3的话,还会有169.254.0.0/16的路由,具体为什么我不知道,去掉
然后写一个防火墙教本,利用iptables,把你的机器变得更加坚固!




好了,终于写完了!
昨天和好好先生聊天,他说了一句话让我深有感触!
“任何东西只要你能活学活用,它的功能都会很强大!”
同志们,努力吧!
Crossday 发表于 2004-10-23 22:17:25 | 显示全部楼层
可不可以这样用

两个网线 双网卡 双IP 每根被限速 两根同时接到机器上 实现动态路由 充分利用每个线路的带宽?
回复

使用道具 举报

 楼主| platinum 发表于 2004-10-23 22:58:11 | 显示全部楼层
大C,你的意思是……
我没懂

你是说机器双哇网卡,每个网卡一个IP,但是我没明白的是,两个IP连接两个ISP吗?
你的意思是不是说,一台机器做服务器,两个公网IP,两条带宽,可不可以做负载均衡?
回复

使用道具 举报

baalchina 发表于 2004-10-24 12:30:54 | 显示全部楼层
我倒有个问题想请教一下,如何在linux里面设置拒绝某一段ip访问我的主机?
我知道是在hosts.allow和hosts.deny里面设置。可是该怎么写呢?
回复

使用道具 举报

 楼主| platinum 发表于 2004-10-24 12:34:15 | 显示全部楼层
用iptables来控制
比如你要阻止61.149.165.0/24这个C的地址
iptables -I INPUT -s 61.149.165.0/24 -j DROP
回复

使用道具 举报

baalchina 发表于 2004-10-24 13:43:57 | 显示全部楼层
搞定了~多谢!

不过怎么取消封锁阿.....
回复

使用道具 举报

baalchina 发表于 2004-10-24 13:47:47 | 显示全部楼层
现在是用-F去掉了所有的限制,不过去掉单条怎么做啊...
回复

使用道具 举报

 楼主| platinum 发表于 2004-10-24 14:30:58 | 显示全部楼层
两种方法
1、iptables -vL,然后iptables -D INPUT #n(#n是你看到的顺序号)
2、和添加一样,只不过把-I换成-D,例如

  1. 插入一条:
  2. iptables -I INPUT -s 61.149.165.0/24 -j DROP

  3. 删除一条:
  4. iptables -D INPUT -s 61.149.165.0/24 -j DROP
复制代码
回复

使用道具 举报

baalchina 发表于 2004-10-24 15:17:30 | 显示全部楼层
好的明白了~多谢~~

呵呵,这个命令我看得好几本书里面都没有~~~
回复

使用道具 举报

 楼主| platinum 发表于 2004-10-24 15:26:43 | 显示全部楼层
把iptables讲清楚,能写厚厚的一大本书!
建议你去看一下iptables filter HOWTO和iptables nat HOWTO
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-12-27 18:54 , Processed in 0.030413 second(s), 4 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

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