30 นาทีแรก: รายการตรวจสอบการเสริมความแข็งแกร่ง VPS
VPS ใหม่จะถูกสแกน SSH ครั้งแรกภายในไม่กี่นาทีหลังจากได้รับ IP นี่คือลำดับที่แน่นอนที่ผมรันบนเครื่องใหม่ทุกเครื่อง — พร้อมคัดลอกวางสำหรับ Debian 13 พร้อมตารางรายการตรวจสอบท้ายบทความ
สมมติฐาน: อิมเมจ Debian 13 ใหม่จากการติดตั้ง VPSRento ของคุณ คุณเข้าสู่ระบบเป็น root ผ่าน SSH และ IP ตัวอย่างคือ 185.220.101.14 — เปลี่ยนเป็นของคุณเอง เวลาทั้งหมด: ประมาณครึ่งชั่วโมง ทำตามขั้นตอนตามลำดับ ขั้นตอนที่ 2 อาจล็อกคุณออกได้หากรีบ
1. สร้างผู้ใช้ sudo ของคุณ
การทำงานเป็น root คือวิธีที่พิมพ์ผิดกลายเป็นอุบัติเหตุ สร้างผู้ใช้จริง ให้สิทธิ์ sudo และทำทุกอย่างจากตรงนั้น:
# create the user (you'll set a password — still useful for sudo)
adduser ops
# grant sudo
usermod -aG sudo ops
ทุกอย่างตั้งแต่จุดนี้เป็นต้นไปรันเป็น ops เว้นแต่จะระบุไว้เป็นอย่างอื่น
2. เฉพาะ SSH keys — ไม่มีรหัสผ่าน ไม่มี root login
การยืนยันด้วยรหัสผ่านคือช่องโหว่ที่ใหญ่ที่สุดบนเครื่องที่เปิดสู่อินเทอร์เน็ต บอทถล่มพอร์ต 22 ด้วยรายการข้อมูลประจำตัวตลอดทั้งวันทุกวัน Keys ทำให้การโจมตีทั้งคลาสนี้ไร้ผล บน เครื่องท้องถิ่นของคุณ:
# generate a keypair if you don't have one (ed25519, no passphrase tradeoff is yours)
ssh-keygen -t ed25519 -C "ops@atlas"
# push the public key to the server
ssh-copy-id [email protected]
ตรวจสอบว่าคุณสามารถเข้าสู่ระบบด้วย key ในเทอร์มินัล ใหม่ เทอร์มินัล — ssh [email protected] — ก่อนแตะคอนฟิก เปิดเซสชัน root เดิมไว้เป็นทางหนี จากนั้นแก้ไข /etc/ssh/sshd_config:
# /etc/ssh/sshd_config — the three lines that matter
PasswordAuthentication no
KbdInteractiveAuthentication no
PermitRootLogin prohibit-password
# validate the config, then reload (Debian 13 uses ssh.service)
sshd -t && systemctl reload ssh
prohibit-password แทนไฟล์ no สำหรับ root โดยเจตนา: root ยังสามารถยืนยันด้วย key จากเวิร์กสเตชันของคุณ ซึ่งบางครั้งมีประโยชน์สำหรับการกู้คืนผ่านคอนโซลของผู้ให้บริการ — แต่ไม่มีรหัสผ่านใดจะทำงานได้ สำหรับใครก็ตาม จากที่ใดก็ตาม ยืนยันด้วย sshd -T | grep -E 'passwordauthentication|permitrootlogin'.
3. ไฟร์วอลล์: ปฏิเสธโดยค่าเริ่มต้น อนุญาตเฉพาะสิ่งที่คุณรัน
ufw ของ Debian คือเลเยอร์ที่บางและสมเหตุสมผลเหนือ nftables นโยบายคือความปลอดภัย กฎเป็นเพียงข้อยกเว้นของนโยบาย:
apt update && apt install -y ufw
ufw default deny incoming
ufw default allow outgoing
# SSH stays open — add this BEFORE enabling
ufw allow 22/tcp comment 'SSH'
# whatever your box actually serves, e.g.:
ufw allow 80/tcp comment 'HTTP'
ufw allow 443/tcp comment 'HTTPS'
ufw enable
ufw status verbose
ทุกพอร์ตที่คุณเปิดควรมีชื่อและเหตุผล ถ้าคุณบอกไม่ได้ว่าพอร์ตนั้นใช้ทำอะไร มันก็ไม่ควรมีกฎ
4. fail2ban: ทำให้บอทช้าลงจนแทบหยุด
เมื่อปิดการยืนยันด้วยรหัสผ่าน การโจมตีแบบ brute force ก็ตายแล้ว — แต่ fail2ban ทำให้ล็อกของคุณอ่านง่ายและแบนสแกนเนอร์ที่แหย่สิ่งอื่น:
apt install -y fail2ban
# /etc/fail2ban/jail.local
[sshd]
enabled = true
port = ssh
maxretry = 5
findtime = 10m
bantime = 1h
systemctl enable --now fail2ban
# watch it work
fail2ban-client status sshd
5. อัปเดตความปลอดภัยอัตโนมัติ
CVE ที่ไม่ได้รับการแพตช์คือความเสี่ยงที่ใหญ่กว่าการรีบูต unattended-upgrades ของ Debian ติดตั้งอัปเดตความปลอดภัยด้วยตัวเอง:
apt install -y unattended-upgrades
# answer Yes to auto-install updates
dpkg-reconfigure -plow unattended-upgrades
คอนฟิกเริ่มต้นใน /etc/apt/apt.conf.d/50unattended-upgrades ดึงจากชุดความปลอดภัยเท่านั้น — ซึ่งคือสิ่งที่คุณต้องการบนเซิร์ฟเวอร์: แก้ไขความปลอดภัยอัตโนมัติ ที่เหลือเมื่อคุณเลือก
6. ปิดสิ่งที่คุณไม่ได้รัน
ทุกบริการที่รันอยู่คือพื้นผิวการโจมตีที่คุณต้องแพตช์ ดูว่ามีอะไรกำลังฟังอยู่จริง:
# who is listening, on what, as which process
ss -tulpn
# everything enabled at boot
systemctl list-unit-files --state=enabled
# example: you don't run a print server — nobody does
systemctl disable --now cups
กฎ: ถ้าคุณบอกไม่ได้ว่าตัวฟังทำอะไร ให้หาคำตอบก่อนปล่อยให้มันทำงาน บนอิมเมจ VPSRento ขั้นต่ำควรมีเพียง sshd และแอปพลิเคชันของคุณเองเท่านั้น
7. เลือกได้ แต่แนะนำ: ระบบจัดการ WireGuard
รูปแบบความปลอดภัย SSH ที่แข็งแกร่งที่สุดคือ SSH ที่ไม่เผชิญอินเทอร์เน็ตเลย ใช้ WireGuard บนเครื่อง อนุญาต SSH ภายในอุโมงค์เท่านั้น และพอร์ต 22 จะหายไปจากสแกนเนอร์ทุกตัวบนโลก:
apt install -y wireguard
# /etc/wireguard/wg0.conf — minimal management tunnel
# [Interface] Address = 10.8.0.1/24, ListenPort = 51820
# open the tunnel, not the shell
ufw allow 51820/udp comment 'WireGuard'
ufw allow in on wg0 to any port 22 proto tcp comment 'SSH via WG'
ufw delete allow 22/tcp
systemctl enable --now wg-quick@wg0
หลังจากนั้นคุณ ssh [email protected] ผ่านอุโมงค์ และ IP สาธารณะจะตอบสนองบนพอร์ต UDP เดียวเท่านั้น คำแนะนำ WireGuard แบบเต็ม — คีย์, เพียร์, การตั้งค่าไคลเอนต์, QR โค้ดสำหรับโทรศัพท์ — อยู่ใน คู่มือประกอบ.
รายการตรวจสอบ 10 ข้อ
ไล่ตารางนี้หลังการติดตั้งใหม่ทุกครั้ง และอีกครั้งหลังเพิ่มบริการทุกตัว:
| # | รายการ | อยู่ที่ไหน | ตรวจสอบด้วย |
|---|---|---|---|
| 1 | ผู้ใช้ sudo ที่ไม่ใช่ root | /etc/passwd | id ops |
| 2 | การยืนยัน SSH ด้วยคีย์เท่านั้น | sshd_config | sshd -T | grep passwordauth |
| 3 | ปิดการเข้าสู่ระบบ root ด้วยรหัสผ่าน | sshd_config | sshd -T | grep permitrootlogin |
| 4 | ไฟร์วอลล์ปฏิเสธขาเข้าโดยค่าเริ่มต้น | ufw | ufw status verbose |
| 5 | เปิดเฉพาะพอร์ตที่ระบุชื่อ | ufw | ufw status numbered |
| 6 | fail2ban sshd jail ทำงานอยู่ | jail.local | fail2ban-client status sshd |
| 7 | อัปเดตความปลอดภัยอัตโนมัติ | apt | systemctl status unattended-upgrades |
| 8 | ไม่มี listener ที่ไม่ทราบที่มา | — | ss -tulpn |
| 9 | การจัดการผ่าน WireGuard (เลือกได้) | wg0.conf | wg show |
| 10 | Snapshot หลังการแข็งเกราะ | ส่วนเสริมในพื้นที่ลูกค้า, $1.99/เดือน | บริการ → VPS ของคุณ → snapshots |
รายการที่ 10 สมควรหนึ่งประโยค: แข็งเกราะก่อน, snapshot ทีหลัง, ในลำดับนั้น — snapshot ของเครื่องที่สะอาดและแข็งเกราะคือการย้อนกลับสำหรับความผิดพลาดในอนาคตทุกครั้ง Snapshot นอกสถานที่รายวันเป็นส่วนเสริม $1.99/เดือน ใน พื้นที่ลูกค้า. การป้องกันสามสิบนาที, การประกันหนึ่งคลิก