第1章 ACL 访问控制列表
访问控制表(Access Control List,ACL),又称存取控制串列,是使用以访问控制矩阵为基础的访问控制方法,每一个对象对应一个串列主体。
访问控制表描述每一个对象各自的访问控制,并记录可对此对象进行访问的所有主体对对象的权限。
1.1 为什么要用ACL
流量控制
匹配感兴趣的流量
1.2 标准访问控制列表
只能根据源地址做过滤
针对整个协议采取相关动作{允许或禁止}
1.3 扩展访问控制列表
能根据源、目的地地址、端口号等等进行过滤
能允许或拒绝特定的协议
1.4 基本原则
1、按顺序执行,只要有一条满足,则不会继续查找
2、隐含拒绝,如果都不匹配,那么一定匹配最后的隐含拒绝条目,思科默认的
3、任何条件下只给用户能满足他们需求的最小权限
4、不要忘记把ACL应用到端口上
1.5 ACL的操作
1.5.1 入站于出站
进方向和出方向是根据数据流相对于接口来确定的
1.5.2 入方向的ACL的操作
1.5.3 出方向的 ACL的操作
1.5.4 ACL语句
一、标准ACL
代码语言:javascript复制access-list {1-99} {permit/deny} source-ip source-wildcard [log]
二、扩展ACL
代码语言:javascript复制access-list {100-199} {permit/deny} protocol source-ip source-wildcard [operator port] destination-ip destination-wildcard [operator port] [established] [log]
三、命名ACL
代码语言:javascript复制ip access-list {standard/extended} name
{ permit /deny} source-ip source-wildcard 标准ACL
{ permit /deny} protocol source-ip source-wildcard [operator port] destination-ip destination-wildcard [operator port] [established][log] 扩展acl
1.5.5 ACL匹配过程
顺序匹配,符合不再执行后面的
所有的都没有匹配到会丢弃(隐含拒绝)
1.6 ACL的配置
1.6.1 ACL的标识
1-99,1300-1999 标准访问控制列表
100-199,2000-2699 扩展访问控制列表
name 命名访问控制列表
1.6.2 标准访问控制列表的配置
代码语言:javascript复制access-list {1-99} {permit/deny} source [wildcard mask]
编号选择 1-99
通配符若无,默认0.0.0.0
'no access-list access-list-number '会删除整个ACL列表
代码语言:javascript复制ip access-group access-list-number {in|out }
在接口中应用
应用时关联入或出站方向
默认出站
'no ip access-group access-list-number '会移除接口上应用的访问列表
1.6.3 通配符
在路由器的配置中,经常出现通配符。和子网掩码一样,都是以“0”或“1”表示,不过与子网掩码所表示的意思却不一样。
子网掩码所表示的是IP的网络位和主机位,而通配符则表示与IP是否匹配。
通配符同样是32位,和IP地址一一对应,“0”位代表精确匹配,而“1“位代表不许匹配。
例如路由器EIGRP的配置中:
代码语言:javascript复制RouterA(config)#router eigrp 100
RouterA(config-router)#network 10.0.0.0 0.0.0.255
RouterA(config-router)#network 192.168.1.0 0.0.0.255
10.0.0.0 0.0.0.255说明只要接口的IP地址是以“10”开头就参与EIGRP进程。
同理的,192.168.1.0 0.0.0.255说明只要IP是以192.168.1开头的IP就符合。
1.6.4 通配符缩写
代码语言:javascript复制192.168.1.1 0.0.0.0 == host 192.168.1.1
精确匹配192.168.1.1这个ip
代码语言:javascript复制0.0.0.0 255.255.255.255 == any
匹配所有IP
1.7 【实例】标准ACL
禁止主机A 上外网
1.7.1 拓扑图
1.7.2 配置路由acl
代码语言:javascript复制R-acl-1(config)#access-list 1 deny 192.168.1.1 0.0.0.0
R-acl-1 (config)#access-list 1 permit any
应用到接口上
代码语言:javascript复制R-acl-1 (config)#interface fastEthernet 0/0
R-acl-1 (config-if)#ip access-group 1 in
1.7.3 检查ACL 表内容
代码语言:javascript复制R-acl-1#show access-lists 1
Standard IP access list 1
deny host 192.168.1.1 (6 match(es))
permit any
1.8 扩展访问控制列表的配置
同一个接口上针对一种协议只能用一个ACL
1.8.1 配置命令
代码语言:javascript复制access-list {100-199} {permit/deny} protocol source-ip source-wildcard [operator port] destination-ip destination-wildcard [operator port] [established] [log]
access-list {100-199} permit/deny 协议号 源地址 通配符 目的地址 通配符
应用
代码语言:javascript复制ip access-group access-list-number {in|out }
在接口中应用
应用时关联入或出站方向
1.9 【实例】扩展ACL
禁止A网段中的192.168.1.1-192.168.1.30 访问B网段的服务器
1.9.1 拓扑图
1.9.2 路由器acl配置
代码语言:javascript复制R-ACL-2(config)#access-list 100 deny ip 192.168.1.0 0.0.0.31 host 192.168.2.200
R-ACL-2(config)#access-list 100 permit ip any any
应用到接口
代码语言:javascript复制R-ACL-2(config)#interface fastEthernet 0/0
R-ACL-2(config-if)#ip access-group 100 in
1.9.3 检查acl信息
代码语言:javascript复制R-ACL-2#show access-lists 100
Extended IP access list 100
deny ip 192.168.1.0 0.0.0.31 host 192.168.2.200
permit ip any any
代码语言:javascript复制1 C:>PING 192.168.2.200
2
3 Pinging 192.168.2.200 with 32 bytes of data:
4
5 Reply from 192.168.1.254: Destination host unreachable.
6 Reply from 192.168.1.254: Destination host unreachable.
1.9.4 禁止访问某一项服务
代码语言:javascript复制access-list 100 deny tcp any host 192.168.2.200 eq 23
access-list 100 permint any
标准于扩展ACL的配置内容
代码语言:javascript复制R-ACL-2(config)#access-list 1 permit ?
A.B.C.D Address to match
any Any source host
host A single host address
R-ACL-2(config)#access-list 100 permit ?
ahp Authentication Header Protocol
eigrp Cisco's EIGRP routing protocol
esp Encapsulation Security Payload
gre Cisco's GRE tunneling
icmp Internet Control Message Protocol
ip Any Internet Protocol
ospf OSPF routing protocol
tcp Transmission Control Protocol
udp User Datagram Protocol
1.10 命名访问控制列表的配置
1.10.1 配置命令
格式
代码语言:javascript复制ip access-list { extended|standard } name
配置
代码语言:javascript复制R-ACL-2(config)#ip access-list extended test
R-ACL-2(config-ext-nacl)#10 deny TCP 192.168.12.0 0.0.0.255 any eq 23
R-ACL-2(config-ext-nacl)#20 permit ip any any
查看
代码语言:javascript复制R-ACL-2#show ip access-lists test
Extended IP access list test
deny tcp 192.168.12.0 0.0.0.255 any eq telnet
permit ip any any
应用到接口
代码语言:javascript复制R-ACL-2(config)#interface fastEthernet 0/0
R-ACL-2(config-if)#ip access-group test in
1.11 注意
每个接口,每个方向,每种协议,只能设置1个ACL
组织好你的ACL的顺序,比如测试性的最好放在ACL的最顶部
不可能从ACL中除去1行,除去一行意味着你将除去整个ACL。命名ACL除外
默认acl结尾语句时deny any ,所以在ACL中至少有一句permint语句
记得创建了ACL后应用到接口上
ACL是用于过滤经过路由器的数据包,他并不会过滤路由器本身产生的数据包
尽可能的把IP标准ACL放在距离目标近的地方;把扩展ACL放在离源地址近的地方
第2章 NAT动态地址转换
2.1 为什么需要NAT
IPv4地址紧缺
解决方案: DHCP、IPv6、NAT
2.1.1 私有地址空间
私有地址(Private address)属于非注册地址,专门为组织机构内部使用。
NAT将私有地址转化为共有IP
2.2 私有IP地址空间
10.0.0.0 ~ 10.255.255.255
172.16.0.0 ~ 172.31.255.255
192.168.0.0 ~ 192.168.255.255
2.3 NAT术语
名称 | 含义 |
---|---|
内部本地 | 转换之前内部源地址的名字 |
外部本地 | 转换之前目标主机的名字 |
内部全局 | 转换之后内部主机的名字 |
外部全局 | 转换之后外部目标主机的名字 |
2.4 NAT三种类型
2.4.1 静态NAT
一对一映射
基本网络地址转换(Basic NAT)
这一种也可称作NAT或“静态NAT”。它在技术上比较简单一点,仅支持地址转换,不支持端口映射。Basic NAT要求对每一个当前连接都要对应一个公网IP地址,因此要维护一个公网的地址池。宽带(broadband)路由器通常使用这种方式来允许一台指定的设备去管理所有的外部链接,甚至当路由器本身只有一个可用外部IP时也如此,这台路由器有时也被标记为DMZ主机。
基本NAT要维护一个无端口号NAT表,结构如下。
2.4.2 动态NAT
动态NAT是指将内部网络的私有IP地址转换为公用IP地址时,IP地址对是不确定的,是随机的,所有被授权访问Internet的私有IP地址可随机转换为任何指定的合法IP地址。也就是说,只要指定哪些内部地址可以进行转换,以及用哪些合法地址作为外部地址时,就可以进行动态转换。
动态转换可以使用多个合法外部地址集。当ISP提供的合法IP地址略少于网络内部的计算机数量时。可以采用动态转换的方式。
2.4.3 端口复用
网络地址端口转换(NAPT)
这种方式支持端口的映射,并允许多台主机共享一个公网IP地址。
支持端口转换的NAT又可以分为两类:源地址转换和目的地址转换。前一种情形下发起连接的计算机的IP地址将会被重写,使得内网主机发出的数据包能够到达外网主机。后一种情况下被连接计算机的IP地址将被重写,使得外网主机发出的数据包能够到达内网主机。实际上,以上两种方式通常会一起被使用以支持双向通信。
NAPT维护一个带有IP以及端口号的NAT表,结构如下。
2.5 NAT配置
2.5.1 静态NAT配置
代码语言:javascript复制ip nat inside source static local-ip global-ip
进入连接内网端口
ip nat inside
进入连接外网端口
ip nat outside
查看
代码语言:javascript复制show ip nat trnslations
2.5.2 动态NAT转换
代码语言:javascript复制ip nat pool name start-ip end-ip
access-list access-list-number permint source [source-wlldcard]
ip nat inside source list access-list-number pool name
查看
代码语言:javascript复制show ip nat trnslations
2.5.3 PAT配置
代码语言:javascript复制access-list access-list-number permit source source-wlldcard
ip nat inside source list access-list-number interface interface overload
查看
代码语言:javascript复制 show ip nat translations
2.5.4 清除NAT转换表项
清除所有
代码语言:javascript复制clear ip nat translation *
2.6 【实验】NAT转换
内网手游PC能够访问外网
外网用户能够通过公网地址访问内网服务器的telnet服务。
2.6.1 拓扑图
2.6.2 配置nat
代码语言:javascript复制R-NAT-1(config)#access-list 1 permit 192.168.1.0 0.0.0.255
R-NAT-1(config)#ip nat inside source list 1 interface serial 0/0 overload
注意:
R-NAT-1(config)#interface fastEthernet 0/0
R-NAT-1(config-if)#ip nat inside
R-NAT-1(config-if)#interface s 0/0
R-NAT-1(config-if)#ip nat outside
2.6.3 查看nat表
代码语言:javascript复制R-NAT-1#show ip nat translations
Pro Inside global Inside local Outside local Outside global
icmp 202.101.100.1:1 192.168.1.1:1 202.101.100.30:1 202.101.100.30:1
icmp 202.101.100.1:2 192.168.1.1:2 202.101.100.30:2 202.101.100.30:2
icmp 202.101.100.1:3 192.168.1.1:3 202.101.100.30:3 202.101.100.30:3
icmp 202.101.100.1:4 192.168.1.1:4 202.101.100.30:4 202.101.100.30:4
2.6.4 映射内网服务器
完整映射
代码语言:javascript复制R-NAT-1(config)#ip nat inside source static 192.168.1.100 202.101.100.3
端口映射
代码语言:javascript复制R-NAT-1(config)#ip nat inside source static tcp 192.168.1.100 80 202.101.100.1 8080
第3章 IPv6
IPv6的128位地址通常写成8组,每组为四个十六进制数的形式。
3.1 IPv6地址
代码语言:javascript复制2001:0db8:3c4d:0012:0000:0000:1234:56ab
全球前缀 子网 接口ID
http://[2001:0db8:3c4d:0012:0000:0000:1234:56ab]/default.html
Web浏览器发起HTTP连接的例子:
3.1.1 【示例】IPv6地址表达式
代码语言:javascript复制AD80:0000:0000:0000:ABAA:0000:00C2:0002
是一个合法的IPv6地址。这个地址比较长,看起来不方便也不易于书写。
零压缩法可以用来缩减其长度。
如果几个连续段位的值都是0,那么这些0就可以简单的以::来表示,上述地址就可写成
代码语言:javascript复制AD80::ABAA:0000:00C2:0002
这里要注意的是只能简化连续的段位的0,其前后的0都要保留,比如AD80的最后的这个0,不能被简化。还有这个只能用一次,在上例中的ABAA后面的0000就不能再次简化。当然也可以在AAAA后面使用::,这样的话前面的12个0就不能压缩了。这个限制的目的是为了能准确还原被压缩的0,不然就无法确定每个::代表了多少个0。
3.2 IPv6地址类型
单播地址
–全球单播地址:典型的、可路由的通用地址
–链路本地地址:私有地址、不能被路由
–本地唯一地址:用于非路由目的,但是全球唯一
组播地址
任播地址
3.2.1 单播地址(unicast)
单播地址又叫单目地址,就是传统的点对点通信,单播表示一个单接口的标识符。IPv6单播地址的类型又分:全球单播地址、链路本地地址和站点本地地址。
*全球单播地址相当于IPv4的公网地址,这类地址由供应商提供,或由交换局提供,可聚集全球单点传送地址结构。
*链路本地单播地址是处于可聚集全球单播地址外的,只限于直连链路,是单网络链路上给的主机编号,作用是进行链路上主机的通信
*本地唯一地址用于对特定范围的通信也可说成是规定站点内的通信,不能与站点外地址通信,也不能直接连接到全球Internet。
3.2.2 组播地址(multicast)
又称为多点传送地址或者多播,即一组接口的标识符,只要存在合适的多点传输的路由拓扑就可将设有多播地址的包传输到这个地址识别的那组接口。
3.2.3 任播地址(anycast)
又称之为任意点传送地址,它也是一个标识符可以识别多重接口的情况,只要有合适的路由拓扑,即可以将设有任意传播地址的数据包传给位址识别的最近的单一接口。
最近的接口是指最短的路由距离。任意点传送地址空间可以认为是从单点传送地址空间中划分出来的,它可以是表示单点传送地址的任何形式。它与单点传送地址间结构上是没有差别的。目前,任意点传送地址仅分配给路由器。
子网-路由任意点传送地址是必须预先定义的,根据给定接口的子网前缀产生,要构建一个子网路由任意点地址必须固定子网前缀的位数,余下位数必须设定为0。
3.3 IPv6特殊的地址
IPv6地址 | 功能 |
---|---|
0:0:0:0:0:0:0:0 等于:: | 等价于IPv4的0.0.0.0 |
0:0:0:0:0:0:0:1 等于::1 | 等价于IPv4的127.0.0.1 |
0:0:0:0:0:0:0:192.168.100.1 | 这是在IPv6/v4混合网络中IPv4地址表示 |
2000::/3 | 全球单播地址范围 |
FC00::/7 | 本地唯一单播地址范围 |
FE80::/10 | 链路本地单播地址范围 |
FF00::/8 | 组播地址范围 |
3FFF:FFFF::/32 | 为示例和文档保留的地址 |
2001:0DB8::/32 | 也是为示例和文档保留的地址 |
2002::/16 | 拥有IPv6到IPv4的转换系统,IPv6包直接通过IPv4网络传输 |
3.4 自动配置
某台设备的MAC地址:
代码语言:javascript复制0060.D673.1987
0260.D6FF.FE73.1987
u IPv6地址的接口ID是64位,MAC地址只有48位,因此需要再加上16位,及在中间填充FFFE
代码语言:javascript复制02 → 00000010
u 在填充过程中,第7位如果改成值为1,及为全球唯一的,这一位改成值为0,及为本的唯一的
u 这种类型的自动配置称为“无状态自动配置”
3.5 用IPv6配置Cisco路由器
在路由器上启用IPv6,默认时,IPv6流量转发被禁用
代码语言:javascript复制ipv6 unicast-routing
在接口上配置IPv6地址
代码语言:javascript复制ipv6 address 2001:db8:3c4d:1:0260.d6FF.FE73.1987/64
启用接口,通过DHCP获得IPv6地址
代码语言:javascript复制ipv6 enable