SSH ๋ณด์•ˆ ์„ค์ •

๋จผ์ € ย SSH ์„œ๋ฒ„๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ ๊ผญ ์•Œ์•„๋‘์–ด์•ผ ํ•  ์„ค์ • ํŒŒ์ผ์ธย /etc/ssh/sshd_configย ์˜ ์ฃผ์š” ๋ณด์•ˆ ๊ด€๋ จ ์„ค์ •์˜ ์˜๋ฏธ์™€ ๊ถŒ์žฅํ•˜๋Š” ์„ค์ •์„ ์•Œ์•„๋ด…์‹œ๋‹ค.


๋ฐฉํ™”๋ฒฝ ์ ์šฉ

SSH ์„œ๋ฒ„๋Š” ๋ณด์•ˆ์ƒ ๋งค์šฐ ์ค‘์š”ํ•˜๋ฏ€๋กœ SSH ๋กœ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ํด๋ผ์ด์–ธํŠธ์˜ IP ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ๋“ฑ๋กํ•˜๋„๋ก ์‹œ์Šคํ…œ์˜ ๋ฐฉํ™”๋ฒฝ์„ ์„ค์ •ํ•  ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ SSH ๋Š” ์ „ ์žฅ์—์„œ ์„ค๋ช…ํ•œ ๋ฒ ์Šค์ฒœ ํ˜ธ์ŠคํŠธ ๋ฅผ ๋‘๊ณ  ์ด ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด์„œ๋งŒ ์ ‘์†ํ•˜๋„๋ก ๋ฐฉํ™”๋ฒฝ์„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. (์ฐธ๊ณ :ย firewalld ๋ฐฉํ™”๋ฒฝ ์‚ฌ์šฉ)


22๋ฒˆ์ด ์•„๋‹Œ ํฌํŠธ ์‚ฌ์šฉ

SSH ์˜ ๊ธฐ๋ณธ ํฌํŠธ๋Š” 22๋ฒˆ์ด์ง€๋งŒ ์™ธ๋ถ€์—์„œ 22 ๋ฒˆ ํฌํŠธ์— ๋Œ€ํ•ด ์˜คํ”ˆ๋˜์—ˆ๋Š”์ง€ ์Šค์บ”ํ›„ ์— ์—ด๋ ค์žˆ๋‹ค๋ฉด ๋ฌด์ž‘์œ„ ๊ณต๊ฒฉ(Brute-force attack) ์„ ์‹œ๋„ํ•  ์ˆ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.ย 

๊ณต์šฉ์œผ๋กœ SSH ๋ฅผ ์˜คํ”ˆํ•ด์•ผ ํ•œ๋‹ค๋ฉด ๊ธฐ๋ณธ ํฌํŠธ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒŒ ์ข‹์Šต๋‹ˆ๋‹ค.

# Port 22
Port 22000
Port ์„ค์ •


์„ธ์…˜ ํƒ€์ž„์•„์›ƒ ์„ค์ •

์ •ํ•ด์ง„ ์‹œ๊ฐ„๋™์•ˆ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ๊ฐ•์ œ๋กœ ์„ธ์…˜์„ ์ข…๋ฃŒํ•˜๋„๋ก ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ข…๋ฃŒ ์‹œ๊ฐ„์€ (ClientAliveInterval * ClientAliveCountMax) ์ด๋ฉฐ ๋‹จ์œ„๋Š” ์ดˆ์ž…๋‹ˆ๋‹ค.

์•„๋ž˜ ์„ค์ •์€ 30๋ถ„๋™์•ˆ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ssh ์„ธ์…˜์„ ์ž๋™์œผ๋กœ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

ClientAliveInterval 600
ClientAliveCountMax 3


root login ์ฐจ๋‹จ

