Basis pengetahuan

Dasar nftables yang masuk akal

Aturan default-drop yang mengizinkan apa yang benar-benar dibutuhkan sebuah instance, melakukan rate-limit SSH, dan tidak mengunci Anda keluar saat Anda masih menulisnya.

Satu firewall, bukan dua

Debian 13 menyertakan nftables dengan /etc/nftables.conf dan layanan yang memuatnya. AlmaLinux 10 menyertakan firewalld di atas nftables, dan layanannya membaca apa yang /etc/sysconfig/nftables.conf sertakan. Pilih satu. Menjalankan firewalld bersama aturan yang ditulis tangan menghasilkan aturan yang tidak ditulis oleh siapa pun dari Anda.

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

Aturan

#!/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;
  }
}

Bagian yang sering salah:

  • ICMPv6 diterima secara keseluruhan dengan sengaja. Neighbour discovery dan packet-too-big keduanya ada di sana, dan menyaringnya secara manual merusak IPv6 dengan cara yang tampak seperti bug aplikasi selama satu setengah hari.
  • Set ssh_flood menambahkan alamat mana pun yang melebihi enam koneksi baru per menit ke daftar timeout satu jam. Tanpa parser log, tanpa cron job, tanpa daemon kedua.
  • Untuk IPv6, duplikat set dengan type ipv6_addr dan aturan dengan ip6 saddr. Set bersifat single-family.
  • udp dport 443 ada untuk QUIC. Hapus jika Anda tidak menyajikannya.

Muat tanpa mengunci diri sendiri

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

Perintah pertama menjadwalkan unit sementara yang membersihkan aturan dalam dua menit dan mencetak namanya. Buka sesi baru. Jika berhasil, hentikan timer:

systemctl stop run-u1234.timer

Jika tidak berhasil, tunggu, dan mesin membiarkan Anda masuk kembali dengan sendirinya. Aturan kosong berarti tidak ada penyaringan, jadi selesaikan pekerjaan daripada membiarkannya semalaman.

Periksa apa yang sebenarnya dilakukannya

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

-a mencetak handle, yang merupakan cara menghapus satu aturan tanpa menulis ulang file:

nft delete rule inet filter input handle 12

Penghitung menjawab pertanyaan yang tidak diajukan siapa pun: aturan yang berada di nol setelah seminggu salah atau tidak perlu, dan keduanya layak diketahui.

Tracing

Saat paket menolak berperilaku sesuai aturan:

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

Hapus aturan trace sesudahnya. Itu murah, bukan gratis.

Untuk apa firewall host tidak digunakan

Ini menyaring kebijakan, bukan banjir. Serangan volumetrik dijatuhkan di tepi jauh sebelum mencapai port Anda, dan aturan di instance hanya akan menghabiskan CPU Anda untuk paket yang sudah ditangani. Detail tentang perlindungan DDoS.

Pertahankan

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

Letakkan shebang dan baris flush ruleset kembali di atas file yang diekspor. Tanpa keduanya, pemuatan berikutnya menambahkan ke aturan yang berjalan alih-alih menggantinya, dan setiap aturan yang Anda miliki muncul dua kali.

Siap saat Anda siap

Pilih kota. Pilih ukuran. Bayar dengan koin.

Tanpa formulir tentang siapa Anda, tanpa menunggu manusia untuk menyetujui, tanpa panggilan telepon untuk memverifikasi apa pun. Invoice dibersihkan dan kredensial masuk ke kotak masuk Anda.