บทนำ
นอกเหนือจากการเปลี่ยนพอร์ตเริ่มต้นสำหรับ SSH และใช้คู่คีย์สำหรับการตรวจสอบสิทธิ์การเคาะพอร์ตสามารถใช้เพื่อความปลอดภัยเพิ่มเติม (หรือแม่นยำยิ่งขึ้นปิดบัง) เซิร์ฟเวอร์ SSH ของคุณ มันทำงานได้โดยปฏิเสธการเชื่อมต่อกับพอร์ตเครือข่าย SSH ของคุณ สิ่งนี้ซ่อนความจริงที่ว่าคุณกำลังใช้เซิร์ฟเวอร์ SSH จนกว่าจะมีการพยายามเชื่อมต่อกับพอร์ตที่กำหนดไว้ล่วงหน้า ปลอดภัยมากและใช้งานง่ายการเคาะพอร์ตเป็นหนึ่งในวิธีที่ดีที่สุดในการปกป้องเซิร์ฟเวอร์ของคุณจากการพยายามเชื่อมต่อ SSH ที่เป็นอันตราย
ข้อกำหนดเบื้องต้น
- เซิร์ฟเวอร์ Vultr ที่ใช้งาน Ubuntu 18.04
- เข้าถึง Sudo
ก่อนที่จะทำตามขั้นตอนด้านล่างหากคุณไม่ได้ลงชื่อเข้าใช้ในฐานะผู้ใช้รูทโปรดรับรูทเชลล์ชั่วคราวโดยการเรียกใช้sudo -i
และป้อนรหัสผ่าน หรือคุณอาจผนวกsudo
คำสั่งที่แสดงไว้ในบทความนี้
ขั้นตอนที่ 1: การติดตั้ง Knockd
Knockd เป็นแพคเกจที่ใช้ร่วมกับ iptables เพื่อใช้พอร์ตการเคาะบนเซิร์ฟเวอร์ของคุณ 'การiptables-persistent
แพคเกจ' จะต้องมี
apt update
apt install -y knockd iptables-persistent
ขั้นตอนที่ 2: กฎ iptables
เรียกใช้คำสั่งต่อไปนี้ตามลำดับ:
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --destination-port 22 -j DROP
iptables-save > /etc/iptables/rules.v4
คำสั่งเหล่านี้จะทำสิ่งต่อไปนี้ตามลำดับ:
- สั่ง iptables เพื่อให้การเชื่อมต่อที่มีอยู่ยังคงอยู่
- สั่ง iptables ให้ยกเลิกการเชื่อมต่อกับพอร์ต tcp / 22 (หาก SSH daemon ของคุณกำลังรับฟังพอร์ตอื่นที่ไม่ใช่ 22 คุณควรแก้ไขคำสั่งด้านบนตามลำดับ)
- บันทึกกฎสองข้อนี้เพื่อที่จะคงอยู่หลังจากรีบูต
ขั้นตอนที่ 3: การกำหนดค่า Knockd
/etc/knockd.conf
ใช้โปรแกรมแก้ไขข้อความที่คุณเลือกให้เปิดไฟล์
คุณจะเห็นสิ่งต่อไปนี้:
[openSSH]
sequence = 7000,8000,9000
seq_timeout = 5
command = /sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
tcpflags = syn
คุณควรเปลี่ยนลำดับของพอร์ต (เลือกหมายเลขพอร์ตด้านบน1024
และไม่ได้ใช้โดยบริการอื่น ๆ ) และเก็บไว้อย่างปลอดภัย ชุดค่าผสมนี้ควรถือว่าเป็นรหัสผ่าน หากลืมคุณจะสูญเสียการเข้าถึง SSH x,y,z
เราจะหมายถึงลำดับใหม่นี้เป็น
seq-timeout
เส้นเป็นจำนวนวินาที Knockd จะรอสำหรับลูกค้าที่จะเสร็จสมบูรณ์ลำดับพอร์ตเคาะ เป็นความคิดที่ดีที่จะเปลี่ยนสิ่งนี้ให้มีขนาดใหญ่ขึ้นโดยเฉพาะอย่างยิ่งถ้าการเคาะพอร์ตจะทำได้ด้วยตนเอง อย่างไรก็ตามค่าการหมดเวลาที่น้อยลงจะปลอดภัยยิ่งขึ้น 15
ขอแนะนำให้เปลี่ยนเป็นเนื่องจากเราจะทำการเคาะด้วยตนเองในบทช่วยสอนนี้
เปลี่ยนลำดับการเปิดเป็นพอร์ตที่คุณเลือก:
[openSSH]
sequence = x,y,z
เปลี่ยนค่าคำสั่งเป็นดังต่อไปนี้:
command = /sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
ตอนนี้เปลี่ยนลำดับการปิดตามลำดับ:
[closeSSH]
sequence = z,y,x
บันทึกการเปลี่ยนแปลงและออกจากนั้นเปิดไฟล์/etc/default/knockd
:
- แทนที่ด้วย
START_KNOCKD=0
START_KNOCKD=1
- เพิ่มบรรทัดต่อไปนี้ในตอนท้ายของไฟล์:
KNOCKD_OPTS="-i ens3"
(แทนที่ens3
ด้วยชื่อของอินเทอร์เฟซเครือข่ายสาธารณะของคุณถ้ามันแตกต่างกัน)
- บันทึกและออก.
ตอนนี้เริ่ม Knockd:
systemctl start knockd
ถ้าตอนนี้คุณถอดจากเซิร์ฟเวอร์ของคุณคุณจะต้องเคาะบนพอร์ตx
, y
และz
เชื่อมต่ออีกครั้ง
ขั้นตอนที่ 4: การทดสอบ
ตอนนี้คุณจะไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์ SSH ของคุณได้
คุณสามารถทดสอบการเคาะพอร์ตด้วยไคลเอ็นต์เทลเน็ต
ผู้ใช้ Windows สามารถเรียกใช้ telnet ได้จากพรอมต์คำสั่ง หากไม่ได้ติดตั้ง telnet ให้เข้าถึงส่วน "โปรแกรม" ของแผงควบคุมจากนั้นค้นหา "เปิดหรือปิดคุณสมบัติ Windows" บนแผงคุณสมบัติค้นหา "ไคลเอ็นต์ Telnet" และเปิดใช้งาน
ในเทอร์มินัล / พรอมต์คำสั่งของคุณพิมพ์ต่อไปนี้:
telnet youripaddress x
telnet youripaddress y
telnet youripaddress z
ทำเช่นนี้ทั้งหมดในสิบห้าวินาทีตามที่กำหนดไว้ในการกำหนดค่า ตอนนี้พยายามเชื่อมต่อกับเซิร์ฟเวอร์ของคุณผ่าน SSH มันจะสามารถเข้าถึงได้
หากต้องการปิดการเข้าถึงเซิร์ฟเวอร์ SSH ให้รันคำสั่งตามลำดับย้อนกลับ
telnet youripaddress z
telnet youripaddress y
telnet youripaddress z
ข้อสรุป
ส่วนที่ดีที่สุดเกี่ยวกับการใช้การเคาะพอร์ตคือถ้ามีการกำหนดค่าควบคู่กับการรับรองความถูกต้องของคีย์ส่วนตัวนั้นแทบไม่มีโอกาสที่คนอื่นจะเข้าไปได้เว้นแต่จะมีคนรู้จักลำดับการเคาะพอร์ตของคุณและมีคีย์ส่วนตัวของคุณ