ข้ามไปยังเนื้อหา
Secret Knock

เหตุใดการเคาะพอร์ตจึงไม่เปิดประตู

การเคาะอาจไปไม่ถึงเซิร์ฟเวอร์เลย ไปถึงในรูปแบบที่ดีมอนไม่ยอมรับ หรือเปิดประตูให้กับที่อยู่ที่คุณไม่ได้ใช้งาน ตรวจสอบรายการจากด้านบนลงมา — เรียงตามความถี่ที่พบแต่ละสาเหตุ

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. ลำดับมาถึงในรูปแบบที่ไม่ถูกต้อง

  1. 1SYN ที่ส่งซ้ำ: เมื่อการเคาะ TCP ไม่มีการตอบกลับ ระบบปฏิบัติการของไคลเอนต์จะส่ง SYN เดิมซ้ำ knockd 0.8 จะรีเซ็ตลำดับเมื่อเกิดการส่งซ้ำเช่นนี้ Secret Knock ส่งการเคาะ TCP แต่ละครั้งเป็น SYN เพียงชุดเดียว และหยุดความพยายามทันที ไคลเอนต์อื่นอาจไม่ทำเช่นนั้น
  2. 2เวลา: ทุกขั้นตอนต้องมาถึงตามลำดับภายใน seq_timeout เพิ่มการหน่วงเวลาสั้น ๆ ก่อนขั้นตอนหนึ่ง หากเราเตอร์ระหว่างทางเรียงลำดับแพ็กเก็ตใหม่
  3. 3โปรโตคอล: ขั้นตอน UDP ต้องส่งเป็น UDP และขั้นตอน TCP ต้องส่งเป็น TCP — ตรวจสอบแต่ละขั้นตอนกับ knockd.conf
  4. 4tcpflags = syn ทำให้ knockd เพิกเฉยต่อแพ็กเก็ต TCP ที่ไม่มีแฟล็ก SYN หากไม่มีการตั้งค่านี้ แพ็กเก็ตอื่นของการเชื่อมต่อไปยังพอร์ตเดียวกันจะนับเป็นการพบเช่นกัน และอาจทำให้ลำดับเสีย

4. fwknop: คีย์ นาฬิกา และการเล่นซ้ำ

  1. 1คีย์ทั้งสองต้องตรงกับ access.conf: คีย์ Rijndael และคีย์ HMAC โดยใช้ไดเจสต์เดียวกัน (ค่าเริ่มต้นคือ SHA-256)
  2. 2fwknopd ปฏิเสธแพ็กเก็ตที่เก่ากว่า MAX_SPA_PACKET_AGE (ค่าเริ่มต้น 120 วินาที) ดังนั้นนาฬิกาอุปกรณ์ที่คลาดเคลื่อนมากจะทำให้ทุกแพ็กเก็ตดูเหมือนเก่า
  3. 3แพ็กเก็ต SPA แต่ละรายการใช้ได้เพียงครั้งเดียว fwknopd จะทิ้งแพ็กเก็ตที่เล่นซ้ำโดยเจตนา
  4. 4หากคุณเคาะผ่าน HTTP ต้องมีบางสิ่งที่รับการเชื่อมต่อ TCP บนพอร์ตนั้น มิฉะนั้นคำขอจะไม่ถูกส่ง

5. ประตูเปิดแล้ว แต่ SSH ยังล้มเหลว

  1. 1ลำดับกฎ: กฎที่ดีมอนเพิ่มต้องอยู่ก่อนกฎที่ทิ้งพอร์ต — iptables -A จะต่อท้ายหลัง DROP ที่มีอยู่และจะไม่มีวันตรงกัน
  2. 2ช่วงเวลา: cmd_timeout หรือ FW_ACCESS_TIMEOUT ปิดประตูก่อนที่ SSH จะเชื่อมต่อ เชื่อมต่อภายในช่วงเวลานั้น เซสชันที่สร้างแล้วจะยังทำงานต่อได้หากไฟร์วอลล์ของคุณยอมรับการเชื่อมต่อที่สร้างแล้ว
  3. 3การตรวจสอบพอร์ตของ Secret Knock หลังการเคาะจะแจ้งให้คุณทราบว่าพอร์ตตอบกลับหรือไม่ โดยแยกจากการตรวจสอบสิทธิ์ SSH

ตัวอย่างทั้งหมดบน GitHub → การกำหนดค่าทุกรายการในหน้านี้ พร้อมให้คัดลอก: github.com/mobilcomm/secretknock-examples (สาธารณสมบัติ)

คำถาม

ฉันจะดูได้อย่างไรว่าแอปส่งอะไรจริงๆ

ประวัติของประตูจะแสดงการเคาะแต่ละครั้งพร้อมเวลา ผลลัพธ์ และตระกูลที่อยู่ และตัวแก้ไขจะแสดงการเคาะเดียวกันเป็นคำสั่งเทอร์มินัลที่คุณสามารถเรียกใช้จากคอมพิวเตอร์เพื่อเปรียบเทียบ

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