Saturday, January 18, 2025

[Pfsense] – Lesson 8 – NAT Forward trong Pfsense

-

1. Tổng quan.

NAT Forward (Network Address Translation Forward) trong pfSense là một tính năng của tường lửa (firewall) cho phép chuyển tiếp các kết nối từ một địa chỉ IP và cổng ngoài mạng (WAN) đến một địa chỉ IP và cổng trong mạng nội bộ (LAN hoặc mạng nội bộ khác). Tính năng này giúp kết nối từ mạng công cộng vào các máy chủ và dịch vụ trong mạng nội bộ của bạn.

Khi một gói tin đi qua pfSense và phù hợp với một quy tắc NAT Forward, địa chỉ IP và cổng nguồn của gói tin sẽ được thay đổi để đảm bảo gói tin được chuyển tiếp đúng đích trong mạng nội bộ. Thông thường, NAT Forward được sử dụng để chuyển tiếp các kết nối từ mạng Internet đến các máy chủ web, máy chủ email, máy chủ VPN hoặc các dịch vụ khác trong mạng nội bộ.

Cấu hình NAT Forward trong pfSense thường bao gồm các thành phần sau:

  • Interface (Giao diện): Xác định giao diện mạng ngoại vi (WAN) qua đó các kết nối được chuyển tiếp.
  • Protocol (Giao thức): Xác định giao thức mạng của kết nối, ví dụ: TCP, UDP hoặc ICMP.
  • Destination (Đích): Xác định địa chỉ IP và cổng đích trong mạng nội bộ mà kết nối sẽ được chuyển tiếp đến.
  • Redirect target IP (Địa chỉ IP đích mới): Xác định địa chỉ IP của máy chủ hoặc dịch vụ trong mạng nội bộ mà kết nối sẽ được chuyển tiếp đến.
  • Redirect target port (Cổng đích mới): Xác định cổng của máy chủ hoặc dịch vụ trong mạng nội bộ mà kết nối sẽ được chuyển tiếp đến.

Khi NAT Forward được cấu hình đúng, pfSense sẽ tự động thực hiện chuyển tiếp các kết nối từ mạng ngoại vi đến mạng nội bộ theo quy tắc đã được xác định. Điều này cho phép bạn triển khai các dịch vụ và máy chủ công cộng trên mạng nội bộ của bạn một cách an toàn và tiện lợi.

2. Thực hành.

Trước lúc thực hành bạn hãy xem qua sơ đồ lab của tôi.

Thông tin IP Address của một máy client chạy MacOS ở ngoài Internet của mình.

hoanghd@Has-iMac ~ % ifconfig en0
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
	options=40b<RXCSUM,TXCSUM,VLAN_HWTAGGING,CHANNEL_IO>
	ether 00:1e:67:35:0e:63
	inet6 fe80::406:a1d3:afcd:71f6%en0 prefixlen 64 secured scopeid 0x7
	inet 172.16.3.252 netmask 0xffffff00 broadcast 172.16.3.255
	nd6 options=201<PERFORMNUD,DAD>
	media: autoselect (100baseTX <full-duplex>)
	status: active

Kết nối từ ngoài Internet vào IP WAN của Pfsense thành công.

hoanghd@Has-iMac ~ % ping -c 4 192.168.13.232
PING 192.168.13.232 (192.168.13.232): 56 data bytes
64 bytes from 192.168.13.232: icmp_seq=0 ttl=63 time=5.242 ms
64 bytes from 192.168.13.232: icmp_seq=1 ttl=63 time=4.689 ms
64 bytes from 192.168.13.232: icmp_seq=2 ttl=63 time=5.506 ms
64 bytes from 192.168.13.232: icmp_seq=3 ttl=63 time=4.872 ms

--- 192.168.13.232 ping statistics ---
4 packets transmitted, 4 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 4.689/5.077/5.506/0.318 ms

Đương nhiên telnet port 3389 vào IP WAN là điều không thể.

