Thursday, November 21, 2024

[OPNSense] – Lesson 10 – Firewall Rules

-

1. Tổng quan

OPNsense là một phần mềm tường lửa và bộ lọc gói dữ liệu. Chức năng tường lửa này cho phép bạn giới hạn hoặc cho phép lưu lượng từ và đến các mạng cụ thể, đồng thời ảnh hưởng đến cách mà lưu lượng được chuyển tiếp.

Các hành động (Action)

Các quy tắc có thể được thiết lập với ba loại action khác nhau:

  • Pass –> cho phép traffic đi qua.
  • Block –> chặn traffic và không cho phép máy khách biết rằng nó đã bị chặn (điều này thường được khuyến khích cho các mạng không đáng tin cậy).
  • Reject –> chặn traffic và cho phép máy khách biết về điều đó. (Chỉ TCP và UDP hỗ trợ từ chối các gói tin, trong trường hợp của TCP có nghĩa là một RST được trả về, đối với UDP là ICMP UNREACHABLE được trả về).

Đối với các mạng nội bộ, có thể thực tế để sử dụng từ chối (reject), để máy khách không phải chờ đợi cho một thời gian chờ khi truy cập bị từ chối. Khi nhận được các gói tin từ các mạng không đáng tin cậy, thường bạn không muốn gửi trả lời lại nếu traffic không được phép.

Processing

Quy tắc tường lửa được xử lý theo trình tự cho từng phần, đầu tiên là phần các quy tắc động, tiếp theo là tất cả các quy tắc thuộc nhóm interface và cuối cùng là tất cả các quy tắc interface.

Các quy tắc nội bộ (tự động) thường được đăng ký trước.

Các quy tắc có thể được đặt để chạy nhanh hoặc không được đặt để chạy nhanh, mặc định là sử dụng chế độ chạy nhanh. Khi được đặt để chạy nhanh, quy tắc sẽ được xử lý trên cơ sở “trùng khớp đầu tiên”, điều này có nghĩa là quy tắc đầu tiên phù hợp với gói tin sẽ được ưu tiên hơn các quy tắc tiếp theo trong trình tự.

Khi không được đặt để chạy nhanh, quy tắc cuối cùng sẽ được áp dụng. Điều này có thể hữu ích cho các quy tắc định nghĩa hành vi tiêu chuẩn. Ví dụ, quy tắc từ chối mặc định của chúng tôi sử dụng tính năng này (nếu không có quy tắc nào phù hợp, thì từ chối lưu lượng).

Giao diện firewall sẽ hiển thị tất cả các quy tắc được sử dụng. Tuy nhiên, trong trường hợp không chắc chắn, bạn có thể kiểm tra đầu ra nguyên bản của tập luật trong /tmp/rules.debug. Điều này sẽ cung cấp cho bạn một cái nhìn tổng thể về tất cả các quy tắc được sử dụng trên firewall của bạn.

Note:
- Trong firewall, các quy tắc được đăng ký bên trong hệ thống sử dụng một ưu tiên (priority), floating được sử dụng ưu tiên 200000, groups được sử dụng ưu tiên 300000 và các quy tắc của interface được sử dụng ưu tiên 400000 kết hợp với thứ tự xuất hiện của chúng. Quy tắc tự động thường được đăng ký với mức ưu tiên cao hơn (số thấp hơn).
- Việc đăng ký các quy tắc với ưu tiên giúp firewall xác định xem quy tắc nào sẽ được áp dụng đầu tiên nếu có nhiều quy tắc cùng áp dụng cho một gói tin. Ví dụ, nếu một gói tin khớp với cả quy tắc của Floating và quy tắc của một interface, quy tắc của Floating sẽ được áp dụng trước do có ưu tiên cao hơn.

