路由器管控功能设计摘要:路由器是互联网的主要结点设备。
路由器通过路由决定数据的转发。
转发策略称为路由选择,这也是路由器名称的由来。
作为不同网络之间互相连接的枢纽,路由器系统构成了基于TCP/IP 的国际互联网络Internet的主体脉络,也可以说,路由器构成了Internet的骨架。
Linux系统是一个强大的网络操作系统,本身就是具有路由器的功能,只要经过非常少的几步设置,就会使用Linux 系统本身成为一台出色的路由器。
该论文研究内容既是将Linux系统配置成具有管理控制功能的路由器,并使其具备FTP,TFTP,Telnet,SSH,QoS(如源IP过滤,业务流类型调度)功能。
分为两个部分,基础知识介绍和具体搭建过程的介绍。
关键字:Linux,SSH,Router,FTP,QOS1.设计思路与方案该设计主要是完成路由器的管控功能,因此,首先需要将Linux系统配置成路由器。
然后设置其管控功能,并测试。
在整个过程中,主要用Linux系统自带的以下功能来完成。
1.1.Linux防火墙功能所谓防火墙指的是一个由软件和硬件设备组合而成、在内部网和外部网之间、专用网与公共网之间的界面上构造的保护屏障,是一种获取安全性方法的形象说法,它是一种计算机硬件和软件的结合,使Internet与Intranet之间建立起一个安全网关(Security Gateway),从而保护内部网免受非法用户的侵入,防火墙主要由服务访问规则、验证工具、包过滤和应用网关4个部分组成,防火墙就是一个位于计算机和它所连接的网络之间的软件或硬件。
在Linux系统中到数据包进入系统后,首先在内核维护的网络内存空间队列中排队,在内核接手数据包后,TCP/IP协议栈会对数据包IP头部进行拆解,检测目的IP。
如果目的IP指向自己,则继续检测TCP首部,并将数据包递交给处于内核空间和用户空间的套接字,让用户程序来处理数据包。
如果IP地址不是自己,则对比路由表,如果存在相关条目则转发数据包。
具体的,在Linux内核中有一款自带的防火墙软件IPtables,可以实现网络流量的控制、数据包的过滤和转发等功能。
IPtables分为两个部分,一个部分在内核中用来存放规则,称为NetFilter;另一部分在用户空间,用来定义规则,并将其传递到内存中,称为iptables。
在内核中,规则主要存放在5个表中,每个表又有不同的链组成,其各自的功能用途如下:◆Filter(过滤器):主要与进入Linux本机的数据包有关,为默认的表;✧INPUT:与进入Linux系统的包有关;✧OUTPUT:与Linux系统发送的包有关;✧FORWARD:与Linux系统转发的包有关。
◆Nat(地址转换):主要进行源IP地址和目的IP地址或其端口的转换。
主要用于有内网的情况。
✧PREROUTING:存储进行路由判断前所要进行的规则;✧POSTROUTING:存储路由判断之后所要进行的规则;✧OUTPUT:与系统发送的包裹有关。
◆Mangle:这个表格主要与特殊数据包表头有关,较少使用。
用到的链有:✧PREROUTING;✧INPUT;✧OUTPUT;✧FORWARD;✧POSTROUTING。
基于以上表和链的系统防火墙的运行示意图如下:该设计主要涉及到nat和filter中规则的制定,用它们来完成路由和IP过滤的功能。
1.1.1.iptables语法为了实现Linux系统的防火墙功能,需要对在用户态中通过iptables对其进行设置。
Iptable定义规则的一般机制(更加具体的语法参照man文档)如下:Iptables [-t table] sub command CHAIN[num][cretiria][-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 FORWARDchain: -F(flush):清空链-N(new):新增一条链-X:删除用户自定义的空链-Z:清空计数器;关于计数器:每条规则都有2条计数器1:记录被本条规则匹配到的包个数2:记录匹配到本条规则到的包的体积之和-E:重命名链policy: -P chain {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:指定数据包进入的接口-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转发功能。
但是这种方法只能保证当次有效,计算机重启后将消失。
因此,为了保证系统能够每次自动设置,需要用编辑器修改配置文件/etc/sysctl.conf。
另外,每台计算机都有一个自己的路由表,存储了一定的路由信息。
路由表中含有网络周边的拓扑信息。
路由表建立的主要目标是为了实现路由协议和静态路由选择。
在现代路由器构造中,路由表不直接参与数据包的传输,而是用于生成一个小型指向表,这个指向表仅仅包含由路由选择选择的数据包传输优先路径,这个表格通常为了优化硬件存储和查找而被压缩或提前编译。
当然Linux也不能例外,但是Linux并没有将这这两种情况进行区分,而是使用“多张路由表”将二者统一了起来。
在Linux中,内置了三张路由表:local,main,default,其中local路由表的优先级最高,并且不能被替换,在有数据包进来的时候,首先无条件的查找local路由表,如果找到了路由,则数据包就是发往本机的,如果找不到,则接着在其它的路由表中进行查找。
主机发送数据时就查看该路由表决定数据发送的方向,而当本机路由表无相关记录时,则将数据发送到默认路由上,有默认路由来选择路线。
在Linux系统中的静态路由可以通过route命令来编辑,具体语法如下:route command [-net|-host] [网域或主机地址] netmask [mask] [gw|dev] command: -add 增加一条路由-del 删除一条路由-net 目标为网络地址-host 目标位主机Netmask 子网掩码gw 网关地址dev 网络接口号2.软件选型2.1.Linux上的FTPFTP即文件传输协议,是应用层的协议,它基于传输层,为用户服务,它们负责进行文件的传输。
FTP是一个8位的客户端-服务器协议,能操作任何类型的文件而不需要进一步处理。
但是,FTP有着极高的延时,这意味着,从开始请求到第一次接收需求数据之间的时间会非常长,并且不时的必需执行一些冗长的登录进程。
FTP服务一般运行在20和21两个端口。
端口20用于在客户端和服务器之间传输数据流,而端口21用于传输控制流,并且是命令通向ftp服务器的进口。
Linux一种常见的服务器叫vsftpd。
它可以运行在诸如 Linux、BSD、Solaris、HP-UNIX等系统上面,是一个完全免费的、开发源代码的ftp服务器软件,支持很多其他的 FTP 服务器所不支持的特征。
当在系统中安装好vsftpd后,需要对其进行参数配置,即修改其默认配置文件/etc/vsftpd.conf,使其支持本地用户登录和匿名登录。
具体配置情况见搭建过程。
当本地主机通过FTP登录到远端主机后,需要一些指令来完成相应操作,常见的有:ls:列出远程机的当前目录;cd:在远程机上改变工作目录;lcd:在本地机上改变工作目录;ascii:设置文件传输方式为ASCII模式;binary:设置文件传输方式为二进制模式;close:终止当前的ftp会话;hash:每次传输完数据缓冲区中的数据后就显示一个#号;get(mget):从远程机传送指定文件到本地机;put(mput):从本地机传送指定文件到远程机;open:连接远程ftp站点;quit:断开与远程机的连接并退出ftp;? :显示本地帮助信息;! :转到Shell中。
2.2.Linux上的TFTPTFTP是一种小型的文件传输协议,通过少量存储器就能轻松实现。
它是基于UDP协议的,端口为69。
其只能完成对远程服务器的读或写操作,不能列出目录内容。
每一个TFTP传输的文件都构成了一个独立的交换,且任何时间网络上仅仅传递一个包,在很多链接情况下仅提供较低的吞吐量。
由于该传输协议缺少安全性,所有普遍仅仅用于私人本地网络。
2.3.Linux上的TelnetTelnet协议时TCP/IP协议族中客户机/服务器的一种,是远端登录服务的标准协议和主要方式,常用于网页控制服务器的远端控制,也可提供使用者在本地主机执行远端主机上的工作。
它提供了三种基本服务:a)定义了一个网络虚拟终端为远程系统提供一个标准接口;b)包括一个允许客户机和服务器协商选项的机制,而且它还提供一组标准选项;c)对称处理连接的两端。
2.4.Linux上的SSH传统的网络服务程序,如:ftp、pop和telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据。
因此在最新的Linux版本中,telnet不再是默认启动项,需要用户自己开启。
而更好的方式是使用ssh来进行远程登录。
SSH全称Secure SHell,顾名思义就是非常安全的shell的意思,SSH协议是IETF(Internet Engineering Task Force)的Network Working Group所制定的一种协议。