“์ต๊ทผ ์๋ฒ์ ํดํน ์๋๊ฐ ๊ธ์ฆํ์ต๋๋ค. ๋ณด์ ๊ฐํ๊ฐ ์๊ธํฉ๋๋ค.”
๋ณด์ํ์ฅ์ ์ด ๋ง๋ก ๋ง์ง๋ง ๋ฏธ์ ์ด ์์๋์ต๋๋ค. ์ฌ์ค ์ด ๋ฏธ์ ์ ๊น์ง๋ ๋ฐฉํ๋ฒฝ ์ค์ ์ ๋๊ฐ ๋ณด์์ ์ ๋ถ๋ผ๊ณ ์๊ฐํ์ต๋๋ค. ๊ทธ๋ฐ๋ฐ ์ง์ ํด๋ณด๊ณ ๋์, ๋ณด์์ ์ฌ๋ฌ ๊ฒน์ ๋ฐฉ์ด์ ์ ์๋ ๊ฒ์์ ๊นจ๋ฌ์์ต๋๋ค. ์ด๋ฒ ํฌ์คํ ์ ๊ทธ ๋ฐฉ์ด์ ๋ค์ ์ง์ ์์ ๊ธฐ๋ก์ ๋๋ค.
๐ 4๊ฐ์ง ๋ณด์ ๋ ์ด์ด
| ๋ ์ด์ด | ๊ธฐ์ | ์ญํ |
|---|---|---|
| 1๏ธโฃ | UFW (๋ฐฉํ๋ฒฝ) | ํ์ฉ๋ ํฌํธ๋ง ์ด๊ณ ๋๋จธ์ง ์ ๋ถ ์ฐจ๋จ |
| 2๏ธโฃ | Fail2Ban | ๋ฐ๋ณต ์คํจ IP ์๋ ํ์ง ๋ฐ ์ฐจ๋จ |
| 3๏ธโฃ | SSH ํ๋๋ | ํค ์ธ์ฆ + root ์ง์ ๋ก๊ทธ์ธ ์ฐจ๋จ |
| 4๏ธโฃ | auditd | ์ค์ ํ์ผ ๋ณ๊ฒฝ ์ฌํญ ์ค์๊ฐ ๊ฐ์ฌ ๊ธฐ๋ก |
์ด ๋ค ๊ฐ์ง๋ ๊ฐ์ ๋ค๋ฅธ ์ํ์ ๋ง์ต๋๋ค. UFW๋ ์ธ๋ถ์์ ๋ฌธ์ ๋ชป ์ด๊ฒ, Fail2Ban์ ๋ฌธ์ ๋๋๋ฆฌ๋ ์์ํ ์ฌ๋์ ์ก๊ณ , SSH ํ๋๋์ ๋ฌธ ์๋ฌผ์ ๋ฅผ ๊ต์ฒดํ๊ณ , auditd๋ ๋ด๋ถ์์ ๋๊ฐ ๋ญ ๊ฑด๋๋ ธ๋์ง CCTV๋ก ์ฐ์ด๋๋ ์ญํ ์ ๋๋ค.
Step 1: UFW ๋ฐฉํ๋ฒฝ โ ํ์ํ ๋ฌธ๋ง ์ด์ด๋๊ธฐ ๐ช
UFW(Uncomplicated Firewall)๋ ๋ฆฌ๋ ์ค ๋ฐฉํ๋ฒฝ ๋๊ตฌ์ ๋๋ค. ๊ธฐ๋ณธ ์ ์ฑ ์ “๋ชจ๋ ์ฐจ๋จ”์ผ๋ก ๋๊ณ , ํ์ํ ํฌํธ๋ง ํ๋์ฉ ํ์ฉํ๋ ๋ฐฉ์์ผ๋ก ์ด์ํฉ๋๋ค.
Rate Limiting ๊ธฐ๋ฅ๋ ์์ต๋๋ค. ufw limit ssh๋ SSH ํฌํธ์ ์งง์ ์๊ฐ ์์ ๋๋ฌด ๋ง์ ์ฐ๊ฒฐ ์๋๊ฐ ์ค๋ฉด ์๋์ผ๋ก ์ ํํฉ๋๋ค.
sudo ufw default deny incoming # ๊ธฐ๋ณธ: ๋ค์ด์ค๋ ๊ฑด ์ ๋ถ ์ฐจ๋จ
sudo ufw default allow outgoing # ๊ธฐ๋ณธ: ๋๊ฐ๋ ๊ฑด ํ์ฉ
sudo ufw allow ssh # SSH (22๋ฒ)
sudo ufw allow 80/tcp # HTTP
sudo ufw allow 443/tcp # HTTPS
sudo ufw limit ssh # SSH Rate Limiting ํ์ฑํ
sudo ufw enable
Step 2: Fail2Ban โ ๊ณต๊ฒฉ์๋ฅผ ์๋์ผ๋ก ์ก์ ๊ฐ๋๊ธฐ ๐ชค
Fail2Ban์ ๋ก๊ทธ ํ์ผ์ ์ค์๊ฐ์ผ๋ก ๊ฐ์ํฉ๋๋ค. ์งง์ ์๊ฐ ์์ ๋ก๊ทธ์ธ์ ์ฌ๋ฌ ๋ฒ ์คํจํ๋ IP๋ฅผ ๋ฐ๊ฒฌํ๋ฉด, ์๋์ผ๋ก ๋ฐฉํ๋ฒฝ ๊ท์น์ ์ถ๊ฐํด์ ๊ทธ IP๋ฅผ ์ฐจ๋จํฉ๋๋ค.
sudo apt update && sudo apt install fail2ban -y
์ค์ ์ jail.conf๋ฅผ ์ง์ ์์ ํ์ง ์๊ณ jail.local์ ์๋ก ๋ง๋ค์ด ๊ด๋ฆฌํฉ๋๋ค. ์๋ณธ ํ์ผ์ ๋ณด์กดํ๊ธฐ ์ํ ์ข์ ์ต๊ด์
๋๋ค.
ํต์ฌ ์ค์ ๋ด์ฉ:
[DEFAULT]
bantime = 1h # ์ฐจ๋จ ์๊ฐ: 1์๊ฐ
findtime = 10m # ๊ฐ์ ๊ธฐ๊ฐ: ์ต๊ทผ 10๋ถ
maxretry = 5 # ์ต๋ ํ์ฉ ์คํจ ํ์: 5ํ
# ํ์ดํธ๋ฆฌ์คํธ โ ๊ด๋ฆฌ์๋ ์ ๋ ์ฐจ๋จ๋๋ฉด ์ ๋ฉ๋๋ค!
ignoreip = 127.0.0.1/8 192.168.56.1 192.168.10.0/24
banaction = ufw # UFW ๋ฐฉํ๋ฒฝ์ผ๋ก ์ฐจ๋จ ์ํ
[sshd]
enabled = true port = ssh maxretry = 3 # SSH๋ ์ํ๋๊ฐ ๋์ผ๋ฏ๋ก 3ํ๋ง ํ์ฉ bantime = 24h # SSH ๊ณต๊ฒฉ์๋ 24์๊ฐ ์ฐจ๋จ
ํ์ดํธ๋ฆฌ์คํธ(ignoreip)๊ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค. ๊ด๋ฆฌ์๊ฐ ์ค์๋ก ๋น๋ฐ๋ฒํธ๋ฅผ ์ฌ๋ฌ ๋ฒ ํ๋ ธ์ ๋ ๋ณธ์ธ์ด ์ฐจ๋จ๋๋ ์ต์
์ ์ํฉ์ ๋ง์์ค๋๋ค.
๊ฒ์ฆ ๋ฐฉ๋ฒ:
# ์๋น์ค ์ํ ํ์ธ
sudo fail2ban-client status
# ๊ฒฐ๊ณผ: Jail list: sshd โ SSH ๊ฐ์ฅ ํ์ฑํ ํ์ธ
# ํ์ดํธ๋ฆฌ์คํธ ์ ์ฉ ํ์ธ
sudo fail2ban-client get sshd ignoreip
# ๊ฒฐ๊ณผ: 192.168.10.0/24 ํฌํจ ์ฌ๋ถ ํ์ธ
์ค์ ํญ๋ชฉ๋ณ ์๋ฏธ:
| ํญ๋ชฉ | ์ค์ ๊ฐ | ํจ๊ณผ |
|---|---|---|
ignoreip | 192.168.10.0/24 ๋ฑ | ๊ด๋ฆฌ์ ๋คํธ์ํฌ๋ ์ฐจ๋จ ๋ฉด์ |
banaction | ufw | UFW๋ฅผ ํตํด ์ฐจ๋จ ๊ท์น ์์ฑ |
bantime (SSH) | 24h | SSH ๊ณต๊ฒฉ์๋ ํ๋ฃจ ๋์ ์ ๊ทผ ๋ถ๊ฐ |
maxretry (SSH) | 3 | 3ํ ์คํจ ์ ์ฆ์ ์ฐจ๋จ |
Step 3: SSH ํ๋๋ โ ์๋ฌผ์ ๋ฅผ ๋น๋ฐ๋ฒํธ์์ ์ด์ ๋ก ๊ต์ฒดํ๊ธฐ ๐
๊ธฐ๋ณธ SSH๋ ๋น๋ฐ๋ฒํธ ๋ก๊ทธ์ธ์ ํ์ฉํฉ๋๋ค. ๋น๋ฐ๋ฒํธ๋ ์ถ์ธกํ ์ ์์ง๋ง, ํค ํ์ผ์ ์ถ์ธก ์์ฒด๊ฐ ๋ถ๊ฐ๋ฅํฉ๋๋ค.
SSH ํ๋๋์ ํต์ฌ ์ค์ ํญ๋ชฉ๋ค:
# /etc/ssh/sshd_config ์์ ์ฌํญ
PermitRootLogin no # root ์ง์ ๋ก๊ทธ์ธ ๊ธ์ง
PasswordAuthentication no # ๋น๋ฐ๋ฒํธ ๋ก๊ทธ์ธ ๊ธ์ง (ํค ์ธ์ฆ๋ง ํ์ฉ)
PubkeyAuthentication yes # ๊ณต๊ฐํค ์ธ์ฆ ํ์ฑํ
MaxAuthTries 3 # ์ธ์ฆ ์๋ ์ต๋ 3ํ
LoginGraceTime 30 # ๋ก๊ทธ์ธ ๋๊ธฐ ์๊ฐ 30์ด๋ก ์ ํ
PermitRootLogin no๋ ๊ณต๊ฒฉ์๊ฐ root ๊ณ์ ์ผ๋ก ์ง์ ์ ์ํ๋ ๊ฒ์ ์์ฒ ์ฐจ๋จํฉ๋๋ค. ์ค๋ น root ๋น๋ฐ๋ฒํธ๋ฅผ ์์๋ ์ ์์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค.
โ ๏ธ ์ฃผ์:
PasswordAuthentication no๋ก ์ค์ ํ๊ธฐ ์ ์ ๋ฐ๋์ SSH ํค๋ฅผ ๋จผ์ ๋ฑ๋กํด์ผ ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์์ ๋ ์๋ฒ์ ์ ์ํ ์ ์๊ฒ ๋ฉ๋๋ค.
Step 4: auditd โ ๋ด๋ถ CCTV ์ค์นํ๊ธฐ ๐น
์ธ๋ถ ๊ณต๊ฒฉ์ Fail2Ban๊ณผ UFW๊ฐ ๋ง์ง๋ง, ๋ด๋ถ์์ ๋๊ตฐ๊ฐ ์ค์ ํ์ผ์ ๊ฑด๋๋ฆฐ๋ค๋ฉด? ์ด๋ฅผ ์ถ์ ํ๋ ๊ฒ auditd(๊ฐ์ฌ ์์คํ ) ์ ๋๋ค. ์ปค๋ ๋ ๋ฒจ์์ ํ์ผ ์ ๊ทผ/๋ณ๊ฒฝ ํ์๋ฅผ ๊ธฐ๋กํฉ๋๋ค.
๊ฐ์ฌ ๊ท์น(security.rules) ํต์ฌ ๋ด์ฉ:
# 1. ๊ณ์ ์ ๋ณด ๋ณ๊ฒฝ ๊ฐ์ (passwd, shadow ๋ฑ)
-w /etc/passwd -p wa -k identity
-w /etc/shadow -p wa -k identity
# 2. ๊ด๋ฆฌ์ ๊ถํ(sudo) ์ค์ ๋ณ๊ฒฝ ๊ฐ์
-w /etc/sudoers -p wa -k sudoers
# 3. SSH ์๋ฒ ์ค์ ๋ณ๊ฒฝ ๊ฐ์
-w /etc/ssh/sshd_config -p wa -k sshd_config
# 4. ํ์ผ ์ญ์ /์ด๋ฆ ๋ณ๊ฒฝ ํ์ ๊ฐ์
-a always,exit -F arch=b64 -S unlink -S rename -k delete
-w ํ์ผ๊ฒฝ๋ก -p wa๋ ํด๋น ํ์ผ์ ์ฐ๊ฑฐ๋(w) ์์ฑ์ ๋ณ๊ฒฝ(a)ํ ๋ ๊ธฐ๋กํ๋ผ๋ ์๋ฏธ์
๋๋ค. -k ํ๊ทธ๋ช
์ ๋์ค์ ๊ฒ์ํ ๋ ์ธ ํ๊ทธ์
๋๋ค.
๊ฒ์ฆ ์๋๋ฆฌ์ค: ์ค์ ํ์ผ์ ๊ฑด๋๋ ค์ auditd๊ฐ ์ ๋๋ก ๊ธฐ๋กํ๋์ง ํ์ธํฉ๋๋ค.
# ์ผ๋ถ๋ฌ passwd ํ์ผ ๊ฑด๋๋ฆฌ๊ธฐ
touch /etc/passwd
# ๋ก๊ทธ ํ์ธ
sudo ausearch -k identity

