IPtables và hướng dẫn xử lý lỗi “nf_conntrack: table full, dropping packet”
1. Giới thiệu iptables
IPtables là một tường lửa mềm tuyệt vời cho Linux, cho phép xây dựng các quy tắc để theo dõi từng kết nối. Tuy nhiên, đây là khả năng của IPtables, còn hệ điều hành cũng cần tương ứng tuyệt vời để xử lý các kết nối đó. Khi lưu lượng traffic tăng đột biến hoặc khi server bị tấn công DOS, IPtables phải theo dõi quá nhiều kết nối, và lúc đó hệ thống sẽ báo trong /var/log/messages như sau:
Nguyên nhân là do Module theo dõi kết nối trong IPtables lưu trữ các kết nối trong bảng conntrack đã đầy và không thể tạo thêm các mục mới cho các kết nối mới. Kết quả là các gói tin bị rớt.
2. Khắc phục lỗi
Vấn đề này có thể được giải quyết bằng cách tăng số lượng mục cho phép đối với các kết nối được theo dõi.
+ Với CentOS 6:
Chạy lệnh sau để kiểm tra giá trị của nf_conntrack_max:
# sysctl net.netfilter.nf_conntrack_max
Chạy lệnh sau để kiểm tra số lượng kết nối đang được theo dõi:
# cat /proc/sys/net/netfilter/nf_conntrack_count
Nếu giá trị của nf_conntrack_max đã đạt tới giới hạn, các gói tin sẽ bị rớt. Đặt một giá trị lớn hơn cho net.netfilter.nf_conntrack_max. Ví dụ sau sử dụng ECS với 64 GB bộ nhớ và đặt net.netfilter.nf_conntrack_max thành 2097152.
Chạy lệnh sau để cấu hình có hiệu lực:
# sysctl -w net.netfilter.nf_conntrack_max=2097152
Chạy lệnh sau để đảm bảo rằng các cấu hình vẫn còn hiệu lực sau khi ECS khởi động lại:
# echo “net.netfilter.nf_conntrack_max = 2097152” >> /etc/sysctl.conf
Nếu số lượng mục trong bảng conntrack tăng đáng kể, ví dụ, gấp bốn lần số lượng mục đang được theo dõi, hãy tăng kích thước của bảng băm để lưu trữ các mục conntrack.
Đối với CentOS 6 và các phiên bản sau này, tính toán giá trị băm mới bằng quy tắc hashsize = conntrack_max/4.
Chạy lệnh sau để đặt kích thước của bảng băm thành 131072:
# echo “options nf_conntrack expect_hashsize=524288 hashsize=524288” >/etc/modprobe.conf
Chạy lệnh sau để khởi động lại iptables:
# service iptables restart
+ Với CentOS 7:
Chạy lệnh sau để thay đổi kích thước của bảng băm cho các kết nối conntrack trong /etc/modprobe.d/firewalld-sysctls.conf:
# echo “options nf_conntrack expect_hashsize=131072 hashsize=131072” >> /etc/modprobe.d/firewalld-sysctls.conf
Chạy lệnh sau để khởi động lại firewalld:
# systemctl restart firewalld
Chạy lệnh sau để kiểm tra xem các cấu hình trước đó đã có hiệu lực hay chưa:
# sysctl -a | grep nf_conntrack_max
Bạn có thể tham khảo thêm bài viết về công nghệ tại đây
P.A Việt Nam cung cấp đa dạng các cấu hình Máy Chủ Ảo và Máy Chủ Riêng
Cloud Server
Cloud Server Pro
Máy Chủ Riêng
Tham khảo các ưu đãi: https://www.pavietnam.vn/vn/tin-khuyen-mai/