Cảnh báo: NAT (Network Address Translation) rules được xử lý trước các filter rule trong firewall. Vì vậy, nếu bạn định nghĩa một NAT rule mà không có filter rule đi kèm, ví dụ như port forwarding rule với Filter rule association được thiết lập thành Pass, điều này có nghĩa là không có bất kỳ rule nào khác được áp dụng sau đó. Nó có thể dẫn đến việc truyền thông trên mạng bị gián đoạn hoặc không được xử lý đúng cách nếu không có các filter rule phù hợp được áp dụng sau đó. Do đó, khi thiết lập NAT rules, bạn cần phải đảm bảo rằng các filter rule tương ứng được thiết lập chính xác để đảm bảo tính an toàn và hiệu quả của hệ thống firewall.

Rule sequence

Bạn có thể tùy chỉnh thứ tự hiển thị và xử lý các quy tắc trong mỗi phần của Firewall bằng cách thực hiện các bước sau:

  • Chọn một hoặc nhiều quy tắc bằng checkbox ở bên trái của quy tắc đó.
  • Sử dụng nút mũi tên trong menu hành động ở phía bên phải của quy tắc để di chuyển các quy tắc đã chọn trước quy tắc mà nút hành động được nhấn.
  • Hoặc bạn có thể sử dụng nút mũi tên ở đầu hàng tiêu đề để di chuyển các quy tắc đã chọn đến cuối danh sách.

Direction

Quy tắc lọc được áp dụng theo hướng vào hoặc ra, với cài đặt mặc định của hệ thống là lọc theo hướng vào. Khi đó, bạn cần thiết lập chính sách lọc trên interface mà lưu lượng thông tin được phát sinh từ đó.

Ví dụ, nếu bạn muốn cho phép lưu lượng thông tin HTTPS đến từ bất kỳ máy chủ nào trên internet, bạn thường sẽ thiết lập một chính sách trên interface WAN cho phép cổng 443 đến máy chủ tương ứng.

Note: Khi traffic ra khỏi firewall (outgoing traffic), mặc định sẽ được chấp nhận (accept) nếu không có quy tắc nào cấm hoặc chặn. Tuy nhiên, nếu Disable force gateway trong Firewall Settings ‣ Advanced không được chọn, gateway kết nối sẽ được áp dụng cho traffic này. Điều này có nghĩa là, nếu muốn chỉ định gateway cụ thể cho outgoing traffic, ta cần thiết lập quy tắc để chặn hoặc cho phép traffic ra mà chỉ định gateway đó.

2. Các loại firewall rules.

Trong hệ thống mạng, rule LAN và rule WAN là hai loại quy tắc (rule) quan trọng để điều khiển, giám sát và bảo vệ mạng.

Rule LAN (Local Area Network) được áp dụng trên interface mạng LAN, nơi các thiết bị như máy tính, máy chủ, thiết bị lưu trữ, máy in được kết nối trong một mạng LAN nội bộ. Rule LAN có nhiệm vụ kiểm soát các kết nối giữa các thiết bị trong mạng LAN, quy định các quyền truy cập, chia sẻ tài nguyên, bảo vệ mạng khỏi các mối đe dọa từ bên trong mạng LAN.

Rule WAN (Wide Area Network) được áp dụng trên interface mạng WAN, nơi mạng LAN kết nối với mạng bên ngoài, ví dụ như Internet. Rule WAN có nhiệm vụ kiểm soát các kết nối từ bên ngoài vào mạng LAN, xác định các quyền truy cập, bảo vệ mạng khỏi các mối đe dọa từ bên ngoài như các cuộc tấn công DDoS, hacking, virus, spam, phishing, v.v.

Rule Loopback và Floating là 2 loại rule khác nhau được sử dụng để quản lý các kết nối trong hệ thống. Rule Loopback được sử dụng để kiểm soát lưu lượng mạng giữa các ứng dụng và dịch vụ trên cùng một thiết bị. Nó thường được sử dụng để cho phép các ứng dụng và dịch vụ truy cập vào các cổng mạng trên chính thiết bị đó. Các gói dữ liệu Loopback di chuyển giữa các ứng dụng và dịch vụ trong cùng một thiết bị và không đi qua bất kỳ cổng mạng nào khác.

