Tham khảo ebook:
– [Ebook] Cisco ASA All-in-one Next-Generation Firewall, IPS, and VPN Services, 3rd Edition
Sơ đồ:
Mô tả:
Như các bài trước chúng ta đã tìm hiểu thì để chặn (deny) hoặc cho phép (permit) 1 gói tin thì chúng ta có thể dùng công cụ là Access-control list (ACL). Với ACL chúng ta chỉ có thể chặn hoặc cho phép dựa trên địa chỉ IP, port và một giao thức cụ thể nào đó (ICMP, IP, HTTP,…). Tuy nhiên nếu làm như vậy đôi khi sẽ không phù hợp với việc chặn các ứng dụng layer 7 hoặc sẽ gây ra sự phức tạp trong cấu hình đối với những trường hợp nhất định. Từ những điều đó chúng ta cần những công cụ mạnh mẽ hơn và có tính “mềm dẻo” hơn để phù hợp với việc cấu hình và những ứng dụng ở layer 7.
Bài lab này sẽ hướng dẫn chúng ta thực hiện việc viết một Modular Policy Framework (MPF) cho việc chặn 1 trang web cụ thể không dựa vào địa chỉ IP và sẽ viết 1 policy cho phép ping ra internet thay vì viết access-list như các bài trước. Để hiểu rõ hơn về MPF thông qua chặn, lọc, cho phép và những tính năng khác của nó trong việc kiểm tra gói tin chúng ta sẽ tìm hiểu sơ cơ chế hoạt động của MPF.
Một MPF được cấu thành bởi 3 yếu tố:
• Service policy: dùng để cấu hình các policy sẽ được áp lên interface của ASA.
• Policy-map: dùng để cấu hình những đặc điểm của 1 policy ở trên để match với traffic tương ứng.
• Class-map: cấu hình để phân loại các traffic cụ thể sẽ được dùng trong MPF.
Cấu trúc của 1 MPF sẽ có dạng như sau:
service-policy pmap1 policy-map pmap1 class cmap1 action … class-map cmap1 match ……
Mặc định thì firewall ASA sẽ được cấu hình sẵn một số inspect sẽ được cho qua mà không cần cấu hình. Chúng có thể kiểm tra những service-policy đã được áp lên interface này thông qua command “show running-config service-policy”.
ASA# show running-config service-policy service-policy global_policy global
Tiếp theo chúng ta sẽ kiểm tra cấu hình policy-map của ASA thông qua command “show running-config policy-map global_policy”.
ASA# show running-config policy-map global_policy ! policy-map global_policy class inspection_default inspect dns preset_dns_map inspect ftp inspect h323 h225 inspect h323 ras inspect rsh inspect rtsp inspect esmtp inspect sqlnet inspect skinny inspect sunrpc inspect xdmcp inspect sip inspect netbios inspect tftp inspect ip-options !
Sau cùng chúng ta sẽ kiểm tra cấu hình của class-map mặc định, chúng ta sẽ dùng command “show running-config class-map inspection_default”.
ASA# show running-config class-map inspection_default ! class-map inspection_default match default-inspection-traffic !
Sau đây thì chúng ta sẽ cùng tìm hiểu 2 ví dụ đơn giản về MPF ở layer 3 bằng việc cho phép PC ping ra DNS GOOGLE và ở layer 7 thông qua việc chặn web bằng domain.
Thực hành
Contents
Bước 1: chúng ta sẽ cấu hình địa chỉ IP, security-level cho firewall ASA
• Cấu hình địa chỉ IP cho cổng G0/1 nhận dhcp từ internet.
• Cấu hình IP cho cổng G0/0 là 192.168.10.1/24.
• Vùng kết nối với internet sẽ là outside, vùng kết nối với PC sẽ là inside.
ASA(config)# int g0/1 ASA(config-if)# nameif outside ASA(config-if)# ip add dhcp setroute ASA(config-if)# no shutdown
ASA(config)# int g0/0 ASA(config-if)# nameif inside ASA(config-if)# ip add 192.168.10.1 255.255.255.0 ASA(config-if)# no shutdown
Kiểm tra:
Chúng ta sẽ kiểm tra lại cấu hình địa chỉ IP ở trên bằng command “show int ip br”
ASA(config)# show int ip br Interface IP-Address OK? Method Status Protocol GigabitEthernet0/0 192.168.2.81 YES DHCP up up GigabitEthernet0/1 192.168.10.1 YES manual up up GigabitEthernet0/2 unassigned YES unset administratively down down GigabitEthernet0/3 unassigned YES unset administratively down down Management0/0 192.168.1.1 YES manual down down
Tiếp theo chúng ta sẽ kiểm tra kết nối giữa ASA và internet thông qua việc ping tới DNS GOOGLE là 8.8.8.8.
ASA# ping 8.8.8.8 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 8.8.8.8, timeout is 2 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 40/48/50 ms
Bước 2: chúng ta sẽ thực hiện viết policy để cho phép ping từ PC ra DNS 8.8.8.8 của google
Đầu tiên chúng ta sẽ tạo 1 ACL cho phép ping.
ASA(config)# access-list ICMP extended permit icmp any any echo
Chúng ta sẽ viết 1 ACL extend cho phép giao thức icmp từ source là bất cứ địa chỉ nào (any) tới destination cũng là bất cứ địa chỉ nào (any) bằng cờ echo.
Tiếp theo chúng ta sẽ viết 1 class-map chứa ACL ở trên.
Cấu trúc của 1 class-map
ASA(config)# class {class_map_name | class-default} ASA(config-cmap)# match
- class sẽ được đặt tên cho chúng ta định ra hoặc cũng có thể sử dụng class-default do cấu hình mặc định của ASA.
Các options ở đây được liệt kê như sau:
access-list Match an Access List any Match any packet default-inspection-traffic Match default inspection traffic: ctiqbe----tcp--2748 dns-------udp--53 ftp-------tcp--21 gtp-------udp--2123,3386 h323-h225-tcp--1720 h323-ras--udp--1718-1719 http------tcp--80 icmp------icmp ils-------tcp--389 ip-options-----rsvp mgcp------udp--2427,2727 netbios---udp--137-138 radius-acct----udp--1646 rpc-------udp--111 rsh-------tcp--514 rtsp------tcp--554 sip-------tcp--5060 sip-------udp--5060 skinny----tcp--2000 smtp------tcp--25 sqlnet----tcp--1521 tftp------udp--69 waas------tcp--1-65535 xdmcp-----udp--177 dscp Match IP DSCP (DiffServ CodePoints) flow Flow based Policy port Match TCP/UDP port(s) precedence Match IP precedence rtp Match RTP port numbers tunnel-group Match a Tunnel Group
Như vậy trong ví dụ này, chúng ta sẽ tạo 1 class-map là ICMP và match access-list vừa khởi tạo ở trên.
ASA(config)# class-map ICMP ASA(config-cmap)# match access-list ICMP
Kế tiếp chúng ta sẽ tạo 1 policy có tên là POLICY và đưa class cần áp chính sách vào.
ASA(config)# policy-map POLICY ASA(config-pmap)# class ICMP ASA(config-pmap-c)# inspect icmp
Sau cùng chúng ta sẽ áp POLICY lên cổng với cấu trúc câu lệnh như sau
ASA(config)# service-policy policy_map_name {global | interface if_name}
Ở bài này chúng ta sẽ áp policy tên là POLICY lên interface inside như sau:
ASA(config)# service-policy POLICY interface inside
Kiểm tra:
Chúng ta sẽ kiểm tra kết nối bằng lệnh ping giữa PC với DNS GOOGLE 8.8.8.8
Đến đây thì PC đã có thể ping được thành công!
Bước 3: Chúng ta sẽ cấu hình để PC không thể truy xuất được dantri.vn
+ Thao tác 1 : chúng ta sẽ cấu hình 1 regular expression liên quan đến dantri.vn để filter.
ASA(config)# regex DOMAIN “dantri\.vn”
– 1 REGEX (regular expression) là 1 chuỗi (
Có 2 cách để chúng ta định nghĩa 1 REGEX (regular expression):
• Chúng ta có thể tạo trực tiếp bằng command sau:
ciscoasa(config)# regex regex_name regular_expression
+ Thao tác 2: kiểm tra REGEX chúng ta đã tạo.
ASA(config)# test regex dantri.vn “dantri\.vn” INFO: Regular expression match succeeded.
+ Thao tác 3: tạo 1 class-map chứa các REGEX đã tạo.
ASA(config)# class-map type regex match-any URL ASA(config-cmap)# match regex DOMAIN
Chúng ta sẽ tạo class-map chưa REGEX đã liệt kê ở trên theo cú pháp câu lệnh như sau:
ciscoasa(config)# class-map type regex match-anyregex_cmap_name ciscoasa(config-cmap)# match regexregex_name
– Tạo 1 class-map inspect giao thức HTTP.
ASA(config)# class-map type inspect http HTTP-TRAFFIC ASA(config-cmap)# match request header host regex class URL
HTTP là giao thức được sử dụng giữa client và server. Client sẽ gửi request đến server và server sẽ response trở lại. Ở đây vì là ASA đứng giữa server và client nên chúng ta hoàn toàn có thể chặn được quá trình request này.
+ Thao tác 4: tạo 1 policy và drop các gói tin có header chứa chuỗi “dantri.vn”.
ASA(config-cmap)# policy-map type inspect http HTTP-TRAFFIC ASA(config-pmap)# class HTTP-TRAFFIC ASA(config-pmap-c)# drop-connection log
Ở đây có nhiều option trong class HTTP-TRAFFIC mà chúng ta có thể lựa chọn, ngoài drop-connection log, chúng ta có thể reset kết nối HTTP hoặc thông báo log xuất hiện bằng các option thay thế như sau:
ASA(config-pmap)# class HTTP-TRAFFIC ASA(config-pmap-c)# log
ASA(config-pmap)# class HTTP-TRAFFIC ASA(config-pmap-c)# reset [log]
+ Thao tác 5: tạo 1 class-map xử lý layer 3 và 4.
ASA(config)# class-map LAYER3-4 ASA(config-cmap)# match any
+ Thao tác 6: thêm class-map LAYER3-4 và inspect policy-map HTTP-TRAFFIC vào trong policy-map đang chạy ở trên là POLICY
ASA(config)# policy-map POLICY ASA(config-pmap)# class LAYER3-4 ASA(config-pmap-c)# inspect http HTTP-TRAFFIC
+ Thao tác 7: áp policy có tên là POLICY vừa tạo lên cổng inside
ASA(config)# service-policy POLICY interface inside
Kiểm tra:
Đến đây chúng ta đã thưc hiện thành công việc chặn web ! Cũng như hoàn thành bài lab số 6 trong chủ đề “Firewall ASA”. Chúc các bạn thành công.