- ๋ฆฌ๋ ์ค ์์คํ ์์ ํจ์จ์ ์ธ ํ์ผ ๊ฒ์ ๋ฐ ๋ก๊ทธ ๋ถ์ ๊ธฐ๋ฒ ํ์ต
grep,find,cron,uptime๋ฑ์ ํ์ฉํ ์๋ํ๋ ์์คํ ๋ชจ๋ํฐ๋ง ์ค์ต- IT ์ธํ๋ผ ๊ด์ ์์ ๋ก๊ทธ ๊ธฐ๋ก ๋ฐ ์ถํ ํ์ฉ ๊ฐ๋ฅํ ๋ฐ์ดํฐ ๊ด๋ฆฌ
- ์คํฌ๋ฆฝํธ ๊ธฐ๋ฐ์ผ๋ก ๋ฐ๋ณต์ ์ธ ์์ ์ ์๋ํํ์ฌ ์ด์ ํจ์จ์ฑ ํฅ์
- ์ค์ ๊ฒฝํ์ ์๊ธฐ ์ํ ์์ ์์ฝ(Crontab) ๋ฐ ๋ก๊ทธ ์ ์ฅ ์ฐ์ต
๋ณธ ํ๋ก์ ํธ๋ MobaXterm์ ํตํด ํ๋์ ์๋ฒ์ ๋ค์์ ์ฌ์ฉ์๊ฐ ์ธ์
์ผ๋ก ์ ์ํ๋ ํ๊ฒฝ์์,
SSH ๋ก๊ทธ์ธ ์คํจ ๊ธฐ๋ก์ ๊ธฐ๋ฐ์ผ๋ก ๋ธ๋๋ฆฌ์คํธ๋ฅผ ์๋ ๊ด๋ฆฌํ๋ ์์คํ
์ ๊ตฌ์ถํ๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค.
๋ก๊ทธ์ธ ์๋ ๋ฐ์ดํฐ๋ฅผ ์์งํ๊ณ , ์ผ์ ํ์ ์ด์ ๋ก๊ทธ์ธ ์คํจํ ์ฌ์ฉ์๋ฅผ ๋ธ๋๋ฆฌ์คํธ์ ๋ฑ๋กํ์ฌ ๋ณด์์ฑ์ ํฅ์์ํค๋ ์๋ํ๋ ์นจ์ ํ์ง ์์คํ (IDS)์ ๊ตฌํํฉ๋๋ค.
- SSH ๋ก๊ทธ์ธ ์คํจ ๋ก๊ทธ ์๋ ์์ง (
/var/log/auth.log๋ถ์) - ๋ธ๋๋ฆฌ์คํธ ์์คํ ๊ตฌ์ถ (3ํ ์ด์ ๋ก๊ทธ์ธ ์คํจ ์ ์๋ ๋ฑ๋ก)
- Crontab์ ์ด์ฉํ ์ฃผ๊ธฐ์ ๋ชจ๋ํฐ๋ง ๋ฐ ๋ธ๋๋ฆฌ์คํธ ๊ฐฑ์
- ๋ณด์ ๊ฐํ ๋ฐ ์นจ์ ํ์ง๋ฅผ ์ํ ๋ก๊ทธ ๊ด๋ฆฌ
/var/log/auth.log์์ SSH ๋ก๊ทธ์ธ ์คํจ ๋ก๊ทธ๋ฅผ ์ถ์ถํ์ฌfail.log์ ์ ์ฅ- 5๋ถ๋ง๋ค ์๋ ์คํ๋๋๋ก
crontab๋ฑ๋ก
sudo nano /usr/local/bin/ssh_fail_log.sh
#!/bin/bash
# ๋ก๊ทธ ํ์ผ ์ค์
LOG_FILE="/var/log/auth.log"
# ๋ก๊ทธ ์ ์ฅ ๊ฒฝ๋ก ์ค์
BASE_DIR="/var/log/ssh_fail_logs"
TODAY=$(date "+%Y-%m-%d")
LOG_DIR="$BASE_DIR/$TODAY"
# ์ ์ฅํ ํ์ผ
FAIL_LOG="$LOG_DIR/fail.log"
# ๋๋ ํ ๋ฆฌ ์์ฑ (๋ ์ง๋ณ ๊ด๋ฆฌ)
mkdir -p "$LOG_DIR"
# SSH ๋ก๊ทธ์ธ ์คํจ ๋ก๊ทธ ์ ์ฅ
sudo cat "$LOG_FILE" | grep "sshd.*" | grep "Failed" > "$FAIL_LOG"
exit 0
sudo chmod +x /usr/local/bin/ssh_fail_log.sh
- ํ๋ฃจ ๋์
fail.log๋ฅผ ๋ถ์ํ์ฌ 3๋ฒ ์ด์ ๋ก๊ทธ์ธ ์คํจํ IP๋ฅผ ์ถ์ถ - ๋ธ๋๋ฆฌ์คํธ(
blacklist.txt)์ ์ ์ฅ ํ iptables์ ์ฌ์ฉํด ์๋ ์ฐจ๋จ (์ถํ ๊ฐ์ )
sudo nano /usr/local/bin/ssh_blacklist_update.sh
#!/bin/bash
# ๋ก๊ทธ ํ์ผ ์ค์
BASE_DIR="/var/log/ssh_fail_logs"
TODAY=$(date "+%Y-%m-%d")
LOG_DIR="$BASE_DIR/$TODAY"
# ์ ์ฅํ ํ์ผ
FAIL_LOG="$LOG_DIR/fail.log"
#๋ ์ง ๊ตฌ๋ถ์์ด ํ๋์ ํ์ผ๋ก ๊ด๋ฆฌ
BLACKLIST_FILE="$BASE_DIR/blacklist.txt"
# 3ํ ์ด์ ๋ก๊ทธ์ธ ์คํจํ IP ์ถ์ถ
awk '{print $11}' "$FAIL_LOG" | sort | uniq -c | awk '$1 >= 3 {print $2}' > "$BLACKLIST_FILE"
exit 0
sudo chmod +x /usr/local/bin/ssh_blacklist_update.sh
- Crontab ํธ์ง ๋ชจ๋ ์คํ
crontab -e
- 5๋ถ๋ง๋ค SSH ๋ก๊ทธ์ธ ์คํจ ๋ก๊ทธ ์ ์ฅ (ssh_fail_log.sh)
*/5 * * * * /bin/bash /usr/local/bin/ssh_fail_log.sh
- ํ๋ฃจ์ ํ ๋ฒ ๋ธ๋๋ฆฌ์คํธ ๊ฐฑ์ (ssh_blacklist_update.sh)
0 0 * * * /bin/bash /usr/local/bin/ssh_blacklist_update.sh
๋ฌธ์ ํ์ : ๋ก๊ทธ์ธ ์คํจ๊ธฐ๋ก์ ์ ์ฅํ auth.log ํ์ผ์์ adm ์ฌ์ฉ์๋ read ๊ถํ์ ๊ฐ์ง๊ณ ์์
๋ฌธ์ : ํฌ๋ก ์ ์คํํ๋ ubuntu ์ฌ์ฉ์์ ์คํฌ๋ฆฝํธ ์์ sudo๊ฐ ์ฌ์ฉ๋ ๊ถํ ์ฐจ์ด๋ก ์คํ๋์ง ์์
- ํฌ๋ก ubuntu ์ฌ์ฉ์ ๊ถํ์ผ๋ก ์ค์ ํ์์ง๋ง ์คํฌ๋ฆฝํธ ํ์ผ์ ๋ช ๋ น์ sudo๋ก ์ฌ์ฉํ์ฌ ๊ถํ ์ฐจ์ด๋ก ํฌ๋ก ์ด ์ ์์ ์ผ๋ก ์คํ๋์ง ์์
- ubuntu๊ฐ shํ์ผ์ ์คํ๊ถํ์ด ์์ด์ ์คํํ์ง ๋ชปํ ๊ฒ์ ํ์ธ
- ํฌ๋ก ์ ๋ฃจํธ ๊ถํ์ผ๋ก ์ค์ ํ์ฌ ์คํํ์ฌ ํ์ผ์ ๊ถํ ๋ถ์ฌ์์ด ์คํ ๊ฐ๋ฅํ๊ฒ ํ์
sudo crontab -e
crontab -e
# SSH ๋ก๊ทธ์ธ ์คํจ ๋ก๊ทธ ์ ์ฅ
sudo cat "$LOG_FILE" | grep "sshd.*" | grep "Failed" > "$FAIL_LOG"
# SSH ๋ก๊ทธ์ธ ์คํจ ๋ก๊ทธ ์ ์ฅ
cat "$LOG_FILE" | grep "sshd.*" | grep "Failed" > "$FAIL_LOG"
๋ฌธ์ ์ : ํน์ ์์์ ์๋ ip๋ฅผ ์ ์ฅํ์ฌ ์์๊ฐ ๋ค๋ฅผ ๊ฒฝ์ฐ ๋ค๋ฅธ ์ซ์๋ฅผ ์ ์ฅํจ
# 3ํ ์ด์ ๋ก๊ทธ์ธ ์คํจํ IP ์ถ์ถ
awk '{print $11}' "$FAIL_LOG" | sort | uniq -c | awk '$1 >= 3 {print $2}' > "$BLACKLIST_FILE"
exit 0
# SSH ๋ก๊ทธ์ธ ์คํจ ๋ก๊ทธ์์ IP ์ฃผ์ ์ถ์ถํ์ฌ ์ ์ฅ
grep "Failed password" "$LOG_FILE" | grep -Eo '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' > "$FAIL_LOG"






