1.概述
隨著Internet/Intranet的日益發展,幾乎每個公司都在建設自己的局域網,并且越來越多的公司連接到互聯網,從而網絡安全越來越被人們所重視。許多網絡廠商推出防火墻產品,用來保證網絡安全,包括抵抗惡意的攻擊;過濾互聯網上不安全的信息流;限制某些用戶或某些網絡應用的使用等等。訪問控制列表(ACL,Access Control List)同樣可以實現以上功能。它是基于包過濾的軟件防火墻,是一系列語句的有序集合,根據網絡中每個數據包所包含的信息的內容,來決定允許還是拒絕報文通過某個接口。訪問控制列表不僅可以限制網絡流量、提高網絡性能,而且還可以限制特定協議的流量,在該文中重點講述的是訪問控制列表作為網路安全訪問的基本手段如何實施。筆者將根據自己的從業經驗,基于Cisco路由器給出訪問控制列表的具體實現過程。
2.訪問控制列表的工作過程及其配置
訪問控制列表的主要作用是基于已經建立的標準來允許或拒絕報文流,從而它可以實現對數據報文的訪問控制。它是一組有permit(允許)和deny(拒絕)語句組成的條件列表, 可以讓管理員以基于數據報文的源IP地址、目的IP地址和協議類型的方式來控制網絡的數據流向,下面先看訪問控制列表的工作過程。
由圖1,我們看看一個數據包如何通過路由器。數據包由接口進入路由器,進入后,首先察看路由表,看數據包的目的地址是否在路由表條目中,如果存在,則根據路由表送至相應的接口,否則數據包丟棄。到達相應的接口后,看是否有訪問控制列表配置在接口上,如果有,就根據訪問列表的規則,判斷是不是允許該數據包通過;如果數據包不符合列表所有規則,那么就被拒絕丟棄,不能通過路由器。如果沒有訪問列表,數據包順利通過。
圖1 數據包出口操作
訪問控制列表分為標準訪問列表和擴展訪問列表,它們的基本語法如下:
Router(config)#access-list
ACL_number {permit|deny} protocol source
[source-wildcard] [source-port] [destination]
[destination-wildcard] [destination-port] [log]
例如,允許源ip地址在192.168.1.0網段內的數據包通過路有器,標準訪問列表配置如下:
Router(config)#access-list 1 permit ip 192.168.1.0 0.0.0.255
再如,拒絕源ip地址在192.168.1.0網段內機器telnet服務器192.168.2.100,擴展訪問列表配置如下:
Router(config)#access-list 101 deny tcp
192.168.1.0 0.0.0.255 192.168.2.100 0.0.0.0 eq 23
一個訪問控制列表可以有多條語句。列表配置完畢,還要把它掛到接口上去。如果掛到E0口,而且是對出E0口的數據包做限制,則操作如下:
Router(config)#interface e0
Router(config-if)#ip access-group 1 out
筆者曾經給某證券公司做過一個小型網絡系統,網絡拓撲圖如圖2,要求如下:
不允許網絡202.15.12.0內的機器登錄172.16.8.20的Ftp(端口號21)服務,但可以獲取172.16.8.20的其他網絡服務;網絡202.15.12.0內的機器能夠獲取172.16.8.10的Web服務(端口號80);其它訪問流量都被拒絕。配置如下:
Router(config)#access-list 111 deny tcp
202.15.12.0 0.0.0.255 172.16.8.20 0.0.0.0 eq 21
Router(config)#access-list 111 permit ip
202.15.12.0 0.0.0.255 172.16.8.20 0.0.0.0
Router(config)#access-list 111 permit tcp
202.15.12.0 0.0.0.255 172.16.8.10 0.0.0.0 eq 80
Router(config)#interface e0
Router(config-if)#ip access-group 111 out
圖2 網絡拓撲圖(路由器一側為證券公司網絡)
3.訪問控制列表的在過濾病毒中的應用
相信不少用戶的電腦都或多或少遭到病毒的侵犯,而病毒中最為流行又最讓人頭疼的當屬蠕蟲(Worm)病毒了。蠕蟲是通過分布式網絡來擴散傳播特定的信息或錯誤,進而造成網絡服務遭到拒絕并發生死鎖。它們生存在網絡的節點之中,依靠系統的漏洞在網上大量繁殖,造成網絡阻塞之類的破壞。可以依靠殺毒軟件來對付它們,也可以通過訪問控制列表,封鎖蠕蟲病毒傳播、掃描、攻擊用到的端口,事前就把蠕蟲病毒拒之門外。我們針對前一段時間鬧的沸沸揚揚沖擊波(Worm.Blaster)病毒,在路由器上作下面的配置。
首先控制Blaster蠕蟲的傳播,封鎖tcp的4444端口和udp的69端口。
Router(config)#access-list 110 deny tcp any any eq 4444
Router(config)#access-list 110 deny udp any any eq 69
然后控制Blaster蠕蟲的掃描和攻擊,封鎖tcp和udp的135、139、445、593等端口。
Router(config)#access-list 110 deny tcp any any eq 135
Router(config)#access-list 110 deny udp any any eq 135
Router(config)#access-list 110 deny tcp any any eq 139
Router(config)#access-list 110 deny udp any any eq 139
Router(config)#access-list 110 deny tcp any any eq 445
Router(config)#access-list 110 deny udp any any eq 445
Router(config)#access-list 110 deny tcp any any eq 593
Router(config)#access-list 110 deny udp any any eq 593
Router(config)#access-list 110 permit ip any any
該訪問控制列表的最后一條一定要加上,因為每個訪問控制列表都暗含著拒絕所有數據包,而且列表110前面都是deny語句,如果沒有最后這一條允許其它所有數據包,那么無論什么樣的數據包都不能通過路由器進入公司局域網,同樣公司局域網也不能訪問外網。
列表創建完畢,可以掛到接口上了。
Router(config)#interface s0
Router(config-if)#ip access-group 110 in
這樣訪問控制列表就可以阻止外來蠕蟲病毒的惡意掃描和攻擊了,一定程度上提高了網絡抵抗病毒的能力,保證了網絡的安全。
4.基于時間的訪問控制列表的應用
從IOS12.0開始,Cisco路由器新增加了一種基于時間的訪問列表。它首先要定義一個時間范圍,然后在原來的訪問列表的基礎上應用它。通過它,可以根據一天中的不同時間或者根據一星期中的不同日期控制網絡數據包的轉發。
先看一下它的基本語法:
Router(config)# time-range time-range-name
該命令表示進入time-range模式,并給該時間范圍起個名字。
Router(config-time-range)# absolute [start time date] [end time date]
Router(config-time-range)# periodic days-of-the-week hh:mm to [days-of-the-week] hh:mm
上面這兩條命令限制訪問控制列表的生效時間。另外,periodic語句可以有多條,但是absolute語句只能有一條。
再回到文中提到的證券公司,該公司要求員工在2004年4月1日到2004年6月1日的周一到周五上班時間(9:00-17:00)不能瀏覽Web站點,禁止使用QQ和MSN。我們分析如下:Web瀏覽通常使用HTTP或者HTTPS進行訪問,端口號是80(TCP)和443(TCP),MSN使用1863端口(TCP),QQ登錄使用8000端口(TCP/UDP),還有可能用到4000(UDP)進行通訊。另外這些軟件都支持代理服務器,目前代理服務器主要部署在TCP8080,TCP3128和TCP1080這三個端口上。所以有如下配置:
Router(config)# time-range securities-closing -time
Router(config-time-range)# absolute start 00:00 1 April 2004 end 23:59 1 June 2004
Router(config-time-range)# periodic Monday 09:00 to Friday 17:00
Router(config)#access-list 112 deny tcp 172.16.8. 0 0.0.0.255 any eq 80 time-range securities-closing -time
Router(config)#access-list 112 deny tcp 172.16.8. 0 0.0.0.255 any eq 443 time-range securities-closing -time
Router(config)#access-list 112 deny tcp 172.16.8. 0 0.0.0.255 any eq 1863 time-range securities-closing -time
Router(config)#access-list 112 deny tcp 172.16.8. 0 0.0.0.255 any eq 8000 time-range securities-closing -time
Router(config)#access-list 112 deny udp 172.16.8. 0 0.0.0.255 any eq 8000 time-range securities-closing -time
Router(config)#access-list 112 deny udp 172.16.8. 0 0.0.0.255 any eq 4000 time-range securities-closing -time
Router(config)#access-list 112 deny tcp 172.16.8. 0 0.0.0.255 any eq 3128 time-range securities-closing -time
Router(config)#access-list 112 deny tcp 172.16.8. 0 0.0.0.255 any eq 8080 time-range securities-closing -time
Router(config)#access-list 112 deny tcp 172.16.8. 0 0.0.0.255 any eq 1080 time-range securities-closing -time
Router(config)#access-list 112 permit ip any any
Router(config)#interface e1
Router(config-if)#ip access-group 112 out
上面的例子可以看出,合理有效的利用基于時間的訪問控制列表,可以更合理、更有效地控制網絡,更安全、更方便的保護我們的內部網絡。這樣網絡安全性提高了,也方便了網絡管理員的管理。
5.結束語
盡管我們有許多其它的保證網絡安全的措施,盡管訪問控制列表不能夠完全保證網絡的安全,但是由于訪問控制列表的配置簡單易行,能夠起到一定的防范作用,減輕網絡防火墻的負擔,而且不需要增加額外的硬件投資,所以它越來越引起網絡管理人員和網絡工程師的重視。