Có nhiều loại NAT khác nhau có thể được thực hiện bởi Firewall. Trong phần này bạn sẽ thấy hai ví dụ: NAT và PAT
Hình 3.8 Ví dụ về NAT Ví dụ về NAT
Như được nói trước đó, NAT thực hiện việc dịch chuyển từ 1 địa chỉ đến 1 địa chỉ. Bạn thường sử dụng NAT tĩnh khi bạn có một Server, và bạn muốn mọi người trên Internet có thể truy cập Server này. Tuy nhiên, đối với các User trên mạng cục bộ bạn sẽ tạo một pool địa chỉ IP và để thiết bị NAT ngẫu nhiên chỉ định các địa chỉ IP public cho các thiết bị bên trong mạng cục bộ. Trong ví dụ này User bên trong mạng cục bộ đang
truy cập nguồn tài nguyên bên ngoài Internet(User có địa chỉ 192.168.1.5 đang cố gắng truy cập 201.201.201.2)
Hình 3.9 Ví dụ về NAT (a)
Ở hình 3.9, bạn có thể nhìn thấy thực sự việc truyền dữ liệu từ 192.168.1.5. Firewall nhận gói tin từ 192.168.1.5 và quyết định xem nó có cần thực hiện NAT hay không và chuyển tiếp gói tin tới đich
Firewall nhận thấy gói tin đến nó và so sánh với rule NAT. Bởi vì gói tin trùng với rule trong chính sách NAT, Firewall sẽ dịch chuyển địa chỉ nguồn trong gói tin từ 192.168.1.5 thành 200.200.200.1, đây là địa chỉ ip public.
Tiếp theo bạn có thể thấy địa chỉ địch 201.201.201.2 nhận gói tin. Nó nhận thấy địa chỉ nguồn là 200.200.200.1. Điều này là trong suốt với người dùng trong mạng cục bộ và cả máy đích
Hình 3.9 Ví dụ về NAT (b)
Khi đó máy đích gửi gói tin trả lời trở lại cho User, nó sử dụng địa chỉ IP public mà nó thấy được sau khi Nat là 200.200.200.1
Tiếp theo Firewall nhận gói tin và kiểm tra chính sách NAT của nó. Sau khi quyết định cần thiết dịch chuyển lại địa chỉ ban đầu. Nó thấy địa chỉ 200.200.200.1 và thay đổi địa chỉ Ip public này trở lại địa chỉ Ip private ban đầu là 192.168.1.5, sau đó chuyển tiếp gói tin này vào địa chỉ User trong mạng cục bộ
Ví dụ về PAT
Với PAT, firewall sẽ thay đổi địa chỉ IP và TCP/UDP port của gói tin. Ví dụ này nhà cung cấp dịch vụ ISP chỉ định cho bạn một địa chỉ IP public và bạn cần phải sử dụng địa chỉ này cho tất cả các kết nối của người dùng ra ngoài Internet.
Hình 3.10 ví dụ về PAT (a)
Trong hình trên User ở địa chỉ 192.168.1.5 telnet đến 201.201.201.2. Firewall nhận gói tin và nó so sánh thông tin của gói tin với chính sách NAT và quyết định xem nó có cần thực hiện NAT hay không. Do nó trùng với chính sách vì thế firewall thực hiện việc NAT và thay đổi địa chỉ private 192.168.1.5 thành 200.200.200.1. Trong trường hợp này, thông số port nguôn là 1024 không được sử dụng trong bảng NAT nên nó vấn được giữ nguyên mà không thay đổi số Port. Chú ý rằng firewall thêm địa chỉ NAT này vào trong bảng NAT để mà nó có thể giải quyết vấn đề traffic quay trở lại mạng cục bộ.
Máy đích nhận được gói tin sau khi NAT. Một lần nữa quá trình NAT này là trong suốt với cả máy nguồn và máy đích
Khi máy địch gửi gói tin trả về, nó sẽ sử dụng địa chỉ IP đích là 200.200.200.1 và port đích là 1024. Khi firewall nhận gói tin đến, nó quyết định xem có thực hiện NAT hay không và sau đó nó tìm kiếm xem có thuộc rule nào trong bảng NAT không. Khi thấy trùng, nó thay đổi địa chỉ đích từ 200.200.200.1 thành 192.168.1.5 và để lại port nguồn như ban đầu
Một ví dụ khác, giả sử có một máy cục bộ có địa chỉ 192.168.1.6 cũng telnet đến 201.201.201.2 với địa chỉ port nguồn là 1024
Hình 3.10 Ví dụ về PAT
Firewall nhận gói tin, và gói tin trùng với chính sách NAT đã thiết lập. Firewall tạo một đối tượng NAT trong bảng NAT cho kết nối của User. Trong trường hợp này địa chỉ IP public 200.200.200.1 được sử dụng. Tuy nhiên bởi vì port nguồn 1024 đã tồn tại trong bảng NAT, nên firewall chỉ định một port khác là 1025 cho kết nối của User. Port nguồn khác nhau nhằm giúp cho thiết bị đích nhận biết, phân biệt giữa các kết nối là của 192.168.1.5 hay 192.168.1.6 và cũng cho phép Firewall dịch chuyển gói tin trả về từ 201.201.201.2
3.4 Cấu hình NAT
Trong phần này sẽ tập trung chủ yếu vào chính sách dịch địa chỉ để chuyển đổi thông lượng qua các thiết bị của bạn. Chúng tôi sẽ trình bày cách để cấu hình một địa chỉ NAT, PAT động . Một địa chỉ NAT, PAT tĩnh như thế nào. Hạn chế số lượng kết nối TCP, để ngăn chặn các cuộc tấn công trànTCP SYN , và kiểm tra cấu hình dịch.Một địa chỉ được dịch phải đảm bảo các yêu cầu sau đây:
Yêu cầu cấu hình: Trong phiên bản 6 hoặc phiên bản trước đó. Bạn luôn phải cấu hình
rule cho Nat các gói tin. Hay nói cách khác, nếu gói tin không được cho phép bởi Rule NAT thì nó sẽ bị cấm. Rule này áp dụng cho cả traffic vào và ra
Trong phiên bản 7, NAT là tùy chọn và không được yêu cầu. Để khởi động tính năng NAT, sử dụng câu lệnh sau:
Asa(config)#nat-control
Lần thứ nhất ta yêu cầu địa chỉ dịch với lệnh nat-control, quy tắc này cũng tương tự trong phiên bản 6.0. Nếu chính sách giữa inbound và outbound không liên kết được với nhau và một địa chỉ dịch có giá trị thì packet bị lỗi. Tuy nhiên, có một ngoại lệ đối với quy tắc này là: nếu có 2 interface tham gia vào quá trình giaop tiếp có mức độ
bảo mật như trên thì chúng ta không cần đến một địa chỉ dịch theo quy tắc để chuyển paket giữa chúng.
3.4.1 Cấu hình NAT động
Việc cấu hình một địa chỉ dịch động ( cả NAT hay PAT) tham gia vào 2 quá trình sử lý sau:
Xác định địa chỉ local sẽ được NAT
Tạo nên một địa chỉ global mà địa chỉ local có thể được NAT tới
Theo đó chúng ta có thể cấu hình 2 loại này mà không có vấn đề gì. Phần sau ta sẽ bàn tới việc từng bước cài đặt địa chỉ NAT và PAT động cũng như diễn đạt lại nhiều ví dụ khác nhau của các ví dụ dịch động
Xác định địa chỉ local trong việc dịch
Để xác định một địa chỉ local có thể được dịch, ta sử dụng lệnh nat như sau: ciscoasa(config)# nat (logical_if_name) NAT_ID
local_IP_addr subnet_mask
[tcp] max_TCP_conns [embryonic_conn_limit] [udp max_UDP_conns] [dns] [norandomseq]
Những quy định cụ thể của lệnh nat mà địa chỉ local sẽ dịch sang quy định rất ngiêm khắc trong lệnh global. Tên logic của interface nơi mà các thiết bị vùng được đặt xuất hiện trong dấu ngoặc đơn (“( )”), ví dụ như : (inside)
NAT_ID Các mối quan hệ giữa lệnh nat và global, tạo ra một chính sách.Nhưng trong một số trường hợp ngoại lệ, số lượng bạn sử dụng cho các NAT_ID (số chính sách) không quan trọng. Có một trường hợp đặc biệt bằng cách sử dụng một số NAT_ID: nếu bạn nhập số 0, bạn đang nói với các thiết bị mà các địa chỉ theo sau này trong lệnh nat không nên translated.Cisco đề cập đến tính năng này như nhận dạng NAT, đã được giới thiệu trong phiên bản 6.2. Bạn có thể muốn sử dụng nhận dạng NAT nếu bạn có một hỗn hợp các địa chỉ công cộng và cá nhân đang được sử dụng bên trong mạng của bạn cho các máy tính với địa chỉ công cộng, bạn có thể vô hiệu hóa NAT bằng cách sử dụng lệnh nat 0 và quy định cụ thể địa chỉ hoặc địa chỉ của các thiết bị.Nếu bạn quy định số lượng địa chỉ mạng cho một địa chỉ local, cũng như ước lượng xấp xỉ số mặt nạ mạng con, thì ta điền số mạng và một mặt nạ mạng con bạn có thể thay đổi địa chỉ dịch(những địa chỉ inside của interface).Để làm điều đó ta dùng lệnh sau:
ciscoasa(config)# nat (inside) 1 0.0.0.0 0.0.0.0
lệnh NAT-ID tương ứng với lệnh global. Chú ý rằng ta có thể rút gọn chuỗi 0.0.0.0 0.0.0.0 chỉ thành 0 0.
Bạn có thể giới hạn tổng kết nối TCP bằng lện: (max_TCP_conns), và cũng có thể giảm một nửa kết nối TCP: embryonic_conn_limit
Bắt đầu từ phiên bản 7.0 bạn có thể giới hạn số lượng tối đa cho một kết nối UDP. Tuy nhiên nếu bạn không cấu hình giới hạn số kết nối cho thiết bị mà đã dùng các chính sách để liên kết với nhau thì bảng conn table vẫn hỗ trợ cho các thiết bị được cho phép
Để hiển thị những lệnh nat của bạn gõ lệnh: show run nat command.
Cách tạo một dải địa chỉ global
Chính sách dịch luôn cấu hình giữa một cặp interface, ví dụ như inside và outside, hoặc dmz và outside. Lệnh nat định nghĩa local hoặc interface gốc của một địa chỉ dịch Để định nghĩa đích đến hay interface đầu ra chứa địa chỉ global, ta sử dụng lệnh global như sau:
ciscoasa(config)# global (logical_if_name) NAT_ID
{first_global_IP_addr[-last_global_IP_addr] [netmask subnet_mask] | interface}
Logical_if_name là tham số miêu tả tên logic của interface. Thông lượng sẽ được dịch và chuyển ra trên interface này.
The NAT_ID là tham số cơ bản của lệnh. Đây là địa chỉ global có thể được sử dụng Việc dịch PAT có thể bị xóa khỏi bảng khi không có kết nối tương ứng trong bảng giới hạn thời gian kết nối. Trong khi việc dịch NAT thì không nể sử dụng lệnh để điều khiển thời gian (thời gian mặc định hết hạn là 3 giờ)
Sử dụng với ACLs
Một vấn đề với lệnh NAT là mặc định việc dịch chỉ có thể điều khiển được các gói tin gửi đi mà có địa chỉ là local, bạn không thể điều khiển được việc dịch trên các địa chỉ nguồn và đích được đưa ra . Ở đây chúng ta đang bàn đến khu vực xác định địa chỉ local dành cho việc dịch.
Để giải quyết vấn đề trên, Cisco cho phép bạn liên kết chính sách dịch với một access control list (ACL) – điểu khiển truy cập. Nếu thông lượng tương ứng với một trường hợp cho phép xác định trong ACL thì chính sách tương đương này được sử dụng
Đây là cú pháp sử dụng lệnh nat với ACL:
ciscoasa(config)# nat [(logical_if_name)] NAT_ID access-list ACL_ID
[tcp] max_TCP_conns [embryonic_conn_limit] [udp max_UDP_conns] [dns] [norandomseq]
Dưới đây là 2 ví dụ sử dụng ACLs
Ví dụ về dịch địa chỉ
Giờ thì bạn đã hiểu về cú pháp của lệnh global và lệnh NAT. Hãy cùng hiểu rõ hơn chính sách dịch địa chỉ trên các thiết bị thông qua ví dụ đơn giản sau:
Ở hình 3.11, thiết bị sẽ NAT cho bất kì internal nào có địa chỉ: 192.168.3.0/24 và 192.168.4.0/24
Chính sách cấu hình NAT cho ví dụ này là như sau:
ciscoasa(config)# nat-control
ciscoasa(config)# nat (inside) 1 0.0.0.0 0.0.0.0
ciscoasa(config)# global (outside) 1 200.200.200.10-200.200.200.254
netmask 255.255.255.0
Trong ví dụ này thì địa chỉ được yêu cầu NAT thông qua lệnh nat-control . Tất cả những thiết bị bên trong interface sẽ có địa chỉ nguồn được dịch là 200.200.200.0 khi tồn tại một interface đầu ra. Địa chỉ sẽ được thiết bị chọn để đăng kí một cách tự động.
Hình 3.11 Ví dụ cấu hình NAT đơn giản Ví dụ đơn giản về cấu hình PAT
Hình 3.12 Ví dụ đơn giản về cấu hình PAT
Chúng ta sẽ sử dụng mô hình mạng như hình vẽ trên để minh họa cho ví dụ này Lệnh cấu hình như sau:
ciscoasa(config)# nat-control ciscoasa(config)# nat (inside) 1 0 0
ciscoasa(config)# global (outside) 1 interface
Đây là một ví dụ về PAT, nơi mà thiết bị đang dùng địa chỉ interface bên ngoài cho PAT. Địa chỉ này có thể là địa chỉ tĩnh cũng có thể là địa chỉ được đăng kí một cách tự động bởi dịch vụ DHCP hoặc PPPoE. Trong ví dụ này các thiết bị kết nối trực tiếp tới ISP và nhận địa chỉ interface ra một cách tự động.
Ví dụ về cấu hình NAT và PAT
Để minh họa cho việc sử dụng cả chính sách NAT và PAT trên một thiết bị, ta sử dụng lệnh sau:
ciscoasa(config)# nat-control
ciscoasa(config)# nat (inside) 1 192.168.3.0 255.255.255.0
ciscoasa(config)# global (outside) 1 200.200.200.1-200.200.200.125 netmask 255.255.255.128
ciscoasa(config)# nat (inside) 2 192.168.4.0 255.255.255.0 ciscoasa(config)# global (outside) 2 200.200.200.126
netmask 255.255.255.255
Trong ví dụ này, thiết bị bên trong sẽ nối NAT và PAT lại với nhau 1, 192.168.3.0/24 được dịch thành 200.200.200.1–125 (sử dụng NAT) 2, 192.168.4.0/24 được dịch thành 200.200.200.126 (sử dụng PAT)
Hình 3.13 ví dụ về cấu hình PAT và NAT Ví dụ về PAT với 2 địa chỉ global
Minh họa cho ta thấy việc sử dụng hai địa chỉ global trên một thiết bị. ở đây ta sẽ dùng lấy mô hình mạng hình 3.11 để cấu hình như sau:
ciscoasa(config)# nat-control
ciscoasa(config)# nat (inside) 1 0.0.0.0 0.0.0.0 ciscoasa(config)# global (outside) 1 200.200.200.1 netmask 255.255.255.255
ciscoasa(config)# global (outside) 1 200.200.200.2 netmask 255.255.255.255
Lệnh cấu hình này thực hiện PAT trên tất cả các kết nối bên trong bên ngoài bằng cách sử dụng hai địa chỉ trong lệnh global PAT và xác định NAT
Ví dụ sử dụng PAT và xác định NAT
Trên một thiết bị.Sử dụng mô hình mạng hình 3.13. Thực thi lệnh PAT cho địa chỉ 192.168.3.0/24 nhưng không thực hiện việc dịch địa chỉ từ địa chỉ 200.200.200.128/25, sau đó các thiết bị đã sẵn sàng public địa chỉ IP. Lệnh cấu hình như sau:
ciscoasa(config)# nat-control
ciscoasa(config)# nat (inside) 0 200.200.200.128 255.255.255.128 ciscoasa(config)# nat (inside) 1 192.168.3.0 255.255.255.0 50 25 ciscoasa(config)# global (outside) 1 200.200.200.1
netmask 255.255.255.255
Hình 3.14 Ví dụ cấu hình PAT, không NAT
Ở ví dụ trên, sử dụng lệnh PAT khi địa chỉ đi từ bên trong 192.168.3.0/24 đi qua interface ra ngoài nó sẽ được dịch thành 200.200.200.128/25. Đó là ví dụ NAT 3interface, còn trong trường hợp với nhiều thiết bị hơn thì việc cấu hình cũng diễn ra tương tự
Để thấy được sự phức tạp đó ta xem ví dụ minh họa sau:
ciscoasa(config)# nat (inside) 1 0.0.0.0 0.0.0.0
ciscoasa(config)# nat (dmz) 1 192.168.5.0 255.255.255.0
ciscoasa(config)# global (outside) 1 200.200.200.10-200.200.200.254 netmask 255.255.255.0
ciscoasa(config)# global (dmz) 1 192.168.5.10-192.168.5.254 netmask 255.255.255.0
Trong ví dụ này, có ba interface tham gia với địa chỉ dịch lần lượt là: inside, ousite, và dmz. Một sự cố của chính sách dịch địa chỉ là:
Inside tới dmz: chính sách này sử dụng lệnh NAT ở bên trong và lệnh global ở dmz ( cả hai đều có NAT_ID 1 ). Bất kì thông lượng nào đi qua từ giao diện inside tới giao diện dmz sẽ được NAT sử dụng khoảng địa chỉ 192.168.5.10 tới 192.168.5.254.
Dmz tới outside: chính sách này sử dụng lệnh NAT ở dmz và lệnh global trên interface bên ngoài ( cả hai đều có NAT_ID 1 ). Bất kỳ lưu lượng nào đi qua interface từ bên trong ra ngoài đều được NAT dịch thành địa chỉ nằm trong khoảng 200.200.200.10–
200.200.200.254
Ví dụ cấu hình NAT sử dụng với ACLs
Hình 3.15 Ví dụ về chính sách NAT
ciscoasa(config)# access-list Site_A permit tcp 10.0.1.0 255.255.255.0 host 172.16.10.1
ciscoasa(config)# nat (inside) 100 access-list Site_A ciscoasa(config)# global (outside) 100 172.16.1.100 netmask 255.255.255.255
ciscoasa(config)# access-list Site_B permit tcp 10.0.1.0 255.255.255.0 host 172.17.10.2
ciscoasa(config)# nat (inside) 101 access-list Site_B ciscoasa(config)# global (outside) 101 172.17.1.88 netmask 255.255.255.255
Trong ví dụ trước thì bất kì một gói dữ liệu nào từ địa chỉ 10.0.1.0/24 gửi đến
172.16.10.1 được dịch sử dụng PAT tới một địa chỉ IP 172.16.1.100, Nếu bất kì gói nào từ 10.0.1.0/24 đều được gửi tới 172.17.10.2. Tuy nhiên chúng được PAT tới một địa chỉ global khác172.17.1.88. Trong ví dụ này, một ACLs được sử dụng để điều khiển khi diễn ra việc dịch.Cả nguồn và đích đều tham gia vào kết nối này
Chính sách xác định NAT
Trong ví dụ này ta cấu hình các thiết bị cho một trang web của SOHO, lưu lượng đi qua internet được dịch sử dụng PAT
Câu lệnh cấu hình thiết bị:
SOHO(config)# access-list VPN-EXEMPT-NAT permit ip 10.100.10.0 255.255.255.0
10.10.0.0 255.255.0.0 SOHO(config)# nat-control
SOHO(config)# nat (inside) 0 access-list VPN-EXEMPT-NAT SOHO(config)# nat (inside) 1 10.100.0.0 255.255.0.0
SOHO(config)# global (outside) 1 interface
Khi lưu lượng đi qua kênh VPN theo kiểu site-to-site tới công ty, nó không nên được dịch: Lệnh access-list and nat (inside) 0 thực thi chính sách này.
Khi lưu lượng đi từ SOHO tới Internet, nó sẽ dịch sử dụng PAT: Lệnh nat (inside) 1 and global (outside) 1 thực thi chính sách này.
Hình 3.16 Ví dụ chính sách xác định NAT