一、背景描述

如图,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

注:关于ip命令的用法,请查阅ip中文手册,[url]www.google.com[/url]上有。

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

代码:

#

# reserved values

#

255   local

254   main

253   default

0     unspec

200   NET10

#

# local

#

#1     inr.ruhep

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

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

代码:

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到路由表中。

代码:

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的。

怎么才能实现呢?再添加个策略就可以了!

代码:

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

代码:

#include

#include

main ()

{

int i;

for(i=2;i<255;i++)

printf("192.168.1.%d\t\t00:00:00:00:00:00\n",i);

}

gcc iproute.c -o iproute

将编译出一个可执行文件

注:不应该包括主机IP地址本身,所以从2循环到254(255是广播)

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

代码:

./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,把你的机器变得更加坚固!

linux系统ip策略筛选器,在Linux下基于路由策略的IP地址控制相关推荐

  1. alin的学习之路(Linux系统编程:一)(Linux基础命令)

    alin的学习之路(Linux系统编程:一)(Linux基础命令) 1.Linux学习准备 操作系统的作用 向上给用户提供简单的操作计算机硬件的方式 对下管理硬件 承上启下 程序运行在操作系统上,程序 ...

  2. linux系统6.5详解,linux6.5下 简单配置 MINI 系统实现详解(1)

    一.linux系统启动流程介绍 我们来了解下linux系统的启动流程: 首先linux要通过POST自检过程(BIOS)-->如果想要做多块启动盘的话,还需要在bios中选择启动磁盘--> ...

  3. linux 系统业务迁移,记录一次linux系统迁移过程

    就在最近,终于为自己的电脑加装了固态.在装完固态之后,首先面临的问题就是如何将原先安装在机械硬盘上的linux系统迁移到固态上.还要考虑后续配置的问题. 本文主要讲述在迁移Linux系统到新的固态硬盘 ...

  4. 路由器 刷 linux系统版本,一个小型的无线路由器 Linux 系统OpenWRT[转]

    一个小型的无线路由器 Linux 系统OpenWRT分类:电脑技术 » linux应用    出处:网络   OpenWRT - (http://www.openwrt.org) 开发板: 十几种市面 ...

  5. linux系统发送信号的系统调用是,linux系统编程之信号:信号发送函数sigqueue和信号安装函数sigaction...

    信号发送函数sigqueue和信号安装函数sigaction sigaction函数用于改变进程接收到特定信号后的行为. sigqueue()是比较新的发送信号系统调用,主要是针对实时信号提出的(当然 ...

  6. 查看Linux系统架构的命令,查看linux系统是哪种架构:AMD、ARM、x86、x86_64、pcc 或 查看Ubuntu的版本号

    欢迎大家关注笔者,你的关注是我持续更博的最大动力 原创文章,转载告知,盗版必究 查看Linux系统架构的命令,查看linux系统是哪种架构:AMD.ARM.x86.x86_64.pcc 文章目录: 1 ...

  7. linux系统组成之小型RedHat little linux制作二

    本篇是在上篇"linux系统组成之小型RedHat little linux制作一"的基础上对微型小系统进一步完善,使其实现关机.重启等功能 ⑴.通过脚本使其微型系统实现关机.重启 ...

  8. linux系统 ghost吗,GHOST能于LINUX系统备份吗?

    使用Ghost软件来实现备份和恢复Linux系统: 1.首先用 "雨林木风 Ghost XP SP3 纯净版 Y6.0" 光盘进行引导,并使用其中的PQ软件对硬盘进行分区,划分出一 ...

  9. linux系统中list命令的含义,linux tasklist命令详解

    "Tasklist"命令是一个用来显示运行在本地或远程计算机上的所有进程的命令行工具,带有多个执行参数.那么它具体用法是怎样的呢?下面由学习啦小编为大家整理了linux taskl ...

最新文章

  1. dev c++ 调试时候发生软件崩溃解决办法
  2. python空格_python 空格
  3. C++虚继承(八) --- 虚继承与继承的差异
  4. mysql 数据迁移_MySQL海量数据迁移
  5. 解决 invalid input detected at ‘^’ marker的问题
  6. MyBatis Generator配置文件翻译
  7. 小学奥数 7651 自来水供给 python
  8. Youki的装机日记~
  9. NodeJS + Lighthouse + Gulp 搭建自动化网站性能测试工具
  10. L1-026. I Love GPLT-PAT团体程序设计天梯赛GPLT
  11. 学习如何搭建SpringBoot框架
  12. 高德api地图的调用
  13. 下拉刷新?我看好MaterialRefreshLayout!
  14. MFC中通过SendMessage修改Edit控件的文本
  15. SoftwareSerial库的使用——Arduino软件模拟串口通信
  16. Access根据出生日期计算年龄_小技巧 | 在SPSS中根据出生日期计算年龄
  17. 2020FME博客大赛——基于FME的天地图·浙江融合数据质检程序的设计与应用
  18. 计算机网络-数据链路层(超级无敌详细)
  19. 翻纸牌游戏 【HDU - 2209】【规律】
  20. Python制作的赛车小游戏源代码,逆行飙车

热门文章

  1. Delegate,Action,Func,匿名方法,匿名委托,事件
  2. RHEL和Centos系统的区别?
  3. 灵玖Nlpir Parser语义智能系统精准汉语分词
  4. mongodb内存限制初探
  5. Linux 文件系统权限(一)
  6. 决策树算法实现(train+test,matlab) 转
  7. SQL应用中级指南 Part4:(数据字典)
  8. 使用route-map 配置BGP本地优先级
  9. redis常用优化及持久化到硬盘
  10. SegmentFault 助力 Uber Hackathon