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 nftablesBộ 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_floodthê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_addrvà quy tắc vớiip6 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.confLệ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.timerNế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 12Bộ đế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 traceXó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.