Bài viết chuyên đề
Dynamic Access List
28/12/2017 03:10:10
Trong các bài viết trước, chúng ta đã cùng nhau khảo sát các loại ACL Standard, Extended và Reflexive. Trong bài viết này, chúng ta tiếp tục cùng nhau khảo sát một loại ACL khác được tích hợp trên Cisco IOS của các router Cisco có công dụng khá đặc biệt: xác thực và cấp quyền truy nhập đến một đối tượng hoặc một dịch vụ nào đó trên mạng.
Như đã làm với các bài viết vừa qua, để tìm hiểu một tính năng hoặc một vấn đề lý thuyết nào đó, chúng ta cùng thực hiện khảo sát thông qua một bài lab ví dụ để có thể nắm vấn đề một cách trực quan.
Sơ đồ:
Mô tả:
Chúng ta tiếp tục sử dụng lại mô hình lab đã dùng trong các bài viết trước. Để tiện theo dõi, ta nhắc lại các đặc điểm của sơ đồ mạng này.
Trên sơ đồ hình 1 là một phần của một mạng doanh nghiệp. Phần này gồm hai router R1 và R2 đại diện cho hai chi nhánh của doanh nghiệp. R1 và R2 được đấu nối với nhau bằng một đường leased – line qua các cổng S0/0/0 của hai router. R1 kết nối vào VLAN 10. R2 sử dụng cổng F0/0 đấu nối xuống VLAN 20 và cổng F0/1 đấu nối với phần còn lại của mạng doanh nghiệp. Quy hoạch IP cho các đấu nối và cho các VLAN được chỉ ra như trên hình 1. Giao thức định tuyến chạy trên sơ đồ lab ví dụ này là giao thức EIGRP.
Vì đây là một bài lab Cisco, và để tiện cho việc thực tập cũng như cấu hình lab, chúng ta sẽ sử dụng một router Cisco giả lập một host của VLAN 10. Router giả lập host được đặt tên là R3 và được đặt địa chỉ 192.168.10.2. Router này sẽ được sử dụng để test xem các yêu cầu được đặt ra đã được đáp ứng chưa.
Yêu cầu:
- Sử dụng kỹ thuật Dynamic ACL trên router R1 để thực hiện cấp quyền truy nhập HTTP ra bên ngoài cho các user thuộc VLAN 10. Mọi user thuộc VLAN 10 muốn sử dụng HTTP bắt buộc phải thực hiện telnet đến router R1 và đăng nhập một cặp username/password. Nếu cặp username/password này đúng, user được phép đi ra ngoài bằng HTTP, nếu sai, user không được truy nhập HTTP ra ngoài. Cặp username/password được sử dụng trong bài lab này là “HTTP/CISCO”.
- Hoạt động HTTP do các user VLAN 10 thực hiện không được phép kéo dài quá 60’. Cấu hình cho phép user có thể gia hạn thêm khoảng thời gian của hoạt động HTTP đã được cấp phép.
- Bên cạnh đó, các session HTTP sau khi được cấp phép mà không sử dụng sẽ bị đóng sau 5’.
- Cấu hình thêm một tài khoản có username là “TELNET”, password là “CISCO” để phục vụ cho hoạt động telnet bình thường vào router R1.
Thực hiện:
Cấu hình cơ bản trên các router:
Phần này được thực hiện giống như các bài viết trước. Để tiện cho việc theo dõi, ta nhắc lại trong bài lab này.
Đầu tiên các chi nhánh của công ty phải chạy một hình thức định tuyến nào đó đảm bảo mọi địa chỉ thấy nhau. Giả sử công ty sử dụng giao thức định tuyến EIGRP trên toàn bộ hệ thống mạng, chúng ta thực hiện cấu hình đặt địa chỉ IP trên các cổng và chạy định tuyến EIGRP trên R1 và R2:
Trên R1:
R1(config)#interface s0/0/0
R1(config-if)#no shutdown
R1(config-if)#ip add 192.168.12.1 255.255.255.252
R1(config-if)#exit
R1(config)#interface f0/0
R1(config-if)#no shutdown
R1(config-if)#ip add 192.168.10.1 255.255.255.0
R1(config-if)#exit
R1(config)#router eigrp 100
R1(config-router)#no auto-summary
R1(config-router)#network 0.0.0.0
Trên R2:
R2(config)#interface s0/0/0
R2(config-if)#no shutdown
R2(config-if)#ip add 192.168.12.2 255.255.255.252
R2(config-if)#exit
R2(config)#interface f0/0
R2(config-if)#no shutdown
R2(config-if)#ip add 192.168.20.1 255.255.255.0
R2(config-if)#exit
R2(config)#router eigrp 100
R2(config-router)#no auto-summary
R2(config-router)#network 0.0.0.0
Ta kiểm tra rằng R1 và R2 đã thấy các subnet của nhau trong bảng định tuyến:
R1#show ip route 192.168.20.0
Routing entry for 192.168.20.0/24
Known via "eigrp 100", distance 90, metric 2172416, type internal
Redistributing via eigrp 100
Last update from 192.168.12.2 on Serial0/0/0, 00:08:38 ago
Routing Descriptor Blocks:
* 192.168.12.2, from 192.168.12.2, 00:08:38 ago, via Serial0/0/0
Route metric is 2172416, traffic share count is 1
Total delay is 20100 microseconds, minimum bandwidth is 1544 Kbit
Reliability 255/255, minimum MTU 1500 bytes
Loading 1/255, Hops 1
R2#sh ip route 192.168.10.0
Routing entry for 192.168.10.0/24
Known via "eigrp 100", distance 90, metric 2172416, type internal
Redistributing via eigrp 100
Last update from 192.168.12.1 on Serial0/0/0, 00:09:31 ago
Routing Descriptor Blocks:
* 192.168.12.1, from 192.168.12.1, 00:09:31 ago, via Serial0/0/0
Route metric is 2172416, traffic share count is 1
Total delay is 20100 microseconds, minimum bandwidth is 1544 Kbit
Reliability 255/255, minimum MTU 1500 bytes
Loading 1/255, Hops 1
Các subnet đã đi được đến nhau:
R1#ping 192.168.20.1 source 192.168.10.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.20.1, timeout is 2 seconds:
Packet sent with a source address of 192.168.10.1
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/2/4 ms
Tiếp theo, ta cấu hình các router R3 giả lập user của VLAN 10.
R3(config)#int f0/0
R3(config-if)#ip add 192.168.10.2 255.255.255.0
R3(config-if)#exit
R3(config)#ip route 0.0.0.0 0.0.0.0 192.168.10.1
Sau khi thực hiện xong các thao tác cấu hình cơ bản đảm bảo thông suốt mạng, chúng ta tiến hành cấu hình ACL trên router R1 để thực hiện yêu cầu đặt ra.
Cấu hình ACL trên router R1:
R1(config)#ip access-list extended HTTP_VLAN_10
R1(config-ext-nacl)#dynamic HTTP_ACCESS timeout 60 permit tcp any any eq 80
R1(config-ext-nacl)#deny tcp any any eq 80
R1(config-ext-nacl)#permit ip any any
R1(config-ext-nacl)#exit
R1(config)#username HTTP password CISCO
R1(config)#username HTTP autocommand access-enable host timeout 5
R1(config)#line vty 0 4
R1(config-line)#login local
R1(config-line)#exit
R1(config)#access-list dynamic-extended
R1(config)#interface f0/0
R1(config-if)#ip access-group HTTP_VLAN_10 in
R1(config-if)#exit
Chúng ta cùng nhau phân tích các thao tác cấu hình này:
Đầu tiên, để thực hiện Dynamic ACL, chúng ta viết một Extended ACL hoàn toàn bình thường như mọi ACL Extended khác. Tuy nhiên, trong Extended ACL này, có một dòng đặc biệt được gắn tham số “dynamic Tên_hiệu”, trong đó: “Tên_hiệu” là một chuỗi ký tự bất kỳ. Với bài lab này, ta chọn “Tên_hiệu” là “HTTP_ACCESS” để dễ gợi nhớ.
Nguyên tắc hoạt động của dòng đặc biệt này là: trong điều kiện bình thường, dòng này không phát huy tác dụng và được bỏ qua khi tra cứu ACL; chỉ khi nào một user nào đó truy nhập vào router thông qua các cổng VTY và thực hiện lệnh “access-enable” tại mode User (“Router>”) hoặc mode Privilege (“Router#”) thì dòng này mới được sử dụng. Lệnh “access-enable” là lệnh dùng để “kích hoạt” dòng này trong ACL đã viết.
Trong bài lab này của chúng ta, Extended ACL được sử dụng có tên là “HTTP_VLAN_10”. Dòng đầu tiên là dòng dynamic cho phép các user được thực hiện HTTP. Như đã nói, dòng này sẽ được bỏ qua, nên dòng thực sự được xét đến đầu tiên trong điều kiện bình thường là dòng “deny tcp any any eq 80” – cấm tất cả truy nhập web HTTP ra bên ngoài.
R1(config)#ip access-list extended HTTP_VLAN_10
R1(config-ext-nacl)#dynamic HTTP_ACCESS timeout 60 permit tcp any any eq 80 <- Được bỏ qua trong điều kiện bình thường
R1(config-ext-nacl)#deny tcp any any eq 80
R1(config-ext-nacl)#permit ip any any
R1(config-ext-nacl)#exit
Một user ở VLAN 10 muốn sử dụng được HTTP sẽ phải truy nhập vào router R1 bằng Telnet qua các cổng VTY rồi thực hiện lệnh “access-enable” để kích hoạt dòng permit HTTP cho mình. Tuy nhiên, ta muốn rằng, khi user truy nhập được vào router, lệnh “access-enable” sẽ phải được tự động thực hiện chứ không cần user phải gõ lệnh này. Để làm được điều đó, chúng ta sử dụng tính năng Autocommand cho user. Tính năng Autocommand sẽ tự động thi hành một lệnh do ta chỉ định khi user có cấu hình Autocommand đăng nhập thành công vào router. Lệnh do ta chỉ định trong trường hợp này chính là lệnh “access-enable”.
Trở lại bài lab, trước hết, chúng ta khai báo một tài khoản có username là “HTTP” và password là “CISCO” cho hoạt động lướt web của user:
R1(config)#username HTTP password CISCO
Như đã nói, khi user telnet vào tài khoản này thành công, lệnh “access-enable” phải được tự động thi hành. Để thực hiện được điều đó, ta khai báo tham số “autocommand” cho user HTTP. Tiếp đó, lệnh “access-enable” cùng các tùy chọn của nó được gắn vào sau tham số “autocommand” này:
R1(config)#username HTTP autocommand access-enable host timeout 5
Các tùy chọn của lệnh “access-enable”:
- “host”: Tùy chọn này sẽ thực hiện tạo ra một dòng cụ thể đi kèm với dòng dynamic của ACL để hiển thị tường minh host nào đang được cấp quyền truy nhập HTTP.
- “timeout 5”: Chính là Inactive timeout của hoạt động HTTP của user. Nếu user không sử dụng session vừa được cấp phép trong suốt 5 phút, session này sẽ bị loại bỏ. Bên cạnh timeout này, chúng ta còn có Absolute timeout là khoảng thời gian truy nhập HTTP tối đa được cấp phép của user; hết khoảng thời gian này, session HTTP của user sẽ bị gỡ bỏ và user phải đăng nhập để xin cấp phép lại. Timeout này được chỉ ra trong câu lệnh cấu hình dynamic entry của ACL, và với bài lab này, giá trị absolute timeout là 60’:
R1(config-ext-nacl)#dynamic HTTP_ACCESS permit tcp any any eq 80
Ta cũng thực hiện cấu hình để các cổng VTY thực hiện xác thực truy nhập bằng cách sử dụng các tài khoản local trên router:
R1(config)#line vty 0 4
R1(config-line)#login local
R1(config-line)#exit
Một yêu cầu đặt ra khác là trong khi đang thực hiện HTTP, nếu thấy mình sắp hết thời gian, user có thể truy nhập đến router để gia hạn thêm khoảng thời gian bằng với Absolute timeout cho hoạt động HTTP của mình. Ta sử dụng câu lệnh sau để thực hiện yêu cầu này:
R1(config)#access-list dynamic-extended
Cuối cùng, như mọi loại ACL khác, chúng ta phải áp Dynamic ACL lên cổng để nó có thể phát huy tác dụng:
R1(config)#interface f0/0
R1(config-if)#ip access-group HTTP_VLAN_10 in
R1(config-if)#exit
Ta áp ACL vừa tạo lên cổng F0/0 theo chiều “in” – chính là cổng nối xuống VLAN 10. Một lưu ý khi sử dụng Dynamic ACL là loại ACL này chỉ có thể được sử dụng theo chiều in trên cổng.
Đến đây, chúng ta đã hoàn thành xong cấu hình Dynamic ACL được yêu cầu. Như thường lệ, chúng ta chuyển qua bước kiểm tra kết quả cấu hình.
Ta bật tính năng HTTP Server trên R2 để mô phỏng một HTTP Server bên ngoài VLAN 10:
R2(config)#ip http server
Đầu tiên, chúng ta thử từ host R3 truy nhập TCP bằng port 80 (HTTP) đến HTTP Server mà không thông qua đăng nhập xin phép:
R3#telnet 192.168.12.2 80
Trying 192.168.12.2, 80 ...
% Destination unreachable; gateway or host down
Ta thấy rằng kết quả truy nhập không thành công.
Ta thực hiện kiểm tra ACL trên R1:
R1#show access-lists HTTP_VLAN_10
Extended IP access list HTTP_VLAN_10
10 Dynamic HTTP_ACCESS permit tcp any any eq www
20 deny tcp any any eq www (3 matches)
30 permit ip any any
Kết quả show trên R1 cho thấy dòng deny TCP của ACL HTTP_VLAN_10 đã được sử dụng để drop các gói của kết nối TCP đến port 80 vừa thực hiện.
Tiếp theo, ta thực hiện truy nhập telnet đến router R1 để “xin phép” trước rồi mới tiếp tục thực hiện HTTP:
R3#telnet 192.168.10.1 <- Telnet đến R1
Trying 192.168.10.1 ... Open
User Access Verification
Username: HTTP <- Nhập username
Password: <- Nhập password
[Connection to 192.168.10.1 closed by foreign host] <- Đã tự động thực hiện xong lệnh “access-enable”
R3#telnet 192.168.12.2 80 <- Truy nhập TCP với port 80 (HTTP) đến R2
Trying 192.168.12.2, 80 ... Open
exit
HTTP/1.1 400 Bad Request
Date: Fri, 01 Mar 2002 00:15:14 GMT
Server: cisco-IOS
Accept-Ranges: none
400 Bad Request
[Connection to 192.168.12.2 closed by foreign host]
R3#
Ta thấy, sau khi truy nhập telnet đến R1 và đăng nhập username và password thích hợp xong thì R3 có thể truy nhập HTTP đến server R2.
Ta quan sát ACL trên R1:
R1#show access-lists HTTP_VLAN_10
Extended IP access list HTTP_VLAN_10
10 Dynamic HTTP_ACCESS permit tcp any any eq www
permit tcp host 192.168.10.2 any eq www (12 matches) (time left 295)
20 deny tcp any any eq www (3 matches)
30 permit ip any any (141 matches)
Ta thấy: một entry động đã được tạo ra cho host 192.168.10.2 dược phép đi ra ngoài bằng HTTP. Thời gian inactive của entry này còn lại là 295s.
Như đã trình bày, bên cạnh inactive timeout, chúng ta còn có absolute timeout là khoảng thời gian tối đa mà user này được phép HTTP ra ngoài. Để gia hạn thêm, chúng ta từ user telnet đến R1:
R3#telnet 192.168.10.1
Trying 192.168.10.1 ... Open
User Access Verification
Username: HTTP
Password:
% List#HTTP_VLAN_10-HTTP_ACCESS absolute timer is extended
[Connection to 192.168.10.1 closed by foreign host]
Các thao tác kiểm tra cho thấy rằng yêu cầu đặt ra của Dynamic ACL đã được thực hiện đầy đủ.
Ta nhận thấy một đặc điểm rằng hiện này nếu từ VLAN 10 telnet vào R1 với username “HTTP” và password “CISCO”, chúng ta sẽ được phép đi vào R1 nhưng ngay sau đó sẽ bị giải phóng kết nối telnet vì R1 thực hiện lệnh “access-enable”. Để có thể telnet bình thường vào R1, chúng ta cần một tài khoản khác không gắn kết với lệnh “access-enable”. Ta tạo tài khoản này trên R1:
R1(config)#username TELNET password CISCO
Chúng ta kiểm tra rằng có thể telnet bình thường vào R1 với tài khoản này:
R3#telnet 192.168.10.1
Trying 192.168.10.1 ... Open
User Access Verification
Username: TELNET
Password:
R1>
Đến đây, tất cả các yêu cầu của bài lab đã được thực hiện.
Một lưu ý cuối cùng khi sử dụng Dynamic ACL là ta chỉ có thể khai báo một entry dynamic cho một ACL và nếu như trên router có bật AAA, chúng ta nhớ cấu hình AAA Exec Authorization là local khi ta sử dụng tham số “autocommand” cho các username được cấu hình local trên router.
Chúng ta đã cùng nhau khảo sát xong hoạt động của Dynamic ACL.
TRUNG TÂM WAREN