Bilgi tabanı

Makul bir nftables temel kural kümesi

Bir örneğin gerçekten ihtiyaç duyduğuna izin veren, SSH'ye hız sınırı koyan ve siz daha yazarken sizi dışarıda bırakmayan varsayılan düşürme tabanlı kural kümesi.

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 nftables

Kural 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_flood kü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_addr ve kuralı ip6 saddr ile çoğaltın. Kümeler tek ailelidir.
  • udp dport 443 QUIC 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 12

Sayaç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 nftables

Shebang'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.

Hazır olduğunda

Bir şehir seç. Bir boyut seç. Kripto ile öde.

Kim olduğunuzla ilgili formlar yok, onay için insan bekleme yok, doğrulama için telefon görüşmesi yok. Ödeme onaylanır ve kimlik bilgileri gelen kutunuza düşer.