Letmein เป็นตัวเคาะพอร์ตแบบธรรมดาพร้อมกลไกการตรวจสอบสิทธิ์ที่ง่ายและปลอดภัย สามารถใช้เพื่อป้องกันการโจมตีการตรวจสอบสิทธิ์ล่วงหน้าในบริการต่างๆ เช่น SSH, VPN, IMAP และอื่นๆ อีกมากมาย
Letmein ซ่อนบริการบนเซิร์ฟเวอร์ไว้เบื้องหลังอุปสรรคในการตรวจสอบสิทธิ์แบบน็อค เพื่อลดพื้นที่การโจมตีของบริการ บริการนี้จะไม่สามารถเข้าถึงได้เว้นแต่การรับรองความถูกต้องด้วยการเคาะจะสำเร็จ ในกรณีที่เคาะสำเร็จ เซิร์ฟเวอร์ Letmeind จะเปิดเฉพาะพอร์ตที่เคาะสำหรับที่อยู่ IP ไคลเอ็นต์ที่ทำการเคาะเท่านั้น เครื่องที่มีที่อยู่ IP ต่างกันจะยังไม่สามารถเข้าถึงบริการที่ได้รับการป้องกันได้
เครื่องที่ไม่สามารถตรวจสอบลำดับการเคาะได้สำเร็จจะไม่สามารถเข้าถึงบริการที่ได้รับการป้องกันได้ พวกเขาจะได้รับ reject
ICMP บนพอร์ตบริการที่ได้รับการป้องกันพร้อมกับตัวอย่าง nftables.conf
ที่ให้มา (คุณสามารถเลือกที่จะ drop
แพ็กเก็ตลงใน nftables.conf
ของคุณแทนได้)
Letmein ต้องการไฟร์วอลล์ที่ใช้ nftables
มันจะ ไม่ ทำงานกับ iptables
หากคุณใช้ไฟร์วอลล์ที่ใช้ iptables
โปรดแปลงเป็น nftables
ก่อนที่จะติดตั้ง Letmein มีคำอธิบายเกี่ยวกับวิธีการทำเช่นนั้นบนอินเทอร์เน็ต มันไม่ยากและทำงานมากเท่าที่ฟัง -
การสื่อสารควบคุม Letmein นั้นมีค่าเริ่มต้นเป็นพอร์ต TCP 5800 แต่สามารถกำหนดค่าเป็นพอร์ต TCP หรือ UDP ใดก็ได้ หากคุณเลือกพอร์ต UDP เป็นพอร์ตควบคุมและกำหนดค่า control-error-policy=basic-auth บริการ Letmein เองจะทำงานในโหมดซ่อนตัวและไม่ตอบสนองต่อข้อความขาเข้าที่ไม่ผ่านการรับรองความถูกต้อง
หน้าแรก
พื้นที่เก็บข้อมูล Git
พื้นที่เก็บข้อมูล Github
บนเซิร์ฟเวอร์ให้ติดตั้งซอฟต์แวร์เซิร์ฟเวอร์ Letmein (ดูหัวข้อด้านล่าง)
บนไคลเอนต์ให้ติดตั้งซอฟต์แวร์ไคลเอนต์ Letmein (ดูหัวข้อด้านล่าง)
โปรดอ่านไฟล์การกำหนดค่าตัวอย่าง nftables.conf ที่มาพร้อมกับโปรเจ็กต์นี้ จำเป็นต้องเพิ่มห่วงโซ่อินพุตเฉพาะ Letmein ให้กับการกำหนดค่า nftables
ที่มีอยู่ของคุณ แก้ไข nftables.conf
ของคุณตามลำดับ
สร้างคีย์ลับที่ใช้ร่วมกันและตัวระบุผู้ใช้ที่จะติดตั้งบนเซิร์ฟเวอร์และไคลเอ็นต์ด้วยคำสั่งไคลเอ็นต์ต่อไปนี้:
letmein gen-key -u 00000000
คำสั่ง gen-key จะพิมพ์สตริงคีย์ที่สร้างขึ้นไปยังคอนโซล ตามค่าเริ่มต้น สิ่งนี้จะสร้างคีย์สุ่มที่ปลอดภัยสำหรับตัวระบุผู้ใช้ 00000000
คุณสามารถแก้ไขตัวระบุผู้ใช้ด้วยตนเองได้หากต้องการ หรือจะปล่อยไว้เหมือนเดิมก็ได้
เพิ่มสตริงที่สร้างขึ้น (ตัวระบุผู้ใช้และความลับที่ใช้ร่วมกัน) ไปยังการกำหนดค่าเซิร์ฟเวอร์ใน /opt/letmein/etc/letmeind.conf
ใส่สตริงคีย์ที่สร้างขึ้นพร้อมกับตัวระบุผู้ใช้ลงในส่วน [KEYS]
ของไฟล์การกำหนดค่า
เพิ่มสตริงที่สร้างขึ้นเดียวกัน (ตัวระบุผู้ใช้และความลับที่ใช้ร่วมกัน) ให้กับการกำหนดค่าไคลเอนต์ใน /opt/letmein/etc/letmein.conf
ใส่สตริงคีย์ที่สร้างขึ้นพร้อมกับตัวระบุผู้ใช้ลงในส่วน [KEYS]
ของไฟล์การกำหนดค่า
สร้าง resource
ในเซิร์ฟเวอร์ที่อธิบายพอร์ต sshd
ที่สามารถเปิดได้ ในส่วน [RESOURCES]
ของไฟล์การกำหนดค่าเซิร์ฟเวอร์ /opt/letmein/etc/letmeind.conf
ต้องระบุพอร์ตทั้งหมดที่อาจเปิดได้ ทรัพยากรประกอบด้วยตัวระบุทรัพยากรตามด้วยตัวระบุพอร์ตดังนี้:
[RESOURCES]
00000022 = port: 22
ตัวระบุทรัพยากรเป็นเลขฐานสิบหก 8 หลัก ในตัวอย่างนี้ คือ 22(hex) แต่อาจเป็นตัวเลขใดๆ ก็ได้ เพียงแต่ต้องเป็นหมายเลขเดียวกันบนเซิร์ฟเวอร์และไคลเอนต์ หลังจาก port:
ระบุหมายเลขพอร์ต (เป็นทศนิยม) ที่สามารถเปิดได้
เพิ่มทรัพยากรเดียวกันด้วยตัวระบุทรัพยากรเดียวกันและหมายเลขพอร์ตเดียวกันในการกำหนดค่าไคลเอ็นต์ใน /opt/letmein/etc/letmein.conf
รีสตาร์ทเซิร์ฟเวอร์ Letmein:
systemctl restart letmeind.service
ตอนนี้ลบพอร์ต sshd
แบบคงที่ (22) accept
จากการกำหนดค่าไฟร์วอลล์ nftables.conf
ของคุณ Letmein จะติดตั้งกฎดังกล่าวแบบไดนามิกในห่วงโซ่อินพุต Letmein หลังจากตรวจสอบสิทธิ์ Knock สำเร็จ จากนั้นรีสตาร์ท nftables:
systemctl restart nftables.service
เสร็จแล้ว! ตอนนี้คุณควรจะสามารถเปิดพอร์ต sshd
บนเซิร์ฟเวอร์ของคุณได้:
# This must fail! No successful knock authentication, yet.
# If this does not fail, check if you have removed the sshd accept rule from nftables.conf.
ssh your-server.com
# Knock-open port 22 (sshd) on the server using user-id/key 00000000:
# (You do not have to specify -u 00000000 if that is your default user (see config).)
letmein knock -u 00000000 your-server.com 22
# Now you should be able to ssh into your server successfully:
ssh your-server.com
หากต้องการเคาะพอร์ตโดยอัตโนมัติก่อนที่จะเชื่อมต่อกับ ssh คุณสามารถเพิ่มกฎ Match exec
ลงในไฟล์ ~/.ssh/config
ของคุณได้:
Match host your-server.com exec "letmein knock -u 00000000 your-server.com 22"
ดูคำแนะนำในการติดตั้งสำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการสร้างและติดตั้ง Letmein
หากคุณต้องการลบ Letmein ออกจากระบบของคุณโดยสิ้นเชิง โปรดดูคำแนะนำในการถอนการติดตั้ง
แอปพลิเคชันไคลเอนต์ letmein
สามารถพกพาได้และควรทำงานบนแพลตฟอร์มหลักทั้งหมด แพลตฟอร์มที่ทดสอบคือ:
แอปพลิเคชันเซิร์ฟเวอร์ letmeind
เป็น Linux เท่านั้น เนื่องจากรองรับเฉพาะ nftables
เป็นแบ็กเอนด์ไฟร์วอลล์
ดูเอกสารประกอบการกำหนดค่าสำหรับข้อมูลโดยละเอียดเกี่ยวกับวิธีการกำหนดค่าเซิร์ฟเวอร์และไคลเอนต์ Letmein
โปรดทราบว่าตัวระบุผู้ใช้และตัวระบุทรัพยากรจากไฟล์การกำหนดค่าจะถูกส่งผ่านเครือข่ายโดยไม่มีการเข้ารหัสในรูปแบบข้อความที่ชัดเจน
ตรวจสอบให้แน่ใจว่าตัวระบุผู้ใช้และตัวระบุทรัพยากร ไม่มี ข้อมูลส่วนตัวใดๆ
ตัวระบุเหล่านี้มีไว้เพื่อเป็นการระบุตัวตนเชิงนามธรรมสำหรับการจัดการ letmein
การติดตั้ง และการตั้งค่าต่างๆ
เป้าหมายการออกแบบหลักของเลทมีนคือ:
-4
และ -6
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการรักษาความปลอดภัยและการรายงานช่องโหว่ โปรดดูเอกสารความปลอดภัยของ Letmein
ลิขสิทธิ์ (c) 2024 Michael Büsch [email protected]
ได้รับอนุญาตภายใต้ Apache License เวอร์ชัน 2.0 หรือใบอนุญาต MIT ตามตัวเลือกของคุณ