Skip to content

CaDaDaHe/Linux-IDS

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

9 Commits
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿ›ก๏ธ Linux-IDS

๐ŸŽฏ ํ”„๋กœ์ ํŠธ ๋ชฉํ‘œ

  • ๋ฆฌ๋ˆ…์Šค ์‹œ์Šคํ…œ์—์„œ ํšจ์œจ์ ์ธ ํŒŒ์ผ ๊ฒ€์ƒ‰ ๋ฐ ๋กœ๊ทธ ๋ถ„์„ ๊ธฐ๋ฒ• ํ•™์Šต
  • grep, find, cron, uptime ๋“ฑ์„ ํ™œ์šฉํ•œ ์ž๋™ํ™”๋œ ์‹œ์Šคํ…œ ๋ชจ๋‹ˆํ„ฐ๋ง ์‹ค์Šต
  • IT ์ธํ”„๋ผ ๊ด€์ ์—์„œ ๋กœ๊ทธ ๊ธฐ๋ก ๋ฐ ์ถ”ํ›„ ํ™œ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ
  • ์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐ˜๋ณต์ ์ธ ์ž‘์—…์„ ์ž๋™ํ™”ํ•˜์—ฌ ์šด์˜ ํšจ์œจ์„ฑ ํ–ฅ์ƒ
  • ์‹ค์ „ ๊ฒฝํ—˜์„ ์Œ“๊ธฐ ์œ„ํ•œ ์ž‘์—… ์˜ˆ์•ฝ(Crontab) ๋ฐ ๋กœ๊ทธ ์ €์žฅ ์—ฐ์Šต

โš™๏ธ ํ”„๋กœ์ ํŠธ ๊ฐœ์š”

๋ณธ ํ”„๋กœ์ ํŠธ๋Š” MobaXterm์„ ํ†ตํ•ด ํ•˜๋‚˜์˜ ์„œ๋ฒ„์— ๋‹ค์ˆ˜์˜ ์‚ฌ์šฉ์ž๊ฐ€ ์„ธ์…˜์œผ๋กœ ์ ‘์†ํ•˜๋Š” ํ™˜๊ฒฝ์—์„œ,
SSH ๋กœ๊ทธ์ธ ์‹คํŒจ ๊ธฐ๋ก์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ๋ฅผ ์ž๋™ ๊ด€๋ฆฌํ•˜๋Š” ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

๋กœ๊ทธ์ธ ์‹œ๋„ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ , ์ผ์ • ํšŸ์ˆ˜ ์ด์ƒ ๋กœ๊ทธ์ธ ์‹คํŒจํ•œ ์‚ฌ์šฉ์ž๋ฅผ ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ์— ๋“ฑ๋กํ•˜์—ฌ ๋ณด์•ˆ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ์ž๋™ํ™”๋œ ์นจ์ž… ํƒ์ง€ ์‹œ์Šคํ…œ(IDS)์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ” ์ฃผ์š” ๊ธฐ๋Šฅ

  • SSH ๋กœ๊ทธ์ธ ์‹คํŒจ ๋กœ๊ทธ ์ž๋™ ์ˆ˜์ง‘ (/var/log/auth.log ๋ถ„์„)
  • ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ ์‹œ์Šคํ…œ ๊ตฌ์ถ• (3ํšŒ ์ด์ƒ ๋กœ๊ทธ์ธ ์‹คํŒจ ์‹œ ์ž๋™ ๋“ฑ๋ก)
  • Crontab์„ ์ด์šฉํ•œ ์ฃผ๊ธฐ์  ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ ๊ฐฑ์‹ 
  • ๋ณด์•ˆ ๊ฐ•ํ™” ๋ฐ ์นจ์ž… ํƒ์ง€๋ฅผ ์œ„ํ•œ ๋กœ๊ทธ ๊ด€๋ฆฌ

๐Ÿ“ ์‹คํ–‰ ๊ณผ์ •

1๏ธโƒฃ 5๋ถ„๋งˆ๋‹ค SSH ๋กœ๊ทธ์ธ ์‹คํŒจ ๋กœ๊ทธ ์ €์žฅ

  • /var/log/auth.log์—์„œ SSH ๋กœ๊ทธ์ธ ์‹คํŒจ ๋กœ๊ทธ๋ฅผ ์ถ”์ถœํ•˜์—ฌ fail.log์— ์ €์žฅ
  • 5๋ถ„๋งˆ๋‹ค ์ž๋™ ์‹คํ–‰๋˜๋„๋ก crontab ๋“ฑ๋ก

image

image


๐Ÿ“Œ ์Šคํฌ๋ฆฝํŠธ ์ƒ์„ฑ ๋ฐ ์„ค์ •

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

2๏ธโƒฃ ํ•˜๋ฃจ์— ํ•œ ๋ฒˆ ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ ๊ฐฑ์‹  ๋ฐ ์ฐจ๋‹จ

  • ํ•˜๋ฃจ ๋™์•ˆ fail.log๋ฅผ ๋ถ„์„ํ•˜์—ฌ 3๋ฒˆ ์ด์ƒ ๋กœ๊ทธ์ธ ์‹คํŒจํ•œ IP๋ฅผ ์ถ”์ถœ
  • ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ(blacklist.txt)์— ์ €์žฅ ํ›„ iptables์„ ์‚ฌ์šฉํ•ด ์ž๋™ ์ฐจ๋‹จ (์ถ”ํ›„ ๊ฐœ์„ )