root ์‚ฌ์šฉ์ž ๋กœ๊ทธ์ธ์„ ํ—ˆ์šฉํ•˜์ง€ ์—ฌ๋ถ€๋ฅผ ์„ค์ •ํ•˜๋ฉฐ SSH ๊ฐ€ ๊ณต์šฉ์œผ๋กœ ์—ด๋ ธ๊ณ  root ๋กœ๊ทธ์ธ๊นŒ์ง€ ํ—ˆ์šฉํ•œ๋‹ค๋ฉด ์‹œ์Šคํ…œ์˜ ๋ชจ๋“  ๊ถŒํ•œ์„ ํƒˆ์ทจ๋‹นํ•  ์ˆ˜ ์žˆ์œผ๋‹ˆ root ๋กœ ๋ฐ”๋กœ ๋กœ๊ทธ์ธ์€ ํ—ˆ์šฉํ•˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

PermitRootLogin no


์šฐ๋ถ„ํˆฌ๋‚˜ Amazon Linux ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์„ค์ •๋˜์–ด ์žˆ๋Š”๋ฐ ์ด๋Š” rsyncย ๋กœ ์›๊ฒฉ์ง€์—์„œ ๋ฐฑ์—…๋“ฑ root ๋กœ ํŠน์ • ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ์ด๋ฉฐ root ๋กœ๊ทธ์ธ์„ ํ—ˆ์šฉํ•  ๊ฒฝ์šฐ ๋ฐ˜๋“œ์‹œ ์•”ํ˜ธ๊ฐ€ ์•„๋‹Œ ๊ณต๊ฐœํ‚ค ๋ฐฉ์‹์œผ๋กœ ํ—ˆ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

PermitRootLogin forced-commands-only



UsePrivilegeSeparation sandbox ย 

CentOS 7 ์˜ sshd ์—์„œ๋Š” sandbox๊ฐ€ ๊ธฐ๋ณธ ์„ค์ •์ด๋ฉฐ ๊ธฐ์กด ๋ฒ„์ „์ธ 6์€ yes ๋กœ ์„ค์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

yes ์ผ ๊ฒฝ์šฐ ssh ์ธ์ฆ์„ ํ†ต๊ณผํ•œ ํ›„์— sshd ๊ฐ€ ํ•ด๋‹น ์„ธ์…˜์šฉ ssh ํ”„๋กœ์„ธ์Šค๋ฅผ ๋กœ๊ทธ์ธํ•œ ์‚ฌ์šฉ์ž์˜ ๊ถŒํ•œ์œผ๋กœ ์‹คํ–‰ํ•˜๋ฉฐ sandbox ์ผ ๊ฒฝ์šฐ ์‚ฌ์ „์— ์ธ์ฆ๋˜์ง€ ์•Š์€ ๊ถŒํ•œ์—†๋Š” ํ”„๋กœ์„ธ์Šค๋Š” ์ถ”๊ฐ€์ ์œผ๋กœ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๊ธฐ๋Šฅ์ด ์ œํ•œ๋ฉ๋‹ˆ๋‹ค.

no ๊ฒฝ์šฐ ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž๋กœ ๋กœ๊ทธ์ธํ•ด๋„ root ๋กœ sshd ๊ฐ€ ์‹คํ–‰๋˜๋ฏ€๋กœ ์ ˆ๋Œ€ ์„ค์ •ํ•˜๋ฉด ์•ˆ๋ฉ๋‹ˆ๋‹ค.

UsePrivilegeSeparation yes


PermitEmptyPasswords

๊ธฐ๋ณธ ์„ค์ •์€ no ์ด๋ฉฐ ์•”ํ˜ธ๊ฐ€ ์—†๋Š” ๊ณ„์ •์— ๋Œ€ํ•ด์„œ๋Š” ๋กœ๊ทธ์ธ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

PermitEmptyPasswords no



์•”ํ˜ธ ๋Œ€์‹  ๊ณต๊ฐœํ‚ค๋กœ ์ธ์ฆ

