قاعدة المعرفة

خط أساس معقول nftables

مجموعة قواعد إسقاط افتراضي تسمح بما يحتاجه المثيل فعلًا، وتحد من معدل SSH، ولا تقفلك خارجًا بينما ما زلت تكتبها.

جدار حماية واحد، وليس اثنين

يأتي Debian 13 مع nftables مع /etc/nftables.conf وخدمة تقوم بتحميله. يأتي AlmaLinux 10 مع firewalld فوق nftables، وخدمته تقرأ ما يتضمنه /etc/sysconfig/nftables.conf. اختر واحدًا. تشغيل firewalld جنبًا إلى جنب مع مجموعة قواعد مكتوبة يدويًا ينتج مجموعة قواعد لم يكتبها أي منكما.

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

مجموعة القواعد

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

الأجزاء التي يخطئ فيها الناس:

  • يتم قبول ICMPv6 بالكامل عن قصد. يعيش اكتشاف الجيران ورسائل الحزمة كبيرة جدًا هناك، وتصفيتها يدويًا يكسر IPv6 بطرق تظهر كخطأ في التطبيق لمدة يوم ونصف.
  • مجموعة ssh_flood تضيف أي عنوان يتجاوز ست اتصالات جديدة في الدقيقة إلى قائمة مهلة لمدة ساعة. لا محلل سجلات، لا مهمة cron، لا برنامج خفي ثانٍ.
  • بالنسبة لـ IPv6، كرر المجموعة مع type ipv6_addr والقاعدة مع ip6 saddr. المجموعات أحادية العائلة.
  • udp dport 443 موجود لـ QUIC. احذفه إذا كنت لا تخدمه.

تحميله دون حبس نفسك

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

الأمر الأول يجدول وحدة مؤقتة تمسح مجموعة القواعد في دقيقتين وتطبع اسمها. افتح جلسة جديدة. إذا نجح، أوقف المؤقت:

systemctl stop run-u1234.timer

إذا لم ينجح، انتظر، ويسمح لك الجهاز بالدخول مرة أخرى بنفسه. مجموعة قواعد فارغة تعني عدم وجود تصفية، لذا أنهِ المهمة بدلاً من تركها طوال الليل.

تحقق مما يفعله فعلاً

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

-a يطبع المقابض، وهو كيف تتم إزالة قاعدة واحدة دون إعادة كتابة الملف:

nft delete rule inet filter input handle 12

العدادات تجيب على سؤال لا يسأله أحد: قاعدة تقف عند صفر بعد أسبوع إما خاطئة أو غير ضرورية، وكلاهما يستحق المعرفة.

التتبع

عندما ترفض حزمة أن تتصرف كما تقول مجموعة القواعد:

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

احذف قاعدة التتبع بعد ذلك. إنها رخيصة وليست مجانية.

ما لا يصلح له جدار حماية المضيف

يقوم بتصفية السياسة، وليس الفيضانات. يتم إسقاط الهجمات الحجمية على الحافة قبل وقت طويل من وصولها إلى منفذك، وقاعدة على المثيل ستقضي فقط وحدة المعالجة المركزية الخاصة بك على حزم تم التعامل معها بالفعل. التفاصيل في حماية DDoS.

استمراره

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

ضع السطر shebang وخط flush ruleset في أعلى الملف المُصدَّر. بدونها، يؤدي التحميل التالي إلى إلحاق مجموعة القواعد الحالية بدلاً من استبدالها، وكل قاعدة لديك تظهر مرتين.

جاهز عندما تكون

اختر مدينة. اختر الحجم. ادفع بالعملة الرقمية.

لا نماذج عن هويتك، ولا انتظار لموافقة بشرية، ولا مكالمة للتحقق من أي شيء. بمجرد تصفية الفاتورة، تصل بيانات الدخول إلى بريدك الإلكتروني.