Nội dung bài viết
3 Thứ tự xử lý NAT và Firewall trong pfSense
Hiểu biết thứ tự xảy ra firewall và NAT là quan trọng khi cấu hình NAT và các firewall rule. Thứ tự logic cơ bản được minh họa bằng hình ảnh dưới, hình này cũng mô tả vị trí tcpdump liên quan, vì việc sử dụng nó như một công cụ khắc phục sự cố.
Mỗi layer không phải lúc nào cũng được nhấn trong các cấu hình điển hình, nhưng việc sử dụng các floating rule hoặc NAT gửi đi thủ công hoặc các cấu hình phức tạp khác có thể tác động đến từng layer theo cả hai hướng. Sơ đồ chỉ bao gồm các tình huống cơ bản cho lưu lượng truy cập vào và ra.
Lưu lượng truy cập từ LAN sang WAN được xử lý như mô tả, trong danh sách chi tiết hơn sau đây. Nếu một loại rule không tồn tại hoặc không khớp, chúng sẽ bị bỏ qua.
- Port forward hoặc NAT 1: 1 trên interface LAN (ví dụ: chuyển hướng proxy hoặc DNS)
- Firewall rule cho interface LAN: các Floating rule inbound trên mạng LAN, sau đó rule cho các nhóm giao diện bao gồm interface mạng LAN, sau đó là rule tab LAN.
- Các rule NAT 1: 1 hoặc NAT Outbound trên mạng WAN
- Các floating rule phải phù hợp với outbound trên WAN
Trong trường hợp này, port forward trên WAN và firwall rule tab WAN không được áp dụng.
Đối với lưu lượng truy cập bắt đầu trên mạng WAN, thứ tự là như nhau nhưng hướng bị đảo ngược:
- Port forwards hoặc NAT 1:1 trên interface WAN
- Firewall rule cho interface WAN: Floating rule inbound trên mạng WAN , sau đó các rule cho các interface group bao gồm interface WAN, sau đó là các rule tab WAN.
- Rule NAT 1:1 hoặc NAT Outbound trên mạng LAN
- Floating rules phải phù hợp với outbound trên mạng LAN
tcpdump luôn là điều đầu tiên và cuối cùng để xem lưu lượng truy cập, tùy thuộc vào hướng. Đầu tiên, trên interface đến trước khi xử lý NAT và firewall, và cuối cùng trên outbound interfacce.
3.1 Extrapolating to additional interfaces
Khi làm việc với các interface bổ sung, các rule tương tự được áp dụng. Lưu lượng truy cập giữa hai interface nội bộ hoạt động giống như mạng LAN để wan lưu lượng truy cập, mặc dù các rule NAT mặc định sẽ không chuyển đổi lưu lượng truy cập giữa các interface nội bộ để NAT layer không làm bất cứ điều gì trong những trường hợp đó. Nếu các rule outbound NAT tồn tại phù hợp với lưu lượng truy cập giữa các interface nội bộ, nó sẽ áp dụng như được hiển thị.
3.2 Rules cho NAT
Trên đường vào một interface, NAT được áp dụng trước firewall rule, vì vậy nếu điểm đến được chuyển đổi trên đường vào (ví dụ: port forward hoặc NAT 1:1 trên mạng WAN) thì các firewall rule phải phù hợp với đích đã được chuyển đổi. Trong trường hợp điển hình của một port forward trên mạng WAN, điều này có nghĩa là rule phải phù hợp với đích của địa chỉ IP private đích trên mạng LAN.
Ví dụ, với một port forward cho port TCP 80 trên mạng WAN với một firewall rule tự động thêm vào, hình dưới hiển thị kết quả firewall rule trên mạng WAN. Địa chỉ IP nội bộ trên port forward là 192.168.11.9. Cho dù sử dụng port forward hoặc NAT 1:1, firewall rule trên tất cả các interface WAN phải sử dụng địa chỉ IP nội bộ làm đích.
Trên đường ra khỏi interface, NAT outbound được áp dụng trước các firewall rule, vì vậy bất kỳ floating rule nào khớp với outbound trên một interface phải khớp với nguồn sau khi nó đã được chuyển đổi bởi NAT outbound hoặc NAT 1: 1.
4 NAT Reflection
NAT Reflection đề cập đến khả năng truy cập các dịch vụ bên ngoài từ mạng nội bộ bằng cách sử dụng địa chỉ IP bên ngoài (thường là public), giống như client sử dụng internet. Nhiều firewall thương mại và mã nguồn mở không hỗ trợ chức năng này. PfSense hỗ trợ tốt cho NAT reflection, mặc dù một số môi trường sẽ yêu cầu cơ sở hạ tầng DNS split để đáp ứng chức năng này.
4.1 Configuring NAT Reflection
Để enable NAT Reflection:
- Điều hướng tới System > Advanced trên Firewall & NAT
- Tìm phần Network Address Translation của trang
- Cấu hình tuỳ chọn NAT Reflection như sau:
NAT Reflection mode for Port Forwards Có ba lựa chọn có sẵn cho mode NAT Reflection cho port forward, đó là:
Disable NAT Reflection sẽ không được thực hiện, nhưng nó có thể được enable trên cơ sở từng rule.
NAT + Proxy Enables NAT Reflection sử dụng chương trình trợ giúp để gửi các gói tin đến mục tiêu của port forward. Điều này rất hữu ích trong các thiết lập nơi interface và/hoặc địa chỉ IP gateway được sử dụng để giao tiếp với mục tiêu không thể được xác định chính xác tại thời điểm các rule được load. Reflection rules dụng với proxy không được tạo cho phạm vi lớn hơn 500 port và sẽ không được sử dụng cho tổng số hơn 1000 port giữa tất cả các port forward. Mode này không hoạt động với UDP, chỉ với TCP. Bởi vì đây là một proxy, địa chỉ nguồn của lưu lượng truy cập, như được thấy bởi các server, là địa chỉ IP của firewall gần với server nhất.
Pure NAT Enables NAT Reflection chỉ sử dụng các rule NAT trong pf để hướng các gói tin tới mục tieu của port forward. Nó có khả năng mở rộng tốt hơn, nhưng nó phải có khả năng xác định chính xác interface và địa chỉ IP gateway được sử dụng để giao tiếp với mục tiêu tại thời điểm các rule được load. Không có giới hạn vốn có đối với số lượng port khác với giới hạn của các giao thức. Tất cả các giao thức có sẵn cho port forward đều được hỗ trợ. Nếu các server nằm trên cùng một subnet với client, tuỳ chọn Enable automatic outbound NAT for Reflection sẽ che nguồn của lưu lượng truy cập để nó chạy trở lại đúng cách qua firewall.
Reflection Timeout Tuỳ chọn này chỉ liên quan đến mode NAT + Proxy, và kiểm soát thời gian NAT proxy daemon sẽ đợi trước khi đóng kết nối. Chỉ định giá trị tính bằng giây.
Enable NAT Reflection for 1:1 NAT Tùy chọn này cho phép client trên mạng nội bộ tiếp cận các dịch vụ được lưu trữ local bằng cách kết nối với địa chỉ IP bên ngoài của mục nhập NAT 1: 1. Để kích hoạt đầy đủ tính năng, check cả hai Enable NAT Reflection for 1:1 NAT và Enable automatic outbound NAT for Reflection. Tùy chọn thứ hai là chỉ cần thiết nếu client và server trong cùng một mạng con.
Enable automatic outbound NAT for Reflection Khi được enable, tùy chọn này kích hoạt các rule NAT bổ sung cho NAT 1:1 Reflection và NAT Pure, mode NAT Reflection cho port forwards. Các rule bổ sung này che địa chỉ nguồn của máy client để đảm bảo lưu lượng truy cập trả lời đổ ngược lại qua firewall. Nếu không có điều này, kết nối giữa máy client và server sẽ thất bại như các server sẽ trả lời trực tiếp trở lại cho máy client bằng cách sử dụng địa chỉ IP nội bộ của nó. Máy client sẽ ngắt kết nối vì nó đợi câu trả lời từ địa chỉ IP public.
- Click Save để kích hoạt tuỳ chọn new NAT reflection
NAT Reflection Caveats
NAT reflection là một cuộc tấn công vì nó lặp lại lưu lượng truy cập qua firewall khi không cần thiết. Do các tùy chọn hạn chế mà pf cho phép đáp ứng các tình huống này, có một số hạn chế trong việc triển khai NAT + Proxy reflection của pfSense. Phạm vi port lớn hơn 500 port không được bật NAT reflection trong mode NAT + Proxy, và mode đó cũng bị giới hạn hiệu quả khi chỉ hoạt động với TCP. Các mode other yêu cầu NAT bổ sung xảy ra nếu các máy client và server được kết nối với cùng một interface của firewall. NAT bổ sung này ẩn địa chỉ nguồn của máy client, làm cho lưu lượng truy cập dường như bắt nguồn từ firewall để thay thế kết nối có thể được thiết lập đúng cách. DNS split là phương tiện tốt nhất để đáp ứng phạm vi port lớn và NAT 1: 1. Nhiều firewall thương mại thậm chí còn yêu cầu duy trì cơ sở hạ tầng DNS split và thường không phải là một vấn đề.
4.2 Split DNS
Một giải pháp thay thế thích hợp hơn cho NAT reflection là triển khai cơ sở hạ tầng DNS split. DNS split đề cập đến cấu hình DNS trong đó, đối với một hostname nhất định, DNS Internet public phân giải thành địa chỉ IP public và DNS trên mạng nội bộ phân giải thành địa chỉ IP nội bộ, private. Phương tiện đáp ứng điều này sẽ khác nhau tùy thuộc vào chi tiết cụ thể của cơ sở hạ tầng DNS của tổ chức, nhưng kết quả cuối cùng là giống nhau. NAT reflection là không cần thiết bởi vì hostnames giải quyết các địa chỉ IP private bên trong mạng và máy client có thể tiếp cận các server trực tiếp.
DNS split cho phép các server để xem địa chỉ IP client thực sự kết nối giữa các server và client trong cùng một subnet sẽ đi trực tiếp, chứ không phải là không cần thiết liên quan đến firewall.
DNS Resolver/Forwarder Overrides
Nếu pfSense đang hoạt động như DNS server cho các host nội bộ, thì ghi đè máy chủ trong DNS Resolver hoặc DNS forwarder có thể cung cấp chức năng DNS split.
Để add thêm ghi đè vào DNS Resolver:
- Từ Services > DNS Resolver
- Click ở phía dưới Host Overrides
- Cấu hình ghi đè host nếu cần, sử dụng địa chỉ IP nội bộ của server. Ví dụ: Add DNS Resolver Override cho megacore.net
- Click Save để lưu
- Click Apply Changes Để áp dụng thay đổi
DNS Forwarder hoạt động giống nhau về vấn đề này. Nếu DNS Forwarder được enable thay vì DNS Resolver, hãy thêm ghi đè vào đó. Cần ghi đè cho mỗi hostname đang được sử dụng đằng sau firewall.
Internal DNS servers
Khi sử dụng một DNS server riêng biệt trên một mạng nội bộ, như là Microsoft Active Directory, các vùng phải được tạo bởi quản trị viên DNS server cho tất cả các domain host bên trong mạng, cùng với tất cả các bản ghi khác cho các domain đó.
Trong môi trường chạy BIND DNS server nơi DNS public được lưu trữ trên cùng một server với DNS private. Tính năng khung nhìn của BIND được sử dụng để phân giải DNS cho các host nội bộ khác với các host bên ngoài. Các server DNS khác có thể hỗ trợ chức năng tương tự.