๊ณต๊ฐœํ‚ค ์ธ์ฆ(PubkeyAuthentication)์„ ์ผœ๊ณ  ์•”ํ˜ธ ๊ธฐ๋ฐ˜ ์ธ์ฆ(PasswordAuthentication)์„ ๋„๋ฉด ๊ณต๊ฐœํ‚ค ๋ฐฉ์‹์œผ๋กœ๋งŒ ์ธ์ฆํ•˜๋ฏ€๋กœ ํ›จ์”ฌ ๋ณด์•ˆ์ด ๊ฐ•ํ™”๋ฉ๋‹ˆ๋‹ค.

PubkeyAuthentication yes
PasswordAuthentication no

๊ณต๊ฐœํ‚ค ์ธ์ฆ๋งŒ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์‚ฌ์ „์— client ์˜ ๊ณต๊ฐœํ‚ค๋ฅผ ๋“ฑ๋กํ•ด ๋‘์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


์—ฐ๊ฒฐํ•˜๋ ค๋Š” ๊ณ„์ •์—์„œ ๊ณต๊ฐœํ‚ค๊ฐ€ ์—†์„ ๊ฒฝ์šฐย ssh-keygen ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ณต๊ฐœํ‚ค(~/.ssh/id_rsa.pub)์™€ ๊ฐœ์ธํ‚ค(~/.ssh/id_rsa) ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ƒ์„ฑํ•œ ๊ฐœ์ธํ‚ค๋Š” ์ž˜ ๋ณด๊ด€ํ•ด์•ผ ํ•˜๋ฉฐ ๊ณต๊ฐœํ‚ค๋ฅผ ์—ฐ๊ฒฐํ•˜๋ ค๋Š” SSH ์„œ๋ฒ„์— ๋ณต์‚ฌํ•ด ์ฃผ๋ฉด ๊ณต๊ฐœํ‚ค ๊ธฐ๋ฐ˜์œผ๋กœ ๋กœ๊ทธ์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ์›๊ฒฉ์ง€ SSH ย ์„œ๋ฒ„๊ฐ€ 192.168.10.1 ์ผ ๊ฒฝ์šฐ lesstif ๊ณ„์ •์œผ๋กœ ๊ณต๊ฐœํ‚ค๋ฅผ ๋ณต์‚ฌํ•˜๋Š” ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค.

$ ssh-copy-id -i ~/.ssh/id_rsa.pub lesstif@192.168.10.1
ssh ๊ณต๊ฐœํ‚ค ์›๊ฒฉ์ง€ ๋ณต์‚ฌ



MaxAuthTries

์˜ต์…˜์— ์ง€์ •ํ•œ ์ˆซ์ž ์ด์ƒ์œผ๋กœ ๋กœ๊ทธ์ธ ์‹œ๋„์— ์‹คํŒจํ•˜๋ฉด ์ ‘์†์ด ๊ฐ•์ œ๋กœ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์„ค์ •์€ 6์ด๋ฉฐ SSH ๋ฅผ any ๋กœ ์˜คํ”ˆํ•  ๊ฒฝ์šฐ ๋‹ค์Œ ์ ˆ์—์„œ ์„ค๋ช…ํ•˜๋Š” fail2ban ์„ ์ ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

MaxAuthTries 5


LoginGraceTime

์—ฌ๊ธฐ์— ์ง€์ •๋œ ์‹œ๊ฐ„ ๋‚ด์— ๋กœ๊ทธ์ธํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ์ ‘์†์ด ๊ฐ•์ œ๋กœ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์€ 2๋ถ„์ด์ง€๋งŒ ์ด๋ณด๋‹ค ๋” ์งง๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์œผ๋ฉฐ 0 ์œผ๋กœ ์„ค์ •ํ•˜๋ฉด ์‹œ๊ฐ„ ์ œํ•œ ์˜ต์…˜์ด ๋น„ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค.

LoginGraceTime 30


AllowUsers / DenyUsers

