انتقال إلى المحتوى
Secret Knock

أمثلة على knockd.conf

يقرأ knockd الملف /etc/knockd.conf: قسم [options] وقسم واحد لكل باب. يحتوي كل قسم على تسلسل وحدّ زمني والأمر الذي يُشغَّل لعنوان الطرق، %IP%. اختر منافذك الخاصة — ولا تُعد استخدام المنافذ الواردة في الأمثلة مطلقًا.

فتح SSH لبضع ثوانٍ

الإعداد الأكثر شيوعًا: تؤدي عملية طرق واحدة إلى فتح SSH، ثم يغلقه knockd مجددًا بعد cmd_timeout. تظل الجلسات التي فتحتها بالفعل تعمل إذا كان جدار الحماية يقبل الاتصالات القائمة.

[options]
    UseSyslog

[openSSH]
    sequence      = 7311:tcp,8822:tcp,9133:udp
    seq_timeout   = 10
    tcpflags      = syn
    start_command = /usr/sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
    cmd_timeout   = 10
    stop_command  = /usr/sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
/etc/knockd.conf

تسلسلات منفصلة للفتح والإغلاق

من دون مؤقت، يظل المنفذ مفتوحًا إلى أن تطرق تسلسل الإغلاق. هذا ملائم، لكن من السهل نسيانه — لذا يُفضّل الإصدار المحدد بوقت.

[options]
    UseSyslog

[openSSH]
    sequence    = 7311:tcp,8822:tcp,9133:udp
    seq_timeout = 10
    tcpflags    = syn
    command     = /usr/sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT

[closeSSH]
    sequence    = 9133:udp,8822:tcp,7311:tcp
    seq_timeout = 10
    tcpflags    = syn
    command     = /usr/sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
/etc/knockd.conf

تسلسلات أحادية الاستخدام

بدلًا من تسلسل ثابت واحد، يمكن لـ knockd قراءة ملف تسلسلات وقبول كل تسلسل مرة واحدة فقط، بحيث لا يمكن إعادة إرسال عملية طرق مسجلة واستخدامها مجددًا. يحتفظ Secret Knock بالقائمة نفسها وينتقل إلى التسلسل التالي بعد عملية طرق فتحت الباب.

[openSSH]
    one_time_sequences = /etc/knockd/ssh_sequences
    seq_timeout        = 10
    tcpflags           = syn
    start_command      = /usr/sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
    cmd_timeout        = 10
    stop_command       = /usr/sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT

# /etc/knockd/ssh_sequences — one sequence per line, each used once
2222:udp,3333:tcp,4444:udp
5555:tcp,6666:udp,7777:tcp
8888:udp,9999:tcp,1111:tcp
/etc/knockd.conf وملف التسلسلات

مع nftables

على الأنظمة التي تستخدم nftables، اجعل knockd يضيف العنوان إلى مجموعة ذات مهلة زمنية؛ يوضح دليل إخفاء SSH جدول nftables المطابق.

[openSSH]
    sequence      = 7311:tcp,8822:tcp,9133:udp
    seq_timeout   = 10
    tcpflags      = syn
    start_command = /usr/sbin/nft add element inet filter knocked4 { %IP% timeout 30s }
/etc/knockd.conf

بعد التحرير

  1. 1على Debian وUbuntu، عيّن الواجهة التي يستمع عليها knockd في /etc/default/knockd ‏(KNOCKD_OPTS="-i eth0")، ثم أعد تشغيل knockd.
  2. 2راقب عمله باستخدام journalctl -u knockd -f أثناء الطرق.
  3. 3في Secret Knock، يحوّل + › استيراد من ملف كل قسم يحتوي على تسلسل إلى باب؛ أدخل قوائم التسلسلات أحادية الاستخدام يدويًا.

جميع الأمثلة على GitHub → كل إعدادات التكوين في هذه الصفحة، جاهزة للنسخ: github.com/mobilcomm/secretknock-examples (ملك عام).

أسئلة

هل ينبغي استخدام خطوات TCP أم UDP؟

كلاهما يعمل. يؤدي الجمع بينهما إلى جعل تخمين التسلسل من فحص المنافذ أكثر صعوبة. يمكن لخطوات UDP حمل حمولة في Secret Knock إذا كان إعدادك يتحقق منها.

أدلة لإعدادك