Hướng dẫn sử dụng Nftables

Huong Dan Su Dung Nftables

Hướng dẫn này giải thích cách làm việc với tường lửa Nftables Linux. Nội dung này được tối ưu hóa cho cả người dùng Linux có kinh nghiệm và người dùng mới.

Nftables là một thành phần của nhân Linux cung cấp các chức năng tường lửa. Nó là sự thay thế của Iptables.







Sau khi đọc hướng dẫn này, bạn sẽ hiểu các quy tắc của Nftables và bạn sẽ có thể tạo tường lửa của mình. Bạn không cần có kiến ​​thức trước đó về Iptables.



Tất cả các ví dụ trong hướng dẫn này đều chứa ảnh chụp màn hình, giúp tất cả người dùng Linux, không phụ thuộc vào trình độ kiến ​​thức, dễ dàng hiểu và thực hiện chúng.



Bắt đầu với Nftables

Trước khi bắt đầu, hãy tạo và mở tệp bằng trình soạn thảo văn bản như nano hoặc vi để bắt đầu nhập các quy tắc Nftables đầu tiên của bạn dựa trên ví dụ sau. Không sao chép-dán; gõ mọi thứ.





nano firewall.nft

Ví dụ trong hướng dẫn này khá đơn giản và hiển thị một tường lửa hạn chế trong đó tất cả lưu lượng IPv4 bị loại bỏ ngoại trừ vòng lặp và các cổng cụ thể.



Trong ảnh chụp màn hình trước, tôi đã sử dụng dòng đầu tiên để xác định mạng cục bộ của mình (192.168.0.0/16) là LinuxHintNet.

định nghĩa LinuxHintNet = 192.168.0.0 / 16

Trong dòng thứ hai, tôi xác định một nhóm các cổng (80,443 và 22). Tôi gọi nhóm này là AllowPorts vì tôi dự định cho phép lưu lượng truy cập qua chúng. AllowPorts là một tên tùy ý.

định nghĩa AllowPorts = { 80 , 443 , 53 , 22 }

Sau đó, tôi thêm một bảng, là một vùng chứa hoặc một nhóm các chuỗi và quy tắc; cả hai đều được giải thích dưới đây. Bảng giúp các quy tắc và chuỗi được tổ chức. Tôi đã gọi bảng trong ví dụ là “Restrictive” vì nó chứa một chính sách hạn chế và tên của nó là tùy ý.

IP trước tên bảng chỉ ra rằng các quy tắc bảng hàng đợi sẽ chỉ được áp dụng cho lưu lượng IPv4. Bạn có thể sử dụng inet thay vì IP để áp dụng các quy tắc cho các giao thức IPv4 và IPv6. Hoặc bạn có thể thay thế IP bằng ip6 chỉ dành cho IPv6.

Hãy nhớ rằng, Restrictive là một cái tên tôi đã định nghĩa một cách tùy ý. Bạn có thể đặt tên bảng như bạn muốn.

Trong trường hợp của tôi, tôi chỉ áp dụng các quy tắc cho IPv4, như được hiển thị bên dưới.

thêm bảng ip Hạn chế

Đối với cả hai giao thức, hãy sử dụng như sau:

thêm bảng inet Restrictive

Sau đó, chúng tôi thêm chuỗi cơ sở đầu tiên, mà tôi tùy ý đặt tên là Incoming vì nó liên quan đến lưu lượng truy cập đến. Tuy nhiên, bạn có thể đặt tên nó như bạn muốn.

Chuỗi cơ sở sau loại bỏ tất cả lưu lượng đến theo mặc định:

  • thêm chuỗi ip Hạn chế Đến: Phần này thêm chuỗi Hạn chế Đến sẽ được áp dụng cho IPv4
  • loại bộ lọc: Điều này xác định loại chuỗi là bộ lọc vì nó sẽ lọc lưu lượng truy cập. Các loại chuỗi có thể có khác là tuyến đường hoặc NAT
  • đầu vào móc: Đề cập đến các gói đến
  • mức độ ưu tiên 0: Mức độ ưu tiên của chuỗi cơ sở xác định thứ tự chuỗi cơ sở
  • drop policy: Chính sách drop, theo mặc định, loại bỏ tất cả các gói
Thêm chuỗi ip Đến hạn chế { loại hình ưu tiên đầu vào móc lọc 0 ; giảm chính sách; }

Như bạn có thể thấy trong ảnh chụp màn hình sau, tôi đã tạo hai chuỗi cơ sở khác tương tự như trước đó, Chuyển hướng hạn chế và Gửi đi hạn chế. Sự khác biệt là móc được xác định cho mỗi (móc về phía trước và đầu ra của móc). Giải thích chúng là lặp đi lặp lại.

Sau ba chuỗi cơ sở, chúng ta có thể tiếp tục với các quy tắc Nftables để cho phép lưu lượng truy cập lặp lại.