Rule Floating, trái ngược với rule LAN và WAN, không được gắn liền với bất kỳ một interface mạng nào trong hệ thống Firewall. Nó được sử dụng để kiểm soát lưu lượng mạng ở mức độ cao hơn, nghĩa là áp dụng cho toàn bộ hệ thống Firewall. Rule Floating thường được sử dụng để áp dụng các quy tắc cho các tình huống đặc biệt, chẳng hạn như cấm hoặc cho phép truy cập vào một khu vực mạng cụ thể, hoặc để chuyển tiếp các gói dữ liệu giữa các interface mạng khác nhau.

3. Thực hành tạo Rule.

Sơ đồ đấu nối.

Hãy nhìn vào sơ đồ trên, các bạn biết là hiện tại ở cổng LAN mình có 3 interface ảo là vlan0.101 có IP 172.16.101.254/24, vlan0.102 có IP 172.16.102.254/24 và vlan0.103 có IP 172.16.103.254/24. Ngoài ra ở LAN của mình đang có IP 172.16.1.254 đã được cấu hình khi mới cài đặt OPNsense để làm IP Management.

Và khi bạn vào phần rule của LAN bạn sẽ thấy ngoài rule deny all ở dưới cùng thì OPNsense cũng tạo ta 2 rule cho phép tất cả các traffic in/out trên interface LAN này. Đó là lý do tại sao mình có thể sử dụng IP 172.16.1.254 login được vào trình duyệt Web GUI.

Bây giờ mình sẽ vào Server 01 - 172.16.101.1/24config card mạng cho nó chút xíu. Do mình để trunk các port nối xuống switch layer 2 nên mình sẽ config trỏ vlanid trực tiếp trên card mạng của server luôn. Quy trình làm sẽ như dưới.

Thay đổi thông tin vlanid ở đây nhé.

Sau khi đổi thông tin vlanid xong bạn hãy vào lại Properties và config lại IP Address.

Kết quả trong CMD cho thấy IP đã thay đổi thành công nhưng không thể ping về địa chỉ 172.16.101.254 của vlan0.101 trên OPNSense.

Lý do là chúng ta chưa tạo rule cho phép kết nối cho nó. Bạn hãy vào rules và chon interface đang nối về máy tính client 172.16.101.1/24, bạn sẽ thấy hiện tại chỉ có 1 rule default (4).

Nhìn hình trên bạn sẽ thấy có một thông báo “No Sysadmin rules are currently defined. All incoming connections on this interface will be blocked until you add a pass rule. Exceptions for automatically generated rules may apply.” với ý nghĩa là cảnh báo rằng không có các quy tắc Sysadmin nào được xác định trên interface hiện tại, và tất cả các kết nối đến trên interface này sẽ bị chặn cho đến khi bạn thêm một quy tắc cho phép. Các quy tắc được xác định sẽ chỉ cho phép các loại kết nối được xác định cụ thể được phép truy cập trên interface này. Có thể tồn tại các quy tắc được tạo tự động cho phép các loại kết nối nhất định, tuy nhiên, các quy tắc này sẽ là ngoại lệ và chỉ áp dụng trong một số trường hợp cụ thể. Việc thêm quy tắc cho phép truy cập được yêu cầu để đảm bảo rằng các kết nối đến được cho phép và mạng hoạt động đúng cách.

Để đơn giản mình sẽ mở 1 rule chỉ cho phép client ping tới OPNsense bằng các thiết lập như dưới.

Sau khi thiết lập xong, bạn đã có 1 rule đầu tiên và đừng quên bấm Apply.

Kết quả trả về The changes have been applied successfully cho biết rule bạn đã tạo thành công.