hoanghd@Has-iMac ~ % telnet 192.168.13.232 3389
Trying 192.168.13.232...
telnet: connect to address 192.168.13.232: Operation timed out
telnet: Unable to connect to remote host

Đối với IP Server nằm sâu trong Local lại càng không thể.

hoanghd@Has-iMac ~ % telnet 172.16.101.1 3389
Trying 172.16.101.1...
telnet: connect to address 172.16.101.1: Operation timed out
telnet: Unable to connect to remote host

Ý tưởng của mình là giờ mình sẽ Forward Remote Desktop của 3 Server trong Local của mình ra ngoài. Thông tin các port sẽ như sau:

  • 172.16.101.1:3389 -> 192.168.13.232:31011
  • 172.16.102.1:3389 -> 192.168.13.232:31012
  • 172.16.103.1:3389 -> 192.168.13.232:31013

Đương nhiên giờ bạn sẽ không thể kết nối vào 3 port này vì chúng ta chưa Forward cho nó.

hoanghd@Has-iMac ~ % telnet 192.168.13.232 31011
Trying 192.168.13.232...
telnet: connect to address 192.168.13.232: Operation timed out
telnet: Unable to connect to remote host

hoanghd@Has-iMac ~ % telnet 192.168.13.232 31021
Trying 192.168.13.232...
telnet: connect to address 192.168.13.232: Operation timed out
telnet: Unable to connect to remote host

hoanghd@Has-iMac ~ % telnet 192.168.13.232 31031
Trying 192.168.13.232...
telnet: connect to address 192.168.13.232: Operation timed out
telnet: Unable to connect to remote host

Đầu tiên bạn vào Firewall -> NAT.

Ở đây Port Forward mình đang trống, bạn hãy bấm Add thể thêm một rule Forward mới.

Bạn sẽ có các tùy chọn như sau:

  • Disable this rule: Bật tắt rule.
  • No RDR (NOT): Được sử dụng để điều hướng traffic đến các máy chủ hoặc dịch vụ cụ thể. Khi bạn tắt (disable) chuyển hướng, traffic sẽ không được điều hướng đến các máy chủ hoặc dịch vụ đó nữa.
  • Interface: Bạn có thể chỉ định rule này áp dụng cho một interface cụ thể.
  • Address Family: Tùy chọn này cho phép bạn chọn loại địa là IPv4 hoặc IPv6 để forward.
  • Protocol: Tùy chọn này cho phép bạn chọn giao thức mạng (ví dụ: TCP, UDP, ICMP).
  • Source: Đây là địa chỉ IP hoặc subnet nguồn mà rule này áp dụng. Bạn có thể chỉ định IP hoặc subnet nào được nhận kết nối các dịch vụ được forward ra ngoài từ rule này.
  • Destination: Đây là địa chỉ IP hoặc subnet đích mà rule này áp dụng. Bạn có thể chỉ định máy tính hoặc mạng nào có thể nhận kết nối, nó thường là IP Wan của thiết bị.
  • Destination port range: Đây là phạm vi cổng đích mà rule này áp dụng. Bạn có thể chọn các port cụ thể hoặc phạm vi port để hạn chế kết nối đến các dịch vụ cụ thể.
  • Redirect target IP (Single host, WAN address): Đây là địa chỉ IP mục tiêu (là IP trong local) mà gói dữ liệu sẽ được public ra ngoài. Nếu bạn chọn “Single host,” bạn sẽ chỉ định một địa chỉ IP cụ thể. Nếu bạn chọn “WAN address,” gói dữ liệu sẽ được chuyển tiếp đến địa chỉ IP của giao diện WAN.
  • Redirect target port: Đây là cổng mục tiêu mà gói dữ liệu sẽ được chuyển tiếp đến. Bạn có thể chỉ định cổng cụ thể trong trường hợp muốn chuyển tiếp đến dịch vụ cụ thể trên máy chủ đích.
  • Description: Đây là mô tả tùy chọn, giúp bạn nhận biết và ghi chú về mục đích và tính chất của rule này.
  • No XMLRPC Sync (Do not automatically sync to other CARP members): Tùy chọn này áp dụng cho các môi trường có cấu hình CARP (Common Address Redundancy Protocol), một công nghệ dự phòng để đảm bảo tính sẵn sàng cao cho các máy chủ. Khi vô hiệu hóa, rule này không sẽ được tự động đồng bộ hóa đến các thành viên CARP khác trong hệ thống.
  • NAT reflection (Use system default, Enable (NAT + Proxy), Enable (Pure NAT), Disable): Tùy chọn này liên quan đến chức năng NAT reflection, cho phép các máy tính nội bộ kết nối đến các dịch vụ công cộng trong mạng nội bộ thông qua địa chỉ IP công cộng của bản thân. Các tùy chọn gồm:
    • Use system default: Sử dụng thiết lập mặc định của hệ thống về NAT reflection.
    • Enable (NAT + Proxy): Kích hoạt NAT reflection với chế độ proxy.
    • Enable (Pure NAT): Kích hoạt NAT reflection với chế độ NAT thuần túy.
    • Disable: Tắt tính năng NAT reflection.
  • Filter rule association (None, Add associated filter rule, Add unassociated filter rule, Pass): Tùy chọn này liên quan đến việc quyết định rule cụ thể trong bộ lọc (filter) sẽ được tạo để xử lý gói dữ liệu đi qua rule chuyển tiếp này. Các tùy chọn gồm:
    • None: Không kết hợp rule chuyển tiếp với bất kỳ rule nào.
    • Add associated filter rule: Tự động tạo một rule bộ lọc có liên kết với rule chuyển tiếp này.
    • Add unassociated filter rule: Tự động tạo một rule bộ lọc không có liên kết với rule chuyển tiếp này.
    • Pass: Áp dụng rule chuyển tiếp và vượt qua các rule bộ lọc khác.