Tôi thêm các dòng sau cho lưu lượng đến và đi trên giao diện loopback.

thêm quy tắc ip Hạn chế đến hạn chế iifname lo bộ đếm chấp nhận

thêm quy tắc ip Hạn chế đến oifname lo chấp nhận bộ đếm

Bây giờ, tôi thêm bốn quy tắc chấp nhận lưu lượng TCP và UDP đi và đến thông qua tất cả các cổng có trong biến $ AllowPorts được xác định ở đầu tệp.

thêm quy tắc ip Môn thể thao tcp sắp tới bị hạn chế $ AllowPorts bộ đếm chấp nhận

thêm quy tắc ip Dport tcp gửi đi hạn chế $ AllowPorts bộ đếm chấp nhận

thêm quy tắc ip Môn thể thao udp sắp tới bị hạn chế $ AllowPorts bộ đếm chấp nhận

thêm quy tắc ip Dport udp thư đi hạn chế $ AllowPorts bộ đếm chấp nhận

Bạn có thể xem toàn bộ kịch bản bên dưới.

Sau khi bạn nhập xong bảng, chuỗi và quy tắc, hãy đóng tài liệu và lưu các thay đổi.

# Trong hai dòng đầu tiên, tôi xác định mạng cục bộ của mình (LinuxHintNet) và một tập hợp các cổng (80,
# 443,22) để cho phép lưu lượng truy cập qua chúng trong các quy tắc bên dưới.
định nghĩa LinuxHintNet = 192.168.0.0 / 16
định nghĩa AllowPorts = { 80 , 443 , 53 , 22 }
# Tôi khai báo một bảng mới sẽ chứa các chuỗi và quy tắc. Tôi gọi bảng này là 'Hạn chế'.
# 'Ip' chỉ áp dụng quy tắc cho IPv4. Đối với IPv6, chỉ sử dụng 'ip6' và sử dụng 'inet' cho cả hai giao thức.
thêm bảng ip Hạn chế
# Sau khi tạo bảng, tôi tạo ba chuỗi, Đến, Chuyển hướng và Đi,
# Tên của họ là tùy ý. Tất cả chúng đều giảm lưu lượng đến, đi và chuyển tiếp theo mặc định.
thêm chuỗi ip Đến hạn chế { loại hình ưu tiên đầu vào móc lọc 0 ; giảm chính sách; }
thêm chuỗi ip Chuyển hướng hạn chế { loại hình ưu tiên lọc móc về phía trước 0 ; giảm chính sách; }
thêm chuỗi ip Gửi đi hạn chế { loại hình ưu tiên đầu ra móc lọc 0 ; giảm chính sách; }
# Tôi thực hiện hai quy tắc để cho phép lưu lượng truy cập lặp lại.
thêm quy tắc ip Hạn chế đến hạn chế iifname lo bộ đếm chấp nhận
thêm quy tắc ip Hạn chế đến oifname lo chấp nhận bộ đếm
# Tôi triển khai các quy tắc để cho phép lưu lượng truy cập qua các cổng được xác định trong biến AllowPorts.
thêm quy tắc ip Môn thể thao tcp sắp tới bị hạn chế $ AllowPorts bộ đếm chấp nhận
thêm quy tắc ip Dport tcp gửi đi hạn chế $ AllowPorts bộ đếm chấp nhận
thêm quy tắc ip Môn thể thao udp sắp tới bị hạn chế $ AllowPorts bộ đếm chấp nhận

thêm quy tắc ip Dport udp thư đi hạn chế $ AllowPorts bộ đếm chấp nhận

Để kích hoạt tường lửa, hãy chạy lệnh sau:

sudo nft -f firewall.nft

Bạn có thể kiểm tra các quy tắc của mình bằng cách chạy lệnh sau:

sudo bộ quy tắc danh sách nft

Đó là tường lửa hạn chế cơ bản.

Sự kết luận:

Như bạn thấy, Nftables thân thiện hơn Iptables rất nhiều và người dùng có thể học Nftables nhanh hơn Iptables. Vì Iptables đã ngừng hoạt động và nhiều bản phân phối đang sử dụng Nftables làm tường lửa mặc định, bao gồm cả Debian. Người dùng có kinh nghiệm sử dụng Iptables có thể muốn xem xét công cụ Iptables-nftables-compat, dịch Iptables thành Nftables. Điều này có thể giúp họ hiểu sự khác biệt.

Người dùng chuyên nghiệp như quản trị viên hệ thống có xu hướng tiếp tục làm việc với Iptables; tránh bỏ qua Nftables để tiết kiệm thời gian đồng thời cải thiện khả năng lọc. Tôi hy vọng bài viết này đủ đơn giản để thuyết phục bạn dùng thử Nftables.