เหตุใดการเคาะพอร์ตจึงไม่เปิดประตู
การเคาะอาจไปไม่ถึงเซิร์ฟเวอร์เลย ไปถึงในรูปแบบที่ดีมอนไม่ยอมรับ หรือเปิดประตูให้กับที่อยู่ที่คุณไม่ได้ใช้งาน ตรวจสอบรายการจากด้านบนลงมา — เรียงตามความถี่ที่พบแต่ละสาเหตุ
1. ประตูเปิดให้กับที่อยู่อื่น
ไฟร์วอลล์จะเปิดพอร์ตให้กับที่อยู่ต้นทางที่เซิร์ฟเวอร์เห็น หากคุณเคาะผ่าน IPv6 แต่ SSH เชื่อมต่อผ่าน IPv4 — หรือในทางกลับกัน — ประตูจะเปิดให้กับที่อยู่ที่คุณไม่ได้ใช้งาน ข้อมูลมือถือ, NAT ของผู้ให้บริการเครือข่าย และ VPN ก็เปลี่ยนที่อยู่ได้เช่นกัน
เปรียบเทียบที่อยู่ที่ Secret Knock แสดงบนหน้าจอโฮม ("คุณเคาะจาก …") กับที่อยู่ในบันทึกของเซิร์ฟเวอร์ และกำหนดให้ประตูใช้ IPv4 หรือ IPv6 หากที่อยู่ต่างกัน
2. แพ็กเก็ตไปไม่ถึงเซิร์ฟเวอร์
เครือข่ายโรงแรม สำนักงาน และมือถือบางแห่งบล็อกพอร์ตที่ไม่คุ้นเคย และไฟร์วอลล์คลาวด์หน้าเซิร์ฟเวอร์อาจทิ้งแพ็กเก็ตก่อนที่ knockd หรือ fwknopd จะเห็น ตรวจสอบทราฟฟิกบนเซิร์ฟเวอร์ขณะเคาะ:
# knockd (UseSyslog): every recognised step and the command it ran
sudo journalctl -u knockd -f
# Do the packets reach the server at all? (use your interface and ports)
sudo tcpdump -ni eth0 'tcp port 7311 or tcp port 8822 or udp port 9133'
# fwknopd in the foreground with verbose output
sudo fwknopd -f -v 3. ลำดับมาถึงในรูปแบบที่ไม่ถูกต้อง
- 1SYN ที่ส่งซ้ำ: เมื่อการเคาะ TCP ไม่มีการตอบกลับ ระบบปฏิบัติการของไคลเอนต์จะส่ง SYN เดิมซ้ำ knockd 0.8 จะรีเซ็ตลำดับเมื่อเกิดการส่งซ้ำเช่นนี้ Secret Knock ส่งการเคาะ TCP แต่ละครั้งเป็น SYN เพียงชุดเดียว และหยุดความพยายามทันที ไคลเอนต์อื่นอาจไม่ทำเช่นนั้น
- 2เวลา: ทุกขั้นตอนต้องมาถึงตามลำดับภายใน seq_timeout เพิ่มการหน่วงเวลาสั้น ๆ ก่อนขั้นตอนหนึ่ง หากเราเตอร์ระหว่างทางเรียงลำดับแพ็กเก็ตใหม่
- 3โปรโตคอล: ขั้นตอน UDP ต้องส่งเป็น UDP และขั้นตอน TCP ต้องส่งเป็น TCP — ตรวจสอบแต่ละขั้นตอนกับ knockd.conf
- 4tcpflags = syn ทำให้ knockd เพิกเฉยต่อแพ็กเก็ต TCP ที่ไม่มีแฟล็ก SYN หากไม่มีการตั้งค่านี้ แพ็กเก็ตอื่นของการเชื่อมต่อไปยังพอร์ตเดียวกันจะนับเป็นการพบเช่นกัน และอาจทำให้ลำดับเสีย
4. fwknop: คีย์ นาฬิกา และการเล่นซ้ำ
- 1คีย์ทั้งสองต้องตรงกับ access.conf: คีย์ Rijndael และคีย์ HMAC โดยใช้ไดเจสต์เดียวกัน (ค่าเริ่มต้นคือ SHA-256)
- 2fwknopd ปฏิเสธแพ็กเก็ตที่เก่ากว่า MAX_SPA_PACKET_AGE (ค่าเริ่มต้น 120 วินาที) ดังนั้นนาฬิกาอุปกรณ์ที่คลาดเคลื่อนมากจะทำให้ทุกแพ็กเก็ตดูเหมือนเก่า
- 3แพ็กเก็ต SPA แต่ละรายการใช้ได้เพียงครั้งเดียว fwknopd จะทิ้งแพ็กเก็ตที่เล่นซ้ำโดยเจตนา
- 4หากคุณเคาะผ่าน HTTP ต้องมีบางสิ่งที่รับการเชื่อมต่อ TCP บนพอร์ตนั้น มิฉะนั้นคำขอจะไม่ถูกส่ง
5. ประตูเปิดแล้ว แต่ SSH ยังล้มเหลว
- 1ลำดับกฎ: กฎที่ดีมอนเพิ่มต้องอยู่ก่อนกฎที่ทิ้งพอร์ต — iptables -A จะต่อท้ายหลัง DROP ที่มีอยู่และจะไม่มีวันตรงกัน
- 2ช่วงเวลา: cmd_timeout หรือ FW_ACCESS_TIMEOUT ปิดประตูก่อนที่ SSH จะเชื่อมต่อ เชื่อมต่อภายในช่วงเวลานั้น เซสชันที่สร้างแล้วจะยังทำงานต่อได้หากไฟร์วอลล์ของคุณยอมรับการเชื่อมต่อที่สร้างแล้ว
- 3การตรวจสอบพอร์ตของ Secret Knock หลังการเคาะจะแจ้งให้คุณทราบว่าพอร์ตตอบกลับหรือไม่ โดยแยกจากการตรวจสอบสิทธิ์ SSH
ตัวอย่างทั้งหมดบน GitHub → การกำหนดค่าทุกรายการในหน้านี้ พร้อมให้คัดลอก: github.com/mobilcomm/secretknock-examples (สาธารณสมบัติ)
คำถาม
ฉันจะดูได้อย่างไรว่าแอปส่งอะไรจริงๆ
ประวัติของประตูจะแสดงการเคาะแต่ละครั้งพร้อมเวลา ผลลัพธ์ และตระกูลที่อยู่ และตัวแก้ไขจะแสดงการเคาะเดียวกันเป็นคำสั่งเทอร์มินัลที่คุณสามารถเรียกใช้จากคอมพิวเตอร์เพื่อเปรียบเทียบ