Cisco ACL

ACL(access control list,存取控制清單)
清單大小,也就是條件敘述的數量,依可用記憶體的決定
用來控制管理流程
可用在防火牆中過濾封包與路徑
可用在isdn的ddr
ps:雖可過濾經過router的交通,但無法過濾router自己產生的交通

使用ACL步驟大致如下
1設定< acl id>規則
(config)#access-list < acl id> < describe rule>
2將應用在介面上
(config-if)#ip access-group < acl id> < act>

比對封包與acl的主要規則
1依順序循序地比對清單
2一旦比對到符合條件立即作用,不會繼續比對下去
3若比對到最後無符合條件則被丟棄,因為最後有隱藏deny all的命令

………………………………………………………………………………………………………………………………..

設定stand ACL
(config)#access-list < acl id> < act> < source [source wildcard]> [log]
標準acl建議放在靠近目的地的地方,因為只能限制來源

< acl id>
存取清單編號,編號從1開始,可設定的編號依協定有所不同,如下:
 ip:1-99,1300-1399
 extended ip:100-199,2000-2699 //設定extended acl時用
 appletalk:600-699
 ipx:800-899
 extended ipx:900-999 //設定extended acl時用
 ipx sap filter:1000-1099

< act>

有deny(拒絕),permit(允許),remark(註解)

< source [source wildcard]>

傳送封包的網路或主機編號
 source wildcard為選擇性參數,是一個32bit的wildcard mask(萬用遮罩)
 與ip位置配對而成的,可分成4個byte,各8bit
 wildcard mask位元為0代表檢查相對應的位元值,為1則忽略
ps:
萬用字元any,可表示source=0.0.0.0,source willdcard=255.255.255.255
ex:0.0.0.0 255.255.255.255 可用any表示
萬用字元host,可表示wildcard mask 0.0.0.0,此為預設
ex:172.30.16.29 0.0.0.0 可用host 172.30.16.29或172.30.16.29表示

[log]

產生有關封包詳細的紀錄訊息

標準acl常用範例
ex:
設定acl編號1的描述
(config)#access-list 1 remark this is a example //對acl id 1註解
(config)#access-list 1 deny 172.16.1.1 //拒絕172.16.1.1
(config)#access-list 1 permit 172.16.1.0 0.0.0.255 //允許任何來自172.16.1.0的網路
(config)#access-list 1 deny 172.16.1.1 0.0.255.255 //拒絕任何來自172.16.0.0的網路
(config)#access-list 1 deny 172.16.88.0 0.0.7.255 //拒絕任何來自172.16.88.0/21的網路
(config)#access-list 1 deny 172.16.192.0 0.0.31.255 //拒絕任何來自172.16.192.0/19的網路
(config)#access-list 1 permit any //允許任何網路

…..

設定extended ACL
(config)#access-list < acl id> [dynamic] [timeout] < act> < protocol> < addr info> [other options]
extended acl建議放在靠近source的地方
因為extended acl的設定較詳細,放在source是沒有問題
且可省資源,讓封包一要出去時就可以檢查,而非走遠才發現此封包不准進入目的端

[dynamic] 將acl定義為動態
[timeout] 指定存取清單的有效的時間長度,預設無限長,以分鐘為單位
< protocol> 網路協定的名稱或編號 ex:ip,tcp,eigrp,icmp,…等
< addr info>
位置資訊,格式為< source [source wildcard]> < destination [destination wildcard]>
 < destination [destination wildcard]> 封包傳送到網路或主機的編號,格式同source
 < source [source wildcard]> 同標準acl 
[other options]
其他可選的參數,格式為[precedence] [tos] [log|log-input] [time-range] [fragments]
 [precede] 可利用優先權來過濾流量,以0到7的數字表示
 [tos] 可利用服務等級來過濾流量,以0到7的數字表示
 [log|log-input],log-input包括輸入介面與來源mac位置,或紀錄輸出中的vc
 [time-range] 應用在此敘述時間範圍的名稱
 [fragments] 將acl項目應用到noninitial(非初始化的)封包片段上,因此不是允許就是拒絕封包片段
ex:
time-range大致用法
(config)#time-range
(config-time-range)#periodic
(config)#access-list 101 permit tcp any any time-range

fragments
若packet為fragment,
預設只完整檢查initial fragment,noninitial fragment只檢查protocol,src/dst ip,若符合則放行,不符合則比對下一條acl 
若加了fragments,則會對noninitial fragment進行控制 

