Trang chủTin tứcHướng dẫn cấu hình Ubuntu Firewall với chức năng NAT của IPtables
Hướng dẫn cấu hình Ubuntu Firewall với chức năng NAT của IPtables

Hướng dẫn từng bước về cách cấu hình Ubuntu Firewall bằng tiện ích iptables, bao gồm cả chức năng dịch địa chỉ mạng (NAT). Tìm hiểu chi tiết ngay sau đây.

Trong thế giới ngày nay, với sự phức tạp và quy mô ngày càng lớn của hệ thống mạng, việc bảo vệ máy chủ trở nên càng quan trọng hơn bao giờ hết. Hướng dẫn "Cấu Hình Ubuntu Firewall đi kèm chức năng NAT của IPtables" nhấn mạnh sự kết hợp mạnh mẽ giữa Ubuntu Firewall (UFW) và NAT của IPTABLES, mang lại giải pháp bảo mật toàn diện và hiệu suất cao cho hệ thống Ubuntu Linux.

cấu hình Ubuntu Firewall  đi kèm chức năng NAT của IPtables
Cấu hình Ubuntu Firewall  đi kèm chức năng NAT của IPtables

1. Lý thuyết cần nắm rõ

1.1 NAT là gì?

Network Address Translation (NAT) là một kỹ thuật được sử dụng trong mạng máy tính để chuyển đổi địa chỉ IP của gói tin điều khiển khi chúng đi qua một thiết bị trung gian, thường là một bộ định tuyến (router) hoặc tường lửa.

Chức năng chính của NAT là:

  • NAT thực hiện chức năng chuyển đổi địa chỉ IP, giữa địa chỉ IP nội bộ (local) và địa chỉ IP ngoại vi (public).
  • Địa chỉ IP nội bộ thường được sử dụng trong mạng nội bộ của tổ chức, trong khi địa chỉ IP ngoại vi thường là địa chỉ IP có thể truy cập được từ internet.
  • NAT giúp tăng hiệu suất bằng cách giảm địa chỉ IP công cộng được sử dụng và thường đi kèm với chức năng masquerading để che giấu địa chỉ IP nội bộ khỏi mạng ngoại vi, tăng tính bảo mật.

1.2 IP Masquerading

IP Masquerading là một phương thức của Network Address Translation (NAT) được sử dụng để che giấu địa chỉ IP nội bộ của các máy tính trong mạng nội bộ khi chúng kết nối với internet. Kỹ thuật này giúp bảo vệ tính riêng tư của các thiết bị trong mạng nội bộ và làm cho chúng trở nên không trực tiếp nhìn thấy từ bên ngoài.

Cách IP Masquerading Hoạt Động:

  • Che Giấu Địa Chỉ IP Nội Bộ: Khi các gói tin rời khỏi mạng nội bộ và vào internet, địa chỉ IP nội bộ của thiết bị nguồn sẽ được thay thế bằng địa chỉ IP ngoại vi của router hoặc tường lửa.
  • Ghi Nhớ Thông Tin Kết Nối: tường lửa sẽ ghi nhớ thông tin về kết nối, bao gồm địa chỉ IP và cổng của thiết bị nội bộ.
  • Quản Lý Kết Nối Trả Về: Khi gói tin trả về từ internet, router sẽ sử dụng thông tin đã ghi nhớ để chuyển đúng gói tin đến thiết bị nội bộ tương ứng.

Ta hãy liên tưởng nó như reverse proxy vậy.

2. Mô hình thực hành cấu hình Ubuntu Firewall với chức năng NAT của IPtables

Mô hình IP
Mô hình IP

IP LAB

 

IP

Interface

Ubuntu 22.04 (IPtables-server)

192.168.10.3/24

ens33

192.168.20.15/24

ens37

Ubuntu 20.04 (Web-server)

192.168.20.14/24

ens33

Các thao tác thực hiện hoàn toàn trên IPtables-server và được thao tác với quyền root.

Sơ đồ thực hiện
Sơ đồ thực hiện 

Bước 1: Trình duyệt sẽ gửi gói tin yêu cầu trang web khuongquang.com đến IPtables-server.

