1. 程式人生 > >使用ACL訪問控制列表進行策略路由

使用ACL訪問控制列表進行策略路由

我們先來簡單的講解一下ACL訪問控制列表,ACL的本質,是對流量進行分組的策略,對資料流進行直接控制,或者用作決策。在ACL的一般應用中通常用來過濾有風險的流量分組或者放行安全的流量分組,擁有非常高的靈活性。

ACL訪問控制列表相當於一些列的if、else if語句,從上到下依次匹配,當匹配成功便執行ACL的操作,而不繼續進行匹配,一致匹配到ACL列表的末尾,在每個ACL訪問控制列表的末尾都有一條隱藏的deny all的選項,也就是說如果配置了ACL的話,一條資料流量若沒有滿足你配置的ACL中任何條目,它將被過濾掉,所以在通常情況下我們都會在ACL的最後加上一條permit any的語句,來放行沒有匹配的流量。而且ACL只對穿過裝置的流量進行控制,無法對裝置產生的流量進行控制。

ACL共分為兩類,標準訪問控制列表(1-99)和擴充套件訪問控制列表(100-199),在標準ACL中只將流量的源作為判定條件,所有策略均根據原IP地址來設計,在標準ACL中不能指定協議型別等具體項。擴充套件ACL能夠判斷第三層和第四層的網路協議資料包中的多種欄位,如源與目的IP地址,埠號,協議種類等,能在標準ACL的基礎上做出更細緻更精準的策略。

使用ACL可以緩解多種安全威脅,如IP地址出入站欺騙,DDOS拒絕服務攻擊,拒絕ICMP和traceroute訊息出入站來防止攻擊者窺探內部網路環境或者控制Telnet和SSH的訪問。

訪問控制列表舉例

Access-list 110 deny tcp any host 172.16
.50.5 eq 21 Access-list 110 deny tcp any host 172.16.50.5 eq 23 Access-list 110 permit ip any any

這條access-list 110說的是這是一個擴充套件ACL(110>100),對訪問主機172.16.50.6的tcp協議的21埠和23埠的所有資料進行過濾。這兩個埠分別表示FTP和Telnet,any的意思是源地址是任意,host標識目的地址是一個主機,ip地址是172.16.50.5。綜上,這條ACL的意思就是除了去往172.16.50.5的FTP和Telnet會被過濾外,其他的均可正常通過。

接下來進入正題,如何使用ACL進行策略路由。我們一定聽說過route-map,route-map是一種複雜的訪問列表,使用match命令對資料包進行條件測試,若條件滿足,就會採取一些由set命令指定的行為。同ACL一樣,route-map也不能對本裝置產生的流量進行控制。

Route-map的原理是:首先route-map本身也是一個列表,流量到來之後會從列表的上至下進行匹配,一旦匹配成功,進行相應的動作。匹配的條件時基於ACL或者prefix-list,若匹配至route-map列表末尾後仍沒有找到對應項,則根據route-map應用場景的不同有不同的結果。在路由協議的轉發策略中,若沒有匹配項則本條路由不會被轉發,若route-map應用在埠上則本次直接將它視為普通流量處理(該路由路由,該處理處理),並不會因為沒有匹配到route-map而將此流量丟棄,這是route-map應用在埠和協議轉發中的本質區別。

既然如此,route-map就可以在流量的入介面上進行一些凌駕於路由表之上的操作,比如非等價負載均衡,強制的負載均衡,用下面拓撲來舉例子:
這裡寫圖片描述
我們只想讓源為5.5.5.0的VIP使用者使用上面的VIP專用快速通道訪問伺服器1.1.1.1,而其他的普通使用者使用下面的普通鏈路訪問伺服器,在這裡我們就可以使用route-map進行強制的負載均衡,哪怕在R4上沒有路由表,下面視具體配置。

首先我們先把EIGRP和R5的網路配好:
在R1上配置:

R1>en
R1#conf t
R1(config)#int lo 0
R1(config-if)#ip add 1.1.1.1 255.255.255.255
R1(config-if)#no sh
R1(config-if)#int f0/0
R1(config-if)#ip add 12.1.1.1 255.255.255.0
R1(config-if)#no sh
R1(config-if)#int s2/0
R1(config-if)#ip add 13.1.1.1 255.255.255.0
R1(config-if)#no sh
R1(config-if)#exi

R1(config)#router ei 90
R1(config-router)#no au
R1(config-router)#net 1.1.1.1 0.0.0.0
R1(config-router)#net 12.1.1.0 0.0.0.255
R1(config-router)#net 13.1.1.0 0.0.0.255
R1(config-router)#exi

在R2上配置:

R2>en
R2#conf t
R2(config)#int f0/0
R2(config-if)#ip add 12.1.1.2 255.255.255.0
R2(config-if)#no sh
R2(config-if)#int f0/1
R2(config-if)#ip add 24.1.1.2 255.255.255.0
R2(config-if)#no sh
R2(config-if)#exi

