๐ Linux ไผบๆๅจ้ฒ็ฆฆ็ฌฌไธ็ท:SSH ๅฎๅ จๅ ๅบ、MFA ไบ้ๆฎต้ฉ่ญ่ Fail2Ban ๅฏฆๆฐ
ๅฆๆไฝ ็ Linux ไผบๆๅจๆๅฐๅค้ SSH,้ฃๅฎๅนพไนไธๅฎๆฏๅคฉ้ฝๅจ่ขซๆๆ、่ขซๆๅฏ็ขผ、่ขซๅ่ฉฆๅผฑๅฃไปค。 ็ๆญฃ่ฝ「้ทๆ็ฉฉๅฎ」ๆไฝ็ฌฌไธ็ท็ๅๆณ,ไธๆฏๅชๅๅฎ้ป่จญๅฎ,่ๆฏๆไธไปถไบไธฒ่ตทไพ: SSH ๆฌ้ซ็กฌๅ、MFA(ไบ้ๆฎต้ฉ่ญ)、Fail2Ban ่ชๅๅฐ้。
้็ฏๆ็จ「่ฝ็ดๆฅไธ็ท」็่งๅบฆ,ๆ่จญๅฎๆๆๅฏ่ค่ฃฝ็ๆฎต่ฝ:ไฝ ็ ง่ๅๅฎ,SSH ็ๆปๆ้ขๆ็ซๅป็ธฎๅฐไธๅคงๆช。
✅ ็ฎๆจ่ๅปบ่ญฐ่ทฏ็ท
| ้ ็ฎ | ๅปบ่ญฐ่จญๅฎ | ็ฎ็ |
|---|---|---|
| ็ปๅ ฅๆนๅผ | ๅชๅ ่จฑ SSH Key(ๅฟ ่ฆๆๅ MFA) | ็ดๆฅ็ ๆ「ๅฏ็ขผ่ขซ็ๅฐ」้ๆข่ทฏ |
| ๅธณ่่ไพๆบ | ้ๅถ AllowUsers / AllowGroups,ๅฟ ่ฆๆ้ๅถไพๆบ IP | ๆธๅฐๅฏ่ขซๅ่ฉฆ็็ฏๅ |
| MFA | ไฝฟ็จ TOTP(Google Authenticator / Authy / ๅ ถไป OTP App) | ๅฐฑ็ฎ็ง้ฐๅคๆดฉไนๅคไธ้้ |
| ๆดๅ็ ด่งฃ้ฒ่ญท | Fail2Ban ๅฐ้ๅคฑๆ็ปๅ ฅ IP(ๅซ systemd journal ๆจกๅผ) | ๆๆฉๅจไบบๆๅฐ「่ชๅทฑๆพๆฃ」 |
1) SSH ๅบ็คๅฎๅ จๅ ๅบ(sshd_config)
ไปฅไธไปฅๅธธ่ฆ่ทฏๅพ /etc/ssh/sshd_config ็บไธป。ๆฏๆฌกไฟฎๆนๅพ,ๅ
ๅ่ชๆณๆชขๆฅๅ reload。
# 1) ๅ
ๅ่ชๆณๆชขๆฅ(ๅพ้่ฆ)
sudo sshd -t
# 2) ๅๅ reload(ๆฏ restart ๅฎๅ
จ)
sudo systemctl reload sshd
1-1. ้ๆ root ็ดๆฅ็ปๅ ฅ + ้ๆๅฏ็ขผ็ปๅ ฅ
# /etc/ssh/sshd_config
# ็ฆๆญข root ็ดๆฅ็ปๅ
ฅ(ๅปบ่ญฐ็จไธ่ฌๅธณ่ + sudo)
PermitRootLogin no
# ้ๆๅฏ็ขผ็ปๅ
ฅ(ๆ ธๅฟ้ฒ็ท)
PasswordAuthentication no
# ๅ็จ้้ฐ็ปๅ
ฅ(้ๅธธ้ ่จญๅฐฑ้)
PubkeyAuthentication yes
# ้่ฆ PAM(ๅพ้ข่ฆๅ MFA ๆ็จๅฐ)
UsePAM yes
ๅฆๆไฝ ๆ「ๅฟ ้ ๆซๆไฟ็ๅฏ็ขผ็ปๅ ฅ」็ๅ ดๆฏ,่ณๅฐไน่ฆๆๅ ่จฑ็ฏๅ็ธฎๅฐๆๅฐ(ไพๅฆๅชๅ ่จฑๅ ง็ถฒ、ๆๅชๅ ่จฑ็นๅฎๅธณ่), ็ญไฝ ็ขบ่ช Key + MFA ้ฝ็ฉฉไบ,ๅๆๅฏ็ขผ้้้ๆ。
1-2. ้ๅถๅฏ็ปๅ ฅ็ๅธณ่ / ็พค็ต
# ๅชๅ
่จฑ้ไบไฝฟ็จ่
็ปๅ
ฅ(็ฏไพ)
AllowUsers admin ops
# ๆ็จ็พค็ตๆง็ฎก(ๆดๅฅฝ็ถญ่ญท)
# AllowGroups sshusers
1-3. ็ธฎ็ญๅ่ฉฆ็ชๅฃ、้ไฝๆ้ๆ็
# ้ไฝๆดๅ็ ด่งฃๆ็(ไพ้ๆฑ่ชฟๆด)
MaxAuthTries 3
LoginGraceTime 20
# ไฟๆดป(้ฟๅ
้ท้ฃ็ทๅกไฝ;ไน่ฝ้ไฝๆไบ่ณๆบไฝ็จ)
ClientAliveInterval 60
ClientAliveCountMax 2
1-4. ๅฏ้ธ:ๆน Port(้ไฝๆๆ้่จ)
# ๅฏ้ธ:ๆนๆ้ซไฝ Port(ไธๆฏๆ ธๅฟๅฎๅ
จ,ไฝๅฏ้้่จ)
Port 2222
ๅฆๆไฝ ๆนไบ Port,่จๅพๅๆญฅ่ชฟๆด้ฒ็ซ็(firewalld/ufw/nftables)่ Fail2Ban jail ็ port ่จญๅฎ。
2) ๅ ไธ MFA(ไบ้ๆฎต้ฉ่ญ):TOTP(PAM Google Authenticator ๆจก็ต)
้่ฃก็คบ็ฏ「ๆๅธธ่ฆ、้จ็ฝฒๆๆฌๆไฝ」็ TOTP:ๆๆฉ OTP App ๆ QR code ๅพ,ๆฏ 30 ็ง็ข็ไธๆฌก็ขผ。 ไฝ ไนๅฏไปฅๆๆ Duo、็กฌ้ซ้้ฐๆๅ ฌๅธๆขๆ IdP,ไฝๆฆๅฟต็ธๅ:ๆ SSH ็้ฉ่ญๆๆๅ ฉ้้。
2-1. ๅฎ่ฃๅฅไปถ
Debian / Ubuntu:
sudo apt update
sudo apt install -y libpam-google-authenticator
RHEL / Rocky / Alma(ๅธธ่ฆไฝๆณๆฏๅ็จ EPEL):
# ๅ
ๅ็จ EPEL(่ฅไฝ ็ฐๅขๅทฒๅ็จๅฏ็ฅ)
sudo dnf install -y epel-release
# ๅฎ่ฃ Google Authenticator PAM
sudo dnf install -y google-authenticator
2-2. ๅฐ่ฆ็ปๅ ฅ็ๅธณ่็ข็ secret(ๆฏๅๅธณ่้ฝ่ฆๅไธๆฌก)
# ็จ「่ฉฒไฝฟ็จ่
」่บซๅๅท่ก(ไธ่ฆ็จ root ไปฃ่ท)
google-authenticator
่ทๅฎๅพๆๅพๅฐ QR code ่ๅๆด็ขผ,่ซ็ซๅณๅญๅฐๅฎๅ จไฝ็ฝฎ(ไพๅฆๅฏ็ขผ็ฎก็ๅจ)。 OTP ่ฅๅคฑๆ,้ๅธธๆฏๆ้ไธๅๆญฅ้ ๆ็,ไผบๆๅจๅๅฟ ็ถญๆ NTP ๆญฃๅธธ。
2-3. ่จญๅฎ PAM:/etc/pam.d/sshd
# /etc/pam.d/sshd
# ๅ ๅจ้ฉ็ถไฝ็ฝฎ(้ๅธธๅจ @include common-auth ไนๅ/้่ฟ)
auth required pam_google_authenticator.so
ไฝ ไนๅฏไปฅๅ ไธๅๆธ(ไพๅฆๅ ่จฑๅฐๅน ๆ้ๆผ็งป、ๆๅ ่จฑๆฒๆ secret ็ๅธณ่ๅ ไธๅฅ็จ),ไฝๅปบ่ญฐไธ็ทๆๆก「ๅดๆ ผ」็ญ็ฅ。
2-4. ่จญๅฎ sshd:ๅผทๅถ「Key + OTP」,ไธ่ฆๅ่ฆๅฏ็ขผ
้้ปๆฏๅ
ฉๅฅ:KbdInteractiveAuthentication yes ่ AuthenticationMethods。
้ๆ่ฎๆต็จ่ฎๆ:ๅ
้ฉ่ญ SSH Key,ๅ่ทณๅบ OTP(keyboard-interactive)ๆๆฐ。
# /etc/ssh/sshd_config
UsePAM yes
PasswordAuthentication no
# ๅ็จ้ต็คไบๅ(OTP ่ตฐ้ๆข)
KbdInteractiveAuthentication yes
# ๅผทๅถๅๆ้้:publickey + keyboard-interactive(OTP)
AuthenticationMethods publickey,keyboard-interactive
ๅฅ็จๅ่ซๅ ไฟ็ไธๅๅทฒ็ปๅ ฅ็ SSH ้ฃ็ท็ชๅฃ,ไธฆ็จๅฆไธๅ็ต็ซฏๆธฌ่ฉฆ็ปๅ ฅๆๅๅพๅ reload sshd。
3) Fail2Ban:ๆๆดๅ็ ด่งฃ「่ชๅๅฐ้」
Fail2Ban ๆๅๆ็ปๅ ฅๅคฑๆ็็ด้(log ๆ systemd journal),็ถๆๅ IP ๅจๆๅฎๆ้ๅ งๅคฑๆๆฌกๆธ้ๅค,ๅฐฑ่ชๅไธ้ฒ็ซ็่ฆๅๅฐ้。 ไฝ ๅฏไปฅๆๅฎๆณๆ「้ๅฐๆ้่ก็บ็่ชๅๅๅถ」。
3-1. ๅฎ่ฃ Fail2Ban
Debian / Ubuntu:
sudo apt update
sudo apt install -y fail2ban
RHEL / Rocky / Alma:
sudo dnf install -y fail2ban
sudo systemctl enable --now fail2ban
3-2. ๅปบ่ญฐ็จ jail.d/ ่ช่จ(้ฟๅ ่ฆๅฏซ)
ๅปบ็ซไธๅๅฐ้็ฎก SSH ็ๆชๆก:
sudo mkdir -p /etc/fail2ban/jail.d
sudo nano /etc/fail2ban/jail.d/sshd.local
็ฏไพ(ๅ้็จ、ๅฏ็ดๆฅ็จ):
# /etc/fail2ban/jail.d/sshd.local
[DEFAULT]
# ่ฅ็ณป็ตฑไธป่ฆ็จ systemd journal,ๅปบ่ญฐ็ดๆฅ็จ systemd backend
backend = systemd
# ๅฟฝ็ฅ็ฝๅๅฎ(ๆไฝ ็็ฎก็ไพๆบ IP / VPN ๅบๅฃๅ ้ฒไพ)
ignoreip = 127.0.0.1/8
# ๅคฑๆ็ตฑ่จ็ชๅฃ(10 ๅ้ๅ
ง)
findtime = 10m
# ๅ
่จฑๅคฑๆๆฌกๆธ
maxretry = 5
# ๅฐ้ๆ้(ๅฏ็จ 10m/1h/1d ้็จฎๆ ผๅผ)
bantime = 6h
# ไพไฝ ็็ณป็ตฑ้ธๆ banaction(iptables ๆ nftables)
# banaction = iptables-multiport
# ่ฅไฝ ็็ณป็ตฑไปฅ nftables ็บไธป,ๅฏๆน nftables(ไธๅ็ผ่ก็ action ๅ็จฑๅฏ่ฝ็ฅๆๅทฎ็ฐ)
# banaction = nftables
[sshd]
enabled = true
# ่ฅไฝ ๆน Port,้่ฃกไน่ฆ่ท่ๆน
port = ssh
# Debian/Ubuntu ๅธธ่ฆ logpath(่ฅไฝ ไธ็จ journal)
# logpath = /var/log/auth.log
# RHEL ็ณปๅธธ่ฆ logpath(่ฅไฝ ไธ็จ journal)
# logpath = /var/log/secure
3-3. ๅๅไธฆๆชขๆฅ็ๆ
sudo systemctl enable --now fail2ban
sudo fail2ban-client status
sudo fail2ban-client status sshd
็ๅฐ Banned IP list ๅฐฑ่กจ็คบ jail ๆญฃๅธธๅทฅไฝ。ไฝ ไนๅฏไปฅ็ดๆฅ็ Fail2Ban ่ชๅทฑ็ log(ๅคๆธ็ฐๅข้ ่จญๅจ /var/log/fail2ban.log)。
3-4. ๅธธ็จๆไฝ:่งฃๅฐ、ๆๅๅฐ้、ๆฅ่ขซๅฐ้ๆธ ๅฎ
# ๆฅ็ sshd jail ็ๆ
sudo fail2ban-client status sshd
# ่งฃๅฐๆๅฎ IP
sudo fail2ban-client set sshd unbanip 203.0.113.10
# ๆๅๅฐ้(ๅฐ็จ,ไฝๆ้ๆๆ็จๅฐ)
sudo fail2ban-client set sshd banip 203.0.113.10
4) ไธ็ทๅๆๅพๆชขๆฅ(ๆ้ๅธธๆ็ ง้ไปฝ่ท)
# SSH ่จญๅฎ่ชๆณๆชขๆฅ
sudo sshd -t
# ้ๆฐ่ผๅ
ฅ(ไธ่ฆๆฅ่ restart)
sudo systemctl reload sshd
# ๆชขๆฅ SSH ็ฃ่ฝ(Port ๆฏๅฆๆญฃ็ขบ)
sudo ss -lntp | grep sshd
# ๆธฌ่ฉฆ:็จๅฆไธๅ็ต็ซฏ็ปๅ
ฅ(็ขบ่ชๆต็จๆฏ Key -> OTP)
ssh -p 2222 admin@your.server
# Fail2Ban ๆฏๅฆๅ็จ、sshd jail ๆฏๅฆๅ็จ
sudo systemctl status fail2ban --no-pager
sudo fail2ban-client status sshd
5) ้ฒ้ๅ ๅ(้ธๅ,ไฝๅพๅผๅพ)
- ๅชๅ ่จฑ็ฎก็็ถฒๆฎต: ๅจ้ฒ็ซ็ / ้ฒ็ซฏ Security Group ้ๅถไพๆบ IP,SSH ไธ่ฆๆพๅ จไธ็。
- ๅๅฑค็ฎก็: ไธ่ฌๅธณ่็ปๅ ฅ + sudo;ๅด็ฆๅ ฑ็จๅธณ่;ๆๅฏ็ปๅ ฅๅๅฎ็ธฎๅฐๆๅฐ。
- ้้ฐๆฒป็: ๅผทๅถไฝฟ็จ่ ็จๅฏ็ขผ็ฎก็ๅจไฟๅญ็ง้ฐ passphrase;ๅฎๆ็ค้ป authorized_keys。
- ๅ่ญฆ่็จฝๆ ธ: Fail2Ban ๅฐ้ไบไปถๅฏๅๅฏไฟก/ๆจ้;sshd LogLevel ๅฏ่ฆ้ๆฑ่ชฟ้ซ。
ๅปถไผธ้ฑ่ฎ
- ๐ Linux SSH ๅฎๅ จ็กฌๅ:้้ฐ็ปๅ ฅ、sshd ๅผทๅ่ Fail2Ban ้ฒ่ญท
- ๐ก️ Linux Fail2Ban ้ฒ้ๆๅ:jail.d、systemd journal、ๅฐ้็ญ็ฅ่ๆ้ฏ
- ๐ฅ Linux Firewalld / iptables / nftables ๆทฑๅบฆๆฏ่ผ่ๆไฝณๅฏฆๅ
- ๐งฉ Linux PAM / sudo ๅฎๅ จๆๅ:ๆฌ้ๆง็ฎก、็จฝๆ ธ่็กฌๅๅปบ่ญฐ
- ๐งฑ Linux ๅฎๅ จ้ฒ็ทๆดๅ:SELinux / AppArmor / auditd / Fail2Ban ๅฏฆๆฐ
- ๐ Proxmox VE ๆๅญธ:ไผๆฅญ่ๆฌๅๅนณๅฐๅปบ็ฝฎๅฏฆไฝ
๐ฌ ็่จ่่:ไฝ ็ SSH ้ฒ่ญทๅๅฐๅชไธๅฑค?
ๆๅพๆณ็ฅ้ไฝ ็ฎๅ็็ฐๅขๆฏ:
ไนๆญก่ฟ็ดๆฅ่ฒผไฝ ็
sshd_config(ๆๆ่ณ่จ้ฎๆ)ๆ Fail2Ban jail ่จญๅฎ,ๆๅฏไปฅๅนซไฝ ไธ่ตทๆชขๆฅๆฏๅฆๆ้ขจ้ชๆด。