Bước 2: Sau khi IPtables-server nhận được gói tin, nó sẽ tiến hành kiểm tra chain PREROUTING từ bảng NAT và thay đổi đích đến của gói tin thành của IP của Web-server.

Bước 3: Gói tin tiếp tục được đẩy qua chain FORWARD để kiểm tra xem gói tin có được phép chuyển đến Web-server không.

Bước 4: gói tin sẽ được chuyển đến Web-server và nhận được gói tin phản hồi. Lúc này nguồn và đích sẽ được đảo lại vì đây là gói tin trả lời mà.

Bước 5: Gói tin lúc này sẽ được đẩy đến chain POSTROUTING và sử dụng tính năng IP Masquerading để thay đổi IP nguồn của gói tin phù hợp với IP của IPtables-server.

Bước 6: Trình duyệt nhận được gói tin phản hồi và tiến hành phân giải gói tin rồi biểu diễn lên màn hình.

3. Cấu hình NAT bằng Ubuntu Firewall

Mình sẽ dựa vào các bước trên và tiến hành cấu hình với UFW. Có 1 lưu ý rằng UFW không cung cấp cho chúng ta những câu lệnh để có thể thay đổi nguồn và ta chỉ có thể chỉnh sửa nó bằng cách chỉnh sửa trực tiếp file cấu hình của nó.

Đầu tiên ta cần bật tính năng cho phép forward gói tin của Ubuntu trước đã

vi /etc/ufw/sysctl.conf

Bỏ dấu # ở dòng net/ipv4/ip_forward. Hình ảnh thực tế sẽ như thế này

Cấu hình NAT bằng Ubuntu Firewall 1
1. Cấu hình NAT bằng Ubuntu Firewall

Tiếp theo ta cần chỉnh sửa các rule default của UFW tương ứng với INPUT là DROP, OUTPUT là ACCEPT, FORWARD là ACCEPT. File chứa rule default là /etc/default/ufw

vi /etc/default/ufw

chỉnh sửa như trong ảnh 

Cấu hình NAT bằng Ubuntu Firewall 2
2. Cấu hình NAT bằng Ubuntu Firewall

Tiếp theo ta cần tạo chain POSTROUTING của bảng NAT để có thể sử dụng IP Masquerading

vi /etc/ufw/before.rules

Đưa nội dung sau vào đầu file

# nat Table rules

*nat

:POSTROUTING ACCEPT [0:0]

# Forward traffic from ens37 through ens33.

-A POSTROUTING -s 192.168.20.0/24 -o ens33 -j MASQUERADE

-A POSTROUTING -d 192.168.20.14/24 -p tcp --dport 80 -j SNAT --to-source 192.168.20.15

# don't delete the 'COMMIT' line or these nat table rules won't be processed

COMMIT

Cấu hình NAT bằng Ubuntu Firewall 3
3. Cấu hình NAT bằng Ubuntu Firewall

Cuối cùng ta cần tạo chain PREROUTING để có thể chuyển đổi đích các gói tin đi đến IPtables-server thành Webserver.

vi /etc/ufw/after.rules

Tương tự thêm nội dung sau vào đầu file

# nat Table rules

*nat

:PREROUTING ACCEPT [0:0]

# Forward traffic from eth1 through eth0.

-A PREROUTING -d 192.168.10.3/24 -p tcp --dport 80 -j DNAT --to-destination 192.168.20.14:80

# don't delete the 'COMMIT' line or these nat table rules won't be processed

COMMIT

Cấu hình NAT bằng Ubuntu Firewall 4
4. Cấu hình NAT bằng Ubuntu Firewall

Bây giờ ta tiến hành reload lại UFW

ufw reload

Sửa lại file hosts của windows nhằm thay thế cho việc mua tên miền rồi tiến hành lên trình duyệt gõ tên miền của bạn.

Cấu hình NAT bằng Ubuntu Firewall 5
5. Cấu hình NAT bằng Ubuntu Firewall

4. Script cấu hình NAT sử dụng với IPtables

