標準型IP訪問列表的格式
---- 標準型IP訪問列表的格式如下:
---- access-list[list number][permit|deny][source address][address][wildcard mask][log]
---- 下面解釋一下標準型IP訪問列表的關鍵字和參數。首先,在access和list這2個關鍵字之間必須有一個連字符"-";
一、list nubmer參數
list number的范圍在0~99之間,這表明該access-list語句是一個普通的標準型IP訪問列表語句。因為對于Cisco IOS,在0~99之間的數字指示出該訪問列表和IP協議有關,所以list number參數具有雙重功能:
(1)定義訪問列表的操作協議;
(2)通知IOS在處理access-list語句時,把相同的list number參數作為同一實體對待。正如本文在后面所討論的,擴展型IP訪問列表也是通過list number(范圍是100~199之間的數字)而表現其特點的。因此,當運用訪問列表時,還需要補充如下重要的規則: 在需要創建訪問列表的時候,需要選擇適當的list number參數。
二、permit|deny
允許/拒絕數據包通過
---- 在標準型IP訪問列表中,使用permit語句可以使得和訪問列表項目匹配的數據包通過接口,而deny語句可以在接口過濾掉和訪問列表項目匹配的數據包。
三、[source address][address][wildcard mask]
代表主機的IP地址,利用不同掩碼的組合可以指定主機。
•指定網絡地址
為了更好地了解IP地址和通配符掩碼的作用,這里舉一個例子。假設您的公司有一個分支機構,其IP地址為C類的192.46.28.0。在您的公司,每個分支機構都需要通過總部的路由器訪問Internet。要實現這點,您就可以使用一個通配符掩碼 0.0.0.255。因為C類IP地址的最后一組數字代表主機,把它們都置1即允許總部訪問網絡上的每一臺主機。因此,您的標準型IP訪問列表中的access-list語句如下:
---- access-list 1 permit 192.46.28.0 0.0.0.255
---- 注意,通配符掩碼是子網掩碼的補充。因此,如果您是網絡高手,您可以先確定子網掩碼,然后把它轉換成可應用的通配符掩碼。這里,又可以補充一條訪問列表的規則。
•指定主機地址
如果您想要指定一個特定的主機,可以增加一個通配符掩碼0.0.0.0。例如,為了讓來自IP地址為192.46.27.7的數據包通過,可以使用下列語句:
---- Access-list 1 permit 192.46.27.7 0.0.0.0
---- 在Cisco的訪問列表中,用戶除了使用上述的通配符掩碼0.0.0.0來指定特定的主機外,還可以使用"host"這一關鍵字。例如,為了讓來自IP地址為192.46.27.7的數據包通過,您可以使用下列語句:
---- Access-list 1 permit host 192.46.27.7
---- 除了可以利用關鍵字"host"來代表通配符掩碼0.0.0.0外,關鍵字"any"可以作為源地址的縮寫,并代表通配符掩碼0.0.0.0 255.255.255.255。例如,如果希望拒絕來自IP地址為192.46.27.8的站點的數據包,可以在訪問列表中增加以下語句:
---- Access-list 1 deny host 192.46.27.8
---- Access-list 1 permit any
---- 注意上述2條訪問列表語句的次序。第1條語句把來自源地址為192.46.27.8的數據包過濾掉,第2條語句則允許來自任何源地址的數據包通過訪問列表作用的接口。如果改變上述語句的次序,那么訪問列表將不能夠阻止來自源地址為192.46.27.8的數據包通過接口。因為訪問列表是按從上到下的次序執行語句的。這樣,如果第1條語句是:
---- Access-list 1 permit any
---- 那么來自任何源地址的數據包都會通過接口。
•拒絕的奧秘
---- 在默認情況下,除非明確規定允許通過,訪問列表總是阻止或拒絕一切數據包的通過,即實際上在每個訪問列表的最后,都隱含有一條"deny any"的語句。假設我們使用了前面創建的標準IP訪問列表,從路由器的角度來看,這條語句的實際內容如下:
---- access-list 1 deny host 192.46.27.8
---- access-list 1 permit any
---- access-list 1 deny any
---- 在上述例子里面,由于訪問列表中第2條語句明確允許任何數據包都通過,所以隱含的拒絕語句不起作用,但實際情況并不總是如此。例如,如果希望來自源地址為192.46.27.8和192.46.27.12的數據包通過路由器的接口,同時阻止其他一切數據包通過,則訪問列表的代碼如下:
---- access-list 1 permit host 192.46.27.8
---- access-list 1 permit host 192.46.27.12
---- 注意,因為所有的訪問列表會自動在最后包括該語句.
四、log
討論一下標準型IP訪問列表的參數"log",它起日志的作用。一旦訪問列表作用于某個接口,那么包括關鍵字"log"的語句將記錄那些滿足訪問列表
中"permit"和"deny"條件的數據包。第一個通過接口并且和訪問列表語句匹配的數據包將立即產生一個日志信息。后續的數據包根據記錄日志的方式,或者在控制臺上顯示日志,或者在內存中記錄日志。通過Cisco IOS的控制臺命令可以選擇記錄日志方式。
擴展型IP訪問列表
---- 擴展型IP訪問列表在數據包的過濾方面增加了不少功能和靈活性。除了可以基于源地址和目標地址過濾外,還可以根據協議、源端口和目的端口過濾,甚至可以利用各種選項過濾。這些選項能夠對數據包中某些域的信息進行讀取和比較。擴展型IP訪問列表的通用格式如下:
---- access-list[list number][permit|deny]
---- [protocol|protocol key word]
---- [source address source-wildcard mask][source port]
---- [destination address destination-wildcard mask]
---- [destination port][log options]
---- 和標準型IP訪問列表類似,"list number"標志了訪問列表的類型。數字100~199用于確定100個惟一的擴展型IP訪問列表。"protocol"確定需要過濾的協議,其中包括IP、TCP、UDP和ICMP等等。
---- 如果我們回顧一下數據包是如何形成的,我們就會了解為什么協議會影響數據包的過濾,盡管有時這樣會產生副作用。圖2表示了數據包的形成。請注意,應用數據通常有一個在傳輸層增加的前綴,它可以是TCP協議或UDP協議的頭部,這樣就增加了一個指示應用的端口標志。當數據流入協議棧之后,網絡層再加上一個包含地址信息的IP協議的頭部。由于IP頭部傳送TCP、UDP、路由協議和ICMP協議,所以在訪問列表的語句中,IP協議的級別比其他協議更為重要。但是,在有些應用中,您可能需要改變這種情況,您需要基于某個非IP協議進行過濾
---- 為了更好地說明,下面列舉2個擴展型IP訪問列表的語句來說明。假設我們希望阻止TCP協議的流量訪問IP地址為192.78.46.8的服務器,同時允許其他協議的流量訪問該服務器。那么以下訪問列表語句能滿足這一要求嗎?
---- access-list 101 permit host 192.78.46.8
---- access-list 101 deny host 192.78.46.12
---- 回答是否定的。第一條語句允許所有的IP流量、同時包括TCP流量通過指定的主機地址。這樣,第二條語句將不起任何作用。可是,如果改變上面2條語句的次序
反向訪問列表
有5個VLAN,分別為 管理(63)、辦公(48)、業務(49)、財務(50)、家庭(51)。 要求: 管理可以訪問其它,而其它不能訪問管理,并且其它VLAN之間不能互相訪問! 它的應用不受影響,例如通過上連進行INTERNET的訪問 。
•方法一: 只在管理VLAN的接口上配置,其它VLAN接口不用配置。
在入方向放置reflect
ip access-list extended infilter
permit ip any any reflect cciepass
!
在出方向放置evaluate
ip access-list extended outfilter
evaluate cciepass
deny ip 10.54.48.0 0.0.0.255 any
deny ip 10.54.49.0.0.0.0.255 any
deny ip 10.54.50.0 0.0.0.255 any
deny ip 10.54.51.0 0.0.0.255 any
permit ip any any
!應用到管理接口
int vlan 63
ip access-group infilter in
ip access-group outfilter out
•方法二:在管理VLAN接口上不放置任何訪問列表,而是在其它VLAN接口都放。
以辦公VLAN為例:
在出方向放置reflect
ip access-list extended outfilter
permit ip any any reflect cciepass
!
在入方向放置evaluate
ip access-list extended infilter
deny ip 10.54.48.0 0.0.0.255 10.54.49.0 0.0.0.255
deny ip 10.54.48.0 0.0.0.255 10.54.50.0 0.0.0.255
deny ip 10.54.48.0 0.0.0.255 10.54.51.0 0.0.0.255
deny ip 10.54.48.0 0.0.0.255 10.54.63.0 0.0.0.255
evaluate cciepass
permit ip any any
!
應用到辦公VLAN接口:
int vlan 48
ip access-group infilter in
ip access-group outfilter out
總結:
1) Reflect放置在允許的方向上(可進可出)
2) 放在管理VLAN上配置簡單,但是不如放在所有其它VLAN上直接。
3) 如果在內網口上放置: 在入上設置Reflect
如果在外網口上放置: 在出口上放置Reflect
LAN WAN
-
inbound outbound
4)reflect不對本地路由器上的數據包跟蹤,所以對待進入的數據包時注意,要允許一些數據流進入 從IOS12.0開始,CISCO路由器新增加了一種基于時間的訪問列表。通過它,可以根據一天中的不同時間,或者根據一星期中的不同日期,當然也可以二者結合起來,控制對網絡數據包的轉發。
一、使用方法
這種基于時間的訪問列表就是在原來的標準訪問列表和擴展訪問列表中加入有效的時間范圍來更合理有效的控制網絡。它需要先定義一個時間范圍,然后在原來的各種訪問列表的基礎上應用它。并且,對于編號訪問表和名稱訪問表都適用。
二、使用規則
用time-range 命令來指定時間范圍的名稱,然后用absolute命令或者一個或多個periodic命令來具體定義時間范圍。 IOS命令格式為:
time-range time-range-name absolute [start time date] [end time date]
periodic days-of-the week hh:mm to [days-of-the week] hh:mm
我們分別來介紹下每個命令和參數的詳細情況
time-range : 用來定義時間范圍的命令
time-range-name:時間范圍名稱,用來標識時間范圍,以便于在后面的訪問列表中引用
absolute: 該命令用來指定絕對時間范圍。它后面緊跟這start和 end兩個關鍵字。
在這兩個關鍵字后面的時間要以24小時制、hh:mm(小時:分鐘)表示,日期要按照日/月/年來表示??梢钥吹剑麄儍蓚€可以都省略。如果省略start及其后面的時間,那表示與之相聯系的permit 或deny語句立即生效,并一直作用到end處的時間為止;若省略如果省略end及其后面的時間,那表示與之相聯系的permit 或deny語句在start處表示的時間開始生效,并且永遠發生作用,當然把訪問列表刪除了的話就不會起作用了。
怎么樣,看明白了嗎?上面講的就是命令和基本參數為了便于理解,我們看兩個例子。
1、如果要表示每天的早8點到晚8點就可以用這樣的語句:
absolute start 8:00 end 20:00
2、再如,我們要使一個訪問列表從2006年10月1日早5點開始起作用,直到2006年10月31日晚24點停止作用,語句如下:
absolute start 5:00 1 December 2000 end 24:00 31 December 2000
這樣一來,我們就可以用這種基于時間的訪問列表來實現,而不用半夜跑到辦公室去刪除那個訪問列表了。這對于網絡管理員來說,是個很好的事情。如果你恰好是網管。。哇。。。什么也不要講了,快回去好好配置吧:)。好了接下來,讓我們接著看下一個periodic命令及其參數。一個時間范圍只能有一個absolute語句,但是可以有幾個periodic語句。
periodic:主要是以星期為參數來定義時間范圍的一個命令。它的參數主要有賓Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday中的一個或者幾個的組合,也可以是daily(每天)、 weekday(周一到周五)或者 weekend(周末)。
示例一: 帶Established選項的擴展訪問列表
拓撲:
R2-(S2/0)-----------------(S2/0)-R1(S2/1)---------------(S2/1)-R3
帶有Established的擴展訪問列表允許內部用戶訪問外部網絡,而拒絕外部網絡訪問內部網絡,而沒帶Established的標準訪問列表和擴展訪問列表沒有這個特性.
這個示例首先用OSPF來使全網互聯.
R1:
我們讓R2作為內部網絡,R3作為內部網絡,以下配置使R2發起訪問R3沒問題,從R3訪問R2則被
拒絕.注意這個配置方案是針對基于TCP的應用,任何TCP通訊都是雙向的,從R2發起的訪問外
部網絡之后,外部網絡的流量得以通過,這個時候TCP報文,ACK或RST位被設置為1
R1(configure)access-list 101 permit tcp any any established log-input
R1(configure)access-list 101 permit ospf any any
R1(configure)access-list 101 deny ip any any log-input
R1(configure)int s2/1
R1(configure-if)ip access-group 101 in
以上log-input是為了顯示監視數據報文被過濾的情況,接下來用debug ip packet
detailed來監視報文經過R1的情況,應該路由器還有OSPF報文產生,因此我們對DEBUG信息做
了限制.
r1(config)#access-list 102 permit tcp any any
我們這樣做 讓R2發起telnet訪問R3
r1#telnet 3.3.3.3
Trying 3.3.3.3 ... Open
r3>
*Mar 1 00:55:53.003: IP: tableid=0, s=13.1.1.1 (local), d=3.3.3.3 (Serial2/1),
routed via RIB
*Mar 1 00:55:53.003: IP: s=13.1.1.1 (local), d=3.3.3.3 (Serial2/1), len 44,
sending
*Mar 1 00:55:53.007: TCP src=11001, dst=23, seq=2398697781, ack=0, win=4128 SYN
*Mar 1 00:55:53.179: %SEC-6-IPACCESSLOGP: list 101 permitted tcp 3.3.3.3(23)
(Serial2/1 ) -> 13.1.1.1(11001), 1 packet
*Mar 1 00:55:53.183: IP: tableid=0, s=3.3.3.3 (Serial2/1), d=13.1.1.1
(Serial2/1), routed via RIB
*Mar 1 00:55:53.183: IP: s=3.3.3.3 (Serial2/1), d=13.1.1.1 (Serial2/1), len 44,
rcvd 3
*Mar 1 00:55:53.187: TCP src=23, dst=11001, seq=949632690, ack=2398697782,
win=4128 ACK SYN
*Mar 1 00:55:53.187: IP: tableid=0, s=13.1.1.1 (local), d=3.3.3.3 (Serial2/1),
routed via RIB
*Mar 1 00:55:53.191: IP: s=13.1.1.1 (local), d=3.3.3.3 (Serial2/1), len 40,
sending
*Mar 1 00:55:53.191: TCP src=11001, dst=23, seq=2398697782, ack=949632691,
win=4128 ACK
*Mar 1 00:55:53.199: IP: tableid=0, s=13.1.1.1 (local), d=3.3.3.3 (Serial2/1),
routed via RIB
*Mar 1 00:55:53.203: IP: s=13.1.1.1 (local), d=3.3.3.3 (Serial2/1), len 49,
sending
*Mar 1 00:55:53.203: TCP src=11001, dst=23, seq=2398697782, ack=949632691,
win=4128 ACK PSH
*Mar 1 00:55:53.207: IP: tableid=0, s=13.1.1.1 (local), d=3.3.3.3 (Serial2/1),
routed via RIB
*Mar 1 00:55:53.211: IP: s=13.1.1.1 (local), d=3.3.3.3 (Serial2/1), len 40,
sending
*Mar 1 00:55:53.215: TCP src=11001, dst=23, seq=2398697791, ack=949632691,
win=4128 ACK
*Mar 1 00:55:53.455: IP: tableid=0, s=3.3.3.3 (Serial2/1), d=13.1.1.1
(Serial2/1), routed via RIB
*Mar 1 00:55:53.455: IP: s=3.3.3.3 (Serial2/1), d=13.1.1.1 (Serial2/1), len 52,
rcvd 3
*Mar 1 00:55:53.459: TCP src=23, dst=11001, seq=949632691, ack=2398697791,
win=4119 ACK PSH
*Mar 1 00:55:53.459: IP: tableid=0, s=3.3.3.3 (Serial2/1), d=13.1.1.1
(Serial2/1), routed via RIB
*Mar 1 00:55:53.463: IP: s=3.3.3.3 (Serial2/1), d=13.1.1.1 (Serial2/1), len 45,
rcvd 3
*Mar 1 00:55:53.467: TCP src=23, dst=11001, seq=949632703, ack=2398697791,
win=4119 ACK PSH
*Mar 1 00:55:53.467: IP: tableid=0, s=3.3.3.3 (Serial2/1), d=13.1.1.1
(Serial2/1), routed via RIB
*Mar 1 00:55:53.471: IP: s=3.3.3.3 (Serial2/1), d=13.1.1.1 (Serial2/1), len 43,
rcvd 3
*Mar 1 00:55:53.471: TCP src=23, dst=11001, seq=949632708, ack=2398697791,
win=4119 ACK PSH
*Mar 1 00:55:53.475: IP: tableid=0, s=3.3.3.3 (Serial2/1), d=13.1.1.1
(Serial2/1), routed via RIB
*Mar 1 00:55:53.479: IP: s=3.3.3.3 (Serial2/1), d=13.1.1.1 (Serial2/1), len 46,
rcvd 3
*Mar 1 00:55:53.479: TCP src=23, dst=11001, seq=949632711, ack=2398697791,
win=4119 ACK PSH
*Mar 1 00:55:53.483: IP: tableid=0, s=13.1.1.1 (local), d=3.3.3.3 (Serial2/1),
routed via RIB
*Mar 1 00:55:53.487: IP: s=13.1.1.1 (local), d=3.3.3.3 (Serial2/1), len 43,
sending
*Mar 1 00:55:53.487: TCP src=11001, dst=23, seq=2398697791, ack=949632717,
win=4102 ACK PSH
*Mar 1 00:55:53.491: IP: tableid=0, s=13.1.1.1 (local), d=3.3.3.3 (Serial2/1),
routed via RIB
*Mar 1 00:55:53.495: IP: s=13.1.1.1 (local), d=3.3.3.3 (Serial2/1), len 43,
sending
*Mar 1 00:55:53.495: TCP src=11001, dst=23, seq=2398697794, ack=949632717,
win=4102 ACK PSH
*Mar 1 00:55:53.499: IP: tableid=0, s=13.1.1.1 (local), d=3.3.3.3 (Serial2/1),
routed via RIB
*Mar 1 00:55:53.503: IP: s=13.1.1.1 (local), d=3.3.3.3 (Serial2/1), len 49,
sending
*Mar 1 00:55:53.503: TCP src=11001, dst=23, seq=2398697797, ack=949632717,
win=4102 ACK PSH
*Mar 1 00:55:53.659: IP: tableid=0, s=3.3.3.3 (Serial2/1), d=13.1.1.1
(Serial2/1), routed via RIB
*Mar 1 00:55:53.663: IP: s=3.3.3.3 (Serial2/1), d=13.1.1.1 (Serial2/1), len 43,
rcvd 3
*Mar 1 00:55:53.663: TCP src=23, dst=11001, seq=949632717, ack=2398697797,
win=4113 ACK PSH
*Mar 1 00:55:53.867: IP: tableid=0, s=13.1.1.1 (local), d=3.3.3.3 (Serial2/1),
routed via RIB
*Mar 1 00:55:53.867: IP: s=13.1.1.1 (local), d=3.3.3.3 (Serial2/1), len 40,
sending
*Mar 1 00:55:53.871: TCP src=11001, dst=23, seq=2398697806, ack=949632720,
win=4099 ACK
*Mar 1 00:55:53.963: IP: tableid=0, s=3.3.3.3 (Serial2/1), d=13.1.1.1
(Serial2/1), routed via RIB
*Mar 1 00:55:53.967: IP: s=3.3.3.3 (Serial2/1), d=13.1.1.1 (Serial2/1), len 40,
rcvd 3
*Mar 1 00:55:53.967: TCP src=23, dst=11001, seq=949632720, ack=2398697806,
win=4104 ACK
注意R3返回R2的數據報文得以通過,接下來我們測試從R3發起訪問R2的情況
r3#telnet 2.2.2.2
Trying 2.2.2.2 ...
% Destination unreachable; gateway or host down
r1#
*Mar 1 01:02:22.779: %SEC-6-IPACCESSLOGP: list 101 denied tcp 13.1.1.3(11002)
(Serial2/1 ) -> 2.2.2.2(23), 1 packet
*Mar 1 01:02:22.783: IP: s=13.1.1.3 (Serial2/1), d=2.2.2.2, len 44, access
denied
*Mar 1 01:02:22.783: IP: tableid=0, s=13.1.1.1 (local), d=13.1.1.3 (Serial2/1),
routed via RIB
*Mar 1 01:02:22.787: IP: s=13.1.1.1 (local), d=13.1.1.3 (Serial2/1), len 56,
sending
*Mar 1 01:02:24.139: IP: s=12.1.1.2 (Serial2/0), d=224.0.0.5, len 80, rcvd 0
*Mar 1 01:02:24.315: IP: s=13.1.1.1 (local), d=224.0.0.5 (Serial2/1), len 80,
sending broad/multicast
*Mar 1 01:02:25.139: IP: s=12.1.1.1 (local), d=224.0.0.5 (Serial2/0), len 80,
sending broad/multicast
注意,TCP協議的第一次發送是SYN字段,這是用來同步準備建立一個新連接的兩端主機,而
ACK位由接收者置位從而向發送者表明數據已經成功接收.RST(reset)位說明什么時候重新
啟動連接.帶Eetablished的擴展訪問列表只允許ACK或RST位置1的TCP報文通過.
reflect+evalute實現單向訪問控制列表的最新實驗結果
第二步:
將上面的訪問控制列表改為:
器.
觀察發現,我從vlan12的客戶機上ping 其它vlan里面的任何一臺機器的話,就會自動生成一
條動態度的
access-list,(假如 我從vlan12的機器10.147.18.90 ping vlan1里面的10.147.17.251)
記錄如下:
Reflexive IP access list abcd
permit icmp host 10.147.17.251 host 10.147.18.90 (8 matches) (time left 297)
permit udp host 202.96.170.163 eq 8000 host 10.147.18.90 eq 4000 (6 matches)
(time left 247)
permit udp host 224.0.0.2 eq 1985 host 10.147.18.93 eq 1985 (155 matches) (time
left 299)
Extended IP access list in-filter
permit ip any any reflect abcd
Extended IP access list out-filter
evaluate abcd
deny ip any any (289 matches)
第三步:我想實現功能:vlan12里的機器能訪問所有其他vlan,除了vlan 2
(10.147.16.0/255.255.255.128)外均
不能訪問vlan12:
將訪問控制列表改為:
ip access-list extended in-filter
permit ip any any reflect abcd
ip access-list extended out-filter
evaluate abcd
permit ip 10.147.16.0 0.0.0.128 any
deny ip any any
結果一開始幾分鐘內,除了定義的VLAN2(10.147.16.0/255.255.255.128)外,其它vlan的機
器均ping不通vlan 12 的機器
后來就全部PING
不通,和第二次開發步的結果相同
我用你的方法在cisco3560交換機上測試,應用acl后,雙方向都不通了。分析一下怎么回
事,配置如下:
4號口劃分到vlan3,48號口劃分到vlan2
新聞熱點
疑難解答