SSH Security: วิธีรักษาความปลอดภัย SSH บน Server อย่างมืออาชีพ
SSH (Secure Shell) เป็นโปรโตคอลหลักที่ใช้เข้าถึง Server จากระยะไกล การตั้งค่า SSH ให้ปลอดภัยจึงเป็นสิ่งสำคัญอย่างยิ่ง เพราะผู้โจมตีมักใช้ SSH เป็นช่องทางเข้าถึง Server ระบบ
การตั้งค่า SSH Key Authentication
การใช้ SSH Key แทน Password เป็นวิธีที่ปลอดภัยกว่ามาก เนื่องจากไม่สามารถ Brute Force ได้:
# สร้าง SSH Key Pair บนเครื่อง Client
ssh-keygen -t ed25519 -C "your_email@example.com"
# หรือใช้ RSA 4096 bit
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
# คัดลอก Public Key ไปยัง Server
ssh-copy-id -i ~/.ssh/id_ed25519.pub username@server_ip
# หรือ Copy ด้วยตนเอง
cat ~/.ssh/id_ed25519.pub | ssh username@server_ip "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
การตั้งค่า SSH (/etc/ssh/sshd_config)
การปรับ Configuration หลักสำหรับเสริมความปลอดภัย SSH:
# /etc/ssh/sshd_config
# เปลี่ยน Port จาก 22 (ลด Automated Scanning)
Port 2222
# ปิดการ Login ด้วย Root
PermitRootLogin no
# ปิด Password Authentication (ใช้ Key เท่านั้น)
PasswordAuthentication no
ChallengeResponseAuthentication no
# เปิด Key Authentication
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
# กำหนด User ที่อนุญาตให้ SSH
AllowUsers deploy admin
# Limit จำนวนครั้ง Authentication
MaxAuthTries 3
# Timeout สำหรับ Session ที่ไม่เคลื่อนไหว
ClientAliveInterval 300
ClientAliveCountMax 2
# ปิดสิ่งที่ไม่ใช้
X11Forwarding no
AllowAgentForwarding no
AllowTcpForwarding no
# แสดง Login Banner
Banner /etc/issue.net
# Restart SSH Service หลังแก้ไข
# (อย่า Logout ก่อน Test เสมอ)
sudo sshd -t # ตรวจสอบ Syntax
sudo systemctl restart sshd
การติดตั้งและตั้งค่า Fail2ban
Fail2ban จะ Block IP ที่พยายาม Login ผิดหลายครั้งอัตโนมัติ:
sudo apt install fail2ban
# สร้าง /etc/fail2ban/jail.local
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 3
destemail = admin@yourdomain.com
action = %(action_mwl)s
[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
# Restart Fail2ban
sudo systemctl restart fail2ban
# ตรวจสอบสถานะ
sudo fail2ban-client status sshd
การใช้ SSH Jump Host / Bastion Host
ใน Production Environment ควรใช้ Bastion Host เป็นจุดเข้าถึงเดียวสำหรับทุก Server:
# ตั้งค่าใน ~/.ssh/config บนเครื่อง Client
Host bastion
HostName bastion.yourdomain.com
User deploy
IdentityFile ~/.ssh/bastion_key
Port 2222
Host internal-server
HostName 10.0.1.50
User deploy
IdentityFile ~/.ssh/internal_key
ProxyJump bastion
# เชื่อมต่อ internal-server ผ่าน Bastion
ssh internal-server
SSH Audit และการตรวจสอบ
# ตรวจสอบการล็อกอินสำเร็จ
sudo grep "Accepted" /var/log/auth.log
# ตรวจสอบการล็อกอินผิด
sudo grep "Failed password" /var/log/auth.log
# ดู IP ที่ Fail2ban บล็อกอยู่
sudo fail2ban-client status sshd
# ใช้ ssh-audit Tool ตรวจสอบ Configuration
pip install ssh-audit
ssh-audit localhost
SSH Security Checklist
| รายการ | คำอธิบาย | ความสำคัญ |
|---|---|---|
| ใช้ SSH Key Auth | แทน Password | สูงมาก |
| ปิด Root Login | PermitRootLogin no | สูงมาก |
| เปลี่ยน Port | จาก 22 เป็นอื่น | ปานกลาง |
| ติดตั้ง Fail2ban | ป้องกัน Brute Force | สูง |
| จำกัด AllowUsers | ระบุ User ที่อนุญาต | สูง |
| ใช้ Bastion Host | จุดเข้าถึงจุดเดียว | สูง |
| ติดตาม Auth Logs | ดู Login Events | สูง |
สรุป
SSH Security เป็นสิ่งแรกที่ควรตั้งค่าหลังจากรับเซิร์ฟเวอร์ใหม่ การใช้ SSH Key ร่วมกับการปิด Password Authentication และติดตั้ง Fail2ban จะช่วยลดความเสี่ยงได้อย่างมีนัยสำคัญ สำหรับ Cloud VPS ของ Dot Enterprise รองรับ SSH Key Authentication และ Security Features ครบครันตั้งแต่เริ่มต้นใช้งาน