R2(config)#router ei 90
R2(config-router)#no au 
R2(config-router)#net 12.1.1.0 0.0.0.255
R2(config-router)#net 24.1.1.0 0.0.0.255
R2(config-router)#exi

在R3上配置:

R3>en
R3#conf t
R3(config)#int s2/0
R3(config-if)#ip add 13.1.1.3 255.255.255.0
R3(config-if)#no sh
R3(config-if)#int s2/1
R3(config-if)#ip add 34.1.1.3 255.255.255.0
R3(config-if)#no sh
R3(config-if)#exi 

R3(config)#router ei 90
R3(config-router)#no au
R3(config-router)#net 13.1.1.0 0.0.0.255
R3(config-router)#net 34.1.1.0 0.0.0.255
R3(config-router)#exi

在R4上配置:

R4>en
R4#conf t
R4(config)#int f0/1
R4(config-if)#ip add 24.1.1.4 255.255.255.0
R4(config-if)#no sh
R4(config-if)#int s1/1
R4(config-if)#ip add 34.1.1.4 255.255.255.0
R4(config-if)#int f0/0
R4(config-if)#ip add 45.1.1.4 255.255.255.0
R4(config-if)#no sh
R4(config-if)#exi

R4(config)#router ei 90
R4(config-router)#no au
R4(config-router)#net 24.1.1.0 0.0.0.255
R4(config-router)#net 34.1.1.0 0.0.0.255
R4(config-router)#exi

在R5進行配置:

R5>en
R5#conf t
R5(config)#int lo 0
R5(config-if)#ip add 5.5.5.5 255.255.255.255
R5(config-if)#no sh
R5(config-if)#int lo 1
R5(config-if)#ip add 50.5.5.5 255.255.255.255
R5(config-if)#no sh
R5(config-if)#int f0/0
R5(config-if)#ip add 45.1.1.5 255.255.255.0
R5(config-if)#no sh
R5(config-if)#exi

接下來在R4上配置去往5.5.5.5和50.5.5.5的靜態路由並把R4的靜態路由和直連重分發進EIGRP,然後在R5上配置預設路由:

R4(config)#ip route 5.5.5.0 255.255.255.0 f0/0
R4(config)#ip route 50.5.5.0 255.255.255.0 f0/0
R4(config)#router ei 90
R4(config-router)#redistribute connected metric 10000 1 255 1 1500
R4(config-router)#redistribute static metric 10000 1 255 1 1500
R4(config-router)#exi
R5(config)#ip route 0.0.0.0 0.0.0.0 f0/0

接下來就是重頭戲了,我們在R4上配置策略來滿足要求:5.5.5.0的使用者流量可以走上面的快速通道,而50.5.5.0的使用者只能走下面的普通通道。

R4(config)#access-list 10 permit 5.5.5.0 0.0.0.255 
R4(config)#access-list 20 permit 50.5.5.0 0.0.0.255

R4(config)#route-map cisco permit 10
R4(config-route-map)#match ip address 10
R4(config-route-map)#set ip next-hop 24.1.1.2
R4(config-route-map)#exi

R4(config)#route-map cisco permit 20
R4(config-route-map)#match ip address 20
R4(config-route-map)#set ip next-hop 34.1.1.3
R4(config-route-map)#exi

R4(config)#int f0/0
R4(config-if)#ip policy route-map cisco
R4(config-if)#exi

這裡一共三步:

  1. 配置兩個ACL分別用來抓取5.5.5.0和50.5.5.0
  2. 配置一個route-map鍾前兩條分別匹配剛才的兩個ACL
  3. 在介面上應用這個route-map

接下來我們在R5上驗證是否滿足:

R5#traceroute 1.1.1.1 source 5.5.5.5

Type escape sequence to abort.
Tracing the route to 1.1.1.1

  1 45.1.1.4 60 msec 60 msec 4 msec
  2 24.1.1.2 192 msec 104 msec 120 msec
  3 12.1.1.1 100 msec 116 msec 112 msec
R5#traceroute 1.1.1.1 source 50.5.5.5

Type escape sequence to abort.
Tracing the route to 1.1.1.1

  1 45.1.1.4 52 msec 28 msec 36 msec
  2 34.1.1.3 92 msec 100 msec 60 msec
  3 13.1.1.1 132 msec 160 msec 144 msec
R5#traceroute 1.1.1.1 source 50.5.5.5

Type escape sequence to abort.
Tracing the route to 1.1.1.1

  1 45.1.1.4 40 msec 48 msec 28 msec
  2 34.1.1.3 68 msec 96 msec 72 msec
  3 13.1.1.1 132 msec 180 msec 180 msec
R5#traceroute 1.1.1.1 source 5.5.5.5 

Type escape sequence to abort.
Tracing the route to 1.1.1.1

  1 45.1.1.4 36 msec 32 msec 28 msec
  2 24.1.1.2 148 msec 68 msec 36 msec
  3 12.1.1.1 148 msec 208 msec 144 msec

ok!達成!!