
Baru-baru ini kami mendapatkan kasus perihal "kernel: nf_conntrack: table full, dropping packet."
Hal itu muncul ketika ada serangan DDoS ke salah satu server kami, dan hasilnya jumlah koneksi dalam sebuah server melebihi limit tertentu dan paket tersebut otomatis di drop. Hasilnya kita merasakan koneksi internet yang tidak stabil alias UP/Down terus-terus an.
Pengertian Awal
Modul ini adalah bagian tak terpisahkan dari kerangka kerja firewall dan NAT di Linux.
Berikut adalah rincian fungsi, cara kerja, dan dampaknya pada sistem:
#1 Fungsi Utama
- Penyaringan Stateful: Mengizinkan firewall (seperti
iptablesataunftables) tidak hanya melihat satu paket secara mandiri, melainkan melihat keseluruhan alur koneksi. Ini memungkinkan Anda memblokir paket yang tidak dikenal dan hanya mengizinkan lalu lintas balasan yang sah dari koneksi yang sudah disetujui sebelumnya. - Dukungan NAT (Network Address Translation): Membantu mengubah alamat IP dan port untuk lalu lintas yang diteruskan (routing), serta mengingat rute balasan yang tepat agar komunikasi dua arah tetap berjalan lancar.
- Penyeimbangan Beban (Load Balancing): Digunakan oleh perangkat lunak seperti IPVS atau kube-proxy untuk melacak paket dan mengarahkannya dengan benar ke node atau container dalam cluster.
#2 Cara Kerja
Setiap koneksi diklasifikasikan ke dalam status berikut:
NEW: Paket yang mencoba membuka koneksi baru.ESTABLISHED: Paket yang merupakan bagian dari koneksi yang sudah aktif dan disetujui.RELATED: Koneksi baru yang terkait dengan koneksi yang sudah ada (misalnya: transfer data aktif pada mode FTP pasif).INVALID: Paket yang tidak sah atau rusak.
#3 Masalah Umum: Tabel Kepenuhan
- Gejala: Anda akan melihat pesan error
nf_conntrack: table full, dropping packetdi log sistem, dan server mungkin akan mengalami packet loss atau gagal merespons permintaan baru. - Solusi: Anda dapat menambah batas maksimum koneksi di memori dengan mengubah parameter kernel melalui pengaturan
sysctlsepertinet.netfilter.nf_conntrack_max.
Cara Cek di server Linux
Mungkin kamu akan menemui di /var/log/messages muncul tulisan banyak seperti ini:
Jun 16 13:13:52 nvme2 kernel: nf_conntrack: nf_conntrack: table full, dropping packetJun 16 13:13:52 nvme2 kernel: nf_conntrack: nf_conntrack: table full, dropping packetJun 16 13:13:52 nvme2 kernel: nf_conntrack: nf_conntrack: table full, dropping packetJun 16 13:13:52 nvme2 kernel: nf_conntrack: nf_conntrack: table full, dropping packetJun 16 13:13:52 nvme2 kernel: nf_conntrack: nf_conntrack: table full, dropping packetJun 16 13:13:52 nvme2 kernel: nf_conntrack: nf_conntrack: table full, dropping packetJun 16 13:13:52 nvme2 kernel: nf_conntrack: nf_conntrack: table full, dropping packetJun 16 13:13:52 nvme2 kernel: nf_conntrack: nf_conntrack: table full, dropping packetJun 16 13:13:52 nvme2 kernel: nf_conntrack: nf_conntrack: table full, dropping packetJun 16 13:13:52 nvme2 kernel: nf_conntrack: nf_conntrack: table full, dropping packet
Ini mengindikasi adanya banyak koneksi yang masuk ke server kamu dan tabel-nya kepenuhan, sehingga paket trafik ada yang kena drop/cut.
Secara default angka nf_conntrack_max adalah sekitar 65536 untuk CentOS. Dimana kalo terjadi serangan DDoS, maka limit max connection tracking tersebut akan mudah melebihi limitnya.
Solusi : Menaikan value conntrack
Cara mudahnya adalah tinggal menaikan value conntrack.
- Cek dulu value saat ini berapa.
cat /proc/sys/net/netfilter/nf_conntrack_count - Cek max value dari nf_conntrack berapa.
cat /proc/sys/net/netfilter/nf_conntrack_max - Jika value saat ini sudah mendekati limit maksimal, maka sebaiknya segera dinaikan 2-3x lipat.
echo 1000000 > /proc/sys/net/netfilter/nf_conntrack_max - Namun jika di reboot akan kembali ke default value. Maka untuk membuat permanen, silahkan set di:
/etc/sysctl.confnet.netfilter.nf_conntrack_max = 1000000
Kesimpulan
Jika terjadi anomali trafik / koneksi internet yang menggangu node server tertentu. Jangan lupa untuk sering-sering cek log linux. Ada dimana? Tentu bermacam-macam ya. Untuk linux RHEL / CentOS / Almalinux / Rocky Linux biasanya kamu bisa cek di /var/log/messages atau /var/log/dmesg . Biasanya dari sana kamu akan menemukan clue tertentu yang sangat membantu kamu untuk indentifikasi dan troubleshoot suatu masalah.
Dalam kasus kami, serangan DDoS ini selain menghabiskan bandwidth, juga menghabiskan jumlah maksimal nf_conntrack. Jadi sebelumnya bisa di cek posisi value penggunaan saat ini dibandingkan dengan kapasitas maksimal table yang mampu ditampung. Jika dirasa mepet, maka bisa kamu naikan 2-3x lebih besar. Mudah saja sebenarnya, namun lakukan troubleshoot dengan tenang dan tidak panik agar ide dan solusi terbaik kamu bisa muncul. Semoga artikel ini bermanfaat ya!