Nếu bạn muốn tìm cách sử dụng IPtables thay vì sử dụng UFW thì việc đầu tiên bạn cần làm hoàn tác lại tất cả các bước đã làm trước đó với UFW sau đó bạn chỉ cần tạo file và chạy script này là xong. 

Script này mình đã giải thích chi tiết cho bạn ở bài viết trước, nếu bạn không hiểu có thể đọc lại. Có 1 lưu ý rằng bạn cần chỉnh sửa lại nội dung của script sao cho phù hợp IP và card mạng của các bạn. Có thể tham khảo danh mục số 2 để sửa theo.

Tạo file chứa nội dung script

vi nat.sh

Thêm vào nội dung sau

#!/bin/bash

# cho phép chuyển tiếp gói tin

sed -i 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/' /etc/ufw/sysctl.conf

# Thao tác forward với bảng filter

iptables -P FORWARD ACCEPT

# Thao tác forward với bảng NAT

iptables -t nat -A PREROUTING -d 192.168.10.3/24 -p tcp --dport 80 -j DNAT --to-destination 192.168.20.14:80

iptables -t nat -A POSTROUTING -s 192.168.20.0/24 -o ens33 -j MASQUERADE

iptables -t nat -A POSTROUTING -d 192.168.20.14/32 -p tcp --dport 80 -j SNAT --to-source 192.168.20.15

# Lưu lại cấu hình

mkdir -p /etc/iptables

iptables-save > /etc/iptables/rules.v4 

iptables-restore < /etc/iptables/rules.v4

Cấp quyền thực thi cho file 

chmod +x nat.sh

Bây giờ ta tiến hành chạy file

. nat.sh

Việc chỉnh sửa file hosts trên windows không cần phải làm nữa vì ta đã làm trước đó rồi. Bây giờ tương tự ta tiến hành lên trình duyệt và gõ tên miền.

5. Lưu ý khi cấu hình Ubuntu Firewall với chức năng NAT của IPtables

Việc tắt hay bật UFW có sự thay đổi rất lớn đến với các rule default của các chain INPUT, OUTPUT, FORWARD nên các bạn hãy đảm bảo cấu hình đúng các rule default.

Các file cấu hình rule của UFW giống hệt với câu trúc của các file cấu hình IPtables, nếu có gì khó hiểu bạn có thể đối chiếu 2 file với nhau sẽ dễ dàng tìm ra lời giải.

Các bạn khi thao tác với IPtables trên Ubuntu sẽ không có lệnh lưu lại cấu hình hay restart lại dịch vụ. Việc của bạn cần làm là tạo các thư mục rồi lưu ra các file cấu hình riêng sau đó mới load lại file đấy.

File hosts trong windows có thể được coi là máy chủ DNS cho chính nó nên để trình duyệt có thể hiểu tên miền thì bắt buộc bạn phải chỉnh sửa file hosts vì bạn đang thực hiện trên mạng nội bộ.

6. Tổng kết

Trong bài hướng dẫn này, chúng ta đã hiểu về NAT và IP Masquerading, thực hành mô hình kết nối mạng nội bộ và ngoại vi, cấu hình NAT bằng UFW và viết script sử dụng IPTABLES. Hãy nhớ đọc kỹ các lưu ý và kiểm tra cơ bản đã được đề xuất để đảm bảo sự hoạt động ổn định của cấu hình. Trở lại với suncloud.vn để cập nhật những kiến thức bổ ích nhé.

Tác giả:
author avatar
Mình là Huy, hiện mình đang là kỹ sư hệ thống tại SunCloud. Mình có nhiều năm kinh nghiệm, kiến thức chuyên môn về mạng, hệ thống, điện toán mây và an ninh bảo mật. Mình đã triển khai và vận hành rất nhiều dự án thực tế cho doanh nghiệp, cơ quan. Mình đã đạt được một số chứng chỉ quốc tế như CCNP, LPI, VCP, đồng thời mình vẫn đang tiếp tục học tập để trau dồi kiến thức mỗi ngày. Mình rất yêu thích công nghệ, đam mê chia sẻ những kiến thức, thông tin hữu ích cho mọi người.

Tin tức nổi bật