[Firewall ASA] – Bài 6 : Kiểm soát lưu lượng mạng (Inspect Traffic)

Tham khảo ebook:
– [Ebook] Cisco ASA All-in-one Next-Generation Firewall, IPS, and VPN Services, 3rd Edition

Sơ đồ:

asa6-diagram

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

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

asa6-ping

Đế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)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:

asa6-deny-dantri


Đế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.

Previous article[DirectAdmin] Nâng cấp Nginx lên version 1.9.11 hỗ trợ giao thức HTTP/2 trên Direct Admin
Next article[Nginx] Cấu hình Nginx chuyển hướng truy cập URL www sang non-www và ngược lại
"Networking luôn có sức hấp dẫn và những điều mới mẻ riêng. Hãy cùng tôi chia sẻ những điều ấy" - Email: tuanmmt@gmail.com - Skype: tuanmmt . (Cộng Tác Viên mảng - Networking)