Context Based Access Control (CBAC) là một tính năng được tích hợp trên IOS của Router Cisco cho phép biến router thành một tường lửa đơn giản thực hiện được một số chính sách về lọc dữ liệu đi ngang qua router. CBAC – Context Based Access Control cung cấp cho IOS của router một cơ chế stateful firewall. CBAC định nghĩa một inspection rule, trong đó mọi giao thức được chỉ ra trong inspection rule sẽ được phép đi qua router firewall. Đi qua có nghĩa là đi được từ trong ra ngoài và dữ liệu trả về đi được từ ngoài vào trong cho một flow cụ thể nào đó. Để làm được điều này, CBAC theo dõi mọi luồng dữ liệu của giao thức được chỉ ra trong inspection rule và tạo ra ảnh phản xạ của flow này trong một By – pass access – list đặc biệt được cài vào đường trung chuyển dữ liệu theo chiều ngược lại để cho phép trả về. Do đó, dù có một ACL tường minh được gán trên cổng router chặn dữ liệu từ ngoài vào trong, dữ liệu trả về của flow được inspect vẫn có thể đi vào được bên trong. CBAC gồm hai thành phần như sau: • Inspection rule: Chỉ định các giao thức được cho phép đi qua firewall khi có khởi tạo từ bên trong đi ra bên ngoài. Inspection rule này phải được áp lên một cổng nào đó trên lộ trình của các flow theo chiều khởi tạo (từ trong ra ngoài). Câu lệnh cấu hình khai báo inspection rule: o Khai báo rule: R(config)# ip inspect name Tên_rule Protocol … o Áp rule lên cổng: R(config-if)# ip inspect name Tên_rule {in|out} • Một ACL chặn tất cả các loại traffic theo chiều ngược lại (từ out về in). ACL này sẽ được bypasss bởi các gói trả về của các giao thức được chỉ ra trong inspection rule. • Giống như với outbound access – list, CBAC không có tác dụng với dữ liệu xuất phát từ chính router và vì thế không tạo ra ảnh phản xạ cho các luồng dữ liệu này dẫn đến dữ liệu loại này trả về không được. Để khắc phục, ta phải tạo thêm các entry trả về tương ứng trên access – list inbound ở phía cổng vào. Trong câu lab này của chúng ta, một entry ACL đã được thêm vào để cho phép lưu lượng RIP được đi vào trên cổng F0/0 của R2. Trong bài viết này, chúng ta sẽ cùng tìm hiểu về loại IOS Firewall này. Dưới đây là bài lab ví dụ. Sơ đồ Sơ đồ bài lab ví dụ. • Trong bài lab này, chúng ta sẽ cấu hình R2 thành một firewall thực thi một số rule lên các lưu lượng trao đổi giữa R1 và R3 mà đi ngang qua R2. Thực hiện Bước 1: Cấu hình ban đầu • Đặt địa chỉ IP trên các cổng của các router theo quy hoạch IP được chỉ ra trên hình. • Chạy một hình thức định tuyến bất kỳ đảm bảo mọi địa chỉ trên sơ đồ thấy nhau. Cấu hình Trên R1: R1(config)#interface loopback 0 R1(config-if)#ip address 172.16.1.1 255.255.255.0 R1(config-if)#exit R1(config)#interface f0/0 R1(config-if)#no shutdown R1(config-if)#ip address 172.16.12.1 255.255.255.0 R1(config-if)#exit R1(config)#router rip R1(config-router)#version 2 R1(config-router)#network 172.16.0.0 R1(config-router)#exit Trên R2: R2(config)#interface loopback 0 R2(config-if)#ip address 172.16.2.1 255.255.255.0 R2(config-if)#exit R2(config)#interface f0/0 R2(config-if)#no shutdown R2(config-if)#ip address 172.16.12.2 255.255.255.0 R2(config-if)#exit R2(config)#interface f0/1 R2(config-if)#no shutdown R2(config-if)#ip address 172.16.23.2 255.255.255.0 R2(config-if)#exit R2(config)#router rip R2(config-router)#version 2 R2(config-router)#network 172.16.0.0 R2(config-router)#exit Trên R3: R3(config)#interface loopback 0 R3(config-if)#ip address 172.16.3.1 255.255.255.0 R3(config-if)#exit R3(config)#interface f0/1 R3(config-if)#no shutdown R3(config-if)#ip address 172.16.23.3 255.255.255.0 R3(config-if)#exit R3(config)#router rip R3(config-router)#version 2 R3(config-router)#network 172.16.0.0 R3(config-router)#exit Kiểm tra Ta kiểm tra rằng định tuyến đã hội tụ trên các router: R1#show ip route rip 172.16.0.0/24 is subnetted, 5 subnets R 172.16.23.0 [120/1] via 172.16.12.2, 00:00:19, FastEthernet0/0 R 172.16.2.0 [120/1] via 172.16.12.2, 00:00:19, FastEthernet0/0 R 172.16.3.0 [120/2] via 172.16.12.2, 00:00:19, FastEthernet0/0 R2#show ip route rip 172.16.0.0/24 is subnetted, 5 subnets R 172.16.1.0 [120/1] via 172.16.12.1, 00:00:10, FastEthernet0/0 R 172.16.3.0 [120/1] via 172.16.23.3, 00:00:02, FastEthernet0/1 R3#show ip route rip 172.16.0.0/24 is subnetted, 5 subnets R 172.16.12.0 [120/1] via 172.16.23.2, 00:00:18, FastEthernet0/1 R 172.16.1.0 [120/2] via 172.16.23.2, 00:00:18, FastEthernet0/1 R 172.16.2.0 [12 0/1] via 172.16.23.2, 00:00:18, FastEthernet0/1 Bước 2: Cấu hình CBAC • Cấu hình R2 thành một CBAC firewall. Cổng F0/1 của R2 đóng vai trò là cổng đấu nối vào mạng bên trong cần được bảo vệ và cổng F0/0 của R2 đóng vai trò là cổng đấu nối đi ra mạng bên ngoài (R1 là router bên ngoài, R3 là router bên trong). • R2 thực hiện chính sách chặn dữ liệu như sau: o Mọi lưu lượng xuất phát từ phía mạng bên ngoài đi vào mạng bên trong đều bị cấm. o Các host ở mạng bên trong có thể đi ra bên ngoài bằng ICMP, TFTP, Telnet và SSH. o Khi thực hiện cấu hình chính sách trên, đảm bảo rằng định tuyến vẫn hoạt động bình thường. Cấu hình Trên R2: !Khai báo inspection rule có tên là INSPECT cho các giao thức được yêu cầu R2(config)#ip inspect name INSPECT icmp R2(config)#ip inspect name INSPECT tftp R2(config)#ip inspect name INSPECT telnet R2(config)#ip inspect name INSPECT ssh Khai báo ACL chặn mọi lưu lượng từ bên ngoài đi vào bên trong, ACL cần phải cho qua RIP để hoạt động định tuyến diễn ra bình thường R2(config)#ip access-list extended INBOUND R2(config-ext-nacl)#permit udp any any eq 520 R2(config-ext-nacl)#deny ip any any R2(config-ext-nacl)#exit Áp Inspection rule và ACL lên cổng F0/0 R2(config)#interface f0/0 R2(config-if)#ip inspect INSPECT out R2(config-if)#ip access-group INBOUND in R2(config-if)#exit Kiểm tra Ta kiểm tra các inspection rule đã cấu hình trên R2: R2#show ip inspect config Session audit trail is disabled Session alert is enabled one-minute (sampling period) thresholds are [unlimited : unlimited] connections max-incomplete sessions thresholds are [unlimited : unlimited] max-incomplete tcp connections per host is unlimited. Block-time 0 minute. tcp synwait-time is 30 sec -- tcp finwait-time is 5 sec tcp idle-time is 3600 sec -- udp idle-time is 30 sec tcp reassembly queue length 16; timeout 5 sec; memory-limit 1024 kilo bytes dns-timeout is 5 sec Inspection Rule Configuration Inspection name INSPECT icmp alert is on audit-trail is off timeout 10 tftp alert is on audit-trail is off timeout 30 telnet alert is on audit-trail is off timeout 3600 ssh alert is on audit-trail is off timeout 30 R2#show ip inspect interfaces Interface Configuration Interface FastEthernet0/0 Inbound inspection rule is not set Outgoing inspection rule is INSPECT icmp alert is on audit-trail is off timeout 10 tftp alert is on audit-trail is off timeout 30 telnet alert is on audit-trail is off timeout 3600 ssh alert is on audit-trail is off timeout 30 Inbound access list is INBOUND Outgoing access list is not set Ta kiểm tra rằng R2 vẫn chạy định tuyến bình thường với R1: R2#show ip protocol Routing Protocol is "rip" Outgoing update filter list for all interfaces is not set Incoming update filter list for all interfaces is not set Sending updates every 30 seconds, next due in 22 seconds Invalid after 180 seconds, hold down 180, flushed after 240 Redistributing: rip Default version control: send version 2, receive version 2 Interface Send Recv Triggered RIP Key-chain FastEthernet0/0 2 2 FastEthernet0/1 2 2 Loopback0 2 2 Automatic network summarization is in effect Maximum path: 4 Routing for Networks: 172.16.0.0 Routing Information Sources: Gateway Distance Last Update 172.16.23.3 120 00:00:15 172.16.12.1 120 00:00:01 Distance: (default is 120) Bên trong ping ra được bên ngoài nhưng bên ngoài không ping được bên trong: R3#ping 172.16.1.1 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 172.16.1.1, timeout is 2 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 56/74/100 ms R1#ping 172.16.3.1 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 172.16.3.1, timeout is 2 seconds: U.U.U Success rate is 0 percent (0/5) Ta cấu hình Telnet và SSH trên R1 và R3 để kiểm tra hoạt động Telnet và SSH ngang qua Firewall: R1-3(config)#username cisco password cisco R1-3(config)#ip domain-name examplelab.com R1-3(config)#crypto key generate rsa The name for the keys will be: R1-3.examplelab.com Choose the size of the key modulus in the range of 360 to 2048 for your General Purpose Keys. Choosing a key modulus greater than 512 may take a few minutes. How many bits in the modulus [512]: 1024 % Generating 1024 bit RSA keys, keys will be non-exportable...[OK] *Mar 1 00:02:44.779: %SSH-5-ENABLED: SSH 1.99 has been enabled R1-3(config)#line vty 0 4 R1-3(config-line)#login local R1-3(config-line)#transport input telnet ssh R1-3(config-line)#exit Từ bên trong telnet được ra bên ngoài: R3#telnet 172.16.1.1 Trying 172.16.1.1 ... Open User Access Verification Username: cisco Password: <- Nhập password là “cisco” R1> Từ bên ngoài không telnet được vào bên trong: R1#telnet 172.16.3.1 Trying 172.16.3.1 ... % Destination unreachable; gateway or host down Từ bên trong SSH được ra bên ngoài: R3#ssh -l cisco 172.16.1.1 Password: <- Nhập password là “cisco” R1> Từ bên ngoài không SSH được vào bên trong: R1#ssh -l cisco 172.16.3.1 % Destination unreachable; gateway or host down Thực hiện cấu hình bật TFTP server trên các router R1 và R3 để kiểm tra hoạt động TFTP ngang qua firewall: R1(config)#tftp-server system:running-config alias R1_config R3(config)#tftp-server system:running-config alias R3_config Ở bên trong có thể download file từ bên ngoài bằng TFTP: R3#copy tftp://172.16.1.1/R1_config null: Accessing tftp://172.16.1.1/R1_config... Loading R1_config from 172.16.1.1 (via FastEthernet0/1): ! [OK - 1117 bytes] 1117 bytes copied in 4.312 secs (259 bytes/sec) Bên ngoài không thể truy nhập TFTP vào bên trong: R1#copy tftp://172.16.3.1/R3_config null: Accessing tftp://172.16.3.1/R3_config... %Error opening tftp://172.16.3.1/R3_config (Timed out) Đến đây, chúng ta đã hoàn tất cấu hình và kiểm tra hoạt động của CBAC trên bộ định tuyến Cisco Router. Chúc các bạn thành công ! Bài viết liên quan: Cấu hình tường lửa trên Router Cisco với ZBF
Cấu hình Bộ định tuyến Cisco Router với Chức năng Tường lửa – CBAC (Context-Based Access Control) Đối với chức năng tường lửa ngân sách thấp, bộ định tuyến Cisco có phiên bản IOS thích hợp có thể hoạt động như một tường lửa mạng cung cấp khả năng kiểm tra giao thức trạng thái bằng cách sử dụng tính năng Kiểm soát truy cập dựa trên ngữ cảnh (CBAC). Nhiều người sử dụng Danh sách kiểm soát truy cập(ACL) thông thường trên bộ định tuyến Cisco để lọc và bảo vệ lưu lượng. Tuy nhiên, một ACL bình thường chỉ là một cơ chế lọc gói tĩnh và không có gì khác. Với cấu hình CBAC, bộ định tuyến hoạt động giống như một bức tường lửa. Nghĩa là, nó kiểm tra các giao thức và phiên và giữ trạng thái của kết nối trong bộ nhớ. Điều này có nghĩa là một gói tin gửi đi (từ bên trong mạng ra bên ngoài) được kiểm tra và trạng thái kết nối của phiên được lưu trong bộ nhớ. Gói trả lời thuộc về kết nối đi ban đầu được phép đi qua bộ định tuyến / tường lửa và đến hệ thống nội bộ nơi khởi tạo kết nối. Chức năng trạng thái này đạt được nhờ cơ chế CBAC của Tường lửa IOS bằng cách mở các holes tạm thời trên Danh sách truy cập để cho phép các gói trả lời. Một ACL bình thường kiểm tra lưu lượng lên đến lớp truyền tải. Mặt khác, CBAC kiểm tra lưu lượng đến lớp ứng dụng để tìm hiểu về trạng thái của phiên và áp dụng tính năng lọc tường lửa trên ứng dụng cụ thể. Các giao thức được CBAC hỗ trợ để kiểm tra như sau: Giao thức CUSeeMe, ftp, h323, http, rcmd, realaudio, rpc, smtp, sqlnet, streamworks, tcp, tftp, udp, vdolive. CBAC cũng giúp bảo vệ chống lại các cuộc tấn công DoS như SYN- floods hoặc các cuộc tấn công phân mảnh. CBAC được áp dụng trong hoặc ngoài trên một giao diện bộ định tuyến cụ thể. CBAC áp dụng “Inbound” trên một giao diện kiểm tra lưu lượng truy cập vào giao diện và CBAC áp dụng “Outbound” trên một giao diện kiểm tra lưu lượng ra khỏi giao diện. CBAC hợp tác với ACL được áp dụng trên cùng một giao diện để cung cấp chức năng trạng thái tường lửa mà chúng tôi đã mô tả ở trên. Hãy xem một ví dụ đơn giản bên dưới. Trong hình trên, giả sử rằng có một ACL gửi đến được áp dụng trên S0 trên bộ định tuyến. ACL được cấu hình để chặn lưu lượng Telnet bắt đầu từ bên ngoài. Cũng giả định rằng có một quy tắc CBAC được áp dụng “hướng đi” trên S0. Người dùng nội bộ (User1) khởi tạo phiên Telnet từ bên trong ra bên ngoài. Khi yêu cầu kết nối cho phiên Telnet của User1 đi qua tường lửa, CBAC sẽ kiểm tra lưu lượng Telnet khi thoát khỏi giao diện S0 và tạo một lỗ mở tạm thời trong danh sách truy cập đến tại S0 để cho phép trả lại lưu lượng Telnet cho phiên Telnet của User1. (Nếu cùng một danh sách truy cập được áp dụng cho cả S0 và S1, thì cách mở giống nhau sẽ xuất hiện ở cả hai giao diện.) Lưu ý: CBAC kiểm tra lưu lượng đi từ một giao diện, sẽ tạo các lỗ mở tạm thời trên Danh sách truy cập được áp dụng Inbound trên giao diện. Điều này là cần thiết để cho phép các gói trả về đi qua ACL. Hãy xem một ví dụ cấu hình bên dưới để có cái nhìn rõ hơn. Cấu hình: Tham khảo sơ đồ bên dưới: Có một bộ định tuyến Cisco Router biên giới kết nối mạng LAN nội bộ 192.168.1.0/24 với Internet. Có một địa chỉ IP công cộng(public) tĩnh 50.50.50.1 trên giao diện Serial0 / 0. Ngoài ra, có một phân đoạn DMZ (giao diện FE0 / 0) lưu trữ Máy chủ Web DMZ 10.1.1.1. Chúng ta chỉ muốn cho phép truy cập từ Internet tới Máy chủ Web. Sử dụng NAT tĩnh để ẩn địa chỉ riêng của máy chủ Web đằng sau địa chỉ công cộng(public). Ngoài ra, sử dụng PAT trên giao diện S0 / 0 cho tất cả các giao tiếp ra ngoài từ mạng LAN nội bộ đến internet. Hãy xem cấu hình bên dưới: ! Create the outbound CBAC inspection rules ip inspect name CBAC-IN-OUT tcp ip inspect name CBAC-IN-OUT ftp ip inspect name CBAC-IN-OUT h323 ip inspect name CBAC-IN-OUT rcmd ip inspect name CBAC-IN-OUT http ip inspect name CBAC-IN-OUT netshow ip inspect name CBAC-IN-OUT realaudio ip inspect name CBAC-IN-OUT rtsp ip inspect name CBAC-IN-OUT sqlnet ip inspect name CBAC-IN-OUT streamworks ip inspect name CBAC-IN-OUT tftp ip inspect name CBAC-IN-OUT udp ip inspect name CBAC-IN-OUT vdolive ! Create the inbound CBAC to inspect inbound HTTP ip inspect name CBAC-OUT-IN http ! DMZ interface interface FastEthernet0/0 ip address 10.1.1.254 255.255.255.0 ip nat inside full-duplex no cdp enable ! ! Internal LAN interface interface FastEthernet0/1 ip address 192.168.1.254 255.255.255.0 ip nat inside full-duplex no cdp enable ! ! External Internet Interface ! Notice that we apply an inbound ACL and CBAC rules for both in and out inspection interface Serial0/0 description CONNECTED TO INTERNET bandwidth 1024 ip address 50.50.50.1 255.255.255.252 ip access-group FIREWALL in ip nat outside ip inspect CBAC-OUT-IN in ip inspect CBAC-IN-OUT out ip nat inside source list 122 interface Serial0/0 overload ip nat inside source static tcp 10.1.1.1 80 50.50.50.1 80 extendable no-alias ip classless ip route 0.0.0.0 0.0.0.0 50.50.50.2 ! This ACL will be used by the CBAC out rule to open temporary holes for return traffic ip access-list extended FIREWALL permit icmp any any echo-reply permit tcp any host 50.50.50.1 eq 80 deny ip any any log access-list 122 permit ip 192.168.1.0 0.0.0.255 any Trên đây là cấu hình hoàn chỉnh theo sơ đồ để biến Cisco Router thành Firewall cơ bản với tính năng CBAC. Cám ơn các bạn đã theo dõi bài viết. Bài viết liên quan: Cấu hình tường lửa trên Router Cisco với ZBF