- 第十章 路由器
一.路由基础
1.路由器:用于实现数据传输时路径选择的一种设备
2.路由器的功能
协议转换:能对网络层及其以下各层的协议进行转换
路由选择:选择最佳路由
能支持多种协议的路由选择:TCP/IP或SPX/IPX协议
流量控制:路由器具有缓冲区,且还能控制收发双方数据流量
分段和组装功能:路由器能将接上的大分组分段并封装成小分组后转发,或将接由的小分组组装成大分组后转发
网络管理功能:高档路由器都配置了网络管理功能,以便提高网络的运行效率、可靠性和可维护性
3.路由表:
目的IP地址 下一个路由器的IP地址 标志信息 指定的数据传输接口
路由表的类型:
静态路由表:由系统管理员根据网络的配置情况预先设定
动态路由表:路由器根据路由选择协议提供的功能,自动学习和记忆网络系统的运行情况而自动调整的路由表
4.路由选择:
5.路由算法:
二.路由选择协议
1.路由选择协议的分类:Autonomous System,是指使用同一公共路由选择策略和在同一公共管理下的网络的集合 Interrior Gateway Protocols,内部网关路由协议 Exterior Gateway Protocols,外部网关路由协议
距离失量路由协议(它确定到网络中任一链路的方向)和链路状态路由协议(创建整个网络的准确拓朴)
2.RIP,OSPF,BGP
三.linux主机路由
1.硬件路由器和软件路由器
硬件路由器:是一台运行着专用操作系统的计算机;软件路由器:可以看作安装多个网络接口的服务器
2.Linux主机路由器的实现
Linux静态路由是在系统内核里实现的功能,并可使用route命令进行配置
3.Linux下的路由选择守护进程
Linux系统中的路由选择守护进程负责与其他系统中的路由选择守护进程能信,实时更新系统中的路由选择信息,Linux支持的路由选择守护进程:routed,gated,zebra
四.配置Linux内核路由表
1.#route
Destination(目标网段或者主机) Gateway(网关地址) Genmask(网络掩码) Flags(U,路由是活动的 H,目标是一个主机 G,使用网关 R,恢复动态路由产生的表项 D,由路由的后台程序动态地安装 M,由路由的后台程序动态地安装 !拒绝路由) Metric路由距离 Ref路由项引用次数(linux内核中没有使用) Use查找路由项的次数 Iface该路由项对应的输出接口
2.3种路由类型
主机路由:指向单个IP地址或主机名的路由记录
网络路由:代表可以到达的网络
默认路由
#route add -net 192.168.1.0/24 eth0
五.使用Zebra配置动态路由
1.什么是Zebra:是由一个日籍开发团队编写的一个以GNU版权方式发布的软件,使于1996年,当前版本是0.83b版
2.Zebra支持的路由选择协议
能够同时支持RIPv1、RIPv2、OSPFv2、BGP-4
3.Zebra的特性:模块化设计,基于模块化方案设计,对每种路由选择协议使用单独的守护进程提供服务;运行速度快;具有高可靠性;支持IPv6
4.Zebra的运行机制:
5.为什么要使用Zebra:费用较低,软件配置的很多方面跟Cisco的IOS配置几乎完全相同
六.Zebra使用基础
1.Zebra的安装和启动
#rpm -qa|grep Zebra
插入第3张光盘(可以到http://www.zebra.org)中下载最新的版本
#cd /mnt/cdrom/RedHat/RPMS
#rpm -ivh Zebra*
#cd;eject
#service zebra restart
#chkconfig -add zebra
#chkconfig zebra on
2.Zebra的配置文件
#ll /etc/zebra
vtysh.conf是配置zebra所使用的shell的配置文件;zebra.conf是zebra的主配置文件;每种路由协议有单独的路由协议
3.zebra的配置模式
Zebra(config-if)#端口配置 Zebra(config-subif)子端口配置 Zebra(config-controller)#控制器配置 Zebra(config-map-class)影像表配置 Zebra(config-line)#线路配置 Zebra(config-router)#路由配置 Zebra(config-ipx-router)#Ipx路由配置 Zebra(config-router-map)#路由影像配置
七.使用Zebra配置支持RIP路由协议的路由器
1.启动路由选择护进程
#touch /etc/zebra/ripd.conf
#service ripd start
#vtysh
>enable
#configure terminal
(config)#interface eth0
(config-if)#ip add 192.168.1.1./24
(config)#router rip
(config-router)#network 192.168.1.0/24
(config-router)#network 192.168.1.0/24
(config-router)#end
#show interface
#quit
#route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.10.1
要增加系统的IP转发功能。这个功能由/proc/sys/net/ipv4目录下的ip_forward文件控制,执行如下命令打开ip转发功能:
echo 1 > /proc/sys/net/ipv4/ip_forward
添加永久静态路由的方法
/etc/sysconfig/static-router :
any net x.x.x.x/24 gw y.y.y.y
第十一章.包过滤防火墙
一.包过滤防火墙的一般概念
1.概念:是用一个软件查看所流经的数据包的包头(header),以决定丢弃还是接受这个包
2.工作层次:工作在网络层
3.包过滤防火墙的工作原理
使用过滤器:过滤系统根据过滤规则原则决定是否让数据包通过,检查的IP头和TCP或UDP头包括:IP源地址,IP目标地址,协议,TCP或UDP包的源端口,TCP或UDP包的目标端口,ICMP消息类型,TCP包中的ACK位,数据包到达的端口,数据包出去的端口
通过屏蔽特定的端口可以禁止特定的服务
过滤器的实现:过滤路由器检查数据包的特定信息
4.包过滤操作的基本过程:
5.包过滤的优缺点
优点:小型网络包过滤较容易实现,处理包的速度快,提供透明服务
缺点:
一些包过滤网关不支持有效的用户认证
规则表很快,会变得很大而且复杂
包过滤防火墙只能阻止外部主机伪装内部主机的IP,对于外部主机伪装外部主机的IP欺骗却不能阻止
二.Netfilter/iptables
1.Netfilter/iptables是与最新的2.4.x版Linux内核集成的IP信息包过滤系统
2.Netfilter网络底层架构
(1).Netfilter是新的用来实现防火墙的过滤器.而iptables是用来指定Netfilter规则的用户工具,它为用户配置防火墙规则提供了方便.iptables可以加入、插入或删除核心包过滤表格链中的规则。实际执行者是netfilter及其相关模块
(2).Netfilter/IPtables系统的主要功能:
状态包过滤(连接跟踪)
各种网络地址翻译
灵活、易扩展的急智机制
大量的增强型补丁包
(3).Netfilter/iptables的用途:
建立Internet防火墙和基于状态的包过滤
用NAT和伪装(masquerading)共享上网
用NAT实现透明代理
用修改IP包头的ToS字段实现更复杂的功能
和tc_iproute2配合使用可以实现QoS路由
(4).Netfilter/iptables系统的优点:它可以配置有状态的防火墙,能够指定并记住为发送或接收信息包所建立的连接的状态,有4种有效状态,分别为ESTABLISHED、INVALID、NEW和RELATED
3.Netfilter/iptables的内核空间和用户空间
netfilter是内核空间(KernelSpace),是内核的一部分,由一些表组成,每个表由若干链(chains)组成,而每条链中有一条或数条规则(rule)
4.Netfilter/iptables的工作过程
netfilter/iptables IP 信息包过滤系统是一种功能强大的工具,可用于添加、编辑和除去规则,这些规则是在做信息包过滤决定时,防火墙所遵循和组成的规则。这些规则存储在专用的信息包过滤表中,而这些表集成在 Linux 内核中。在信息包过滤表中,规则被分组放在我们所谓的链(chain)中。如果某个信息包与规则匹配,那么使目标 ACCEPT 允许该信息包通过。还可以使用目标 DROP 或 REJECT 来阻塞并杀死信息包。根据规则所处理的信息包的类型,可以将规则分组在链中。处理入站信息包的规则被添加到 INPUT 链中。处理出站信息包的规则被添加到 OUTPUT 链中。处理正在转发的信息包的规则被添加到 FORWARD 链中。建立规则并将链放在适当的位置之后,就可以开始进行真正的信息包过滤工作了。这时内核空间从用户空间接管工作。当信息包到达防火墙时,内核先检查信息包的头信息,尤其是信息包的目的地。我们将这个过程称为路由。
安装 netfilter/iptables 系统
因为 netfilter/iptables 的 netfilter 组件是与内核 2.4.x 集成在一起的,所以只需要下载并安装 iptables 用户空间工具。
三.安装和配置netfilter/iptables系统:
1.安装netfilter/iptables
硬件:要使用 netfilter/iptables,需要有一个运行Linux OS 并连接到因特网、LAN 或 WAN 的系统。
软件:带有内核 2.4 或更高版本的任何版本的 Linux OS。可以从 http://www.kernel.org 下载最新版本的内核。
安装前的准备
在开始安装 iptables 用户空间工具之前,需要对系统做某些修改。首先,需要使用 make config 命令来配置内核的选项。在配置期间,必须通过将 CONFIG_NETFILTER 和 CONFIG_IP_NF_IPTABLES 选项设置为 Y 来打开它们,因为这是使 netfilter/iptables 工作所必需的。
2.建立规则和链
通过向防火墙提供有关对来自某个源、到某个目的地或具有特定协议类型的信息包要做些什么的指令,规则控制信息包的过滤。通过使用 netfilter/iptables 系统提供的特殊命令 iptables,建立这些规则,并将其添加到内核空间的特定信息包过滤表内的链中。关于添加/除去/编辑规则的命令的一般语法如下:
$ iptables [-t table] command [match] [target]
表(table)
[-t table] 选项允许使用标准表之外的任何表。表是包含仅处理特定类型信息包的规则和链的信息包过滤表。有三种可用的表选项:filter、nat 和 mangle。该选项不是必需的,如果未指定,则 filter 用作缺省表。
filter 表用于一般的信息包过滤,它包含 INPUT、OUTPUT 和 FORWARD 链。nat 表用于要转发的信息包,它包含 PREROUTING、OUTPUT 和 POSTROUTING 链。如果信息包及其头内进行了任何更改,则使用 mangle 表。该表包含一些规则来标记用于高级路由的信息包,该表包含 PREROUTING 和 OUTPUT 链。
注:PREROUTING 链由指定信息包到达防火墙就改变它们的规则所组成,而 POSTROUTING 链由指定正当信息包打算离开防火墙时改变它们的规则所组成。
命令(command)
上面这条命令中具有强制性的 command 部分是 iptables 命令的最重要部分。它告诉 iptables 命令要做什么,例如,插入规则、将规则添加到链的末尾或删除规则。以下是最常用的一些命令:
-A 或 --append:该命令将一条规则附加到链的末尾。
示例:
$ iptables -A INPUT -s 205.168.0.1 -j ACCEPT
该示例命令将一条规则附加到 INPUT 链的末尾,确定来自源地址 205.168.0.1 的信息包可以 ACCEPT。
-D 或 --delete:通过用 -D 指定要匹配的规则或者指定规则在链中的位置编号,该命令从链中删除该规则。下面的示例显示了这两种方法。
示例:
$ iptables -D INPUT --dport 80 -j DROP
$ iptables -D OUTPUT 3
第一条命令从 INPUT 链删除规则,它指定 DROP 前往端口 80 的信息包。第二条命令只是从 OUTPUT 链删除编号为 3 的规则。
-P 或 --policy:该命令设置链的缺省目标,即策略。所有与链中任何规则都不匹配的信息包都将被强制使用此链的策略。
示例:
$ iptables -P INPUT DROP
该命令将 INPUT 链的缺省目标指定为 DROP。这意味着,将丢弃所有与 INPUT 链中任何规则都不匹配的信息包。
-N 或 --new-chain:用命令中所指定的名称创建一个新链。
示例:
$ iptables -N allowed-chain
-F 或 --flush:如果指定链名,该命令删除链中的所有规则,如果未指定链名,该命令删除所有链中的所有规则。此参数用于快速清除。
示例:
$ iptables -F FORWARD
$ iptables -F
-L 或 --list:列出指定链中的所有规则。
示例:
$ iptables -L allowed-chain
匹配(match)
iptables 命令的可选 match 部分指定信息包与规则匹配所应具有的特征(如源和目的地地址、协议等)。匹配分为两大类:通用匹配和特定于协议的匹配。这里,我将研究可用于采用任何协议的信息包的通用匹配。下面是一些重要的且常用的通用匹配及其示例和说明:
-p 或 --protocol:该通用协议匹配用于检查某些特定协议。协议示例有 TCP、UDP、ICMP、用逗号分隔的任何这三种协议的组合列表以及 ALL(用于所有协议)。ALL 是缺省匹配。可以使用 ! 符号,它表示不与该项匹配。
示例:
$ iptables -A INPUT -p TCP, UDP
$ iptables -A INPUT -p ! ICMP
在上述示例中,这两条命令都执行同一任务 — 它们指定所有 TCP 和 UDP 信息包都将与该规则匹配。通过指定 ! ICMP,我们打算允许所有其它协议(在这种情况下是 TCP 和 UDP),而将 ICMP 排除在外。
-s 或 --source:该源匹配用于根据信息包的源 IP 地址来与它们匹配。该匹配还允许对某一范围内的 IP 地址进行匹配,可以使用 ! 符号,表示不与该项匹配。缺省源匹配与所有 IP 地址匹配。
示例:
$ iptables -A OUTPUT -s 192.168.1.1
$ iptables -A OUTPUT -s 192.168.0.0/24
$ iptables -A OUTPUT -s ! 203.16.1.89
第二条命令指定该规则与所有来自 192.168.0.0 到 192.168.0.24 的 IP 地址范围的信息包匹配。第三条命令指定该规则将与除来自源地址 203.16.1.89 外的任何信息包匹配。
-d 或 --destination:该目的地匹配用于根据信息包的目的地 IP 地址来与它们匹配。该匹配还允许对某一范围内 IP 地址进行匹配,可以使用 ! 符号,表示不与该项匹配。
示例:
$ iptables -A INPUT -d 192.168.1.1
$ iptables -A INPUT -d 192.168.0.0/24
$ iptables -A OUTPUT -d ! 203.16.1.89
目标(target)
我们已经知道,目标是由规则指定的操作,对与那些规则匹配的信息包执行这些操作。除了允许用户定义的目标之外,还有许多可用的目标选项。下面是常用的一些目标及其示例和说明:
ACCEPT:当信息包与具有 ACCEPT 目标的规则完全匹配时,会被接受(允许它前往目的地),并且它将停止遍历链(虽然该信息包可能遍历另一个表中的其它链,并且有可能在那里被丢弃)。该目标被指定为 -j ACCEPT。
DROP:当信息包与具有 DROP 目标的规则完全匹配时,会阻塞该信息包,并且不对它做进一步处理。该目标被指定为 -j DROP。
REJECT:该目标的工作方式与 DROP 目标相同,但它比 DROP 好。和 DROP 不同,REJECT 不会在服务器和客户机上留下死套接字。另外,REJECT 将错误消息发回给信息包的发送方。该目标被指定为 -j REJECT。
示例:
$ iptables -A FORWARD -p TCP --dport 22 -j REJECT
RETURN:在规则中设置的 RETURN 目标让与该规则匹配的信息包停止遍历包含该规则的链。如果链是如 INPUT 之类的主链,则使用该链的缺省策略处理信息包。它被指定为 -jump RETURN。示例:
$ iptables -A FORWARD -d 203.16.1.89 -jump RETURN
还有许多用于建立高级规则的其它目标,如 LOG、REDIRECT、MARK、MIRROR 和 MASQUERADE 等。
保存规则
现在,您已经学习了如何建立基本的规则和链以及如何从信息包过滤表中添加或删除它们。但是,您应该记住:用上述方法所建立的规则会被保存到内核中,当重新引导系统时,会丢失这些规则。所以,如果您将没有错误的且有效的规则集添加到信息包过滤表,同时希望在重新引导之后再次使用这些规则,那么必须将该规则集保存在文件中。可以使用 iptables-save 命令来做到这一点:
$ iptables-save > iptables-script
现在,信息包过滤表中的所有规则都被保存在文件 iptables-script 中。无论何时再次引导系统,都可以使用 iptables-restore 命令将规则集从该脚本文件恢复到信息包过滤表,如下所示:
$ iptables-restore iptables-script
如果您愿意在每次引导系统时自动恢复该规则集,则可以将上面指定的这条命令放到任何一个初始化 shell 脚本中。
netfilter/iptables 系统的优点
netfilter/iptables 的最大优点是它可以配置有状态的防火墙,这是 ipfwadm 和 ipchains 等以前的工具都无法提供的一种重要功能。有状态的防火墙能够指定并记住为发送或接收信息包所建立的连接的状态。防火墙可以从信息包的连接跟踪状态获得该信息。在决定新的信息包过滤时,防火墙所使用的这些状态信息可以增加其效率和速度。这里有四种有效状态,名称分别为 ESTABLISHED、INVALID、NEW 和 RELATED。
状态 ESTABLISHED 指出该信息包属于已建立的连接,该连接一直用于发送和接收信息包并且完全有效。INVALID 状态指出该信息包与任何已知的流或连接都不相关联,它可能包含错误的数据或头。状态 NEW 意味着该信息包已经或将启动新的连接,或者它与尚未用于发送和接收信息包的连接相关联。最后,RELATED 表示该信息包正在启动新连接,以及它与已建立的连接相关联。
netfilter/iptables 的另一个重要优点是,它使用户可以完全控制防火墙配置和信息包过滤。您可以定制自己的规则来满足您的特定需求,从而只允许您想要的网络流量进入系统。
另外,netfilter/iptables 是免费的,这对于那些想要节省费用的人来说十分理想,它可以代替昂贵的防火墙解决方案。
最新的 Linux 内核 2.4.x 具有 netfilter/iptables 系统这种内置的 IP 信息包过滤工具,它使配置防火墙和信息包过滤变得便宜且方便。netfilter/iptables 系统使其用户可以完全控制防火墙配置和信息包过滤。它允许为防火墙建立可定制化的规则来控制信息包过滤。它还允许配置有状态的防火墙。
例:WWW服务器198.168.80.251,FTP服务器198.168.80.252,E-mail服务器198.168.80.253,包过滤防火墙的eth0与Internet相连
#touch /etc/rc.d/rilter-firewall生成空的脚本,并添加可执行权限
#chmod u+x /etc/rc.d/filter-firewall
#echo "/etc/rc.d/filter-firewal">>/etc/rc.d/rc.local使脚本能在系统启动时自动执行
#vi /etc/rc.d/filter-firewall
#!/bin/bash
echo "Starting iptables rules"在屏幕上显示信息
echo "1">/proc/sys/net/ipv4/ip_forward增加系统的IP转发功能
IPT=/sbin/iptables定义变量
WWW-SERVER=192.168.80.251
FTP-SERVER=192.168.80.252
EMAIL-SERVER=192.168.80.253
IP_RANGE="192.168.80.0/24"
$IPT -F刷新所有的链的规则
$IPT -P FORWARD DROP
第十二章.NAT与代理服务器
本章主要介绍如何使用iptbales实现linux2.4下的强大的NAT功能。
一、概述
1. 什么是NAT
在传统的标准的TCP/IP通信过程中,所有的路由器仅仅是充当一个中间人的角色,也就是通常所说的存储转发,路由器并不会对转发的数据包进行修改,更为确切的说,除了将源MAC地址换成自己的MAC地址以外,路由器不会对转发的数据包做任何修改。NAT(Network Address Translation网络地址翻译)恰恰是出于某种特殊需要而对数据包的源ip地址、目的ip地址、源端口、目的端口进行改写的操作。
2. 为什么要进行NAT
假设有一家ISP提供园区Internet接入服务,为了方便管理,该ISP分配给园区用户的IP地址都是伪IP,但是部分用户要求建立自己的WWW服务器对外发布信息,这时候我们就可以通过NAT来提供这种服务了。我们可以在防火墙的外部网卡上绑定多个合法IP地址,然后通过NAT技术使发给其中某一个IP地址的包转发至内部某一用户的WWW服务器上,然后再将该内部WWW服务器响应包伪装成该合法IP发出的包。
再比如使用拨号上网的网,因为只有一个合法的IP地址,必须采用某种手段让其他机器也可以上网,通常是采用代理服务器的方式,但是代理服务器,尤其是应用层代理服务器,只能支持有限的协议,如果过了一段时间后又有新的服务出来,则只能等待代理服务器支持该新应用的升级版本。如果采用NAT来解决这个问题,因为只在应用层以下进行处理,不但可以获得很高的访问速度,而且可以无缝的支持任何新的服务或应用。
3. NAT的类型
在linux2.4的NAT-HOWTO中,从原理的角度将NAT分成了两种类型,即源NAT(SNAT)和目的NAT(DNAT),顾名思义,所谓SNAT就是改变转发数据包的源地址,所谓DNAT就是改变转发数据包的目的地址。
二、原理
netfilter是Linux 核心中一个通用架构,它提供了一系列的"表"(tables),每个表由若干"链"(chains)组成,而每条链中可以有一条或数条规则(rule)组成。并且系统缺省的表是"filter"。但是在使用NAT的时候,我们所使用的表是"nat"表,所以我们必须使用"-t nat"选项来显式地指明这一点。
同filter表一样,nat表也有三条缺省的"链"(chains),这三条链也是规则的容器,它们分别是:
PREROUTING:可以在这里定义进行目的NAT的规则,因为路由器进行路由时只检查数据包的目的ip地址,所以为了使数据包得以正确路由,我们必须在路由之前就进行目的NAT;
POSTROUTING:可以在这里定义进行源NAT的规则,系统在决定了数据包的路由以后在执行该链中的规则。
OUTPUT:定义对本地产生的数据包的目的NAT规则。
三、操作语法
使用iptables的NAT功能时,我们必须在每一条规则中使用"-t nat"显示的指明使用nat表。然后使用以下的选项:
1. 对规则的操作
加入(append) 一个新规则到一个链 (-A)的最后。
在链内某个位置插入(insert) 一个新规则(-I),通常是插在最前面。
在链内某个位置替换(replace) 一条规则 (-R)。
在链内某个位置删除(delete) 一条规则 (-D)。
删除(delete) 链内第一条规则 (-D)。
2. 指定源地址和目的地址
通过--source/--src/-s来指定源地址,通过--destination/--dst/-s来指定目的地址。可以使用以下四中方法来指定ip地址:
a. 使用完整的域名,如“www.linuxaid.com.cn”;
b. 使用ip地址,如“192.168.1.1”;
c. 用x.x.x.x/x.x.x.x指定一个网络地址,如“192.168.1.0/255.255.255.0”;
d. 用x.x.x.x/x指定一个网络地址,如“192.168.1.0/24”这里的24表明了子网掩码的有效位数,这是 UNIX环境中通常使用的表示方法。
缺省的子网掩码数是32,也就是说指定192.168.1.1等效于192.168.1.1/32。
3. 指定网络接口
可以使用--in-interface/-i或--out-interface/-o来指定网络接口。从NAT的原理可以看出,对于PREROUTING链,我们只能用-i指定进来的网络接口;而对于POSTROUTING和OUTPUT我们只能用-o指定出去的网络接口。
4. 指定协议及端口
可以通过--protocol/-p选项来指定协议,如果是udp和tcp协议,还可--source-port/--sport和 --destination-port/--dport来指明端口四、准备工作
1. 编译内核,编译时选中以下选项,具体可参看“用iptales实现包过虑型防火墙”一文:
Full NAT
MASQUERADE target support
REDIRECT target support
2. 要使用NAT表时,必须首先载入相关模块:
modprobe ip_tables
modprobe ip_nat_ftp
iptable_nat 模块会在运行时自动载入。
五、案例
1. 源NAT(SNAT)
比如,更改所有来自192.168.1.0/24的数据包的源ip地址为1.2.3.4:
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to 1.2.3.4
系统在路由及过虑等处理直到数据包要被送出时才进行SNAT。
有一种SNAT的特殊情况是ip欺骗,也就是所谓的Masquerading,通常建议在使用拨号上网的时候使用,或者说在合法ip地址不固定的情况下使用。比如# iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
2. 目的NAT(DNAT)
比如,更改所有来自192.168.1.0/24的数据包的目的ip地址为1.2.3.4:
iptables -t nat -A PREROUTING -s 192.168.1.0/24 -i eth1 -j DNAT --to 1.2.3.4
系统是先进行DNAT,然后才进行路由及过虑等操作。
有一种DNAT的特殊情况是重定向,也就是所谓的Redirection,这时候就相当于将符合条件的数据包的目的ip地址改为数据包进入系统时的网络接口的ip地址。通常是在与squid配置形成透明代理时使用,假设squid的监听端口是3128,我们可以通过以下语句来将来自192.168.1.0/24,目的端口为80的数据包重定向到squid监听
端口:
iptables -t nat -A PREROUTING -i eth1 -p tcp -s 192.168.1.0/24 --dport 80
-j REDIRECT --to-port 3128
六、综合例子
1. 使用拨号带动局域网上网
小型企业、网吧等多使用拨号网络上网,通常可能使用代理,但是考虑到成本、对协议的支持等因素,建议使用ip欺骗方式带动区域网上网。
成功升级内核后安装iptables,然后执行以下脚本:
#载入相关模块
modprobe ip_tables
modprobe ip_nat_ftp
#进行ip伪装
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
2. ip映射
假设有一家ISP提供园区Internet接入服务,为了方便管理,该ISP分配给园区用户的IP地址都是伪IP,但是部分用户要求建立自己的WWW服务器对外发布信息。我们可以在防火墙的外部网卡上绑定多个合法IP地址,然后通过ip映射使发给其中某一个IP地址的包转发至内部某一用户的WWW服务器上,然后再将该内部WWW服务器响应包伪装成该合法IP发出的包。
我们假设以下情景:
该ISP分配给A单位www服务器的ip为:
伪ip:192.168.1.100 真实ip:202.110.123.100
该ISP分配给B单位www服务器的ip为:
伪ip:192.168.1.200 真实ip:202.110.123.200
linux防火墙的ip地址分别为:
内网接口eth1:192.168.1.1
外网接口eth0:202.110.123.1
然后我们将分配给A、B单位的真实ip绑定到防火墙的外网接口,以root权限执行以下命令:
ifconfig eth0 add 202.110.123.100 netmask 255.255.255.0
ifconfig eth0 add 202.110.123.200 netmask 255.255.255.0
成功升级内核后安装iptables,然后执行以下脚本:
#载入相关模块
modprobe ip_tables
modprobe ip_nat_ftp
首先,对防火墙接收到的目的ip为202.110.123.100和202.110.123.200的所有数据包进行目的NAT(DNAT):
iptables -A PREROUTING -i eth0 -d 202.110.123.100 -j DNAT --to 192.168.1.100
iptables -A PREROUTING -i eth0 -d 202.110.123.200 -j DNAT --to 192.168.1.200
其次,对防火墙接收到的源ip地址为192.168.1.100和192.168.1.200的数据包进行源NAT(SNAT):
iptables -A POSTROUTING -o eth0 -s 192.168.1.100 -j SNAT --to 202.110.123.100
iptables -A POSTROUTING -o eth0 -s 192.168.1.200 -j SNAT --to 202.110.123.200
这样,所有目的ip为202.110.123.100和202.110.123.200的数据包都将分别被转发给192.168.1.100和192.168.1.200;而所有来自192.168.1.100和192.168.1.200的数据包都将分别被伪装成由202.110.123.100和202.110.123.200,从而也就实现了ip映射。
例建立包过滤防火墙
#touch /etc/rc.d/filter-firewall
#chmod u+x /etc/rc.d/filter-firewall
#echo "/etc/rc.d/filter-firewall">>/etc/rc.d/rc.local使脚本能在系统启动时自动执行
#vi /etc/rc.d/filter-firewall
#!/bin/bash
echo "starting iptables rules..."
echo "1">/proc/sys/net/ipv4/ip_forward开启内核转发功能
IPT=/sbin/iptables定义变量
$IPT -F刷新所有链的规则
$IPT -P FORWARD DROP为永久链指定默认规则。DROP表示包被丢弃,即禁止转发任何通过的包
$IPT -A FORWARD -p tcp -d 192.168.80.251 --dport www -i eth0 ACCEPT
$IPT -A FORWARD -p tcp -d 192.168.80.252 --dport ftp -i eth0 ACCEPT
$IPT -A FORWARD -p tcp -d 192.168.80.253 --dport smtp -i eth0 ACCEPT
$IPT -A FORWARD -p tcp -s 0/0 --sport ftp-data -d 192.168.80.0/24 -i eth0 -j accept
$IPT -A FORWARD -p ICMP -s 0/0 -d 192.168.80.0/24 -i eth0 -j REJECT
#/etc/rc.d/filter-firewall使防火墙起作用
例配置SNAT带动简单的局域网使用Internet资源
#touch /etc/rc.d/snat-firewall
#chmod u+x /etc/rc.d/snat-firewall
#echo "/etc/rc.d/snat-firewall">>/etc/rc.d/rc.local
#vi /etc/rc.d/snat-firewall
#!/bin/bash
echo "1">/proc/sys/net/ipv4/ip_forward
IPT=/sbin/iptables
加载内核模块
/sbin/modprobe iptables
/sbin/modprobe iptable_nat
/sbin/modprobe ip_nat_ftp
/sbin/modprobe ipt_LOG
清除已设规则,还原到不设防火墙的状态
$IPT -p INPUT ACCEPT
$IPT -p FORWARD ACCEPT
$IPT -p OUTPUT ACCEPT
$IPT -t nat -p PREROUTING ACCEPT
$IPT -t nat -p POSTROUTING ACCEPT
$IPT -t nat -p OUTPUT ACCEPT
for TABLE in filter nat mangle;do
$IPT -t $TABLE -F清除预设表filter中所有规则链中的规则
$IPT -t $TABLE -X清除预设表filter使用者自定义链中规则
done
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT允许所有已经初始化了的回应数据包
for DNS in $(grep ^n /etc/resolv.conf|awk '{print $2}');do
$IPT -A INPUT -p udp -s $DNS --sport domain -j ACCEPT允许DNS服务器进入防火墙的数据包
done
$IPT -N LOGDENY创建用户定义链LOGDENY,在此链中添加规则,拒绝所有(除了lo接口)新建立或无效的连接请求并记入日志
$IPT -A LOGDENY -j LOG --log-prefix "iptables:"
$IPT -A LOGDENY -j DROP
$IPT -A INPUT -i ! lo -m state --state NEW,INVALID -j LOGDENY
$IPT -t nat -A POSTROUTING -o eth1 -j SNAT --to 200.200.200.1
例在局域网对外发布服务
#touch /etc/rc.d/snat-firewall
#chmod u+x /etc/rc.d/snat-firewall
#echo "/etc/rc.d/snat-firewall">>/etc/rc.d/rc.local
#vi /etc/rc.d/snat-firewall
#!/bin/bash
echo "1">/proc/sys/net/ipv4/ip_forward
IPT=/sbin/iptables
加载内核模块
/sbin/modprobe iptables
/sbin/modprobe iptable_nat
/sbin/modprobe ip_nat_ftp
/sbin/modprobe ipt_LOG
清除已设规则,还原到不设防火墙的状态
$IPT -p INPUT ACCEPT
$IPT -p FORWARD ACCEPT
$IPT -p OUTPUT ACCEPT
$IPT -t nat -p PREROUTING ACCEPT
$IPT -t nat -p POSTROUTING ACCEPT
$IPT -t nat -p OUTPUT ACCEPT
for TABLE in filter nat mangle;do
$IPT -t $TABLE -F清除预设表filter中所有规则链中的规则
$IPT -t $TABLE -X清除预设表filter使用者自定义链中规则
done
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT允许所有已经初始化了的回应数据包
for DNS in $(grep ^n /etc/resolv.conf|awk '{print $2}');do
$IPT -A INPUT -p udp -s $DNS --sport domain -j ACCEPT允许DNS服务器进入防火墙的数据包
done
允许访问被开放的服务
$IPT -A INPUT -p tcp --sport 80 -j ACCEPT
$IPT -A INPUT -p tcp --sport 443 -j ACCEPT
$IPT -A INPUT -p tcp --sport 21 -j ACCEPT
$IPT -N LOGDENY
$IPT -A LOGDENY -j LOG --log-prefix "iptables:"
$IPT -A LOGDENY -j DROP
$IPT -A INPUT -i ! lo -m state --state NEW,INVALID -j LOGDENY
$IPT -t nat -A POSTROUTING -o eth1 -j SNAT --to 200.200.200.1做SNAT
对防火墙的服务请求重定向到局域网内部
$IPT -t nat -A PREROUTIGN -p tcp -d 200.200.200.1 --dport 80 -j DNAT --to 192.168.88.47:80
第十三章
Linux下的VPN---CIPE
CIPE简介
1.选择使用CIPE
CIPE,Crypto IP Encapsulation:是一种应用Linux中的VPN实现,使用UDP报文封闭加密的IP包.CIPE数据包给出目标报头信息并使用CIPE默认的加密机制进行加密,然后这些数据包作为UDP报文通过CIPE虚拟网络设备(cipcbx)在承载网络中传输,送往指定的远程节点
2.CIPE的优点:
CIPE可以在很多Linux发行版上工作
CIPE使用标准的Blowfish或IDEA算法进行加密
CIPE是软件实现的,配置陈旧的Linux主机就可以运行CIPE
CIPE正在积极开发和iptables、ipchains等基于规则的防火墙协同工作
管理员可以进行远程配置
3.CIPE的帮助资源
1).CIPE的info帮助
#info cipe
2).登录CIPE主站点获得帮助
4.CIPE的获取与安装
1).获取CIPE软件包,RedHat Linux9的第2张光盘中集成了CIPE的RPM安装包
2).安装CIPE软件包
#rpm -q cipe
#mount /mnt/cdrom
#cd /mnt/cdrom/RedHat/RPMS
#rpm -ivh cipe-1.4.5-16.i386.rpm
#cd;eject
二.CIPE的服务器端配置
1.主菜单/系统设置/网络
#redhat-config-network-gui
在网络配置程序窗口的工具栏中单击新建按钮,选择设备类型为CIPE(vpn)连接
配置隧道
2.激活与解除CIPE设备
3.编辑CIPE设备属性:编辑按钮配置已建立的CIPE设备属性,在CIPE配置窗口的常规页中设置"当计算机启动时激活设备"
4.CEPE的配置文件
建立虚拟的网络接口cipcb0
/etc/sysconfig/network-scripts/ifcfg-cipcb0
/etc/cipe/options.cipcb0
5.CIPE的客户配置
6.手工配置CIPE客户端
#cd /etc/cipe/
7.使用CIPE网络接口连接CIPE服务器
1.CIPE服务器的配置
/etc/sysconfig/network-scripts/ifcfg-cipcb0
USERCTL=no普通用户是否有特权激活或停止该网络接口
FEEDDNS=no CIPE连接远端的DNS地址
TYPE=CIPE
DEVICE=cipcb0
IPADDR=10.0.0.1
MYPORT=7777
PTPADDR=10.0.0.2远程虚拟网络接口的IP地址,即对端cipcb0的IP地址
PEER=0.0.0.0 CIPE连接远端的IP地址和端口,0.0.0.0表示监听端口等待连接请求
ME=192.168.1.29本地用于建立CIPE连接的IP地址
TUNNELDEV=eth0 CIPE使用物理网络接口eth0连接建立CIPE连接
/etc/cipe/options.cipcb0 cipcb0的选项配置文件
cctl 64 Carrier Time Live
maxerr -1 CIPE允许的最大错误数,超过此值时CIPE进程将停止,“-1”表示错误数无限大,应用于CIPE服务器
key 设置密钥。CIPE的密钥要求是128位,使用权32个16进制数字的字符串表示, CIPE服务器和客户机的密钥必须完全一致的密钥.也可以使用md5sum命令生成。通常可以把当前系统进程显示为通过管道送到md5sum密令生成密钥,例ps -auxww|md5sum
2.CIPE客户端
#cd /etc/cipe
#scp root@192.168.1.29:/etc/cipe/options.cipcb0 options.cipcb0使用scp命令复制CIPE服务器的options.cipcb0文件到当前目录
#cd /etc/sysconfig/network-scripts
#scp root@192.168.1.29:/etc/sysconfig/network-scipts/ifcfg-cipcb0
#vi ifcfg-eth0
#vi ifcfg-cipcb0
BOOTPROTO=none
GATEWAY=""
PEERDNS=no
PTPADDR=10.0.0.1
TYPE=CIPE
DEVICE=cipcb0
MYPORT=7777
MTU=""
NETMASK=""
ME=192.168.1.19本机的真实IP地址
BROADCAST=""
IPADDR=10.0.0.2本机的虚拟IP地址
NETWORK=""
PEER=192.168.1.29:7777
USRCTL=no
ONBOOT=no
TUNNELDEV=eth0虚拟连接所跨越物理设备
使用CIPE网络接口连接CIPE服务器
#ifconfig cipcb0
#ifup cipcb0
《网络操作系统——LINUX》教学大纲6
最新推荐文章于 2024-11-06 19:51:56 发布