Tek güvenlik duvarı, iki değil
Debian 13, /etc/nftables.conf ve onu yükleyen bir hizmet ile nftables'ı birlikte sunar. AlmaLinux 10, nftables'ın üzerinde firewalld sunar ve hizmeti /etc/sysconfig/nftables.conf'un içerdiklerini okur. Birini seçin. firewalld'ı elle yazılmış bir kural kümesiyle birlikte çalıştırmak, ikinizin de yazmadığı bir kural kümesi üretir.
systemctl disable --now firewalld # AlmaLinux, if going manual
systemctl enable --now nftablesKural kümesi
#!/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;
}
}İnsanların yanlış yaptığı kısımlar:
- ICMPv6 bilerek tamamen kabul edilir. Komşu keşfi ve paket çok büyük mesajlarının ikisi de orada yaşar ve bunları elle filtrelemek, IPv6'yı bir buçuk gün boyunca uygulama hatası gibi görünen şekilde bozar.
ssh_floodkümesi, dakikada altı yeni bağlantıyı aşan herhangi bir adresi bir saatlik zaman aşımı listesine ekler. Günlük ayrıştırıcı yok, cron işi yok, ikinci bir arka plan hizmeti yok.- IPv6 için, kümeyi
type ipv6_addrve kuralıip6 saddrile çoğaltın. Kümeler tek ailelidir. udp dport 443QUIC için oradadır. Sunmuyorsanız silin.
Kendinizi dışarıda bırakmadan yükleyin
systemd-run --on-active=120 nft flush ruleset
nft -f /etc/nftables.confİlk komut, kural kümesini iki dakikada temizleyen ve adını yazdıran geçici bir birim zamanlar. Yeni bir oturum açın. Çalışıyorsa, zamanlayıcıyı durdurun:
systemctl stop run-u1234.timerÇalışmıyorsa, bekleyin ve makine sizi kendiliğinden içeri alır. Boş bir kural kümesi filtreleme olmadığı anlamına gelir, bu yüzden işi gece orada bırakmak yerine bitirin.
Gerçekte ne yaptığını kontrol edin
nft list ruleset
nft -a list chain inet filter input
nft list set inet filter ssh_flood-a, dosyayı yeniden yazmadan tek bir kuralın kaldırılma yolunu gösteren tutamaçları yazdırır:
nft delete rule inet filter input handle 12Sayaçlar, kimsenin sormadığı soruyu yanıtlar: bir hafta sonra sıfırda olan bir kural ya yanlıştır ya da gereksizdir ve her ikisini bilmeye değer.
İzleme
Bir paket, kural kümesinin söylediği gibi davranmayı reddettiğinde:
nft add rule inet filter input tcp dport 8443 meta nftrace set 1
nft monitor traceİzleme kuralını sonrası için silin. Bedava değil ama ucuzdur.
Ana bilgisayar güvenlik duvarının ne için olmadığı
Politikayı filtreler, taşkınları değil. Hacim saldırıları, bağlantı noktanıza ulaşmadan çok önce ağda düşürülür ve örnek üzerindeki bir kural yalnızca zaten işlenmiş paketler için CPU'nuzu harcardı. Ayrıntılar için DDoS koruması.
Kalıcı hale getirin
nft list ruleset > /etc/nftables.conf
systemctl restart nftablesShebang'i ve flush ruleset satırını dışa aktarılan dosyanın başına geri koyun. Onlar olmadan, bir sonraki yükleme çalışan kural kümesini değiştirmek yerine ona ekler ve sahip olduğunuz her kural iki kez görünür.