SSH ๋ณด์ ์ค์
๋จผ์ ย SSH ์๋ฒ๋ฅผ ์์ ํ๊ฒ ๊ตฌ์ฑํ๊ธฐ ์ํด์ ๊ผญ ์์๋์ด์ผ ํ ์ค์ ํ์ผ์ธย /etc/ssh/sshd_configย ์ ์ฃผ์ ๋ณด์ ๊ด๋ จ ์ค์ ์ ์๋ฏธ์ ๊ถ์ฅํ๋ ์ค์ ์ ์์๋ด ์๋ค.
๋ฐฉํ๋ฒฝ ์ ์ฉ
SSH ์๋ฒ๋ ๋ณด์์ ๋งค์ฐ ์ค์ํ๋ฏ๋ก SSH ๋ก ์ฐ๊ฒฐํ ์ ์๋ ํด๋ผ์ด์ธํธ์ IP ๋ฅผ ๋ช ์์ ์ผ๋ก ๋ฑ๋กํ๋๋ก ์์คํ ์ ๋ฐฉํ๋ฒฝ์ ์ค์ ํ ํ์๊ฐ ์์ต๋๋ค. ํนํ SSH ๋ ์ ์ฅ์์ ์ค๋ช ํ ๋ฒ ์ค์ฒ ํธ์คํธ ๋ฅผ ๋๊ณ ์ด ์๋ฒ๋ฅผ ํตํด์๋ง ์ ์ํ๋๋ก ๋ฐฉํ๋ฒฝ์ ์ค์ ํ๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค. (์ฐธ๊ณ :ย firewalld ๋ฐฉํ๋ฒฝ ์ฌ์ฉ)
22๋ฒ์ด ์๋ ํฌํธ ์ฌ์ฉ
SSH ์ ๊ธฐ๋ณธ ํฌํธ๋ 22๋ฒ์ด์ง๋ง ์ธ๋ถ์์ 22 ๋ฒ ํฌํธ์ ๋ํด ์คํ๋์๋์ง ์ค์บํ ์ ์ด๋ ค์๋ค๋ฉด ๋ฌด์์ ๊ณต๊ฒฉ(Brute-force attack) ์ ์๋ํ ์๊ฐ ์์ต๋๋ค.ย
๊ณต์ฉ์ผ๋ก SSH ๋ฅผ ์คํํด์ผ ํ๋ค๋ฉด ๊ธฐ๋ณธ ํฌํธ๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ ์ข์ต๋๋ค.
# Port 22 Port 22000
์ธ์ ํ์์์ ์ค์
์ ํด์ง ์๊ฐ๋์ ์ฌ์ฉํ์ง ์์ผ๋ฉด ๊ฐ์ ๋ก ์ธ์ ์ ์ข ๋ฃํ๋๋ก ์ค์ ํฉ๋๋ค. ์ข ๋ฃ ์๊ฐ์ (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
MaxAuthTries
์ต์ ์ ์ง์ ํ ์ซ์ ์ด์์ผ๋ก ๋ก๊ทธ์ธ ์๋์ ์คํจํ๋ฉด ์ ์์ด ๊ฐ์ ๋ก ์ข ๋ฃ๋ฉ๋๋ค. ๊ธฐ๋ณธ ์ค์ ์ 6์ด๋ฉฐ SSH ๋ฅผ any ๋ก ์คํํ ๊ฒฝ์ฐ ๋ค์ ์ ์์ ์ค๋ช ํ๋ fail2ban ์ ์ ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
MaxAuthTries 5
LoginGraceTime
์ฌ๊ธฐ์ ์ง์ ๋ ์๊ฐ ๋ด์ ๋ก๊ทธ์ธํ์ง ์์ ๊ฒฝ์ฐ ์ ์์ด ๊ฐ์ ๋ก ์ข ๋ฃ๋ฉ๋๋ค. ๊ธฐ๋ณธ์ 2๋ถ์ด์ง๋ง ์ด๋ณด๋ค ๋ ์งง๊ฒ ํ๋ ๊ฒ์ด ์ข์ผ๋ฉฐ 0 ์ผ๋ก ์ค์ ํ๋ฉด ์๊ฐ ์ ํ ์ต์ ์ด ๋นํ์ฑํ๋ฉ๋๋ค.
LoginGraceTime 30
AllowUsers / DenyUsers
SSH ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ ์ฌ์ฉ์๊ฐ ์ฌ์ฉํ ์ ์์ง๋ง ํน์ ์ฌ์ฉ์๋ง ํ์ฉํ๊ฒ ๋ค๋ฉด AllowUsers ์ ํ์ฉํ ์ฌ์ฉ์๋ฅผ ์ง์ ํฉ๋๋ค. ์ด๋ด ๊ฒฝ์ฐ ๋ค๋ฅธ ์ฌ์ฉ์๋ SSH ๋ก๊ทธ์ธ์ ํ ์ ์๊ฒ ๋ฉ๋๋ค.
๋ค์์ lesstif ์ฌ์ฉ์์ centos7 ์ฌ์ฉ์๋ง SSH ๋ฅผ ์ฌ์ฉํ๋๋ก ํ๋ ์์ ์ด๋ฉฐ ์ฌ๋ฌ ์ฌ์ฉ์๋ฅผ ์ง์ ํ ๊ฒฝ์ฐ์๋ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํ๋ฉด ๋ฉ๋๋ค.
AllowUsers lesstif centos7
์ฌ์ฉ์์ ํธ์คํธ๋ฅผ ๋ฌถ์ด์ ํน์ ์ฌ์ฉ์๋ ํน์ ํธ์คํธ์์๋ง ์ ์ํ๋๋ก ย ์ค์ ํ ์๋ ์์ต๋๋ค. ๋ค์์ IP ์ฃผ์๊ฐ 192.168.10.3 ์ธ ํธ์คํธ์ lesstif ์ฌ์ฉ์๋ง SSH ๋ก ์ ์ํ ์ ์๋๋ก ์ค์ ํ๋ ์์ ์ ๋๋ค.
AllowUsers lesstif@192.168.10.3
๋๋ ์ฌ์ฉ์์ ID ์ ์์ผ๋ ์นด๋(*)๋ฅผ ์ฌ์ฉํ์ฌ ํธ์คํธ๋ง์ ์ง์ ํ ์ ์์ต๋๋ค. ๋ค์ ์๋ 192.168.10.3 ์ธ ํธ์คํธ์ ๋ชจ๋ ์ฌ์ฉ์์๊ฒ SSH ์ฌ์ฉ์ ํ์ฉํฉ๋๋ค.
AllowUsers *@192.168.10.3
์ด์๋ ๋ฌ๋ฆฌ DenyUsers ๋ฅผ ์ฌ์ฉํ๋ฉด ์ง์ ํ ์ฌ์ฉ์ ์ธ์ ๋ชจ๋ ์ฌ์ฉ์์ SSH ์ฌ์ฉ์ ํ๊ฐํ๊ฒ ๋ฉ๋๋ค. ํผ๋์ ์ฐ๋ ค๊ฐ ์์ผ๋ AllowUsers ์ DenyUsersย ๋ฅผ ํผ์ฉํด์ ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค๋ ํ๋์ ํค์๋๋ง ์ฌ์ฉํด์ ์ ๊ทผ ๊ถํ์ ์ค์ ํ๋ ๊ฒ ์ข์ผ๋ฉฐ whitelist ๋ฐฉ์์ธย AllowUsersย ๊ฐ ๋ ๊ด๋ฆฌ๊ฐ ์ฉ์ดํฉ๋๋ค.
๋ฐ๋ชฌ ์ฌ๊ตฌ๋
๋ณ๊ฒฝํ ์ค์ ์ ๋ฐ์ํ๋ ค๋ฉด ssh ๋ฐ๋ชฌ ํ๋ก์ธ์ค๋ฅผ ์ฌ๊ตฌ๋ํด์ผ ํฉ๋๋ค.
$ sudo systemctl restart sshd
์ฐ๋ถํฌ๋ ssh ์๋น์ค ์ด๋ฆ์ด ssh ์ด๋ฏ๋ก sudo systemctl restart ssh ๋ก ๊ตฌ๋ํ๋ฉด ๋ฉ๋๋ค.