ข้ามไปยังเนื้อหา
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 ได้ หากการตั้งค่าของคุณตรวจสอบเพย์โหลด

คู่มือสำหรับการตั้งค่าของคุณ