본문 바로가기

리눅스

Nginx의 액세스 로그에서 공격자 IP(attacker ip) 주소를 추출하는 방법

반응형

Nginx의 액세스 로그에서 공격자 IP(attacker ip) 주소를 추출하는 방법

tail -n 10000 access.log | awk '{print $1}' | sort | uniq -c | sort -nr | head -n 10
$ tail -n 10000 /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -nr | head -n 10
    554 111.111.111.111
    210 222.222.222.222
     57 222.222.222.223
     56 222.222.222.224
     50 222.222.222.225
     48 222.222.222.226
     48 222.222.222.227
     45 222.222.222.228
     44 222.222.222.229
     44 222.222.222.230

구성 예)

Nginx 환경 설정

server {
    ...
    deny  192.168.1.1;
    allow 192.168.1.0/24;
    allow 10.1.1.0/16;
    allow 2001:0db8::/32;
    deny  all;
}

공격자 IP 주소를 추출하는 명령어

grep -E " 4[0-9]{2} " /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -n
728x90

공격자 IP 주소를 추출하는 스크립트

  • 스크립트 작성
vim deny_ip.sh
#!/bin/bash

# 텍스트 출력의 색상 정의
C_DEFAULT="\033[0m"
C_RED="\033[1;31m"

# 스크립트 인수의 기본값
RANK="${1:-10}"
LOGLINE="${2:-10000}"
LOGFILE="${3:-/var/log/nginx/access.log}"

# 요청 횟수(request count)별 상위 IP 주소 표시
echo -e "\n${C_RED}Top ${RANK} IP Addresses by Request Count${C_DEFAULT}"
echo -e "---------------------------------------"

# 로그 파일에서 고유 IP 주소 추출 및 계산
tail -n ${LOGLINE} ${LOGFILE} | awk '{print $1}' | sort | uniq -c | sort -nr | head -n ${RANK}

# HTTP 응답 코드별 상위 IP 주소 표시(HTTP response code)
echo -e "\n${C_RED}Top ${RANK} IP Addresses by HTTP Response Code${C_DEFAULT}"
echo -e "--------------------------------------------"

# HTTP 응답 코드와 함께 고유 IP 주소 추출 및 계산
tail -n ${LOGLINE} ${LOGFILE} | awk '{print $1, $9}' | sort | uniq -c | sort -nr | head -n ${RANK}

echo -e "\n"
  • 스크립트 실행 방법
./deny_ip.sh 10 10000 /var/log/nginx/access.log

r1

이 결과는 주어진 로그 파일에서 상위 IP 주소 및 HTTP 응답 코드를 요청 횟수 순으로 보여줍니다. RANK, LOGLINE, LOGFILE을 필요에 따라 조절하여 원하는 결과를 얻을 수 있습니다.

 

더보기
  • deny_ip.sh 스크립트 생성
vim deny_ip.sh
#!/bin/bash

# define colors
C_DEFAULT="\033[0m"
C_BLACK="\033[30m"
C_RED="\033[1;31m"
C_GREEN="\033[32m"
C_YELLOW="\033[33m"
C_BLUE="\033[34m"
C_PURPLE="\033[35m"
C_CYAN="\033[36m"
C_WHITE="\033[0;37m"
C_BG_BLACK="\033[40m"
C_BG_RED="\033[41m"
C_BG_GREEN="\033[42m"
C_BG_YELLOW="\033[43m"
C_BG_BLUE="\033[44m"
C_BG_PURPLE="\033[45m"
C_BG_CYAN="\033[46m"
C_BG_LIGHTGRAY="\033[47m"

RANK="${1:-10}"
LOGLINE="${2:-10000}"
LOGFILE="${3:-/var/log/nginx/access.log}"

echo -e "\n${C_RED}Count\tIP${C_DEFAULT}"
tail -n ${LOGLINE} ${LOGFILE} | awk '{printf ("%5s\t\n", $1)}' | sort | uniq -c | sort -nr | head -n ${RANK}
echo -e "\n${C_RED}Count\tIP\t\tHTTP Code${C_DEFAULT}"
tail -n ${LOGLINE} ${LOGFILE} | awk '{printf ("%5s\t%s\n", $1, $9)}' | sort | uniq -c | sort -nr | head -n ${RANK}
echo -e "\n"
  • deny_ip.sh 실행
./deny_ip.sh
r2
./deny_ip.sh 5 10 /var/nginx/access.log

 

참고URL

- NGINX Docs : Module ngx_stream_access_module

 

728x90
반응형