ตัวอย่าง 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 แยกลำดับสำหรับเปิดและปิด
หากไม่มีตัวจับเวลา พอร์ตจะยังคงเปิดอยู่จนกว่าคุณจะเคาะลำดับการปิด สะดวก แต่อาจลืมได้ง่าย — แนะนำให้ใช้เวอร์ชั่นที่กำหนดเวลา
[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 ลำดับแบบใช้ครั้งเดียว
แทนที่จะใช้ลำดับตายตัวเพียงลำดับเดียว 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 ใช้กับ 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 } หลังแก้ไข
- 1บน Debian และ Ubuntu ให้ตั้งค่าอินเทอร์เฟซที่ knockd รับฟังใน /etc/default/knockd (KNOCKD_OPTS="-i eth0") แล้วเริ่ม knockd ใหม่
- 2ดูการทำงานด้วย journalctl -u knockd -f ระหว่างที่คุณเคาะ
- 3ใน Secret Knock, + › นำเข้าจากไฟล์ จะเปลี่ยนแต่ละส่วนที่มีลำดับให้เป็นประตู ให้ป้อนรายการลำดับแบบใช้ครั้งเดียวด้วยตนเอง
ตัวอย่างทั้งหมดบน GitHub → การกำหนดค่าทุกรายการในหน้านี้ พร้อมให้คัดลอก: github.com/mobilcomm/secretknock-examples (สาธารณสมบัติ)
คำถาม
ฉันควรใช้ขั้นตอน TCP หรือ UDP?
ใช้ได้ทั้งคู่ การผสมทั้งสองแบบทำให้คาดเดาลำดับจากการสแกนพอร์ตได้ยากขึ้น ขั้นตอน UDP สามารถส่งเพย์โหลดใน Secret Knock ได้ หากการตั้งค่าของคุณตรวจสอบเพย์โหลด
คู่มือสำหรับการตั้งค่าของคุณ
- อธิบาย Port knocking →
- knockd บน iPhone, iPad และ Mac →
- fwknop SPA บน iPhone, Mac และ Apple Watch →
- การเคาะพอร์ต MikroTik →
- การเคาะพอร์ต DrayTek Vigor →
- ซ่อน SSH ไว้หลังการเคาะพอร์ต →
- การเคาะพอร์ตบน Apple Watch →
- เหตุใดการเคาะพอร์ตจึงไม่เปิด →
- การตั้งค่าเซิร์ฟเวอร์ fwknop →
- Port knocking, VPN หรือ fail2ban? →