HCL实验-使用ACL进行SSH服务器的登录源限制的简单实验(NAT+SSH+ACL)
一、实验描述
??组网实现模拟区域内网通过NAT网络地址转换登录到外网SSH服务器,并且SSH服务器通过配置ACL来实现登录源IP限制,即只有指定IP可以登录。 ??相关技术需要读者自行了解(NAT、SSH、ACL),这里不在进行相关概念的赘述。
实验要点
- 配置外网路由器开启SSH服务
- 配置内网出口路由器开启NAT
- 选取ACL的配置点进行相应策略配置
实验拓扑图
二、实现流程
??首先在HCL上布置好设备,并配置相应接口的IP地址,相互组成网络段,同时在HCL模拟器中是需要手动点击启动设备的。
1. 配置SSH
??华三路由器配置SSH(安全协议外壳),需要我们是用加密算法,这里采用的是rsa公钥加密算法 配置的大致思路为: ??生成公钥,开启服务,创建并配置本地验证用户,指定认证方式。
[R-ssh]public-key local create rsa //生成公钥的命令
The local key pair already exists. //先前有过一个了,为了演示重新生成一个
Confirm to replace it? [Y/N]:
Before pressing ENTER you must choose 'YES' or 'NO'[Y/N]:y
The range of public key modulus is (512 ~ 2048).
If the key modulus is greater than 512, it will take a few minutes.
Press CTRL+C to abort.
Input the modulus length [default = 1024]: //暂时不需要我们自主选择长度之类的,默认就ok
Generating Keys...
Create the key pair successfully.
[R-ssh]ssh server enable //开启SSH服务
[R-ssh]local-user luxa //创建一个本地用户
[R-ssh-luser-manage-luxa]password ?
hash Specify a hashtext password
simple Specify a plaintext password
<cr>
[R-ssh-luser-manage-luxa]password simple 123456 //简单配置一下,有需求也可以选hash
[R-ssh-luser-manage-luxa]service-type ssh //给这个用户声明一下使用的服务类型
[R-ssh-luser-manage-luxa]authorization-attribute user-role network-admin
//设置用户的权限,有很多level等级等权限,这里选择网管身份,有需要可以选其他
[R-ssh-luser-manage-luxa]qu
[R-ssh]user-interface vty 0 4 //配置用户界面,使用经典的0 4,也就是支持同时接入5个用户,可以自己调整
[R-ssh-line-vty0-4]authentication-mode scheme //组合认证方式,用户名+密码,可以自行设置成其他方式
至此,SSH配置完毕,现在我们尝试用和这个路由器在同一个网段下的路由器的接口去登录试试看(见拓扑图) PS:登录要在用户视图下进行登录,设备名字还是<>的视图下,不是[]系统视图!!!
<R-gateway>ssh 20.0.0.1
Username: luxa
Press CTRL+C to abort.
Connecting to 20.0.0.1 port 22.
The server is not authenticated. Continue? [Y/N]:y
Do you want to save the server public key? [Y/N]:y
luxa@20.0.0.1's password:
luxa@20.0.0.1's password:
Enter a character ~ and a dot to abort.
******************************************************************************
* Copyright (c) 2004-2017 New H3C Technologies Co., Ltd. All rights reserved.*
* Without the owner's prior written consent, *
* no decompiling or reverse-engineering shall be allowed. *
******************************************************************************
<R-ssh>
<R-ssh>qu
没什么问题,接下来进入NAT配置环节,使得内网下的主机能够通过NAT登录我们刚配置好的SSH服务器,由于目前内网和外网(图中的192.168.1.0/24和20.0.0.0/8)是两个不同的网段,也没有配置静态路由,目前是无法相互访问的,所以需要我们配置一个NAT来让内网发出外面的包的源IP转换成和目的IP同一个网段。
2. 配置NAT
??华三和思科配置NAT有所区别,因为这里介绍的还是HCL的实验,只介绍华三的,有兴趣的读者自行了解。 ??NAT需要ACL做支持,用于决定哪些数据包需要做转换。 ACL常用两种模式,BASIC和ADVANCED,当然还有MAC,这里主要介绍前两种
- BASIC 用于配置针对源IP的策略,在BASIC的规则当中只填写源IP,只对报文的源IP制定规则
- ADVANCED 用于配置较全面的策略 ,在ADVANCED中可以配置源目的IP、协议类型、协议特性等三四层规则
??本次实验为了简便配置的是BASIC ACL,同理读者可以自行扩展ADVANCED ACL来把本次实验扩展成对端口、协议进行限制访问的功能。
??NAT在华三主要为BASIC NAT、NAPT、Easy IP三种。
- BASIC NAT主要用于配置一对一地址转换,一个IP出去时占用一个地址池中用于转换的IP,所以使用BASIC NAT要保证地址池够大,否则如果出现数据量比较大多台主机同时出去占用IP的情况下,后面还需要地址转换的IP将会无法通过NAT进行地址转换出去与外网通信。
- NAPT(网络地址端口转换)主要用于配置一对多的基于端口的地址转换 ,与BASIC NAT相似也需要配置地址池,但是NAPT是可以通过使用一个地址的多个端口来映射内网地址和端口,比如内网某地址某端口会在出口网关有一个NATP的映射表,记录网关地址和某端口,这一条就对应了前者。NAPT不仅做地址转换,更是基于端口地做了映射和转换。
- Easy IP 直接使用出接口作为转换后的源地址 ,不需要配置地址池,它是NAPT的一个特例,适用于拨号接入Internet或者动态获得IP地址的场合
下面介绍各种NAT的配置方法
① BASIC NAT
??配置思路为
- 配置ACL规则2001
[R-gateway]acl basic 2001
[R-gateway-acl-ipv4-basic-2001]rule permit source 192.168.1.0 0.0.0.255
- 配置地址池address-group 1
[R-gateway]nat address-group 1
[R-gateway-address-group-1]address 20.0.0.10 20.0.0.50
- 出端口配置地址转换
[R-gateway-GigabitEthernet0/1]nat outbound 2001 address-group 1 no-pat //配置BASIC一定要加no-pat,不配置就是NAPT了
??配置完毕后选取内网一台主机(192.168.1.254)ping外网的SSH服务器(20.0.0.1),能够ping通,并且抓包看到源IP已经发生了转换
② NAPT(网络地址端口转换)
??我们在配置另一种模式的NAT时需要把之前的配置撤销掉
[R-gateway-GigabitEthernet0/1]undo nat outbound 2001
??配置思路为
- 配置ACL规则2001(可以继续沿用上面写的)
[R-gateway]acl basic 2001
[R-gateway-acl-ipv4-basic-2001]rule permit source 192.168.1.0 0.0.0.255
- 配置地址池address-group 2(只配置一个IP,方便我们对比端口看看效果)
[R-gateway-address-group-2]address 20.0.0.123 20.0.0.123
- 出端口配置地址转换
[R-gateway-GigabitEthernet0/1]nat outbound 2001 address-group 2
至此已经可以进行内网对外网的访问,现在让192.168.1.254和192.168.1.253登录SSH,并且挂着,通过如下命令我们可以看一下转换的情况
[R-gateway]dis nat session
Initiator:
Source IP/port: 192.168.1.254/60227 //254转换情况
Destination IP/port: 20.0.0.1/22
Initiator:
Source IP/port: 192.168.1.253/32449 //253转换情况
Destination IP/port: 20.0.0.1/22
通过上面的显示我们可以看到源IP和端口都发生了改变
③ Easy IP
??Easy IP的配置比较简单,不需要配置地址池,只需要配置ACL(已经配置好)然后在出端口配置转换即可
[R-gateway]acl basic 2001
[R-gateway-acl-ipv4-basic-2001]rule permit source 192.168.1.0 0.0.0.255
[R-gateway]int gi 0/1
[R-gateway-GigabitEthernet0/1]nat outbound 2001
配置完毕后可以从内网登录外网SSH,情况如下
[R-gateway-GigabitEthernet0/1]dis nat session
Slot 0:
Initiator:
Source IP/port: 192.168.1.254/60228
Destination IP/port: 20.0.0.1/22
Initiator:
Source IP/port: 192.168.1.253/32450
Destination IP/port: 20.0.0.1/22
可以看到,254和253转换后的IP都是网关出口的IP,可以在拓扑图中看到本来给他的IP就是20.0.0.1
??至此,我们完成了三种NAT的配置,接着往下我们会配置ACL策略来对访问源进行限制,为了方便我们接着保持刚刚配置好的Nasy IP NAT
3. 配置限制访问源的ACL
??配置ACL包过滤的思路:
- 启动包过滤防火墙功能
- 根据实际网络需要选择合适的ACL分类
- 创建正确的规则
设置正确的规则(rule)和动作(deny/permit) - 在路由器的接口应用ACL,并指明出/入
在配置防火墙前,我们还需要决定在网络中的位置 ??根据拓扑图,我们要完成的功能是限制访问源,也就是说我们要对该路由器的入接口做文章,现在的情况是公网上还可能会有很多设备是彼此互通的,当然限于模拟器性能没法加入太多设备,在拓扑图中就加入了粉红色的“第三者”作为其他在外网的设备,我们要限制的是“只有192.168.1.0/24网络的主机能够登录SSH”,所以我们总结为以下几点
- 限制了端口,要选择ADVANCED ACL
- 默认规则为拒绝所有网络
- 默认规则之上允许192.168.1.0/24通过,并且只能访问22端口(SSH默认登录的22端口,有需要可以手动指定)
具体配置如 ??首先配置ACL,选择ADVANCED,允许20.0.0.254(内网出口)的tcp协议报文通过(SSH使用的是TCP协议22号端口,但是在这里的命令中选择source-port没有SSH,所以先给tcp的都通过,同理我们可以配置对某协议某端口号的限制都是同一个思路),对于不匹配第一条的都拒绝,写成第二条 ??这里要说明一下,ACL支持两种匹配顺序,配置顺序(config)和自动顺序(auto),配置顺序是根据用户配置规则的顺序逐个向下匹配,而自动顺序是深度遍历一直往下找只要找到就可以 ??所以这里的思路是利用默认的配置顺序,当IP不是20.0.0.254时,不满足rule 1,继续往下匹配,而这时已经有一个逻辑叫做他不满足rule1,然后满足rule 5,所以被deny ??如果选用自动顺序,无论是否满足IP是20.0.0.254,都因为满足了0.0.0.0,全部都会deny,因为他没有先后的逻辑了
[R-ssh]acl advanced 3001
[R-ssh-acl-ipv4-adv-3001]rule 1 permit tcp source 20.0.0.254 0.0.0.0
[R-ssh-acl-ipv4-adv-3001]rule 5 deny ip source any
[R-ssh]int GigabitEthernet 0/0
[R-ssh-GigabitEthernet0/0]packet-filter 3001 inbound
使用内网主机192.168.1.254能够登录SSH(因为经过Easy IP NAT,他已经变成20.0.0.254了)
<R2>ssh 20.0.0.1
Username: luxa
Press CTRL+C to abort.
Connecting to 20.0.0.1 port 22.
luxa@20.0.0.1's password:
luxa@20.0.0.1's password:
Enter a character ~ and a dot to abort.
******************************************************************************
* Copyright (c) 2004-2017 New H3C Technologies Co., Ltd. All rights reserved.*
* Without the owner's prior written consent, *
* no decompiling or reverse-engineering shall be allowed. *
******************************************************************************
<R-ssh>
使用外网主机20.0.0.253无法登录
<R-out>ssh 20.0.0.1
Username: luxa
Press CTRL+C to abort.
Connecting to 20.0.0.1 port 22.
//然后就一直卡在这,超时自动退出
至此,目标已经达成,完成了利用ACL限制SSH登录源,并在内网到外网使用NAT的实验
三、文章结尾
??本次实验在于巩固NAT、SSH、ACL的相关配置和理解,是学习网络的又一进步,当然也参考、消化了非常多的内容,文中也写了很多关于配置实验的个人理解,不免有些纰漏,希望各路高手看到文中的错漏后能够提出,既是对自己学习记录的总结和实验的自主设计,也希望这篇文章能够帮助更多的人学习网络。
|