جدار حماية واحد، وليس اثنين
يأتي 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 في أعلى الملف المُصدَّر. بدونها، يؤدي التحميل التالي إلى إلحاق مجموعة القواعد الحالية بدلاً من استبدالها، وكل قاعدة لديك تظهر مرتين.