Bạn sẽ có một rule mới như dưới và đừng quên bấm Apply changes.

Thông báo rule đã được áp dụng sau khi bấm Apply changes.

Nếu bạn chuyển qua phần Rules.

Bạn cũng sẽ thấy có một rule liên quan đến Port Forward đã được tạo ở Rule WAN để cho phép tất cả các nguồn ở ngoài internet remote vào Server 01.

Kết quả telnet port RDP của Server 01 thông qua IP WAN đã thành công, tuy nhiên 2 server còn lại vẫn chưa Remote được.

hoanghd@Has-iMac ~ % telnet 192.168.13.232 31011
Trying 192.168.13.232...
Connected to 192.168.13.232.
Escape character is '^]'.

hoanghd@Has-iMac ~ % telnet 192.168.13.232 31021
Trying 192.168.13.232...
telnet: connect to address 192.168.13.232: Operation timed out
telnet: Unable to connect to remote host

hoanghd@Has-iMac ~ % telnet 192.168.13.232 31031
Trying 192.168.13.232...
telnet: connect to address 192.168.13.232: Operation timed out
telnet: Unable to connect to remote host

Giờ mình tạo thêm rule Nat Forward RDP cho Server 2.

Và cho Server 3.

Kết quả khi tạo xong 3 rules trên.

Kết quả khi check bằng telnet.

hoanghd@Has-iMac ~ % telnet 192.168.13.232 31011
Trying 192.168.13.232...
Connected to 192.168.13.232.
Escape character is '^]'.

hoanghd@Has-iMac ~ % telnet 192.168.13.232 31021
Trying 192.168.13.232...
Connected to 192.168.13.232.
Escape character is '^]'.

hoanghd@Has-iMac ~ % telnet 192.168.13.232 31031
Trying 192.168.13.232...
Connected to 192.168.13.232.
Escape character is '^]'.

Giờ mình sử dụng phần mềm Remote Desktop trên MacOS để remote thử bằng IP WAN.

Kết quả.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories