Tôi đang cố gắng thiết lập tường lửa bằng nftables nhưng tôi không hiểu và không triển khai giới hạn tốc độ đơn giản dựa trên tài liệu mà tôi đã tìm thấy.
- Hệ điều hành: Ubuntu 20.04 LTS
- phiên bản nftables: 0.9.3 (Topsy)
- phát hành kernel: 5.8.0-53-generic
Tôi đã xây dựng tường lửa thử nghiệm với chuỗi lệnh bên dưới:
nft 'thêm bảng inet testnetwork'
nft 'thêm chuỗi inet testnetwork INPUT { loại bộ lọc hook ưu tiên đầu vào 0; giảm chính sách; }'
nft 'thêm bộ inet testnetwork SSH { gõ ipv4_addr; cờ động, thời gian chờ; kích thước 65536; }'
nft 'thêm quy tắc inet testnetwork Trạng thái INPUT ct liên quan,chấp nhận bộ đếm đã thiết lập'
nft 'thêm quy tắc inet testnetwork INPUT ip saddr @SSH ct state new tcp dport 22 counter drop'
nft 'thêm quy tắc inet testnetwork INPUT trạng thái ct mới tốc độ giới hạn tcp dport 22 trên 10/phút thêm bộ đếm @SSH {ip saddr timeout 60s}'
nft 'thêm quy tắc kiểm tra mạng inet ĐẦU VÀO ct trạng thái tcp mới dport 22 tcp sport 1024-65535 bộ đếm chấp nhận'
Khi tôi liệt kê bộ quy tắc ban đầu, tôi nhận được:
bảng inet testnetwork {
đặt SSH {
gõ ipv4_addr
kích thước 65536
cờ động, thời gian chờ
}
chuỗi INPUT {
loại bộ lọc hook bộ lọc ưu tiên đầu vào; giảm chính sách;
Trạng thái ct được thiết lập, gói truy cập liên quan 0 byte 0 chấp nhận
ip saddr @SSH ct trạng thái mới tcp dport 22 gói truy cập 0 byte 0 drop
trạng thái ct mới tốc độ giới hạn tcp dport 22 trên 10/phút thêm @SSH { ip saddr hết thời gian 1 phút } truy cập gói 0 byte 0
trạng thái ct mới tcp dport 22 tcp sport 1024-65535 gói truy cập 0 byte 0 chấp nhận
}
}
Với cấu hình như vậy, tôi cho rằng một IP sẽ được thêm vào bộ SSH trong lần thử kết nối (mới) thứ 11 trong vòng 1 phút và bị chặn (trong 1 phút) bắt đầu từ lần thử thứ 12.
Tuy nhiên, khi tôi mở cửa sổ đầu cuối thứ hai và bắt đầu tuần tự rồi đóng ít hơn 10 kết nối ssh đến 127.0.0.1, tôi nhận được IP được thêm vào bộ SSH và sau đó bị chặn.
Trạng thái bộ quy tắc bên dưới ở lần thử thứ 7:
bảng inet testnetwork {
đặt SSH {
gõ ipv4_addr
kích thước 65536
cờ động, thời gian chờ
phần tử = { 127.0.0.1 timeout 1m hết hạn 54s564ms }
}
chuỗi INPUT {
loại bộ lọc hook bộ lọc ưu tiên đầu vào; giảm chính sách;
Trạng thái ct được thiết lập, gói truy cập liên quan 156 byte 28692 chấp nhận
ip saddr @SSH ct state new tcp dport 22 gói truy cập 3 byte 180 drop
trạng thái ct mới tốc độ giới hạn tcp dport 22 trên 10/phút thêm @SSH { ip saddr hết thời gian 1 phút } bộ đếm gói 1 byte 60
ct state new tcp dport 22 tcp sport 1024-65535 gói truy cập 6 byte 360 chấp nhận
}
}
Tại thời điểm này, hoặc tôi không hiểu chính xác cơ chế tỷ lệ giới hạn hoặc tôi đã mắc lỗi ở chỗ khác.
Ai đó có thể vui lòng giúp tôi bằng cách chỉ ra liệu kỳ vọng của tôi có sai hay lỗi có thể đến từ đâu không?
Trân trọng và cảm ơn vì thời gian của bạn