Context Based Access Control (CBAC) là một tính năng được tích hợp trên IOS của router 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. Trong bài viết tuần này, chúng ta sẽ cùng tìm hiểu về loại IOS Firewall này.
Giống như với các bài viết trước, chúng ta sẽ cùng trao đổi về vấn đề quan tâm thông qua một bài lab ví dụ.
Sơ đồ:
Mô tả
– Bài lab gồm 3 router được đấu nối với nhau theo sơ đồ trên hình 1.
– 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.
– Bạn đọc có thể thực hiện bài lab này trên thiết bị thật hoặc trên giả lập GNS – 3.
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 1.
– 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 [120/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:
+ 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.
+ Các host ở mạng bên trong có thể đi ra bên ngoài bằng ICMP, TFTP, Telnet và SSH.
+ 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
Ghi chú
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:
+ Khai báo rule:
R(config)# ip inspect name Tên_rule Protocol...
+ Á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.
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.
Cảm ơn các bạn!
Hẹn gặp lại các bạn trong các bài viết tiếp theo!