1、路由器管控功能设计摘要:路由器是互联网的主要结点设备。路由器通过路由决定数据的转发。转发策略称为路由选择,这也是路由器名称的由来。作为不同网络之间互相连接的枢纽,路由器系统构成了基于TCP/IP 的国际互联网络Internet的主体脉络,也可以说,路由器构成了Internet的骨架。Linux系统是一个强大的网络操作系统,本身就是具有路由器的功能,只要经过非常少的几步设置,就会使用Linux系统本身成为一台出色的路由器。该论文研究内容既是将Linux系统配置成具有管理控制功能的路由器,并使其具备FTP,TFTP,Telnet,SSH,QoS(如源IP过滤,业务流类型调度)功能。分为两个部分,基
2、础知识介绍和具体搭建过程的介绍。关键字:Linux,SSH,Router,FTP,QOS1. 设计思路与方案该设计主要是完成路由器的管控功能,因此,首先需要将Linux系统配置成路由器。然后设置其管控功能,并测试。在整个过程中,主要用Linux系统自带的以下功能来完成。1.1. Linux防火墙功能所谓防火墙指的是一个由软件和硬件设备组合而成、在内部网和外部网之间、专用网与公共网之间的界面上构造的保护屏障,是一种获取安全性方法的形象说法,它是一种计算机硬件和软件的结合,使Internet与Intranet之间建立起一个安全网关(Security Gateway),从而保护内部网免受非法用户的侵
3、入,防火墙主要由服务访问规则、验证工具、包过滤和应用网关4个部分组成,防火墙就是一个位于计算机和它所连接的网络之间的软件或硬件。在Linux系统中到数据包进入系统后,首先在内核维护的网络内存空间队列中排队,在内核接手数据包后,TCP/IP协议栈会对数据包IP头部进行拆解,检测目的IP。如果目的IP指向自己,则继续检测TCP首部,并将数据包递交给处于内核空间和用户空间的套接字,让用户程序来处理数据包。如果IP地址不是自己,则对比路由表,如果存在相关条目则转发数据包。具体的,在Linux内核中有一款自带的防火墙软件IPtables,可以实现网络流量的控制、数据包的过滤和转发等功能。IPtables
4、分为两个部分,一个部分在内核中用来存放规则,称为NetFilter;另一部分在用户空间,用来定义规则,并将其传递到内存中,称为iptables。在内核中,规则主要存放在5个表中,每个表又有不同的链组成,其各自的功能用途如下:u Filter(过滤器):主要与进入Linux本机的数据包有关,为默认的表; INPUT:与进入Linux系统的包有关; OUTPUT:与Linux系统发送的包有关; FORWARD:与Linux系统转发的包有关。u Nat(地址转换):主要进行源IP地址和目的IP地址或其端口的转换。主要用于有内网的情况。 PREROUTING:存储进行路由判断前所要进行的规则; POS
5、TROUTING:存储路由判断之后所要进行的规则; OUTPUT:与系统发送的包裹有关。u Mangle:这个表格主要与特殊数据包表头有关,较少使用。用到的链有: PREROUTING; INPUT; OUTPUT; FORWARD; POSTROUTING。基于以上表和链的系统防火墙的运行示意图如下:该设计主要涉及到nat和filter中规则的制定,用它们来完成路由和IP过滤的功能。1.1.1iptables语法为了实现Linux系统的防火墙功能,需要对在用户态中通过iptables对其进行设置。Iptable定义规则的一般机制(更加具体的语法参照man文档)如下:Iptables -t t
6、able sub command CHAINnumcretiria-j ACCTION -t:默认没有指定是filter,也可以指定mangle,nat,rawsub_command: rule: -A(append):追加 -I(insert):插入,如 -I INPUT 3 -D(delete):删除,指定标准或者num 如 -D OUTPUT 8 -R(replace):替换 -R FORWARD chain: -F(flush):清空链 -N(new):新增一条链 -X:删除用户自定义的空链 -Z:清空计数器;关于计数器:每条规则都有2条计数器 1:记录被本条规则匹配到的包个数 2:记
7、录匹配到本条规则到的包的体积之和 -E:重命名链policy: -Pchain ACCEPT|DROP example:将INPUT链的默认策略修改为DROP。ptables t filter P INPUT j DROPview: -L 显示定义的规则 -n:使用这个选项,就不会去反向解析IP地址的主机名,加快察看速度-v:详细信息,可以多加几个v,越多越详细 -x:精确显示数据包体积 -line-numbers匹配条件:-s IP/NETWORK:源地址 -d IP/NETWORK:目标地址 -p tcp|udp|icmp:指定协议 -i input interface:指定数据包进入的接
8、口 -o output interface:指定数据包出去的接口1.2. Linux软路由功能软路由是指利用台式机或服务器配合软件形成路由解决方案,主要靠软件的设置,达成路由器的功能。通常使用普通的计算机充当,并使用通用的操作系统,如Linux,因此归根结底就是对Linux系统的设置。通常只需要几步操作就可以将其配置为强大的路由器:a. 首先,查看Linux系统内核中是否打开了IP转发功能,具体命令环境搭建过程;b. 如果命令返回值为0,则表明Linux内核没有启用IP转发的路由功能,需要开启;c. 通过命令echo 1 /proc/sys/net/ipv4/ip_forward,开启IP转发
9、功能。但是这种方法只能保证当次有效,计算机重启后将消失。因此,为了保证系统能够每次自动设置,需要用编辑器修改配置文件/etc/sysctl.conf。另外,每台计算机都有一个自己的路由表,存储了一定的路由信息。路由表中含有网络周边的拓扑信息。路由表建立的主要目标是为了实现路由协议和静态路由选择。在现代路由器构造中,路由表不直接参与数据包的传输,而是用于生成一个小型指向表,这个指向表仅仅包含由路由选择选择的数据包传输优先路径,这个表格通常为了优化硬件存储和查找而被压缩或提前编译。当然Linux也不能例外,但是Linux并没有将这这两种情况进行区分,而是使用“多张路由表”将二者统一了起来。在Lin
10、ux中,内置了三张路由表: local,main,default,其中local路由表的优先级最高,并且不能被替换,在有数据包进来的时候,首先无条件的查找local路由表,如果找到了路由,则数据包就是发往本机的,如果找不到,则接着在其它的路由表中进行查找。主机发送数据时就查看该路由表决定数据发送的方向,而当本机路由表无相关记录时,则将数据发送到默认路由上,有默认路由来选择路线。在Linux系统中的静态路由可以通过route命令来编辑,具体语法如下:route command -net|-host 网域或主机地址 netmask mask gw|devcommand:-add 增加一条路由-de
11、l 删除一条路由 -net 目标为网络地址-host 目标位主机Netmask 子网掩码gw 网关地址dev 网络接口号2. 软件选型2.1. Linux上的FTPFTP即文件传输协议,是应用层的协议,它基于传输层,为用户服务,它们负责进行文件的传输。FTP是一个8位的客户端-服务器协议,能操作任何类型的文件而不需要进一步处理。但是,FTP有着极高的延时,这意味着,从开始请求到第一次接收需求数据之间的时间会非常长,并且不时的必需执行一些冗长的登录进程。FTP服务一般运行在20和21两个端口。端口20用于在客户端和服务器之间传输数据流,而端口21用于传输控制流,并且是命令通向ftp服务器的进口。
12、Linux一种常见的服务器叫vsftpd。它可以运行在诸如 Linux、BSD、Solaris、 HP-UNIX等系统上面,是一个完全免费的、开发源代码的ftp服务器软件,支持很多其他的 FTP 服务器所不支持的特征。当在系统中安装好vsftpd后,需要对其进行参数配置,即修改其默认配置文件/etc/vsftpd.conf,使其支持本地用户登录和匿名登录。具体配置情况见搭建过程。当本地主机通过FTP登录到远端主机后,需要一些指令来完成相应操作,常见的有:ls:列出远程机的当前目录;cd:在远程机上改变工作目录;lcd:在本地机上改变工作目录;ascii:设置文件传输方式为ASCII模式;bin
13、ary:设置文件传输方式为二进制模式;close:终止当前的ftp会话;hash:每次传输完数据缓冲区中的数据后就显示一个#号;get(mget):从远程机传送指定文件到本地机;put(mput):从本地机传送指定文件到远程机;open:连接远程ftp站点;quit:断开与远程机的连接并退出ftp;? :显示本地帮助信息;! :转到Shell中。2.2. Linux上的TFTPTFTP是一种小型的文件传输协议,通过少量存储器就能轻松实现。它是基于UDP协议的,端口为69。其只能完成对远程服务器的读或写操作,不能列出目录内容。每一个TFTP传输的文件都构成了一个独立的交换,且任何时间网络上仅仅传
14、递一个包,在很多链接情况下仅提供较低的吞吐量。由于该传输协议缺少安全性,所有普遍仅仅用于私人本地网络。2.3. Linux上的TelnetTelnet协议时TCP/IP协议族中客户机/服务器的一种,是远端登录服务的标准协议和主要方式,常用于网页控制服务器的远端控制,也可提供使用者在本地主机执行远端主机上的工作。它提供了三种基本服务:a) 定义了一个网络虚拟终端为远程系统提供一个标准接口;b) 包括一个允许客户机和服务器协商选项的机制,而且它还提供一组标准选项;c) 对称处理连接的两端。2.4. Linux上的SSH传统的网络服务程序,如:ftp、pop和telnet在本质上都是不安全的,因为它
15、们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据。因此在最新的Linux版本中,telnet不再是默认启动项,需要用户自己开启。而更好的方式是使用ssh来进行远程登录。SSH全称Secure SHell,顾名思义就是非常安全的shell的意思,SSH协议是IETF(Internet Engineering Task Force)的Network Working Group所制定的一种协议。SSH是一种加密过后的数据包,既是数据包被窃取了,其中的信息也是需要解密才能被了解的。因此,安全性较telnet要好很多。ssh协议目前有SSH1和SSH2,SSH2协议兼容SSH
16、1。目前实现SSH1和SSH2协议的主要软件有Openssh和SSH Communications。设计采用Openssh来完成。当SSH登录远程主机后,可以像本地终端一样向远程主机发送命令。另外,本设计主要是在软件VMware Workstation上完成的。3. 搭建过程和测试3.1. 环境搭建本设计是在虚拟情况下建立了一个虚拟的内网192.168.152.0/24。该内网中有两台主机和一个路由器。通过该路由器,内网中主机可以与外网相连。具体网络结构如下图所示。另外,该路由器可以提供FTP服务和SSH服务,且只有一台内网主机可以登录该路由,即IP选择功能。搭建环境的具体工程如下。首先,在V
17、Mware Workstation软件中建立三台虚拟机H1、H2和R。其中,H2为路由主机,配有两张网卡,具体网卡配置如下图。设备eth0为桥连的方式接入实验室中的局域网中,其IP地址为192.168.1.111;eth1的IP地址为192.168.152.129,处在所建立虚拟内网中。R为一内网主机,网卡配置情况如下图。IP地址为192.168.152.130。其通过路由主机H2来访问外网,由此来测试H2的路由管理功能。因此在没有建立路由连接前,主机R无法访问外网。H1也是内网主机,其网卡信息如下如所示,IP地址为192.168.152.128。3.2. 配置过程与测试a. 首先,打开内网主
18、机R的终端,输入下图中的命令,建立默认路由条目,其网关为主机H2在内网中的IP地址192.168.152.0。同样的,设置主机H1的默认网关为路由器主机H2在内网中的IP地址192.168.152.0。b. 然后,在主机H2中打开终端,开启系统的路由转发功能。这样主机H2在收到目的地址不是本身时就可以执行转发操作。具体命令如下图所示,图可以看到此时ip_forward=1,即转发功能已开启。c. 在终端中输入命令,查看路由器的路由表中的表项,从下图中可以看到主机的默认路由为192.168.1.1,即实验室中路由器在局域网中的地址。另外有两条转发信息,当所接受数据包的目标为网络192.168.1
19、.0时,数据包从接口eht0送出;当目标位网络192.168,152.0时,数据包从接口eth1送出。d. 然后查看现有nat链表规则,如下图。此时主机H2依然无法访问外网,因为主机H2中无任何地址转换的条目。外网主机无法得知外内地址。随后,我们在终端中输入下图中命令,建立内网主机通向外网的源地址转换规则并查看。当H2收到来自主机R的任何数据报在POSTROUTING中将源地址转换成192.168.1.111,即H2接口eth0的地址。e. 查看实验室局域网中的主机,即该设计中的外网主机的信息如下图,IP地址为192.168.1.107。f. 在主机R上Ping外网主机192.168.1.10
20、7成功,即内网主机R通过路由主机H2与外网建立了连接。并采用Tcpdump对该工程进行了抓包操作。对主机H1做同样的操作,得到如下结果。到目前为止,已经完成了主机H2的路由功能,即内网192.168.152.0/24通过H2与外网建立了连接。因为TFTP与FTP功能上类似,telnet与SSH类似,下面的管控功能设计中,我们只配置路由器上的FTP服务、SSH服务和QoS。g. 在路由器主机H2上安装VSFTPD服务器软件,并更改其配置参数,同时开启本地登录和匿名登录,使其支持上传或下载文件等功能。下图是从主机R采用FTP本地登录H2成功后的截图。登录成功之后就可以在对路由器实行文件上传或下载的
21、操作,由此来与路由器建立的资源交互。如下图,主机R执行get命令从路由器H2上获得测试所用空文件text,并存储为本地名为text的文件。h. 通过在路由器主机H2上安装openssh服务端软件,实现对其的远程登陆。下图为从主机R采用SSH登录H2成功的截图。此时可以在该终端中对路由器主机H2发送操作命令,实现对其的远程控制功能。i. 接下来完成QoS中的IP地址过滤功能。在终端中输入下图中命令,设置主机H2防火墙拒绝来自内网主机192.168.152.128的SSH请求,以此来保证路由器主机不能被其他未授权主机登录。在此之后,主机H1的所有请求SSH,都将遭到路由器主机H2的拒绝,如下图。通
22、过设置防火墙规则,还可以拒绝转发一些特定的数据包,如:来自内网的web请求、针对某一端口的tcp连接或源IP过滤。4. 结果分析作为路由器的Linux系统,在具体配置和软件支持后,可以具有强大的管控功能。进一步设计还可以具有流量监控,业务类型调度等功能。附录VSFTPD配置情况:Anonymous_enable=yes 允许匿名登陆Dirmessage_enable=yes切换目录时,显示目录下.message的内容Local_umask=022 FTP上本地的文件权限,默认是077Connect_form_port_20=yes启用FTP数据端口的数据连接Xferlog_enable=yes
23、激活上传和下传的日志Xferlog_std_format=yes使用标准的日志格式Ftpd_banner=XXXXX显示欢迎信息Pam_service_name=vsftpd验证方式Listen=yes独立的VSFTPD服务器Anon_upload_enable=yes 匿名用户上传权限 Anon_mkdir_write_enable=yes 创建目录的同时可以在此目录中上传文件Write_enable=yes 本地用户写的权限Anon_other_write_enable=yes 匿名帐号可以有删除的权限Anon_world_readable_only=no 匿名用户浏览权限Ascii_up
24、load_enable=yes启用上传的ASCII传输方式Ascii_download_enable=yes启用下载的ASCII传输方式H2的脚本文件:#!/bin/bash#Program: 2014.4.9 Rroute -necho 1 /proc/sys/net/ipv4/ip_forwardcat /proc/sys/net/ipv4/ip_forwardiptables -t nat -A POSTROUTING -s 192.168.152.130 -d 192.168.1.0/24 j SNAT -to 192.168.1.111iptables -t nat -n -Liptables -t filter -A INPUT -s 192.168.152.128 -d 192.168.152.129 -p tcp -dport 22 -j REJECT