Cơ sở kiến thức

Một nền tảng nftables hợp lý

Một bộ quy tắc mặc định chặn cho phép những gì một instance thực sự cần, giới hạn tốc độ SSH, và không khóa bạn bên ngoài khi bạn còn đang viết nó.

Một tường lửa, không phải hai

Debian 13 đi kèm nftables với một /etc/nftables.conf và một dịch vụ tải nó. AlmaLinux 10 đi kèm firewalld trên nền tảng nftables, và dịch vụ của nó đọc những gì /etc/sysconfig/nftables.conf bao gồm. Chọn một. Chạy firewalld song song với một bộ quy tắc viết tay tạo ra một bộ quy tắc mà không ai trong số các bạn viết.

systemctl disable --now firewalld     # AlmaLinux, if going manual
systemctl enable --now nftables

Bộ quy tắc

#!/usr/sbin/nft -f
flush ruleset

table inet filter {
  set ssh_flood {
    type ipv4_addr
    flags dynamic, timeout
    timeout 1h
  }

  chain input {
    type filter hook input priority filter; policy drop;

    ct state established,related accept
    ct state invalid drop
    iif lo accept

    ip protocol icmp icmp type { echo-request, destination-unreachable, time-exceeded } accept
    ip6 nexthdr ipv6-icmp accept

    tcp dport 22 ct state new add @ssh_flood { ip saddr limit rate over 6/minute } drop
    tcp dport 22 accept
    tcp dport { 80, 443 } accept
    udp dport 443 accept

    counter comment "dropped by policy"
  }

  chain forward {
    type filter hook forward priority filter; policy drop;
  }

  chain output {
    type filter hook output priority filter; policy accept;
  }
}

Những phần mọi người thường làm sai:

  • ICMPv6 được chấp nhận toàn bộ có chủ đích. Khám phá hàng xóm và packet-too-big đều nằm ở đó, và lọc chúng bằng tay phá vỡ IPv6 theo những cách hiện ra như một lỗi ứng dụng trong một ngày rưỡi.
  • Tập hợp ssh_flood thêm bất kỳ địa chỉ nào vượt quá sáu kết nối mới mỗi phút vào danh sách hết hạn một giờ. Không có trình phân tích nhật ký, không có công việc cron, không có daemon thứ hai.
  • Đối với IPv6, nhân đôi tập hợp với type ipv6_addr và quy tắc với ip6 saddr. Các tập hợp là đơn họ.
  • udp dport 443 ở đó cho QUIC. Xóa nó nếu bạn không phục vụ nó.

Tải nó mà không tự khóa mình

systemd-run --on-active=120 nft flush ruleset
nft -f /etc/nftables.conf

Lệnh đầu tiên lên lịch một unit tạm thời xóa bộ quy tắc sau hai phút và in tên của nó. Mở một phiên mới. Nếu nó hoạt động, dừng bộ hẹn giờ:

systemctl stop run-u1234.timer

Nếu nó không hoạt động, chờ đợi, và máy sẽ tự cho bạn vào lại. Một bộ quy tắc trống nghĩa là không có lọc, vì vậy hãy hoàn thành công việc thay vì để nó qua đêm.

Kiểm tra những gì nó thực sự đang làm

nft list ruleset
nft -a list chain inet filter input
nft list set inet filter ssh_flood

-a in các handle, đó là cách một quy tắc đơn lẻ được loại bỏ mà không viết lại tệp:

nft delete rule inet filter input handle 12

Bộ đếm trả lời câu hỏi không ai hỏi: một quy tắc đứng ở số không sau một tuần có nghĩa là sai hoặc không cần thiết, và cả hai đều đáng biết.

Truy vết

Khi một gói tin từ chối hành xử theo cách mà bộ quy tắc nói nó nên:

nft add rule inet filter input tcp dport 8443 meta nftrace set 1
nft monitor trace

Xóa quy tắc truy vết sau đó. Nó rẻ chứ không miễn phí.

Một tường lửa máy chủ không dành cho việc gì

Nó lọc chính sách, không lọc lũ. Các cuộc tấn công lớn bị loại bỏ ở biên trước khi chúng đến cổng của bạn, và một quy tắc trên instance chỉ tốn CPU của bạn cho những gói đã được xử lý. Chi tiết tại Bảo vệ DDoS.

Lưu trữ nó

nft list ruleset > /etc/nftables.conf
systemctl restart nftables

Đặt lại shebang và dòng flush ruleset lên đầu tệp xuất ra. Không có chúng, lần tải tiếp theo sẽ nối vào bộ quy tắc đang chạy thay vì thay thế nó, và mỗi quy tắc bạn có sẽ xuất hiện hai lần.

Sẵn sàng khi bạn cần

Chọn thành phố. Chọn kích thước. Thanh toán bằng coin.

Không có biểu mẫu về bạn là ai, không chờ đợi con người phê duyệt, không gọi điện thoại để xác minh bất cứ điều gì. Hóa đơn được thanh toán và thông tin đăng nhập sẽ vào hộp thư của bạn.