Và đây là kết quả bạn đã ping tới OPNsense thành công.

Nhưng với rule trên bạn mới chỉ được phép ping chứ chưa thế truy cập được vào Web GUI.

Bạn hãy mở thêm rule dưới để có thể truy cập vào Web GUI nhé.

Sau khi bấm lưu lại và bấm Apply change, bạn sẽ có rule mới như dưới.

Và đây là kết quả bạn đã được phép kết nối vào Web GUI.

Nhưng với 2 rule đó bạn mới chỉ kết nối đến với OPNsense mà thôi, bạn chưa thể kết nối internet.

Theo kết quả kiểm tra ở hình trên, bạn chưa thể kết nối internet và chưa phân giải được tên miền. Hãy tạo thêm các rule dưới đây để có thể kết nối đến website nhé. Khác với lần trước, lần này mình sẽ kéo xuống dưới và lựa chọn 1 Gateway cụ thể chứ không để default nữa.

Rule đầu tiên mở port UDP/53 của DNS cho phép phân giải tên miền.

Rule thứ 2 cho phép kết nối website có giao thức http.

Rule thứ 3 cho phép kết nối website có giao thức https.

Rule thứ 4 chỉ cho phép ping tới 1.1.1.1, các IP còn lại bị cấm ping.

Và đây là 3 rule mới mình vừa tạo xong, và mình nhắc lại chúng có ý nghĩa như sau:

  • Rule đầu tiên mở port UDP/53 của DNS cho phép phân giải tên miền.
  • Rule thứ 2 cho phép kết nối website có giao thức http.
  • Rule thứ 3 cho phép kết nối website có giao thức https.
  • Rule thứ 4 chỉ cho phép ping tới 1.1.1.1, các IP còn lại bị cấm ping.

Và đây là kết quả.

Có 2 cách chặn, mình sẽ nhắc lại như sau:

  • Block –> chặn traffic và không cho phép máy khách biết rằng nó đã bị chặn (điều này thường được khuyến khích cho các mạng không đáng tin cậy).
  • Reject –> chặn traffic và cho phép máy khách biết về điều đó. (Chỉ TCP và UDP hỗ trợ từ chối các gói tin, trong trường hợp của TCP có nghĩa là một RST được trả về, đối với UDP là ICMP UNREACHABLE được trả về).

Bây giờ mình sẽ thử tính năng block bằng cách block trang zing.vn. Bạn hãy kiểm tra IP của zing.vn là bao nhiêu rồi đưa vào rule block theo thiết lập dưới. Hiện tại IP của zing.vn mình lấy được là 118.102.1.119.

Như vậy rule mình đã thiết lập xong, lưu ý thứ tự rule phải như dưới thì mới chạy được nhé. Rule chặn https của zing.vn phải nằm ở trên rule cho phép truy cập tất cả https ở ngoài mạng internet. Lý do là rule của OPNsense sẽ duyệt từ trên xuống, map với rule nào thì nó sẽ thực hiện ngay rule đó và không chạy xuống dưới nữa.

Và đây là kết quả.

4. Cách di chuyển rule

– Để di chuyển 1 rule xuống dưới cùng.

Di chuyển 1 rule xuống dưới cùng, hãy “bấm chọn” rule cần di chuyển và bấm vào “di chuyển xuống dưới cùng“.

Kết quả.

– Để di chuyển 1 rule đến 1 dòng bất kỳ.

Hãy bấm chọn rule cần di chuyển (1) và sau đó bấm vào nút “di chuyển” để di chuyển rule (1) nằm trên rule (2).

Và đây là kết quả.

Để di chuyển nhiều rule cùng một lúc xuống dưới cùng.

Và đây là kết quả.

– Để di chuyển nhiều rule tới 1 dòng bất kỳ.

Kết quả.

Và sau khi di chuyển đừng quên bấm Apply changes nhé.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories