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ìnhUbuntu Firewallđi kèm chức năngNATcủa IPtables" nhấn mạnh sự kết hợp mạnh mẽ giữaUbuntu Firewall(UFW) vàNATcủ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ốngUbuntuLinux.
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.2IP 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
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.
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
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
Tiếp theo ta cần tạo chainPOSTROUTINGcủ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 |
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 |
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.
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ớisuncloud.vnđể cập nhật những kiến thức bổ ích nhé.