SSH ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“  ์‚ฌ์šฉ์ž๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ํŠน์ • ์‚ฌ์šฉ์ž๋งŒ ํ—ˆ์šฉํ•˜๊ฒ ๋‹ค๋ฉด AllowUsers ์— ํ—ˆ์šฉํ•  ์‚ฌ์šฉ์ž๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿด ๊ฒฝ์šฐ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋Š” SSH ๋กœ๊ทธ์ธ์„ ํ•  ์ˆ˜ ์—†๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ lesstif ์‚ฌ์šฉ์ž์™€ centos7 ์‚ฌ์šฉ์ž๋งŒ SSH ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜๋Š” ์˜ˆ์ œ์ด๋ฉฐ ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž๋ฅผ ์ง€์ •ํ•  ๊ฒฝ์šฐ์—๋Š” ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

AllowUsers lesstif centos7
ํŠน์ • ์‚ฌ์šฉ์ž๋งŒ SSH ํ—ˆ์šฉ


์‚ฌ์šฉ์ž์™€ ํ˜ธ์ŠคํŠธ๋ฅผ ๋ฌถ์–ด์„œ ํŠน์ • ์‚ฌ์šฉ์ž๋Š” ํŠน์ • ํ˜ธ์ŠคํŠธ์—์„œ๋งŒ ์ ‘์†ํ•˜๋„๋ก ย ์„ค์ •ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ IP ์ฃผ์†Œ๊ฐ€ 192.168.10.3 ์ธ ํ˜ธ์ŠคํŠธ์˜ lesstif ์‚ฌ์šฉ์ž๋งŒ SSH ๋กœ ์ ‘์†ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •ํ•˜๋Š” ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค.

AllowUsers lesstif@192.168.10.3
ํŠน์ • ์‚ฌ์šฉ์ž์™€ ํ˜ธ์ŠคํŠธ๋งŒ SSH ํ—ˆ์šฉ

๋˜๋Š” ์‚ฌ์šฉ์ž์˜ ID ์— ์™€์ผ๋“œ ์นด๋“œ(*)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ˜ธ์ŠคํŠธ๋งŒ์„ ์ง€์ •ํ• ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ์˜ˆ๋Š” 192.168.10.3 ์ธ ํ˜ธ์ŠคํŠธ์˜ ๋ชจ๋“  ์‚ฌ์šฉ์ž์—๊ฒŒ SSH ์‚ฌ์šฉ์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

AllowUsers *@192.168.10.3
ํŠน์ • ์‚ฌ์šฉ์ž๋งŒ SSH ํ—ˆ์šฉ

์ด์™€๋Š” ๋‹ฌ๋ฆฌ DenyUsers ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ง€์ •ํ•œ ์‚ฌ์šฉ์ž ์™ธ์˜ ๋ชจ๋“  ์‚ฌ์šฉ์ž์˜ SSH ์‚ฌ์šฉ์„ ํ—ˆ๊ฐ€ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ํ˜ผ๋™์˜ ์šฐ๋ ค๊ฐ€ ์žˆ์œผ๋‹ˆ AllowUsers ์™€ DenyUsersย  ๋ฅผ ํ˜ผ์šฉํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค๋Š” ํ•˜๋‚˜์˜ ํ‚ค์›Œ๋“œ๋งŒ ์‚ฌ์šฉํ•ด์„œ ์ ‘๊ทผ ๊ถŒํ•œ์„ ์„ค์ •ํ•˜๋Š” ๊ฒŒ ์ข‹์œผ๋ฉฐ whitelist ๋ฐฉ์‹์ธย AllowUsersย  ๊ฐ€ ๋” ๊ด€๋ฆฌ๊ฐ€ ์šฉ์ดํ•ฉ๋‹ˆ๋‹ค.


๋ฐ๋ชฌ ์žฌ๊ตฌ๋™

๋ณ€๊ฒฝํ•œ ์„ค์ •์„ ๋ฐ˜์˜ํ•˜๋ ค๋ฉด ssh ๋ฐ๋ชฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ์žฌ๊ตฌ๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

$ sudo systemctl restart sshd
sshd ์žฌ์‹œ์ž‘

์šฐ๋ถ„ํˆฌ๋Š” ssh ์„œ๋น„์Šค ์ด๋ฆ„์ด ssh ์ด๋ฏ€๋กœ sudo systemctl restart ssh ๋กœ ๊ตฌ๋™ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.