ACL和ICMP與IGMP 
extended ACL應用在icmp或igmp時,[protocol]=icmp或igmp
(config)#access-list < acl id> [dynamic] [timeout] < act> < protocol> < addr info> [icmp] [other options]
[icmp]可使用欄位如下:
 [icmp-type] 利用icmp訊息類型來過濾icmp封包,icmp訊息類型是介於0-255的數字
 [icmp-code] 利用icmp訊息碼進行過濾icmp封包,icmp訊息碼是介於0-255的數字
 [icmp-message] 利用icmp訊息名稱過濾icmp封包
 [igmp-type] 利用icmp訊息類型來過濾igmp封包,igmp訊息類型是介於0-15的數字,針對igmp

ACL和TCP與UDP
extended ACL應用在tcp或udp時,[protocol]=tcp或udp
(config)#access-list < acl id> [dynamic] [timeout] < act> < protocol> < detail addr info> [established] [other options]
< detail addr info>
格式為< source [source wildcard] [operator [port]]> < destination [destination wildcard] [operator [port]]>
 [operator] 比較來源與目的地埠,運算種類有lt(小於),gt(大於),eq(等於),neq(不等於),range(範圍)
 [port] 過濾tcp或udp的埠或名稱
[established]
針對tcp,表示己建立的連線
ex:
設定acl編號101的描述
(config)#access-list 101 permit tcp 172.16.6.0 0.0.0.255 any eq telnet //允許來自172.16.6.0網路的封包使用telnet
(config)#access-list 101 deny tcp 172.16.4.0 0.0.0.255 172.16.3.0 0.0.0.255 eq 21 //拒絕172.16.4.0/24的port21資料到172.16.3.0/24
(config)#access-list 101 deny tcp host 172.16.10.1 host 172.16.30.5 eq 23 //拒絕172.16.10.1 telnet到172.16.30.5
(config)#access-list 101 permit ip any any eq SMTP //允許SMTP
(config)#access-list 101 permit ip any any //允許其他資料
(config)#access-list 101 permit ip 0.0.0.0 255.255.255.255 0.0.0.0 255.255.255.255 //允許其他資料,和any any相同

…..

命名式ACL
(config)#ip access-list < class> < name>
< class>選standed,執行後進入(config-std-nacl)#
< class>選extended,執行後進入(config-ext-nacl)#
設定規則和acl同,但省略access-list < acl id>
ps:acl名稱不可重覆,且只在IOS11.2之後支援
ex:設定acl名稱為server-access的描述,並應用在從eth0介面出去
(config)#ip access-list extended server-access
(config-ext-nacl)#permit tcp any host 131.108.101.99 eq smtp //只可存取電子郵件
(config-ext-nacl)#deny ip any any //拒絕所有ip
(config-ext-nacl)#^z
(config)#interface ethernet 0
(config-if)#ip access-group server-access out

…………………………………………………………………………………………………………………….

設定介面使用acl
(config-if)#ip access-group < acl id|acl name> < act>
< acl id|acl name>存取清單編號或名稱
< act>有in(進入),out(出去)
ps:每個介面的每個協定的每個方向只可有一個ACL
ex:
讓進入ethernet0介面使用acl編號1的描述
(config)#interface ethernet 0
(config-if)#ip access-group 1 in

設定虛擬終端機使用ACL
(config-line)#access-class < stand acl id> < act>
< stand acl id>標準存取清單編號,目前只支援標準access-list設定的編號
< act>有in(進入),out(出去)
ex:
讓進入vty 0-4使用acl編號1的描述
(config)#line vty 0 4
(config-line)#access-class 1 in

…………………………………………………………………………………………………………………….

顯示ACL
#show access-list [acl-id]
越後面的規則表示越晚加入的
畫面大致如下
Standard IP access list 1   //標準acl
 1 deny host 24.17.2.18 (5 matches)  //拒絕24.17.2.18
 1 permit any (395 matches)   //但允許其他所有
Extended IP access list account  //命名式延伸acl
 permit ip any any (0 matches)

判斷acl是否應用在介面上可用
#show running-config
相關資訊畫面大致如下
…省略
interface Ethernet0
ip address 24.17.2.2 255.255.255.240
no ip directed-broadcast
ip access-group 1 in //eth0介面使用acl 1在進入的介面
…省略
access-list 1 deny host 24.17.2.18 //acl 1的內容
access-list 1 permit any
ip access-list extended account  //命名式延伸acl acount的內容 
 permit ip any any
…省略

看acl應用在介面上的編號和direction(方向)
#show ip interface
以看s0介面的acl為例,畫面大致如下
serial 0 is up, line protocol is up
…省略
outgoing access list is 101 //進入方向使用acl 101
Inbound access list is not set //出去方向沒設定acl
…省略