๋ก๊ทธ์์ ํต์ฌ ์ ๋ณด:
auid: ์ค์ ์ํ ๊ณ์ (minsooโ sudo๋ก ์คํํด๋ ์๋ ๊ณ์ ์ถ์ ๊ฐ๋ฅ)exe: ์คํํ ๋ช ๋ น์ด (/usr/bin/touch)path: ๋์ ํ์ผ (/etc/passwd)
root ๊ถํ์ผ๋ก ์คํํด๋ ์๋ ๊ณ์ ์ ์ ํํ ์๋ณํ๋ค๋ ์ ์ด auditd์ ํต์ฌ ๊ฐ์น์ ๋๋ค.
๐ ์ต์ข ๊ฒ์ฆ ๊ฒฐ๊ณผ
| ๊ตฌ๋ถ | ํ ์คํธ ํญ๋ชฉ | ๊ฒฐ๊ณผ |
|---|---|---|
| Fail2Ban | ์๋น์ค ์ํ | โ Active (running) |
| Fail2Ban | SSH ๊ฐ์ฅ ํ์ฑํ | โ sshd ๊ฐ์ฅ ๋์ ์ค |
| Fail2Ban | ํ์ดํธ๋ฆฌ์คํธ ์ ์ฉ | โ 192.168.10.0/24 ๋ฑ๋ก ํ์ธ |
| auditd | ๊ฐ์ฌ ๊ท์น ๋ก๋ | โ
auditctl -l ๊ท์น ์ ์ฉ ํ์ธ |
| auditd | ๋ก๊ทธ ๊ธฐ๋ก ํ ์คํธ | โ
touch /etc/passwd ์ auid=minsoo ๊ธฐ๋ก๋จ |
๐ก ๋ฏธ์ ์ ๋ง์น๋ฉฐ: ๋ณด์์ ๊ฒน๊ฒน์ด ์๋ ๊ฒ
์ด๋ฒ ๋ฏธ์ ์ ๋ง์น๊ณ ๋์ ๋ณด์์ ๋ฐ๋ผ๋ณด๋ ์๊ฐ์ด ์์ ํ ๋ฐ๋์์ต๋๋ค.
UFW๋ก ๋ฌธ์ ์ ๊ทธ๊ณ , Fail2Ban์ผ๋ก ๋ฌธ์ ๋๋๋ฆฌ๋ ์์ํ ์ฌ๋์ ์ซ๊ณ , SSH ํ๋๋์ผ๋ก ์๋ฌผ์ ๋ฅผ ๋ ๊ฐํ ๊ฒ์ผ๋ก ๋ฐ๊พธ๊ณ , auditd๋ก ๋ด๋ถ๋ฅผ CCTV๋ก ๊ธฐ๋กํ๋ โ ์ด ๋ค ๊ฒน์ ๋ฐฉ์ด์ ์ด ๋ชจ๋ ๊ฐ์ถฐ์ ธ์ผ ๋น๋ก์ “๋ณด์์ ์ ๊ฒฝ ์ด ์๋ฒ”๋ผ๊ณ ํ ์ ์์ต๋๋ค.
๋ณด์์ ํน์ ๋๊ตฌ ํ๋๊ฐ ํด๊ฒฐํ๋ ๊ฒ ์๋๋๋ค. ์ฌ๋ฌ ๊ฒน์ ๋ฐฉ์ด์ ์ด ์๋ก ๋ณด์ํ๋ ๊ตฌ์กฐ๋ฅผ ๋ง๋๋ ๊ฒ์ ๋๋ค.
์ด ๋ค์ฏ ๋ฒ์ ๋ฅ๋ค์ด๋ธ๋ฅผ ํตํด ์น ์๋ฒ๋ถํฐ ๋ณด์๊น์ง, ์ค์ ์๋น์ค๋ฅผ ์ด์ํ๋ ๋ฐ ํ์ํ ๊ธฐ์ด ์ธํ๋ผ ์ ์ฒด๋ฅผ ์ง์ ์์ผ๋ก ๊ตฌ์ถํด๋ดค์ต๋๋ค. ์ด๋ก ์ผ๋ก๋ง ์๋ ๊ฐ๋ ๋ค์ด ์์ ์กํ๋ ๊ฒฝํ์ผ๋ก ๋ฐ๋ ๊ฒ, ๊ทธ๊ฒ ์ด๋ฒ ๋ฅ๋ค์ด๋ธ์ ๊ฐ์ฅ ํฐ ์ํ์ด์์ต๋๋ค. ๐