用訪問控制列表實現網路單向訪問(轉)
簡易拓撲圖(所有子網掩碼均為255.255.255.0):
PC(10.1.1.2)---E0(10.1.1.1)[RouterA]S0(192.1.1.1)---S1(192.1.1.2)[RouterB]
做網路的單向訪問其實實現的是防火牆的基本功能:我是內網,你是外網,我能訪問你,但你不能訪問我。
所以現在假設RouterA的E0口所連網段為內網段,RouterA S0所連的網段為外網段,還假設我想做的是內網的PC機能ping通外網RouterB的S1口,但RouterB卻ping不進我的內網。
用ACL來實現類似的單向訪問控制需要用到一種特殊的ACL,叫Reflexive ACL。Reflexive ACL的配置分為兩個部分,一部分是outbound的配置,一部分是inbound的配置。
在繼續下面的說明之前,先說點題外話。在最開始想到單向訪問問題時,我(也包括其它一些我的同事)自然的就這麼想:那我在E0口上允許PC的流量進來,然後再在S0口上禁止RouterB的流量進來不就行了?看上去好像沒什麼問題,但一試就知道其實是不行的。為什麼不行呢,因為很多人都忽略了這麼一個問題:即絕大多數的網路流量都是有去有回的,上面的方法只解決了去的問題,但這個流量在到達RouterB後,RouterB還需要返回這個流量給PC,這個返回的流量到了RouterA的S0口,但上面的方法卻在S0口上禁止了RouterB的流量進來,回來的流量被擋住了,通訊失敗。
好,下面再切回來。Reflexive ACL中outbound的部分決定了我出去的哪些內網網路流量是需要被單向訪問的,inbound部分決定了這些流量在返回後能被正確的識別並送給內網發起連線的PC機。
Reflexive ACL中outbound的部分:
ip access-list extended outbound_filter
permit icmp any any reflect icmp_traffic
permit ip any any
!---注意在Reflexive ACL中只能用named方式的ACL,不能用numbered方式的ACL。
!---基本配置和普通ACL並沒有什麼太多不同,不同之處是reflect icmp_traffic,它的意思是這條ACE作為單向流量來處理,並且給了一個名稱叫icmp_traffic,icmp_traffic在inbound部分被引用。
!---permit ip any any並不是必要的,加在這裡是為了另一個測試,下面會說明。
Reflexive ACL中inbound的部分:
ip access-list extended inbound_filter
evaluate icmp_traffic
deny ip any any log
!---inbound的配置有和普通ACL有點不同了,第一句evaluate icmp_traffic對上述outbound配置中的icmp_traffic進行了引用,也就是說,它要檢查從外網進來的流量,如果這個流量確實是從內網發起的對外訪問的返回流量,那麼允許這個流量進來。
!---注意deny ip any any log這句,雖然這句也是不必配的,因為是預設的deny ip any any,但我加了log來對上面outbound部分的permit ip any any進行測試。
Reflexive ACL中應用到介面的部分:
interface Serial0
ip address 192.1.1.1 255.255.255.0
ip access-group inbound_filter in
ip access-group outbound_filter out
!---這裡也有一些講究,ACL outbound_filter被應用到外網口的out方向,ACL inbound_filter被應用到外網口的in方向,in和out不能搞混。
好,現在進行測試,在10.1.1.2上ping 192.1.1.2,通了,RouterB上則ping不通10.1.1.2。
現在還餘下一個問題:路由器既然已經deny了外網進來的所有流量,那麼它是怎麼允許內網出去的返回流量進來呢?
它是透過建立動態生成的ACL來允許返回流量的,下面看看show access-list的結果:
……
Reflexive IP access list icmp_traffic
permit icmp host 192.1.1.2 host 10.1.1.2 (24 matches) (time left 196)
……
這些動態ACL可透過TCP的FIN/RST包來動態自動消除,對ICMP這樣stateless的包來說,是透過內建的timer來消除的,這點可透過上述show access-list結果中的(time left 196)來核實。
最後再說說那另一個測試,也就是兩個ACL中加的多餘的東西:
ip access-list extended outbound_filter
permit ip any any
ip access-list extended inbound_filter
deny ip any any log
我在10.1.1.2上發起一個到192.1.1.2的TELNET連線,這個流量到了S0口後由ACL outbound_filter中的permit ip any any檢測後放行。到了RouterB後,RouterB進行處理然後返回流量,這個流量到了S0口後由inbound_filter檢測,因為evaluate icmp_traffic中並沒有包含對TCP型別流量的檢測,這個包由deny ip any any log一句處理後丟棄並生成日誌:
00:24:28: %SEC-6-IPACCESSLOGP: list inbound_filter denied tcp 192.1.1.2(23) -> 10.1.1.2(1483), 1 packet
好,最後的最後,如果Reflexive ACL是做在內網口上,而不是在外網口上,該怎麼寫呢?呵呵,這個問題就留給你了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-955464/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ora-24247 :網路訪問被訪問控制列表(ACL)拒絕
- JoomlaACL訪問控制列表OOM
- IOS - ACL (訪問控制列表)iOS
- 程式設計實現遍歷ACL訪問控制列表檢查程式訪問許可權程式設計訪問許可權
- 控制對網站的訪問 (轉)網站
- Struts2實現訪問控制
- 【RAC】RAC 實現IP訪問控制
- 新手學堂:防火牆概念與訪問控制列表(轉)防火牆
- 用SERVICE LOCATOR 模式實現命名訪問 (轉)模式
- Redis 6.0 訪問控制列表ACL說明Redis
- 配置 Linux 的訪問控制列表(ACL)Linux
- 【計算機網路】介質訪問控制計算機網路
- Windows原理深入學習系列-訪問控制列表Windows
- 思科路由器反向訪問控制列表配置路由器
- 如何解決ORACLE11G裡面ORA-24247 網路訪問被訪問控制列表 (ACL) 拒絕 錯誤Oracle
- Holer實現Oracle外網訪問Oracle
- .net core下訪問控制層的實現
- 配置ACL在網路服務中訪問控制
- 交換技術:反向訪問列表在實際中的應用(轉)
- Mongodb訪問控制MongoDB
- Flask——訪問控制Flask
- RabbitMQ訪問控制MQ
- Nginx訪問控制Nginx
- Swift 訪問控制Swift
- 訪問github出現無法訪問此網站Github網站
- 外網訪問內網應用原理分析及實現內網
- Oracle 單表訪問路徑Oracle
- 網路層訪問許可權控制技術 ACL詳解(轉)訪問許可權
- 演示:動態訪問控制列表(帶鎖的ACL)
- frp實現NAS外網訪問FRP
- Holer實現外網訪問本地NginxNginx
- Holer實現外網訪問本地MySQLMySql
- Holer實現外網訪問本地ElasticsearchElasticsearch
- 使用Virtual Private Database實現細粒度訪問控制Database
- 使用DBMS_RLS實現細粒度訪問控制
- 檔案和目錄的訪問控制(2)新增訪問控制
- Swift網路訪問庫Alamofire訪問httpslocalhost伺服器SwiftHTTPlocalhost伺服器
- 網路訪問控制列表ACL(讀懂這篇就基本夠了,後面有配置案例)