image

image


๐Ÿ“Œ ์Šคํฌ๋ฆฝํŠธ ์ƒ์„ฑ ๋ฐ ์„ค์ •

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

3๏ธโƒฃ Crontab ์„ค์ •

  • 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

๐Ÿšจ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ… : ํฌ๋ก ์ด ์‹คํ–‰๋˜์ง€ ์•Š์Œ

image

๋ฌธ์ œ ํŒŒ์•…: ๋กœ๊ทธ์ธ ์‹คํŒจ๊ธฐ๋ก์„ ์ €์žฅํ•œ auth.log ํŒŒ์ผ์—์„œ adm ์‚ฌ์šฉ์ž๋Š” read ๊ถŒํ•œ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Œ

image

๋ฌธ์ œ : ํฌ๋ก ์„ ์‹คํ–‰ํ•˜๋Š” ubuntu ์‚ฌ์šฉ์ž์™€ ์Šคํฌ๋ฆฝํŠธ ์•ˆ์˜ sudo๊ฐ€ ์‚ฌ์šฉ๋˜ ๊ถŒํ•œ ์ฐจ์ด๋กœ ์‹คํ–‰๋˜์ง€ ์•Š์Œ

  • ํฌ๋ก  ubuntu ์‚ฌ์šฉ์ž ๊ถŒํ•œ์œผ๋กœ ์„ค์ •ํ•˜์˜€์ง€๋งŒ ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์˜ ๋ช…๋ น์„ sudo๋กœ ์‚ฌ์šฉํ•˜์—ฌ ๊ถŒํ•œ ์ฐจ์ด๋กœ ํฌ๋ก ์ด ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋˜์ง€ ์•Š์Œ
  • ubuntu๊ฐ€ shํŒŒ์ผ์˜ ์‹คํ–‰๊ถŒํ•œ์ด ์—†์–ด์„œ ์‹คํ–‰ํ•˜์ง€ ๋ชปํ•œ ๊ฒƒ์„ ํ™•์ธ

โœ… ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

1๏ธโƒฃ ํฌ๋ก ์„ ๋ฃจํŠธ ์‚ฌ์šฉ์ž๋กœ ์‹คํ–‰

  • ํฌ๋ก ์„ ๋ฃจํŠธ ๊ถŒํ•œ์œผ๋กœ ์„ค์ •ํ•˜์—ฌ ์‹คํ–‰ํ•˜์—ฌ ํŒŒ์ผ์— ๊ถŒํ•œ ๋ถ€์—ฌ์—†์ด ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ–ˆ์Œ
sudo crontab -e


2๏ธโƒฃ ์Šคํฌ๋ฆฝํŠธ์— ์‚ฌ์šฉ๋˜๋˜ sudo ๋ช…๋ น์„ ์ œ๊ฑฐ

crontab -e

์ˆ˜์ • ์ „

# SSH ๋กœ๊ทธ์ธ ์‹คํŒจ ๋กœ๊ทธ ์ €์žฅ
sudo cat "$LOG_FILE" | grep "sshd.*" | grep "Failed" > "$FAIL_LOG"

์ˆ˜์ • ํ›„

# SSH ๋กœ๊ทธ์ธ ์‹คํŒจ ๋กœ๊ทธ ์ €์žฅ
cat "$LOG_FILE" | grep "sshd.*" | grep "Failed" > "$FAIL_LOG"


๐Ÿšจ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ… : ip ์ด์™ธ์—๋„ ์ถœ๋ ฅ๋˜๋Š” ๋ฌธ์ œ

image

๋ฌธ์ œ์  : ํŠน์ • ์ˆœ์„œ์— ์žˆ๋Š” ip๋ฅผ ์ €์žฅํ•˜์—ฌ ์ˆœ์„œ๊ฐ€ ๋‹ค๋ฅผ ๊ฒฝ์šฐ ๋‹ค๋ฅธ ์ˆซ์ž๋ฅผ ์ €์žฅํ•จ

# 3ํšŒ ์ด์ƒ ๋กœ๊ทธ์ธ ์‹คํŒจํ•œ IP ์ถ”์ถœ
awk '{print $11}' "$FAIL_LOG" | sort | uniq -c | awk '$1 >= 3 {print $2}' > "$BLACKLIST_FILE"

exit 0

ํ•ด๊ฒฐ : ์ •๊ทœ์‹์„ ํ‘œํ˜„์•  ip์™€ ๊ฐ™์€ ํ˜•์‹๋งŒ ์ถœ๋ ฅํ•˜๋„๋ก ์ˆ˜์ •

# SSH ๋กœ๊ทธ์ธ ์‹คํŒจ ๋กœ๊ทธ์—์„œ IP ์ฃผ์†Œ ์ถ”์ถœํ•˜์—ฌ ์ €์žฅ
grep "Failed password" "$LOG_FILE" | grep -Eo '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' > "$FAIL_LOG"

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •